From 36d48d288dd6a78ba377853e0e727c8e66df3138 Mon Sep 17 00:00:00 2001 From: Rohan Likhite Date: Wed, 29 Apr 2026 17:16:47 -0400 Subject: [PATCH] Add New Basket Templates Currently, when a new basket is created via the dashboard, we only allow the user to enter a new name. Our users have provided feedback, and would like to initialize a basket with sample data. In order to support this, we should allow users to select from a range of templates which will pre-populate a new basket. This change addresses the need by: * Refactoring the explorer, moving the creation logic into a new component * Refactoring the modal to make it more performant, and with better UX * Allowing users to select from a few templates when creating a new basket --- dist/src/app/assets/pokemon.json | 10531 +++++++++++++++++++ dist/src/app/assets/templates.json | 27 + dist/src/app/assets/templates/pokemon.json | 10531 +++++++++++++++++++ dist/src/app/components/card.js | 16 + dist/src/app/components/explorer.js | 23 +- dist/src/app/components/modal.js | 4 + dist/src/app/components/newBasketModal.js | 98 + dist/src/bundle.js | 6 +- dist/src/bundle.js.map | 2 +- src/app/.DS_Store | Bin 10244 -> 10244 bytes src/app/assets/templates.json | 27 + src/app/assets/templates/airports.json | 244 + src/app/assets/templates/events.json | 114 + src/app/assets/templates/pokemon.json | 10531 +++++++++++++++++++ src/app/assets/templates/posts.json | 132 + src/app/assets/templates/users.json | 160 + src/app/components/card.ts | 18 + src/app/components/explorer.ts | 22 +- src/app/components/modal.ts | 4 + src/app/components/newBasketModal.ts | 68 + src/app/templates/basket.html | 2 +- src/app/templates/card.html | 16 + src/app/templates/explorer.html | 5 +- src/app/templates/explorerEmpty.html | 16 +- src/app/templates/modal.html | 57 +- src/app/templates/newBasketModal.html | 58 + tsconfig.json | 3 +- 27 files changed, 32668 insertions(+), 47 deletions(-) create mode 100644 dist/src/app/assets/pokemon.json create mode 100644 dist/src/app/assets/templates.json create mode 100644 dist/src/app/assets/templates/pokemon.json create mode 100644 dist/src/app/components/card.js create mode 100644 dist/src/app/components/newBasketModal.js create mode 100644 src/app/assets/templates.json create mode 100644 src/app/assets/templates/airports.json create mode 100644 src/app/assets/templates/events.json create mode 100644 src/app/assets/templates/pokemon.json create mode 100644 src/app/assets/templates/posts.json create mode 100644 src/app/assets/templates/users.json create mode 100644 src/app/components/card.ts create mode 100644 src/app/components/newBasketModal.ts create mode 100644 src/app/templates/card.html create mode 100644 src/app/templates/newBasketModal.html diff --git a/dist/src/app/assets/pokemon.json b/dist/src/app/assets/pokemon.json new file mode 100644 index 0000000..03270ff --- /dev/null +++ b/dist/src/app/assets/pokemon.json @@ -0,0 +1,10531 @@ +{ + "generation001": [ + { + "id": "001", + "name": "Bulbasaur", + "classification": "Seed Pokémon", + "types": [ + "Grass", + "Poison" + ], + "resistant": [ + "Water", + "Electric", + "Grass", + "Fighting", + "Fairy" + ], + "weaknesses": [ + "Fire", + "Ice", + "Flying", + "Psychic" + ], + "weight": { + "minimum": "6.04kg", + "maximum": "7.76kg" + }, + "height": { + "minimum": "0.61m", + "maximum": "0.79m" + }, + "fleeRate": 0.1, + "evolutionRequirements": { + "amount": 25, + "name": "Bulbasaur candies" + }, + "evolutions": [ + { + "id": 2, + "name": "Ivysaur" + }, + { + "id": 3, + "name": "Venusaur" + } + ], + "maxCP": 951, + "maxHP": 1071, + "attacks": { + "fast": [ + { + "name": "Tackle", + "type": "Normal", + "damage": 12 + }, + { + "name": "Vine Whip", + "type": "Grass", + "damage": 7 + } + ], + "special": [ + { + "name": "Power Whip", + "type": "Grass", + "damage": 70 + }, + { + "name": "Seed Bomb", + "type": "Grass", + "damage": 40 + }, + { + "name": "Sludge Bomb", + "type": "Poison", + "damage": 55 + } + ] + } + }, + { + "id": "002", + "name": "Ivysaur", + "classification": "Seed Pokémon", + "types": [ + "Grass", + "Poison" + ], + "resistant": [ + "Water", + "Electric", + "Grass", + "Fighting", + "Fairy" + ], + "weaknesses": [ + "Fire", + "Ice", + "Flying", + "Psychic" + ], + "weight": { + "minimum": "11.38kg", + "maximum": "14.63kg" + }, + "height": { + "minimum": "0.88m", + "maximum": "1.13m" + }, + "fleeRate": 0.07, + "Previous evolution(s)": [ + { + "id": 1, + "name": "Bulbasaur" + } + ], + "evolutionRequirements": { + "amount": 100, + "name": "Bulbasaur candies" + }, + "evolutions": [ + { + "id": 3, + "name": "Venusaur" + } + ], + "maxCP": 1483, + "maxHP": 1632, + "attacks": { + "fast": [ + { + "name": "Razor Leaf", + "type": "Grass", + "damage": 15 + }, + { + "name": "Vine Whip", + "type": "Grass", + "damage": 7 + } + ], + "special": [ + { + "name": "Power Whip", + "type": "Grass", + "damage": 70 + }, + { + "name": "Sludge Bomb", + "type": "Poison", + "damage": 55 + }, + { + "name": "Solar Beam", + "type": "Grass", + "damage": 120 + } + ] + } + }, + { + "id": "003", + "name": "Venusaur", + "classification": "Seed Pokémon", + "types": [ + "Grass", + "Poison" + ], + "resistant": [ + "Water", + "Electric", + "Grass", + "Fighting", + "Fairy" + ], + "weaknesses": [ + "Fire", + "Ice", + "Flying", + "Psychic" + ], + "weight": { + "minimum": "87.5kg", + "maximum": "112.5kg" + }, + "height": { + "minimum": "1.75m", + "maximum": "2.25m" + }, + "fleeRate": 0.05, + "Previous evolution(s)": [ + { + "id": 1, + "name": "Bulbasaur" + }, + { + "id": 2, + "name": "Ivysaur" + } + ], + "maxCP": 2392, + "maxHP": 2580, + "attacks": { + "fast": [ + { + "name": "Razor Leaf", + "type": "Grass", + "damage": 15 + }, + { + "name": "Vine Whip", + "type": "Grass", + "damage": 7 + } + ], + "special": [ + { + "name": "Petal Blizzard", + "type": "Grass", + "damage": 65 + }, + { + "name": "Sludge Bomb", + "type": "Poison", + "damage": 55 + }, + { + "name": "Solar Beam", + "type": "Grass", + "damage": 120 + } + ] + } + }, + { + "id": "004", + "name": "Charmander", + "classification": "Lizard Pokémon", + "types": [ + "Fire" + ], + "resistant": [ + "Fire", + "Grass", + "Ice", + "Bug", + "Steel", + "Fairy" + ], + "weaknesses": [ + "Water", + "Ground", + "Rock" + ], + "weight": { + "minimum": "7.44kg", + "maximum": "9.56kg" + }, + "height": { + "minimum": "0.53m", + "maximum": "0.68m" + }, + "fleeRate": 0.1, + "evolutionRequirements": { + "amount": 25, + "name": "Charmander candies" + }, + "evolutions": [ + { + "id": 5, + "name": "Charmeleon" + }, + { + "id": 6, + "name": "Charizard" + } + ], + "maxCP": 841, + "maxHP": 955, + "attacks": { + "fast": [ + { + "name": "Ember", + "type": "Fire", + "damage": 10 + }, + { + "name": "Scratch", + "type": "Normal", + "damage": 6 + } + ], + "special": [ + { + "name": "Flame Burst", + "type": "Fire", + "damage": 30 + }, + { + "name": "Flame Charge", + "type": "Fire", + "damage": 25 + }, + { + "name": "Flamethrower", + "type": "Fire", + "damage": 55 + } + ] + } + }, + { + "id": "005", + "name": "Charmeleon", + "classification": "Flame Pokémon", + "types": [ + "Fire" + ], + "resistant": [ + "Fire", + "Grass", + "Ice", + "Bug", + "Steel", + "Fairy" + ], + "weaknesses": [ + "Water", + "Ground", + "Rock" + ], + "weight": { + "minimum": "16.63kg", + "maximum": "21.38kg" + }, + "height": { + "minimum": "0.96m", + "maximum": "1.24m" + }, + "fleeRate": 0.07, + "Previous evolution(s)": [ + { + "id": 4, + "name": "Charmander" + } + ], + "evolutionRequirements": { + "amount": 100, + "name": "Charmander candies" + }, + "evolutions": [ + { + "id": 6, + "name": "Charizard" + } + ], + "maxCP": 1411, + "maxHP": 1557, + "attacks": { + "fast": [ + { + "name": "Ember", + "type": "Fire", + "damage": 10 + }, + { + "name": "Scratch", + "type": "Normal", + "damage": 6 + } + ], + "special": [ + { + "name": "Fire Punch", + "type": "Fire", + "damage": 40 + }, + { + "name": "Flame Burst", + "type": "Fire", + "damage": 30 + }, + { + "name": "Flamethrower", + "type": "Fire", + "damage": 55 + } + ] + } + }, + { + "id": "006", + "name": "Charizard", + "classification": "Flame Pokémon", + "types": [ + "Fire", + "Flying" + ], + "resistant": [ + "Fire", + "Grass", + "Fighting", + "Bug", + "Steel", + "Fairy" + ], + "weaknesses": [ + "Water", + "Electric", + "Rock" + ], + "weight": { + "minimum": "79.19kg", + "maximum": "101.81kg" + }, + "height": { + "minimum": "1.49m", + "maximum": "1.91m" + }, + "fleeRate": 0.05, + "Previous evolution(s)": [ + { + "id": 4, + "name": "Charmander" + }, + { + "id": 5, + "name": "Charmeleon" + } + ], + "maxCP": 2413, + "maxHP": 2602, + "attacks": { + "fast": [ + { + "name": "Ember", + "type": "Fire", + "damage": 10 + }, + { + "name": "Wing Attack", + "type": "Flying", + "damage": 9 + } + ], + "special": [ + { + "name": "Dragon Claw", + "type": "Dragon", + "damage": 35 + }, + { + "name": "Fire Blast", + "type": "Fire", + "damage": 100 + }, + { + "name": "Flamethrower", + "type": "Fire", + "damage": 55 + } + ] + } + }, + { + "id": "007", + "name": "Squirtle", + "classification": "Tiny Turtle Pokémon", + "types": [ + "Water" + ], + "resistant": [ + "Fire", + "Water", + "Ice", + "Steel" + ], + "weaknesses": [ + "Electric", + "Grass" + ], + "weight": { + "minimum": "7.88kg", + "maximum": "10.13kg" + }, + "height": { + "minimum": "0.44m", + "maximum": "0.56m" + }, + "fleeRate": 0.1, + "evolutionRequirements": { + "amount": 25, + "name": "Squirtle candies" + }, + "evolutions": [ + { + "id": 8, + "name": "Wartortle" + }, + { + "id": 9, + "name": "Blastoise" + } + ], + "maxCP": 891, + "maxHP": 1008, + "attacks": { + "fast": [ + { + "name": "Bubble", + "type": "Water", + "damage": 25 + }, + { + "name": "Tackle", + "type": "Normal", + "damage": 12 + } + ], + "special": [ + { + "name": "Aqua Jet", + "type": "Water", + "damage": 25 + }, + { + "name": "Aqua Tail", + "type": "Water", + "damage": 45 + }, + { + "name": "Water Pulse", + "type": "Water", + "damage": 35 + } + ] + } + }, + { + "id": "008", + "name": "Wartortle", + "classification": "Turtle Pokémon", + "types": [ + "Water" + ], + "resistant": [ + "Fire", + "Water", + "Ice", + "Steel" + ], + "weaknesses": [ + "Electric", + "Grass" + ], + "weight": { + "minimum": "19.69kg", + "maximum": "25.31kg" + }, + "height": { + "minimum": "0.88m", + "maximum": "1.13m" + }, + "fleeRate": 0.07, + "Previous evolution(s)": [ + { + "id": 7, + "name": "Squirtle" + } + ], + "evolutionRequirements": { + "amount": 100, + "name": "Squirtle candies" + }, + "evolutions": [ + { + "id": 9, + "name": "Blastoise" + } + ], + "maxCP": 1435, + "maxHP": 1582, + "attacks": { + "fast": [ + { + "name": "Bite", + "type": "Dark", + "damage": 6 + }, + { + "name": "Water Gun", + "type": "Water", + "damage": 6 + } + ], + "special": [ + { + "name": "Aqua Jet", + "type": "Water", + "damage": 25 + }, + { + "name": "Gunk Shot", + "type": "Poison", + "damage": 65 + }, + { + "name": "Hydro Pump", + "type": "Water", + "damage": 90 + }, + { + "name": "Ice Beam", + "type": "Ice", + "damage": 65 + } + ] + } + }, + { + "id": "009", + "name": "Blastoise", + "classification": "Shellfish Pokémon", + "types": [ + "Water" + ], + "resistant": [ + "Fire", + "Water", + "Ice", + "Steel" + ], + "weaknesses": [ + "Electric", + "Grass" + ], + "weight": { + "minimum": "74.81kg", + "maximum": "96.19kg" + }, + "height": { + "minimum": "1.4m", + "maximum": "1.8m" + }, + "fleeRate": 0.05, + "Previous evolution(s)": [ + { + "id": 7, + "name": "Squirtle" + }, + { + "id": 8, + "name": "Wartortle" + } + ], + "maxCP": 2355, + "maxHP": 2542, + "attacks": { + "fast": [ + { + "name": "Bite", + "type": "Dark", + "damage": 6 + }, + { + "name": "Water Gun", + "type": "Water", + "damage": 6 + } + ], + "special": [ + { + "name": "Flash Cannon", + "type": "Steel", + "damage": 60 + }, + { + "name": "Gunk Shot", + "type": "Poison", + "damage": 65 + }, + { + "name": "Hydro Pump", + "type": "Water", + "damage": 90 + }, + { + "name": "Ice Beam", + "type": "Ice", + "damage": 65 + } + ] + } + }, + { + "id": "010", + "name": "Caterpie", + "classification": "Worm Pokémon", + "types": [ + "Bug" + ], + "resistant": [ + "Grass", + "Fighting", + "Ground" + ], + "weaknesses": [ + "Fire", + "Flying", + "Rock" + ], + "weight": { + "minimum": "2.54kg", + "maximum": "3.26kg" + }, + "height": { + "minimum": "0.26m", + "maximum": "0.34m" + }, + "fleeRate": 0.2, + "evolutionRequirements": { + "amount": 12, + "name": "Caterpie candies" + }, + "evolutions": [ + { + "id": 11, + "name": "Metapod" + }, + { + "id": 12, + "name": "Butterfree" + } + ], + "maxCP": 367, + "maxHP": 443, + "attacks": { + "fast": [ + { + "name": "Bug Bite", + "type": "Bug", + "damage": 5 + }, + { + "name": "Tackle", + "type": "Normal", + "damage": 12 + } + ], + "special": [ + { + "name": "Struggle", + "type": "Normal", + "damage": 15 + } + ] + } + }, + { + "id": "011", + "name": "Metapod", + "classification": "Cocoon Pokémon", + "types": [ + "Bug" + ], + "resistant": [ + "Grass", + "Fighting", + "Ground" + ], + "weaknesses": [ + "Fire", + "Flying", + "Rock" + ], + "weight": { + "minimum": "8.66kg", + "maximum": "11.14kg" + }, + "height": { + "minimum": "0.61m", + "maximum": "0.79m" + }, + "fleeRate": 0.09, + "Previous evolution(s)": [ + { + "id": 10, + "name": "Caterpie" + } + ], + "evolutionRequirements": { + "amount": 50, + "name": "Caterpie candies" + }, + "evolutions": [ + { + "id": 12, + "name": "Butterfree" + } + ], + "maxCP": 397, + "maxHP": 477, + "attacks": { + "fast": [ + { + "name": "Bug Bite", + "type": "Bug", + "damage": 5 + }, + { + "name": "Tackle", + "type": "Normal", + "damage": 12 + } + ], + "special": [ + { + "name": "Struggle", + "type": "Normal", + "damage": 15 + } + ] + } + }, + { + "id": "012", + "name": "Butterfree", + "classification": "Butterfly Pokémon", + "types": [ + "Bug", + "Flying" + ], + "resistant": [ + "Grass", + "Fighting", + "Ground", + "Bug" + ], + "weaknesses": [ + "Fire", + "Electric", + "Ice", + "Flying", + "Rock" + ], + "weight": { + "minimum": "28kg", + "maximum": "36kg" + }, + "height": { + "minimum": "0.96m", + "maximum": "1.24m" + }, + "fleeRate": 0.06, + "Previous evolution(s)": [ + { + "id": 10, + "name": "Caterpie" + }, + { + "id": 11, + "name": "Metapod" + } + ], + "maxCP": 1315, + "maxHP": 1454, + "attacks": { + "fast": [ + { + "name": "Bug Bite", + "type": "Bug", + "damage": 5 + }, + { + "name": "Confusion", + "type": "Psychic", + "damage": 15 + } + ], + "special": [ + { + "name": "Bug Buzz", + "type": "Bug", + "damage": 75 + }, + { + "name": "Psychic", + "type": "Psychic", + "damage": 55 + }, + { + "name": "Signal Beam", + "type": "Bug", + "damage": 45 + } + ] + } + }, + { + "id": "013", + "name": "Weedle", + "classification": "Hairy Pokémon", + "types": [ + "Bug", + "Poison" + ], + "resistant": [ + "Grass", + "Fighting", + "Poison", + "Bug", + "Fairy" + ], + "weaknesses": [ + "Fire", + "Flying", + "Psychic", + "Rock" + ], + "weight": { + "minimum": "2.8kg", + "maximum": "3.6kg" + }, + "height": { + "minimum": "0.26m", + "maximum": "0.34m" + }, + "fleeRate": 0.2, + "evolutionRequirements": { + "amount": 12, + "name": "Weedle candies" + }, + "evolutions": [ + { + "id": 14, + "name": "Kakuna" + }, + { + "id": 15, + "name": "Beedrill" + } + ], + "maxCP": 372, + "maxHP": 449, + "attacks": { + "fast": [ + { + "name": "Bug Bite", + "type": "Bug", + "damage": 5 + }, + { + "name": "Poison Sting", + "type": "Poison", + "damage": 6 + } + ], + "special": [ + { + "name": "Struggle", + "type": "Normal", + "damage": 15 + } + ] + } + }, + { + "id": "014", + "name": "Kakuna", + "classification": "Cocoon Pokémon", + "types": [ + "Bug", + "Poison" + ], + "resistant": [ + "Grass", + "Fighting", + "Poison", + "Bug", + "Fairy" + ], + "weaknesses": [ + "Fire", + "Flying", + "Psychic", + "Rock" + ], + "weight": { + "minimum": "8.75kg", + "maximum": "11.25kg" + }, + "height": { + "minimum": "0.53m", + "maximum": "0.68m" + }, + "fleeRate": 0.09, + "Previous evolution(s)": [ + { + "id": 13, + "name": "Weedle" + } + ], + "evolutionRequirements": { + "amount": 50, + "name": "Weedle candies" + }, + "evolutions": [ + { + "id": 15, + "name": "Beedrill" + } + ], + "maxCP": 405, + "maxHP": 485, + "attacks": { + "fast": [ + { + "name": "Bug Bite", + "type": "Bug", + "damage": 5 + }, + { + "name": "Poison Sting", + "type": "Poison", + "damage": 6 + } + ], + "special": [ + { + "name": "Struggle", + "type": "Normal", + "damage": 15 + } + ] + } + }, + { + "id": "015", + "name": "Beedrill", + "classification": "Poison Bee Pokémon", + "types": [ + "Bug", + "Poison" + ], + "resistant": [ + "Grass", + "Fighting", + "Poison", + "Bug", + "Fairy" + ], + "weaknesses": [ + "Fire", + "Flying", + "Psychic", + "Rock" + ], + "weight": { + "minimum": "25.81kg", + "maximum": "33.19kg" + }, + "height": { + "minimum": "0.88m", + "maximum": "1.13m" + }, + "fleeRate": 0.06, + "Previous evolution(s)": [ + { + "id": 13, + "name": "Weedle" + }, + { + "id": 14, + "name": "Kakuna" + } + ], + "maxCP": 1301, + "maxHP": 1439, + "attacks": { + "fast": [ + { + "name": "Bug Bite", + "type": "Bug", + "damage": 5 + }, + { + "name": "Poison Jab", + "type": "Poison", + "damage": 12 + } + ], + "special": [ + { + "name": "Aerial Ace", + "type": "Flying", + "damage": 30 + }, + { + "name": "Sludge Bomb", + "type": "Poison", + "damage": 55 + }, + { + "name": "X Scissor", + "type": "Bug", + "damage": 35 + } + ] + } + }, + { + "id": "016", + "name": "Pidgey", + "classification": "Tiny Bird Pokémon", + "types": [ + "Normal", + "Flying" + ], + "resistant": [ + "Grass", + "Ground", + "Bug", + "Ghost" + ], + "weaknesses": [ + "Electric", + "Ice", + "Rock" + ], + "weight": { + "minimum": "1.57kg", + "maximum": "2.02kg" + }, + "height": { + "minimum": "0.26m", + "maximum": "0.34m" + }, + "fleeRate": 0.2, + "evolutionRequirements": { + "amount": 12, + "name": "Pidgey candies" + }, + "evolutions": [ + { + "id": 17, + "name": "Pidgeotto" + }, + { + "id": 18, + "name": "Pidgeot" + } + ], + "maxCP": 585, + "maxHP": 679, + "attacks": { + "fast": [ + { + "name": "Quick Attack", + "type": "Normal", + "damage": 10 + }, + { + "name": "Tackle", + "type": "Normal", + "damage": 12 + } + ], + "special": [ + { + "name": "Aerial Ace", + "type": "Flying", + "damage": 30 + }, + { + "name": "Air Cutter", + "type": "Flying", + "damage": 30 + }, + { + "name": "Twister", + "type": "Dragon", + "damage": 25 + } + ] + } + }, + { + "id": "017", + "name": "Pidgeotto", + "classification": "Bird Pokémon", + "types": [ + "Normal", + "Flying" + ], + "resistant": [ + "Grass", + "Ground", + "Bug", + "Ghost" + ], + "weaknesses": [ + "Electric", + "Ice", + "Rock" + ], + "weight": { + "minimum": "26.25kg", + "maximum": "33.75kg" + }, + "height": { + "minimum": "0.96m", + "maximum": "1.24m" + }, + "fleeRate": 0.09, + "Previous evolution(s)": [ + { + "id": 16, + "name": "Pidgey" + } + ], + "evolutionRequirements": { + "amount": 50, + "name": "Pidgey candies" + }, + "evolutions": [ + { + "id": 18, + "name": "Pidgeot" + } + ], + "maxCP": 1096, + "maxHP": 1223, + "attacks": { + "fast": [ + { + "name": "Steel Wing", + "type": "Steel", + "damage": 15 + }, + { + "name": "Wing Attack", + "type": "Flying", + "damage": 9 + } + ], + "special": [ + { + "name": "Aerial Ace", + "type": "Flying", + "damage": 30 + }, + { + "name": "Air Cutter", + "type": "Flying", + "damage": 30 + }, + { + "name": "Twister", + "type": "Dragon", + "damage": 25 + } + ] + } + }, + { + "id": "018", + "name": "Pidgeot", + "classification": "Bird Pokémon", + "types": [ + "Normal", + "Flying" + ], + "resistant": [ + "Grass", + "Ground", + "Bug", + "Ghost" + ], + "weaknesses": [ + "Electric", + "Ice", + "Rock" + ], + "weight": { + "minimum": "34.56kg", + "maximum": "44.44kg" + }, + "height": { + "minimum": "1.31m", + "maximum": "1.69m" + }, + "fleeRate": 0.06, + "Previous evolution(s)": [ + { + "id": 16, + "name": "Pidgey" + }, + { + "id": 17, + "name": "Pidgeotto" + } + ], + "maxCP": 1923, + "maxHP": 2091, + "attacks": { + "fast": [ + { + "name": "Steel Wing", + "type": "Steel", + "damage": 15 + }, + { + "name": "Wing Attack", + "type": "Flying", + "damage": 9 + } + ], + "special": [ + { + "name": "Aerial Ace", + "type": "Flying", + "damage": 30 + }, + { + "name": "Air Cutter", + "type": "Flying", + "damage": 30 + }, + { + "name": "Hurricane", + "type": "Flying", + "damage": 80 + } + ] + } + }, + { + "id": "019", + "name": "Rattata", + "classification": "Mouse Pokémon", + "types": [ + "Normal" + ], + "resistant": [ + "Ghost" + ], + "weaknesses": [ + "Fighting" + ], + "weight": { + "minimum": "3.06kg", + "maximum": "3.94kg" + }, + "height": { + "minimum": "0.26m", + "maximum": "0.34m" + }, + "fleeRate": 0.2, + "evolutionRequirements": { + "amount": 25, + "name": "Rattata candies" + }, + "evolutions": [ + { + "id": 20, + "name": "Raticate" + } + ], + "maxCP": 493, + "maxHP": 581, + "attacks": { + "fast": [ + { + "name": "Quick Attack", + "type": "Normal", + "damage": 10 + }, + { + "name": "Tackle", + "type": "Normal", + "damage": 12 + } + ], + "special": [ + { + "name": "Body Slam", + "type": "Normal", + "damage": 40 + }, + { + "name": "Dig", + "type": "Ground", + "damage": 70 + }, + { + "name": "Hyper Fang", + "type": "Normal", + "damage": 35 + } + ] + } + }, + { + "id": "020", + "name": "Raticate", + "classification": "Mouse Pokémon", + "types": [ + "Normal" + ], + "resistant": [ + "Ghost" + ], + "weaknesses": [ + "Fighting" + ], + "weight": { + "minimum": "16.19kg", + "maximum": "20.81kg" + }, + "height": { + "minimum": "0.61m", + "maximum": "0.79m" + }, + "fleeRate": 0.07, + "Previous evolution(s)": [ + { + "id": 19, + "name": "Rattata" + } + ], + "maxCP": 1304, + "maxHP": 1444, + "attacks": { + "fast": [ + { + "name": "Bite", + "type": "Dark", + "damage": 6 + }, + { + "name": "Quick Attack", + "type": "Normal", + "damage": 10 + } + ], + "special": [ + { + "name": "Dig", + "type": "Ground", + "damage": 70 + }, + { + "name": "Hyper Beam", + "type": "Normal", + "damage": 120 + }, + { + "name": "Hyper Fang", + "type": "Normal", + "damage": 35 + } + ] + } + }, + { + "id": "021", + "name": "Spearow", + "classification": "Tiny Bird Pokémon", + "types": [ + "Normal", + "Flying" + ], + "resistant": [ + "Grass", + "Ground", + "Bug", + "Ghost" + ], + "weaknesses": [ + "Electric", + "Ice", + "Rock" + ], + "weight": { + "minimum": "1.75kg", + "maximum": "2.25kg" + }, + "height": { + "minimum": "0.26m", + "maximum": "0.34m" + }, + "fleeRate": 0.15, + "evolutionRequirements": { + "amount": 50, + "name": "Spearow candies" + }, + "evolutions": [ + { + "id": 22, + "name": "Fearow" + } + ], + "maxCP": 591, + "maxHP": 686, + "attacks": { + "fast": [ + { + "name": "Peck", + "type": "Flying", + "damage": 10 + }, + { + "name": "Quick Attack", + "type": "Normal", + "damage": 10 + } + ], + "special": [ + { + "name": "Aerial Ace", + "type": "Flying", + "damage": 30 + }, + { + "name": "Drill Peck", + "type": "Flying", + "damage": 40 + }, + { + "name": "Twister", + "type": "Dragon", + "damage": 25 + } + ] + } + }, + { + "id": "022", + "name": "Fearow", + "classification": "Beak Pokémon", + "types": [ + "Normal", + "Flying" + ], + "resistant": [ + "Grass", + "Ground", + "Bug", + "Ghost" + ], + "weaknesses": [ + "Electric", + "Ice", + "Rock" + ], + "weight": { + "minimum": "33.25kg", + "maximum": "42.75kg" + }, + "height": { + "minimum": "1.05m", + "maximum": "1.35m" + }, + "fleeRate": 0.07, + "Previous evolution(s)": [ + { + "id": 21, + "name": "Spearow" + } + ], + "maxCP": 1592, + "maxHP": 1746, + "attacks": { + "fast": [ + { + "name": "Peck", + "type": "Flying", + "damage": 10 + }, + { + "name": "Steel Wing", + "type": "Steel", + "damage": 15 + } + ], + "special": [ + { + "name": "Aerial Ace", + "type": "Flying", + "damage": 30 + }, + { + "name": "Drill Run", + "type": "Ground", + "damage": 50 + }, + { + "name": "Twister", + "type": "Dragon", + "damage": 25 + } + ] + } + }, + { + "id": "023", + "name": "Ekans", + "classification": "Snake Pokémon", + "types": [ + "Poison" + ], + "resistant": [ + "Grass", + "Fighting", + "Poison", + "Bug", + "Fairy" + ], + "weaknesses": [ + "Ground", + "Psychic" + ], + "weight": { + "minimum": "6.04kg", + "maximum": "7.76kg" + }, + "height": { + "minimum": "1.75m", + "maximum": "2.25m" + }, + "fleeRate": 0.15, + "evolutionRequirements": { + "amount": 50, + "name": "Ekans candies" + }, + "evolutions": [ + { + "id": 24, + "name": "Arbok" + } + ], + "maxCP": 718, + "maxHP": 824, + "attacks": { + "fast": [ + { + "name": "Acid", + "type": "Poison", + "damage": 10 + }, + { + "name": "Poison Sting", + "type": "Poison", + "damage": 6 + } + ], + "special": [ + { + "name": "Gunk Shot", + "type": "Poison", + "damage": 65 + }, + { + "name": "Sludge Bomb", + "type": "Poison", + "damage": 55 + }, + { + "name": "Wrap", + "type": "Normal", + "damage": 25 + } + ] + } + }, + { + "id": "024", + "name": "Arbok", + "classification": "Cobra Pokémon", + "types": [ + "Poison" + ], + "resistant": [ + "Grass", + "Fighting", + "Poison", + "Bug", + "Fairy" + ], + "weaknesses": [ + "Ground", + "Psychic" + ], + "weight": { + "minimum": "56.88kg", + "maximum": "73.13kg" + }, + "height": { + "minimum": "3.06m", + "maximum": "3.94m" + }, + "fleeRate": 0.07, + "Previous evolution(s)": [ + { + "id": 23, + "name": "Ekans" + } + ], + "maxCP": 1611, + "maxHP": 1767, + "attacks": { + "fast": [ + { + "name": "Acid", + "type": "Poison", + "damage": 10 + }, + { + "name": "Bite", + "type": "Dark", + "damage": 6 + } + ], + "special": [ + { + "name": "Dark Pulse", + "type": "Dark", + "damage": 45 + }, + { + "name": "Gunk Shot", + "type": "Poison", + "damage": 65 + }, + { + "name": "Sludge Wave", + "type": "Poison", + "damage": 70 + } + ] + } + }, + { + "id": "025", + "name": "Pikachu", + "classification": "Mouse Pokémon", + "types": [ + "Electric" + ], + "resistant": [ + "Electric", + "Flying", + "Steel" + ], + "weaknesses": [ + "Ground" + ], + "weight": { + "minimum": "5.25kg", + "maximum": "6.75kg" + }, + "height": { + "minimum": "0.35m", + "maximum": "0.45m" + }, + "fleeRate": 0.1, + "evolutionRequirements": { + "amount": 50, + "name": "Pikachu candies" + }, + "evolutions": [ + { + "id": 26, + "name": "Raichu" + } + ], + "maxCP": 777, + "maxHP": 887, + "attacks": { + "fast": [ + { + "name": "Quick Attack", + "type": "Normal", + "damage": 10 + }, + { + "name": "Thunder Shock", + "type": "Electric", + "damage": 5 + } + ], + "special": [ + { + "name": "Discharge", + "type": "Electric", + "damage": 35 + }, + { + "name": "Thunder", + "type": "Electric", + "damage": 100 + }, + { + "name": "Thunderbolt", + "type": "Electric", + "damage": 55 + } + ] + } + }, + { + "id": "026", + "name": "Raichu", + "classification": "Mouse Pokémon", + "types": [ + "Electric" + ], + "resistant": [ + "Electric", + "Flying", + "Steel" + ], + "weaknesses": [ + "Ground" + ], + "weight": { + "minimum": "26.25kg", + "maximum": "33.75kg" + }, + "height": { + "minimum": "0.7m", + "maximum": "0.9m" + }, + "fleeRate": 0.06, + "Previous evolution(s)": [ + { + "id": 25, + "name": "Pikachu" + } + ], + "maxCP": 1859, + "maxHP": 2028, + "attacks": { + "fast": [ + { + "name": "Spark", + "type": "Electric", + "damage": 7 + }, + { + "name": "Thunder Shock", + "type": "Electric", + "damage": 5 + } + ], + "special": [ + { + "name": "Brick Break", + "type": "Fighting", + "damage": 30 + }, + { + "name": "Thunder", + "type": "Electric", + "damage": 100 + }, + { + "name": "Thunder Punch", + "type": "Electric", + "damage": 40 + } + ] + } + }, + { + "id": "027", + "name": "Sandshrew", + "classification": "Mouse Pokémon", + "types": [ + "Ground" + ], + "resistant": [ + "Electric", + "Poison", + "Rock" + ], + "weaknesses": [ + "Water", + "Grass", + "Ice" + ], + "weight": { + "minimum": "10.5kg", + "maximum": "13.5kg" + }, + "height": { + "minimum": "0.53m", + "maximum": "0.68m" + }, + "fleeRate": 0.1, + "evolutionRequirements": { + "amount": 50, + "name": "Sandshrew candies" + }, + "evolutions": [ + { + "id": 28, + "name": "Sandslash" + } + ], + "maxCP": 695, + "maxHP": 798, + "attacks": { + "fast": [ + { + "name": "Mud Shot", + "type": "Ground", + "damage": 6 + }, + { + "name": "Scratch", + "type": "Normal", + "damage": 6 + } + ], + "special": [ + { + "name": "Dig", + "type": "Ground", + "damage": 70 + }, + { + "name": "Rock Slide", + "type": "Rock", + "damage": 50 + }, + { + "name": "Rock Tomb", + "type": "Rock", + "damage": 30 + } + ] + } + }, + { + "id": "028", + "name": "Sandslash", + "classification": "Mouse Pokémon", + "types": [ + "Ground" + ], + "resistant": [ + "Electric", + "Poison", + "Rock" + ], + "weaknesses": [ + "Water", + "Grass", + "Ice" + ], + "weight": { + "minimum": "25.81kg", + "maximum": "33.19kg" + }, + "height": { + "minimum": "0.88m", + "maximum": "1.13m" + }, + "fleeRate": 0.06, + "Previous evolution(s)": [ + { + "id": 27, + "name": "Sandshrew" + } + ], + "maxCP": 1654, + "maxHP": 1810, + "attacks": { + "fast": [ + { + "name": "Metal Claw", + "type": "Steel", + "damage": 8 + }, + { + "name": "Mud Shot", + "type": "Ground", + "damage": 6 + } + ], + "special": [ + { + "name": "Bulldoze", + "type": "Ground", + "damage": 35 + }, + { + "name": "Earthquake", + "type": "Ground", + "damage": 100 + }, + { + "name": "Rock Tomb", + "type": "Rock", + "damage": 30 + } + ] + } + }, + { + "id": "029", + "name": "Nidoran-F", + "classification": "Poison Pin Pokémon", + "types": [ + "Poison" + ], + "resistant": [ + "Grass", + "Fighting", + "Poison", + "Bug", + "Fairy" + ], + "weaknesses": [ + "Ground", + "Psychic" + ], + "weight": { + "minimum": "6.13kg", + "maximum": "7.88kg" + }, + "height": { + "minimum": "0.35m", + "maximum": "0.45m" + }, + "fleeRate": 0.15, + "evolutionRequirements": { + "amount": 25, + "name": "Nidoran♀ candies" + }, + "evolutions": [ + { + "id": 30, + "name": "Nidorina" + }, + { + "id": 31, + "name": "Nidoqueen" + } + ], + "maxCP": 768, + "maxHP": 876, + "attacks": { + "fast": [ + { + "name": "Bite", + "type": "Dark", + "damage": 6 + }, + { + "name": "Poison Sting", + "type": "Poison", + "damage": 6 + } + ], + "special": [ + { + "name": "Body Slam", + "type": "Normal", + "damage": 40 + }, + { + "name": "Poison Fang", + "type": "Poison", + "damage": 25 + }, + { + "name": "Sludge Bomb", + "type": "Poison", + "damage": 55 + } + ] + } + }, + { + "id": "030", + "name": "Nidorina", + "classification": "Poison Pin Pokémon", + "types": [ + "Poison" + ], + "resistant": [ + "Grass", + "Fighting", + "Poison", + "Bug", + "Fairy" + ], + "weaknesses": [ + "Ground", + "Psychic" + ], + "weight": { + "minimum": "17.5kg", + "maximum": "22.5kg" + }, + "height": { + "minimum": "0.7m", + "maximum": "0.9m" + }, + "fleeRate": 0.07, + "Previous evolution(s)": [ + { + "id": 29, + "name": "Nidoran-F" + } + ], + "evolutionRequirements": { + "amount": 100, + "name": "Nidoran♀ candies" + }, + "evolutions": [ + { + "id": 31, + "name": "Nidoqueen" + } + ], + "maxCP": 1267, + "maxHP": 1404, + "attacks": { + "fast": [ + { + "name": "Bite", + "type": "Dark", + "damage": 6 + }, + { + "name": "Poison Sting", + "type": "Poison", + "damage": 6 + } + ], + "special": [ + { + "name": "Dig", + "type": "Ground", + "damage": 70 + }, + { + "name": "Poison Fang", + "type": "Poison", + "damage": 25 + }, + { + "name": "Sludge Bomb", + "type": "Poison", + "damage": 55 + } + ] + } + }, + { + "id": "031", + "name": "Nidoqueen", + "classification": "Drill Pokémon", + "types": [ + "Poison", + "Ground" + ], + "resistant": [ + "Electric", + "Fighting", + "Poison", + "Bug", + "Rock", + "Fairy" + ], + "weaknesses": [ + "Water", + "Ice", + "Ground", + "Psychic" + ], + "weight": { + "minimum": "52.5kg", + "maximum": "67.5kg" + }, + "height": { + "minimum": "1.14m", + "maximum": "1.46m" + }, + "fleeRate": 0.05, + "Previous evolution(s)": [ + { + "id": 29, + "name": "Nidoran-F" + }, + { + "id": 30, + "name": "Nidorina" + } + ], + "maxCP": 2301, + "maxHP": 2485, + "attacks": { + "fast": [ + { + "name": "Bite", + "type": "Dark", + "damage": 6 + }, + { + "name": "Poison Jab", + "type": "Poison", + "damage": 12 + } + ], + "special": [ + { + "name": "Earthquake", + "type": "Ground", + "damage": 100 + }, + { + "name": "Sludge Wave", + "type": "Poison", + "damage": 70 + }, + { + "name": "Stone Edge", + "type": "Rock", + "damage": 80 + } + ] + } + }, + { + "id": "032", + "name": "Nidoran-M", + "classification": "Poison Pin Pokémon", + "types": [ + "Poison" + ], + "resistant": [ + "Grass", + "Fighting", + "Poison", + "Bug", + "Fairy" + ], + "weaknesses": [ + "Ground", + "Psychic" + ], + "weight": { + "minimum": "7.88kg", + "maximum": "10.13kg" + }, + "height": { + "minimum": "0.44m", + "maximum": "0.56m" + }, + "fleeRate": 0.15, + "evolutionRequirements": { + "amount": 25, + "name": "Nidoran-M candies" + }, + "evolutions": [ + { + "id": 33, + "name": "Nidorino" + }, + { + "id": 34, + "name": "Nidoking" + } + ], + "maxCP": 737, + "maxHP": 843, + "attacks": { + "fast": [ + { + "name": "Peck", + "type": "Flying", + "damage": 10 + }, + { + "name": "Poison Sting", + "type": "Poison", + "damage": 6 + } + ], + "special": [ + { + "name": "Body Slam", + "type": "Normal", + "damage": 40 + }, + { + "name": "Horn Attack", + "type": "Normal", + "damage": 25 + }, + { + "name": "Sludge Bomb", + "type": "Poison", + "damage": 55 + } + ] + } + }, + { + "id": "033", + "name": "Nidorino", + "classification": "Poison Pin Pokémon", + "types": [ + "Poison" + ], + "resistant": [ + "Grass", + "Fighting", + "Poison", + "Bug", + "Fairy" + ], + "weaknesses": [ + "Ground", + "Psychic" + ], + "weight": { + "minimum": "17.06kg", + "maximum": "21.94kg" + }, + "height": { + "minimum": "0.79m", + "maximum": "1.01m" + }, + "fleeRate": 0.07, + "Previous evolution(s)": [ + { + "id": 32, + "name": "Nidoran-M" + } + ], + "evolutionRequirements": { + "amount": 100, + "name": "Nidoran-M candies" + }, + "evolutions": [ + { + "id": 34, + "name": "Nidoking" + } + ], + "maxCP": 1236, + "maxHP": 1372, + "attacks": { + "fast": [ + { + "name": "Bite", + "type": "Dark", + "damage": 6 + }, + { + "name": "Poison Jab", + "type": "Poison", + "damage": 12 + } + ], + "special": [ + { + "name": "Dig", + "type": "Ground", + "damage": 70 + }, + { + "name": "Horn Attack", + "type": "Normal", + "damage": 25 + }, + { + "name": "Sludge Bomb", + "type": "Poison", + "damage": 55 + } + ] + } + }, + { + "id": "034", + "name": "Nidoking", + "classification": "Drill Pokémon", + "types": [ + "Poison", + "Ground" + ], + "resistant": [ + "Electric", + "Fighting", + "Poison", + "Bug", + "Rock", + "Fairy" + ], + "weaknesses": [ + "Water", + "Ice", + "Ground", + "Psychic" + ], + "weight": { + "minimum": "54.25kg", + "maximum": "69.75kg" + }, + "height": { + "minimum": "1.22m", + "maximum": "1.57m" + }, + "fleeRate": 0.05, + "Previous evolution(s)": [ + { + "id": 32, + "name": "Nidoran-M" + }, + { + "id": 33, + "name": "Nidorino" + } + ], + "maxCP": 2291, + "maxHP": 2475, + "attacks": { + "fast": [ + { + "name": "Fury Cutter", + "type": "Bug", + "damage": 3 + }, + { + "name": "Poison Jab", + "type": "Poison", + "damage": 12 + } + ], + "special": [ + { + "name": "Earthquake", + "type": "Ground", + "damage": 100 + }, + { + "name": "Megahorn", + "type": "Bug", + "damage": 80 + }, + { + "name": "Sludge Wave", + "type": "Poison", + "damage": 70 + } + ] + } + }, + { + "id": "035", + "name": "Clefairy", + "classification": "Fairy Pokémon", + "types": [ + "Fairy" + ], + "resistant": [ + "Fighting", + "Bug", + "Dragon", + "Dark" + ], + "weaknesses": [ + "Poison", + "Steel" + ], + "weight": { + "minimum": "6.56kg", + "maximum": "8.44kg" + }, + "height": { + "minimum": "0.53m", + "maximum": "0.68m" + }, + "fleeRate": 0.1, + "evolutionRequirements": { + "amount": 50, + "name": "Clefairy candies" + }, + "evolutions": [ + { + "id": 36, + "name": "Clefable" + } + ], + "maxCP": 1074, + "maxHP": 1200, + "attacks": { + "fast": [ + { + "name": "Pound", + "type": "Normal", + "damage": 7 + }, + { + "name": "Zen Headbutt", + "type": "Psychic", + "damage": 12 + } + ], + "special": [ + { + "name": "Body Slam", + "type": "Normal", + "damage": 40 + }, + { + "name": "Disarming Voice", + "type": "Fairy", + "damage": 25 + }, + { + "name": "Moonblast", + "type": "Fairy", + "damage": 85 + } + ] + } + }, + { + "id": "036", + "name": "Clefable", + "classification": "Fairy Pokémon", + "types": [ + "Fairy" + ], + "resistant": [ + "Fighting", + "Bug", + "Dragon", + "Dark" + ], + "weaknesses": [ + "Poison", + "Steel" + ], + "weight": { + "minimum": "35kg", + "maximum": "45kg" + }, + "height": { + "minimum": "1.14m", + "maximum": "1.46m" + }, + "fleeRate": 0.06, + "Previous evolution(s)": [ + { + "id": 35, + "name": "Clefairy" + } + ], + "maxCP": 2217, + "maxHP": 2397, + "attacks": { + "fast": [ + { + "name": "Pound", + "type": "Normal", + "damage": 7 + }, + { + "name": "Zen Headbutt", + "type": "Psychic", + "damage": 12 + } + ], + "special": [ + { + "name": "Dazzling Gleam", + "type": "Fairy", + "damage": 55 + }, + { + "name": "Moonblast", + "type": "Fairy", + "damage": 85 + }, + { + "name": "Psychic", + "type": "Psychic", + "damage": 55 + } + ] + } + }, + { + "id": "037", + "name": "Vulpix", + "classification": "Fox Pokémon", + "types": [ + "Fire" + ], + "resistant": [ + "Fire", + "Grass", + "Ice", + "Bug", + "Steel", + "Fairy" + ], + "weaknesses": [ + "Water", + "Ground", + "Rock" + ], + "weight": { + "minimum": "8.66kg", + "maximum": "11.14kg" + }, + "height": { + "minimum": "0.53m", + "maximum": "0.68m" + }, + "fleeRate": 0.1, + "evolutionRequirements": { + "amount": 50, + "name": "Vulpi" + }, + "evolutions": [ + { + "id": 38, + "name": "Ninetales" + } + ], + "maxCP": 725, + "maxHP": 831, + "attacks": { + "fast": [ + { + "name": "Ember", + "type": "Fire", + "damage": 10 + }, + { + "name": "Quick Attack", + "type": "Normal", + "damage": 10 + } + ], + "special": [ + { + "name": "Body Slam", + "type": "Normal", + "damage": 40 + }, + { + "name": "Flame Charge", + "type": "Fire", + "damage": 25 + }, + { + "name": "Flamethrower", + "type": "Fire", + "damage": 55 + } + ] + } + }, + { + "id": "038", + "name": "Ninetales", + "classification": "Fox Pokémon", + "types": [ + "Fire" + ], + "resistant": [ + "Fire", + "Grass", + "Ice", + "Bug", + "Steel", + "Fairy" + ], + "weaknesses": [ + "Water", + "Ground", + "Rock" + ], + "weight": { + "minimum": "17.41kg", + "maximum": "22.39kg" + }, + "height": { + "minimum": "0.96m", + "maximum": "1.24m" + }, + "fleeRate": 0.06, + "Previous evolution(s)": [ + { + "id": 37, + "name": "Vulpix" + } + ], + "maxCP": 2015, + "maxHP": 2188, + "attacks": { + "fast": [ + { + "name": "Ember", + "type": "Fire", + "damage": 10 + }, + { + "name": "Quick Attack", + "type": "Normal", + "damage": 10 + } + ], + "special": [ + { + "name": "Fire Blast", + "type": "Fire", + "damage": 100 + }, + { + "name": "Flamethrower", + "type": "Fire", + "damage": 55 + }, + { + "name": "Heat Wave", + "type": "Fire", + "damage": 80 + } + ] + } + }, + { + "id": "039", + "name": "Jigglypuff", + "classification": "Balloon Pokémon", + "types": [ + "Normal", + "Fairy" + ], + "resistant": [ + "Bug", + "Ghost", + "Dragon", + "Dark" + ], + "weaknesses": [ + "Poison", + "Steel" + ], + "weight": { + "minimum": "4.81kg", + "maximum": "6.19kg" + }, + "height": { + "minimum": "0.44m", + "maximum": "0.56m" + }, + "fleeRate": 0.1, + "evolutionRequirements": { + "amount": 50, + "name": "Jigglypuff candies" + }, + "evolutions": [ + { + "id": 40, + "name": "Wigglytuff" + } + ], + "maxCP": 796, + "maxHP": 917, + "attacks": { + "fast": [ + { + "name": "Feint Attack", + "type": "Dark", + "damage": 12 + }, + { + "name": "Pound", + "type": "Normal", + "damage": 7 + } + ], + "special": [ + { + "name": "Body Slam", + "type": "Normal", + "damage": 40 + }, + { + "name": "Disarming Voice", + "type": "Fairy", + "damage": 25 + }, + { + "name": "Play Rough", + "type": "Fairy", + "damage": 55 + } + ] + } + }, + { + "id": "040", + "name": "Wigglytuff", + "classification": "Balloon Pokémon", + "types": [ + "Normal", + "Fairy" + ], + "resistant": [ + "Bug", + "Ghost", + "Dragon", + "Dark" + ], + "weaknesses": [ + "Poison", + "Steel" + ], + "weight": { + "minimum": "10.5kg", + "maximum": "13.5kg" + }, + "height": { + "minimum": "0.88m", + "maximum": "1.13m" + }, + "fleeRate": 0.06, + "Previous evolution(s)": [ + { + "id": 40, + "name": "Wigglytuff" + } + ], + "maxCP": 1997, + "maxHP": 2177, + "attacks": { + "fast": [ + { + "name": "Feint Attack", + "type": "Dark", + "damage": 12 + }, + { + "name": "Pound", + "type": "Normal", + "damage": 7 + } + ], + "special": [ + { + "name": "Dazzling Gleam", + "type": "Fairy", + "damage": 55 + }, + { + "name": "Hyper Beam", + "type": "Normal", + "damage": 120 + }, + { + "name": "Play Rough", + "type": "Fairy", + "damage": 55 + } + ] + } + }, + { + "id": "041", + "name": "Zubat", + "classification": "Bat Pokémon", + "types": [ + "Poison", + "Flying" + ], + "resistant": [ + "Grass", + "Fighting", + "Poison", + "Bug", + "Fairy" + ], + "weaknesses": [ + "Electric", + "Ice", + "Psychic", + "Rock" + ], + "weight": { + "minimum": "6.56kg", + "maximum": "8.44kg" + }, + "height": { + "minimum": "0.7m", + "maximum": "0.9m" + }, + "fleeRate": 0.2, + "evolutionRequirements": { + "amount": 50, + "name": "Zubat candies" + }, + "evolutions": [ + { + "id": 42, + "name": "Golbat" + } + ], + "maxCP": 550, + "maxHP": 642, + "attacks": { + "fast": [ + { + "name": "Bite", + "type": "Dark", + "damage": 6 + }, + { + "name": "Quick Attack", + "type": "Normal", + "damage": 10 + } + ], + "special": [ + { + "name": "Air Cutter", + "type": "Flying", + "damage": 30 + }, + { + "name": "Poison Fang", + "type": "Poison", + "damage": 25 + }, + { + "name": "Sludge Bomb", + "type": "Poison", + "damage": 55 + } + ] + } + }, + { + "id": "042", + "name": "Golbat", + "classification": "Bat Pokémon", + "types": [ + "Poison", + "Flying" + ], + "resistant": [ + "Grass", + "Fighting", + "Poison", + "Bug", + "Fairy" + ], + "weaknesses": [ + "Electric", + "Ice", + "Psychic", + "Rock" + ], + "weight": { + "minimum": "48.13kg", + "maximum": "61.88kg" + }, + "height": { + "minimum": "1.4m", + "maximum": "1.8m" + }, + "fleeRate": 0.07, + "Previous evolution(s)": [ + { + "id": 41, + "name": "Zubat" + } + ], + "maxCP": 1760, + "maxHP": 1921, + "attacks": { + "fast": [ + { + "name": "Bite", + "type": "Dark", + "damage": 6 + }, + { + "name": "Wing Attack", + "type": "Flying", + "damage": 9 + } + ], + "special": [ + { + "name": "Air Cutter", + "type": "Flying", + "damage": 30 + }, + { + "name": "Ominous Wind", + "type": "Ghost", + "damage": 30 + }, + { + "name": "Poison Fang", + "type": "Poison", + "damage": 25 + } + ] + } + }, + { + "id": "043", + "name": "Oddish", + "classification": "Weed Pokémon", + "types": [ + "Grass", + "Poison" + ], + "resistant": [ + "Water", + "Electric", + "Grass", + "Fighting", + "Fairy" + ], + "weaknesses": [ + "Fire", + "Ice", + "Flying", + "Psychic" + ], + "weight": { + "minimum": "4.73kg", + "maximum": "6.08kg" + }, + "height": { + "minimum": "0.44m", + "maximum": "0.56m" + }, + "fleeRate": 0.15, + "evolutionRequirements": { + "amount": 25, + "name": "Oddish candies" + }, + "evolutions": [ + { + "id": 44, + "name": "Gloom" + }, + { + "id": 45, + "name": "Vileplume" + } + ], + "maxCP": 1023, + "maxHP": 1148, + "attacks": { + "fast": [ + { + "name": "Acid", + "type": "Poison", + "damage": 10 + }, + { + "name": "Razor Leaf", + "type": "Grass", + "damage": 15 + } + ], + "special": [ + { + "name": "Moonblast", + "type": "Fairy", + "damage": 85 + }, + { + "name": "Seed Bomb", + "type": "Grass", + "damage": 40 + }, + { + "name": "Sludge Bomb", + "type": "Poison", + "damage": 55 + } + ] + } + }, + { + "id": "044", + "name": "Gloom", + "classification": "Weed Pokémon", + "types": [ + "Grass", + "Poison" + ], + "resistant": [ + "Water", + "Electric", + "Grass", + "Fighting", + "Fairy" + ], + "weaknesses": [ + "Fire", + "Ice", + "Flying", + "Psychic" + ], + "weight": { + "minimum": "7.53kg", + "maximum": "9.68kg" + }, + "height": { + "minimum": "0.7m", + "maximum": "0.9m" + }, + "fleeRate": 0.07, + "Previous evolution(s)": [ + { + "id": 43, + "name": "Oddish" + } + ], + "evolutionRequirements": { + "amount": 100, + "name": "Oddish candies" + }, + "evolutions": [ + { + "id": 45, + "name": "Vileplume" + } + ], + "maxCP": 1537, + "maxHP": 1689, + "attacks": { + "fast": [ + { + "name": "Acid", + "type": "Poison", + "damage": 10 + }, + { + "name": "Razor Leaf", + "type": "Grass", + "damage": 15 + } + ], + "special": [ + { + "name": "Moonblast", + "type": "Fairy", + "damage": 85 + }, + { + "name": "Petal Blizzard", + "type": "Grass", + "damage": 65 + }, + { + "name": "Sludge Bomb", + "type": "Poison", + "damage": 55 + } + ] + } + }, + { + "id": "045", + "name": "Vileplume", + "classification": "Flower Pokémon", + "types": [ + "Grass", + "Poison" + ], + "resistant": [ + "Water", + "Electric", + "Grass", + "Fighting", + "Fairy" + ], + "weaknesses": [ + "Fire", + "Ice", + "Flying", + "Psychic" + ], + "weight": { + "minimum": "16.28kg", + "maximum": "20.93kg" + }, + "height": { + "minimum": "1.05m", + "maximum": "1.35m" + }, + "fleeRate": 0.05, + "Previous evolution(s)": [ + { + "id": 43, + "name": "Oddish" + }, + { + "id": 44, + "name": "Gloom" + } + ], + "maxCP": 2307, + "maxHP": 2492, + "attacks": { + "fast": [ + { + "name": "Acid", + "type": "Poison", + "damage": 10 + }, + { + "name": "Razor Leaf", + "type": "Grass", + "damage": 15 + } + ], + "special": [ + { + "name": "Moonblast", + "type": "Fairy", + "damage": 85 + }, + { + "name": "Petal Blizzard", + "type": "Grass", + "damage": 65 + }, + { + "name": "Solar Beam", + "type": "Grass", + "damage": 120 + } + ] + } + }, + { + "id": "046", + "name": "Paras", + "classification": "Mushroom Pokémon", + "types": [ + "Bug", + "Grass" + ], + "resistant": [ + "Water", + "Electric", + "Grass", + "Fighting", + "Ground" + ], + "weaknesses": [ + "Fire", + "Ice", + "Poison", + "Flying", + "Bug", + "Rock" + ], + "weight": { + "minimum": "4.73kg", + "maximum": "6.08kg" + }, + "height": { + "minimum": "0.26m", + "maximum": "0.34m" + }, + "fleeRate": 0.15, + "evolutionRequirements": { + "amount": 50, + "name": "Paras candies" + }, + "evolutions": [ + { + "id": 47, + "name": "Parasect" + } + ], + "maxCP": 804, + "maxHP": 916, + "attacks": { + "fast": [ + { + "name": "Bug Bite", + "type": "Bug", + "damage": 5 + }, + { + "name": "Scratch", + "type": "Normal", + "damage": 6 + } + ], + "special": [ + { + "name": "Cross Poison", + "type": "Poison", + "damage": 25 + }, + { + "name": "Seed Bomb", + "type": "Grass", + "damage": 40 + }, + { + "name": "X Scissor", + "type": "Bug", + "damage": 35 + } + ] + } + }, + { + "id": "047", + "name": "Parasect", + "classification": "Mushroom Pokémon", + "types": [ + "Bug", + "Grass" + ], + "resistant": [ + "Water", + "Electric", + "Grass", + "Fighting", + "Ground" + ], + "weaknesses": [ + "Fire", + "Ice", + "Poison", + "Flying", + "Bug", + "Rock" + ], + "weight": { + "minimum": "25.81kg", + "maximum": "33.19kg" + }, + "height": { + "minimum": "0.88m", + "maximum": "1.13m" + }, + "fleeRate": 0.07, + "Previous evolution(s)": [ + { + "id": 46, + "name": "Paras" + } + ], + "maxCP": 1592, + "maxHP": 1747, + "attacks": { + "fast": [ + { + "name": "Bug Bite", + "type": "Bug", + "damage": 5 + }, + { + "name": "Fury Cutter", + "type": "Bug", + "damage": 3 + } + ], + "special": [ + { + "name": "Cross Poison", + "type": "Poison", + "damage": 25 + }, + { + "name": "Solar Beam", + "type": "Grass", + "damage": 120 + }, + { + "name": "X Scissor", + "type": "Bug", + "damage": 35 + } + ] + } + }, + { + "id": "048", + "name": "Venonat", + "classification": "Insect Pokémon", + "types": [ + "Bug", + "Poison" + ], + "resistant": [ + "Grass", + "Fighting", + "Poison", + "Bug", + "Fairy" + ], + "weaknesses": [ + "Fire", + "Flying", + "Psychic", + "Rock" + ], + "weight": { + "minimum": "26.25kg", + "maximum": "33.75kg" + }, + "height": { + "minimum": "0.88m", + "maximum": "1.13m" + }, + "fleeRate": 0.15, + "evolutionRequirements": { + "amount": 50, + "name": "Venonat candies" + }, + "evolutions": [ + { + "id": 49, + "name": "Venomoth" + } + ], + "maxCP": 912, + "maxHP": 1029, + "attacks": { + "fast": [ + { + "name": "Bug Bite", + "type": "Bug", + "damage": 5 + }, + { + "name": "Confusion", + "type": "Psychic", + "damage": 15 + } + ], + "special": [ + { + "name": "Poison Fang", + "type": "Poison", + "damage": 25 + }, + { + "name": "Psybeam", + "type": "Psychic", + "damage": 40 + }, + { + "name": "Signal Beam", + "type": "Bug", + "damage": 45 + } + ] + } + }, + { + "id": "049", + "name": "Venomoth", + "classification": "Poison Moth Pokémon", + "types": [ + "Bug", + "Poison" + ], + "resistant": [ + "Grass", + "Fighting", + "Poison", + "Bug", + "Fairy" + ], + "weaknesses": [ + "Fire", + "Flying", + "Psychic", + "Rock" + ], + "weight": { + "minimum": "10.94kg", + "maximum": "14.06kg" + }, + "height": { + "minimum": "1.31m", + "maximum": "1.69m" + }, + "fleeRate": 0.07, + "Previous evolution(s)": [ + { + "id": 48, + "name": "Venonat" + } + ], + "maxCP": 1730, + "maxHP": 1890, + "attacks": { + "fast": [ + { + "name": "Bug Bite", + "type": "Bug", + "damage": 5 + }, + { + "name": "Confusion", + "type": "Psychic", + "damage": 15 + } + ], + "special": [ + { + "name": "Bug Buzz", + "type": "Bug", + "damage": 75 + }, + { + "name": "Poison Fang", + "type": "Poison", + "damage": 25 + }, + { + "name": "Psychic", + "type": "Psychic", + "damage": 55 + } + ] + } + }, + { + "id": "050", + "name": "Diglett", + "classification": "Mole Pokémon", + "types": [ + "Ground" + ], + "resistant": [ + "Electric", + "Poison", + "Rock" + ], + "weaknesses": [ + "Water", + "Grass", + "Ice" + ], + "weight": { + "minimum": "0.7kg", + "maximum": "0.9kg" + }, + "height": { + "minimum": "0.18m", + "maximum": "0.23m" + }, + "fleeRate": 0.1, + "evolutionRequirements": { + "amount": 50, + "name": "Diglett candies" + }, + "evolutions": [ + { + "id": 51, + "name": "Dugtrio" + } + ], + "maxCP": 365, + "maxHP": 456, + "attacks": { + "fast": [ + { + "name": "Mud Shot", + "type": "Ground", + "damage": 6 + }, + { + "name": "Scratch", + "type": "Normal", + "damage": 6 + } + ], + "special": [ + { + "name": "Dig", + "type": "Ground", + "damage": 70 + }, + { + "name": "Mud Bomb", + "type": "Ground", + "damage": 30 + }, + { + "name": "Rock Tomb", + "type": "Rock", + "damage": 30 + } + ] + } + }, + { + "id": "051", + "name": "Dugtrio", + "classification": "Mole Pokémon", + "types": [ + "Ground" + ], + "resistant": [ + "Electric", + "Poison", + "Rock" + ], + "weaknesses": [ + "Water", + "Grass", + "Ice" + ], + "weight": { + "minimum": "29.14kg", + "maximum": "37.46kg" + }, + "height": { + "minimum": "0.61m", + "maximum": "0.79m" + }, + "fleeRate": 0.06, + "Previous evolution(s)": [ + { + "id": 50, + "name": "Diglett" + } + ], + "maxCP": 1038, + "maxHP": 1168, + "attacks": { + "fast": [ + { + "name": "Mud Shot", + "type": "Ground", + "damage": 6 + }, + { + "name": "Sucker Punch", + "type": "Dark", + "damage": 7 + } + ], + "special": [ + { + "name": "Earthquake", + "type": "Ground", + "damage": 100 + }, + { + "name": "Mud Bomb", + "type": "Ground", + "damage": 30 + }, + { + "name": "Stone Edge", + "type": "Rock", + "damage": 80 + } + ] + } + }, + { + "id": "052", + "name": "Meowth", + "classification": "Scratch Cat Pokémon", + "types": [ + "Normal" + ], + "resistant": [ + "Ghost" + ], + "weaknesses": [ + "Fighting" + ], + "weight": { + "minimum": "3.67kg", + "maximum": "4.72kg" + }, + "height": { + "minimum": "0.35m", + "maximum": "0.45m" + }, + "fleeRate": 0.15, + "evolutionRequirements": { + "amount": 50, + "name": "Meowth candies" + }, + "evolutions": [ + { + "id": 53, + "name": "Persian" + } + ], + "maxCP": 656, + "maxHP": 756, + "attacks": { + "fast": [ + { + "name": "Bite", + "type": "Dark", + "damage": 6 + }, + { + "name": "Scratch", + "type": "Normal", + "damage": 6 + } + ], + "special": [ + { + "name": "Body Slam", + "type": "Normal", + "damage": 40 + }, + { + "name": "Dark Pulse", + "type": "Dark", + "damage": 45 + }, + { + "name": "Night Slash", + "type": "Dark", + "damage": 30 + } + ] + } + }, + { + "id": "053", + "name": "Persian", + "classification": "Classy Cat Pokémon", + "types": [ + "Normal" + ], + "resistant": [ + "Ghost" + ], + "weaknesses": [ + "Fighting" + ], + "weight": { + "minimum": "28kg", + "maximum": "36kg" + }, + "height": { + "minimum": "0.88m", + "maximum": "1.13m" + }, + "fleeRate": 0.07, + "Previous evolution(s)": [ + { + "id": 52, + "name": "Meowth" + } + ], + "maxCP": 1483, + "maxHP": 1631, + "attacks": { + "fast": [ + { + "name": "Feint Attack", + "type": "Dark", + "damage": 12 + }, + { + "name": "Scratch", + "type": "Normal", + "damage": 6 + } + ], + "special": [ + { + "name": "Night Slash", + "type": "Dark", + "damage": 30 + }, + { + "name": "Play Rough", + "type": "Fairy", + "damage": 55 + }, + { + "name": "Power Gem", + "type": "Rock", + "damage": 40 + } + ] + } + }, + { + "id": "054", + "name": "Psyduck", + "classification": "Duck Pokémon", + "types": [ + "Water" + ], + "resistant": [ + "Fire", + "Water", + "Ice", + "Steel" + ], + "weaknesses": [ + "Electric", + "Grass" + ], + "weight": { + "minimum": "17.15kg", + "maximum": "22.05kg" + }, + "height": { + "minimum": "0.7m", + "maximum": "0.9m" + }, + "fleeRate": 0.1, + "evolutionRequirements": { + "amount": 50, + "name": "Psyduck candies" + }, + "evolutions": [ + { + "id": 55, + "name": "Golduck" + } + ], + "maxCP": 987, + "maxHP": 1109, + "attacks": { + "fast": [ + { + "name": "Water Gun", + "type": "Water", + "damage": 6 + }, + { + "name": "Zen Headbutt", + "type": "Psychic", + "damage": 12 + } + ], + "special": [ + { + "name": "Aqua Tail", + "type": "Water", + "damage": 45 + }, + { + "name": "Cross Chop", + "type": "Fighting", + "damage": 60 + }, + { + "name": "Psybeam", + "type": "Psychic", + "damage": 40 + } + ] + } + }, + { + "id": "055", + "name": "Golduck", + "classification": "Duck Pokémon", + "types": [ + "Water" + ], + "resistant": [ + "Fire", + "Water", + "Ice", + "Steel" + ], + "weaknesses": [ + "Electric", + "Grass" + ], + "weight": { + "minimum": "67.02kg", + "maximum": "86.17kg" + }, + "height": { + "minimum": "1.49m", + "maximum": "1.91m" + }, + "fleeRate": 0.06, + "Previous evolution(s)": [ + { + "id": 54, + "name": "Psyduck" + } + ], + "maxCP": 2206, + "maxHP": 2386, + "attacks": { + "fast": [ + { + "name": "Confusion", + "type": "Psychic", + "damage": 15 + }, + { + "name": "Zen Headbutt", + "type": "Psychic", + "damage": 12 + } + ], + "special": [ + { + "name": "Gunk Shot", + "type": "Poison", + "damage": 65 + }, + { + "name": "Hydro Pump", + "type": "Water", + "damage": 90 + }, + { + "name": "Ice Beam", + "type": "Ice", + "damage": 65 + }, + { + "name": "Psychic", + "type": "Psychic", + "damage": 55 + } + ] + } + }, + { + "id": "056", + "name": "Mankey", + "classification": "Pig Monkey Pokémon", + "types": [ + "Fighting" + ], + "resistant": [ + "Bug", + "Rock", + "Dark" + ], + "weaknesses": [ + "Flying", + "Psychic", + "Fairy" + ], + "weight": { + "minimum": "24.5kg", + "maximum": "31.5kg" + }, + "height": { + "minimum": "0.44m", + "maximum": "0.56m" + }, + "fleeRate": 0.1, + "evolutionRequirements": { + "amount": 50, + "name": "Mankey candies" + }, + "evolutions": [ + { + "id": 57, + "name": "Primeape" + } + ], + "maxCP": 769, + "maxHP": 878, + "attacks": { + "fast": [ + { + "name": "Karate Chop", + "type": "Fighting", + "damage": 6 + }, + { + "name": "Scratch", + "type": "Normal", + "damage": 6 + } + ], + "special": [ + { + "name": "Brick Break", + "type": "Fighting", + "damage": 30 + }, + { + "name": "Cross Chop", + "type": "Fighting", + "damage": 60 + }, + { + "name": "Low Sweep", + "type": "Fighting", + "damage": 30 + } + ] + } + }, + { + "id": "057", + "name": "Primeape", + "classification": "Pig Monkey Pokémon", + "types": [ + "Fighting" + ], + "resistant": [ + "Bug", + "Rock", + "Dark" + ], + "weaknesses": [ + "Flying", + "Psychic", + "Fairy" + ], + "weight": { + "minimum": "28kg", + "maximum": "36kg" + }, + "height": { + "minimum": "0.88m", + "maximum": "1.13m" + }, + "fleeRate": 0.06, + "Previous evolution(s)": [ + { + "id": 56, + "name": "Mankey" + } + ], + "maxCP": 1704, + "maxHP": 1864, + "attacks": { + "fast": [ + { + "name": "Karate Chop", + "type": "Fighting", + "damage": 6 + }, + { + "name": "Low Kick", + "type": "Fighting", + "damage": 5 + } + ], + "special": [ + { + "name": "Cross Chop", + "type": "Fighting", + "damage": 60 + }, + { + "name": "Low Sweep", + "type": "Fighting", + "damage": 30 + }, + { + "name": "Night Slash", + "type": "Dark", + "damage": 30 + } + ] + } + }, + { + "id": "058", + "name": "Growlithe", + "classification": "Puppy Pokémon", + "types": [ + "Fire" + ], + "resistant": [ + "Fire", + "Grass", + "Ice", + "Bug", + "Steel", + "Fairy" + ], + "weaknesses": [ + "Water", + "Ground", + "Rock" + ], + "weight": { + "minimum": "16.63kg", + "maximum": "21.38kg" + }, + "height": { + "minimum": "0.61m", + "maximum": "0.79m" + }, + "fleeRate": 0.1, + "evolutionRequirements": { + "amount": 50, + "name": "Growlithe candies" + }, + "evolutions": [ + { + "id": 59, + "name": "Arcanine" + } + ], + "maxCP": 1199, + "maxHP": 1335, + "attacks": { + "fast": [ + { + "name": "Bite", + "type": "Dark", + "damage": 6 + }, + { + "name": "Ember", + "type": "Fire", + "damage": 10 + } + ], + "special": [ + { + "name": "Body Slam", + "type": "Normal", + "damage": 40 + }, + { + "name": "Flame Wheel", + "type": "Fire", + "damage": 40 + }, + { + "name": "Flamethrower", + "type": "Fire", + "damage": 55 + } + ] + } + }, + { + "id": "059", + "name": "Arcanine", + "classification": "Legendary Pokémon", + "types": [ + "Fire" + ], + "resistant": [ + "Fire", + "Grass", + "Ice", + "Bug", + "Steel", + "Fairy" + ], + "weaknesses": [ + "Water", + "Ground", + "Rock" + ], + "weight": { + "minimum": "135.63kg", + "maximum": "174.38kg" + }, + "height": { + "minimum": "1.66m", + "maximum": "2.14m" + }, + "fleeRate": 0.06, + "Previous evolution(s)": [ + { + "id": 58, + "name": "Growlithe" + } + ], + "maxCP": 2781, + "maxHP": 2983, + "attacks": { + "fast": [ + { + "name": "Bite", + "type": "Dark", + "damage": 6 + }, + { + "name": "Fire Fang", + "type": "Fire", + "damage": 10 + } + ], + "special": [ + { + "name": "Bulldoze", + "type": "Ground", + "damage": 35 + }, + { + "name": "Fire Blast", + "type": "Fire", + "damage": 100 + }, + { + "name": "Flamethrower", + "type": "Fire", + "damage": 55 + } + ] + } + }, + { + "id": "060", + "name": "Poliwag", + "classification": "Tadpole Pokémon", + "types": [ + "Water" + ], + "resistant": [ + "Fire", + "Water", + "Ice", + "Steel" + ], + "weaknesses": [ + "Electric", + "Grass" + ], + "weight": { + "minimum": "10.85kg", + "maximum": "13.95kg" + }, + "height": { + "minimum": "0.53m", + "maximum": "0.68m" + }, + "fleeRate": 0.15, + "evolutionRequirements": { + "amount": 25, + "name": "Poliwag candies" + }, + "evolutions": [ + { + "id": 61, + "name": "Poliwhirl" + }, + { + "id": 62, + "name": "Poliwrath" + } + ], + "maxCP": 693, + "maxHP": 795, + "attacks": { + "fast": [ + { + "name": "Bubble", + "type": "Water", + "damage": 25 + }, + { + "name": "Mud Shot", + "type": "Ground", + "damage": 6 + } + ], + "special": [ + { + "name": "Body Slam", + "type": "Normal", + "damage": 40 + }, + { + "name": "Bubble Beam", + "type": "Water", + "damage": 30 + }, + { + "name": "Mud Bomb", + "type": "Ground", + "damage": 30 + } + ] + } + }, + { + "id": "061", + "name": "Poliwhirl", + "classification": "Tadpole Pokémon", + "types": [ + "Water" + ], + "resistant": [ + "Fire", + "Water", + "Ice", + "Steel" + ], + "weaknesses": [ + "Electric", + "Grass" + ], + "weight": { + "minimum": "17.5kg", + "maximum": "22.5kg" + }, + "height": { + "minimum": "0.88m", + "maximum": "1.13m" + }, + "fleeRate": 0.07, + "Previous evolution(s)": [ + { + "id": 60, + "name": "Poliwag" + } + ], + "evolutionRequirements": { + "amount": 100, + "name": "Poliwag candies" + }, + "evolutions": [ + { + "id": 62, + "name": "Poliwrath" + } + ], + "maxCP": 1206, + "maxHP": 1340, + "attacks": { + "fast": [ + { + "name": "Bubble", + "type": "Water", + "damage": 25 + }, + { + "name": "Mud Shot", + "type": "Ground", + "damage": 6 + } + ], + "special": [ + { + "name": "Bubble Beam", + "type": "Water", + "damage": 30 + }, + { + "name": "Mud Bomb", + "type": "Ground", + "damage": 30 + }, + { + "name": "Scald", + "type": "Water", + "damage": 55 + } + ] + } + }, + { + "id": "062", + "name": "Poliwrath", + "classification": "Tadpole Pokémon", + "types": [ + "Water", + "Fighting" + ], + "resistant": [ + "Fire", + "Water", + "Ice", + "Bug", + "Rock", + "Dark", + "Steel" + ], + "weaknesses": [ + "Electric", + "Grass", + "Flying", + "Psychic", + "Fairy" + ], + "weight": { + "minimum": "47.25kg", + "maximum": "60.75kg" + }, + "height": { + "minimum": "1.14m", + "maximum": "1.46m" + }, + "fleeRate": 0.05, + "Previous evolution(s)": [ + { + "id": 60, + "name": "Poliwag" + }, + { + "id": 61, + "name": "Poliwhirl" + } + ], + "maxCP": 2321, + "maxHP": 2505, + "attacks": { + "fast": [ + { + "name": "Bubble", + "type": "Water", + "damage": 25 + }, + { + "name": "Mud Shot", + "type": "Ground", + "damage": 6 + } + ], + "special": [ + { + "name": "Hydro Pump", + "type": "Water", + "damage": 90 + }, + { + "name": "Ice Punch", + "type": "Ice", + "damage": 45 + }, + { + "name": "Submission", + "type": "Fighting", + "damage": 30 + } + ] + } + }, + { + "id": "063", + "name": "Abra", + "classification": "Psi Pokémon", + "types": [ + "Psychic" + ], + "resistant": [ + "Fighting", + "Psychic" + ], + "weaknesses": [ + "Bug", + "Ghost", + "Dark" + ], + "weight": { + "minimum": "17.06kg", + "maximum": "21.94kg" + }, + "height": { + "minimum": "0.79m", + "maximum": "1.01m" + }, + "fleeRate": 0.99, + "evolutionRequirements": { + "amount": 25, + "name": "Abra candies" + }, + "evolutions": [ + { + "id": 64, + "name": "Kadabra" + }, + { + "id": 65, + "name": "Alakazam" + } + ], + "maxCP": 508, + "maxHP": 600, + "attacks": { + "fast": [ + {}, + { + "name": "Zen Headbutt", + "type": "Psychic", + "damage": 12 + } + ], + "special": [ + { + "name": "Psyshock", + "type": "Psychic", + "damage": 40 + }, + { + "name": "Shadow Ball", + "type": "Ghost", + "damage": 45 + }, + { + "name": "Signal Beam", + "type": "Bug", + "damage": 45 + } + ] + } + }, + { + "id": "064", + "name": "Kadabra", + "classification": "Psi Pokémon", + "types": [ + "Psychic" + ], + "resistant": [ + "Fighting", + "Psychic" + ], + "weaknesses": [ + "Bug", + "Ghost", + "Dark" + ], + "weight": { + "minimum": "49.44kg", + "maximum": "63.56kg" + }, + "height": { + "minimum": "1.14m", + "maximum": "1.46m" + }, + "fleeRate": 0.07, + "Previous evolution(s)": [ + { + "id": 63, + "name": "Abra" + } + ], + "evolutionRequirements": { + "amount": 100, + "name": "Abra candies" + }, + "evolutions": [ + { + "id": 65, + "name": "Alakazam" + } + ], + "maxCP": 1005, + "maxHP": 1131, + "attacks": { + "fast": [ + { + "name": "Confusion", + "type": "Psychic", + "damage": 15 + }, + { + "name": "Psycho Cut", + "type": "Psychic", + "damage": 7 + } + ], + "special": [ + { + "name": "Dazzling Gleam", + "type": "Fairy", + "damage": 55 + }, + { + "name": "Psybeam", + "type": "Psychic", + "damage": 40 + }, + { + "name": "Shadow Ball", + "type": "Ghost", + "damage": 45 + } + ] + } + }, + { + "id": "065", + "name": "Alakazam", + "classification": "Psi Pokémon", + "types": [ + "Psychic" + ], + "resistant": [ + "Fighting", + "Psychic" + ], + "weaknesses": [ + "Bug", + "Ghost", + "Dark" + ], + "weight": { + "minimum": "42kg", + "maximum": "54kg" + }, + "height": { + "minimum": "1.31m", + "maximum": "1.69m" + }, + "fleeRate": 0.05, + "Previous evolution(s)": [ + { + "id": 63, + "name": "Abra" + }, + { + "id": 64, + "name": "Kadabra" + } + ], + "maxCP": 1654, + "maxHP": 1813, + "attacks": { + "fast": [ + { + "name": "Confusion", + "type": "Psychic", + "damage": 15 + }, + { + "name": "Psycho Cut", + "type": "Psychic", + "damage": 7 + } + ], + "special": [ + { + "name": "Dazzling Gleam", + "type": "Fairy", + "damage": 55 + }, + { + "name": "Psychic", + "type": "Psychic", + "damage": 55 + }, + { + "name": "Shadow Ball", + "type": "Ghost", + "damage": 45 + } + ] + } + }, + { + "id": "066", + "name": "Machop", + "classification": "Superpower Pokémon", + "types": [ + "Fighting" + ], + "resistant": [ + "Bug", + "Rock", + "Dark" + ], + "weaknesses": [ + "Flying", + "Psychic", + "Fairy" + ], + "weight": { + "minimum": "17.06kg", + "maximum": "21.94kg" + }, + "height": { + "minimum": "0.7m", + "maximum": "0.9m" + }, + "fleeRate": 0.1, + "evolutionRequirements": { + "amount": 25, + "name": "Machop candies" + }, + "evolutions": [ + { + "id": 67, + "name": "Machoke" + }, + { + "id": 68, + "name": "Machamp" + } + ], + "maxCP": 968, + "maxHP": 1089, + "attacks": { + "fast": [ + { + "name": "Karate Chop", + "type": "Fighting", + "damage": 6 + }, + { + "name": "Low Kick", + "type": "Fighting", + "damage": 5 + } + ], + "special": [ + { + "name": "Brick Break", + "type": "Fighting", + "damage": 30 + }, + { + "name": "Cross Chop", + "type": "Fighting", + "damage": 60 + }, + { + "name": "Low Sweep", + "type": "Fighting", + "damage": 30 + } + ] + } + }, + { + "id": "067", + "name": "Machoke", + "classification": "Superpower Pokémon", + "types": [ + "Fighting" + ], + "resistant": [ + "Bug", + "Rock", + "Dark" + ], + "weaknesses": [ + "Flying", + "Psychic", + "Fairy" + ], + "weight": { + "minimum": "61.69kg", + "maximum": "79.31kg" + }, + "height": { + "minimum": "1.31m", + "maximum": "1.69m" + }, + "fleeRate": 0.07, + "Previous evolution(s)": [ + { + "id": 66, + "name": "Machop" + } + ], + "evolutionRequirements": { + "amount": 100, + "name": "Machop candies" + }, + "evolutions": [ + { + "id": 68, + "name": "Machamp" + } + ], + "maxCP": 1606, + "maxHP": 1760, + "attacks": { + "fast": [ + { + "name": "Karate Chop", + "type": "Fighting", + "damage": 6 + }, + { + "name": "Low Kick", + "type": "Fighting", + "damage": 5 + } + ], + "special": [ + { + "name": "Brick Break", + "type": "Fighting", + "damage": 30 + }, + { + "name": "Cross Chop", + "type": "Fighting", + "damage": 60 + }, + { + "name": "Submission", + "type": "Fighting", + "damage": 30 + } + ] + } + }, + { + "id": "068", + "name": "Machamp", + "classification": "Superpower Pokémon", + "types": [ + "Fighting" + ], + "resistant": [ + "Bug", + "Rock", + "Dark" + ], + "weaknesses": [ + "Flying", + "Psychic", + "Fairy" + ], + "weight": { + "minimum": "113.75kg", + "maximum": "146.25kg" + }, + "height": { + "minimum": "1.4m", + "maximum": "1.8m" + }, + "fleeRate": 0.05, + "Previous evolution(s)": [ + { + "id": 66, + "name": "Machop" + }, + { + "id": 67, + "name": "Machoke" + } + ], + "maxCP": 2406, + "maxHP": 2594, + "attacks": { + "fast": [ + { + "name": "Bullet Punch", + "type": "Steel", + "damage": 10 + }, + { + "name": "Karate Chop", + "type": "Fighting", + "damage": 6 + } + ], + "special": [ + { + "name": "Cross Chop", + "type": "Fighting", + "damage": 60 + }, + { + "name": "Stone Edge", + "type": "Rock", + "damage": 80 + }, + { + "name": "Submission", + "type": "Fighting", + "damage": 30 + } + ] + } + }, + { + "id": "069", + "name": "Bellsprout", + "classification": "Flower Pokémon", + "types": [ + "Grass", + "Poison" + ], + "resistant": [ + "Water", + "Electric", + "Grass", + "Fighting", + "Fairy" + ], + "weaknesses": [ + "Fire", + "Ice", + "Flying", + "Psychic" + ], + "weight": { + "minimum": "3.5kg", + "maximum": "4.5kg" + }, + "height": { + "minimum": "0.61m", + "maximum": "0.79m" + }, + "fleeRate": 0.15, + "evolutionRequirements": { + "amount": 25, + "name": "Bellsprout candies" + }, + "evolutions": [ + { + "id": 70, + "name": "Weepinbell" + }, + { + "id": 71, + "name": "Victreebel" + } + ], + "maxCP": 990, + "maxHP": 1117, + "attacks": { + "fast": [ + { + "name": "Acid", + "type": "Poison", + "damage": 10 + }, + { + "name": "Vine Whip", + "type": "Grass", + "damage": 7 + } + ], + "special": [ + { + "name": "Power Whip", + "type": "Grass", + "damage": 70 + }, + { + "name": "Sludge Bomb", + "type": "Poison", + "damage": 55 + }, + { + "name": "Wrap", + "type": "Normal", + "damage": 25 + } + ] + } + }, + { + "id": "070", + "name": "Weepinbell", + "classification": "Flycatcher Pokémon", + "types": [ + "Grass", + "Poison" + ], + "resistant": [ + "Water", + "Electric", + "Grass", + "Fighting", + "Fairy" + ], + "weaknesses": [ + "Fire", + "Ice", + "Flying", + "Psychic" + ], + "weight": { + "minimum": "5.6kg", + "maximum": "7.2kg" + }, + "height": { + "minimum": "0.88m", + "maximum": "1.13m" + }, + "fleeRate": 0.07, + "Previous evolution(s)": [ + { + "id": 69, + "name": "Bellsprout" + } + ], + "evolutionRequirements": { + "amount": 100, + "name": "Bellsprout candies" + }, + "evolutions": [ + { + "id": 71, + "name": "Victreebel" + } + ], + "maxCP": 1567, + "maxHP": 1723, + "attacks": { + "fast": [ + { + "name": "Acid", + "type": "Poison", + "damage": 10 + }, + { + "name": "Razor Leaf", + "type": "Grass", + "damage": 15 + } + ], + "special": [ + { + "name": "Power Whip", + "type": "Grass", + "damage": 70 + }, + { + "name": "Seed Bomb", + "type": "Grass", + "damage": 40 + }, + { + "name": "Sludge Bomb", + "type": "Poison", + "damage": 55 + } + ] + } + }, + { + "id": "071", + "name": "Victreebel", + "classification": "Flycatcher Pokémon", + "types": [ + "Grass", + "Poison" + ], + "resistant": [ + "Water", + "Electric", + "Grass", + "Fighting", + "Fairy" + ], + "weaknesses": [ + "Fire", + "Ice", + "Flying", + "Psychic" + ], + "weight": { + "minimum": "13.56kg", + "maximum": "17.44kg" + }, + "height": { + "minimum": "1.49m", + "maximum": "1.91m" + }, + "fleeRate": 0.05, + "Previous evolution(s)": [ + { + "id": 69, + "name": "Bellsprout" + }, + { + "id": 70, + "name": "Weepinbell" + } + ], + "maxCP": 2342, + "maxHP": 2530, + "attacks": { + "fast": [ + { + "name": "Acid", + "type": "Poison", + "damage": 10 + }, + { + "name": "Razor Leaf", + "type": "Grass", + "damage": 15 + } + ], + "special": [ + { + "name": "Leaf Blade", + "type": "Grass", + "damage": 55 + }, + { + "name": "Sludge Bomb", + "type": "Poison", + "damage": 55 + }, + { + "name": "Solar Beam", + "type": "Grass", + "damage": 120 + } + ] + } + }, + { + "id": "072", + "name": "Tentacool", + "classification": "Jellyfish Pokémon", + "types": [ + "Water", + "Poison" + ], + "resistant": [ + "Fire", + "Water", + "Ice", + "Fighting", + "Poison", + "Bug", + "Steel", + "Fairy" + ], + "weaknesses": [ + "Electric", + "Ground", + "Psychic" + ], + "weight": { + "minimum": "39.81kg", + "maximum": "51.19kg" + }, + "height": { + "minimum": "0.79m", + "maximum": "1.01m" + }, + "fleeRate": 0.15, + "evolutionRequirements": { + "amount": 50, + "name": "Tentacool candies" + }, + "evolutions": [ + { + "id": 73, + "name": "Tentacruel" + } + ], + "maxCP": 794, + "maxHP": 905, + "attacks": { + "fast": [ + { + "name": "Bubble", + "type": "Water", + "damage": 25 + }, + { + "name": "Poison Sting", + "type": "Poison", + "damage": 6 + } + ], + "special": [ + { + "name": "Bubble Beam", + "type": "Water", + "damage": 30 + }, + { + "name": "Water Pulse", + "type": "Water", + "damage": 35 + }, + { + "name": "Wrap", + "type": "Normal", + "damage": 25 + } + ] + } + }, + { + "id": "073", + "name": "Tentacruel", + "classification": "Jellyfish Pokémon", + "types": [ + "Water", + "Poison" + ], + "resistant": [ + "Fire", + "Water", + "Ice", + "Fighting", + "Poison", + "Bug", + "Steel", + "Fairy" + ], + "weaknesses": [ + "Electric", + "Ground", + "Psychic" + ], + "weight": { + "minimum": "48.13kg", + "maximum": "61.88kg" + }, + "height": { + "minimum": "1.4m", + "maximum": "1.8m" + }, + "fleeRate": 0.07, + "Previous evolution(s)": [ + { + "id": 72, + "name": "Tentacool" + } + ], + "maxCP": 2046, + "maxHP": 2220, + "attacks": { + "fast": [ + { + "name": "Acid", + "type": "Poison", + "damage": 10 + }, + { + "name": "Poison Jab", + "type": "Poison", + "damage": 12 + } + ], + "special": [ + { + "name": "Blizzard", + "type": "Ice", + "damage": 100 + }, + { + "name": "Hydro Pump", + "type": "Water", + "damage": 90 + }, + { + "name": "Sludge Wave", + "type": "Poison", + "damage": 70 + } + ] + } + }, + { + "id": "074", + "name": "Geodude", + "classification": "Rock Pokémon", + "types": [ + "Rock", + "Ground" + ], + "resistant": [ + "Normal", + "Fire", + "Electric", + "Poison", + "Flying", + "Rock" + ], + "weaknesses": [ + "Water", + "Grass", + "Ice", + "Fighting", + "Ground", + "Steel" + ], + "weight": { + "minimum": "17.5kg", + "maximum": "22.5kg" + }, + "height": { + "minimum": "0.35m", + "maximum": "0.45m" + }, + "fleeRate": 0.1, + "evolutionRequirements": { + "amount": 25, + "name": "Geodude candies" + }, + "evolutions": [ + { + "id": 75, + "name": "Graveler" + }, + { + "id": 76, + "name": "Golem" + } + ], + "maxCP": 742, + "maxHP": 849, + "attacks": { + "fast": [ + { + "name": "Rock Throw", + "type": "Rock", + "damage": 12 + }, + { + "name": "Tackle", + "type": "Normal", + "damage": 12 + } + ], + "special": [ + { + "name": "Dig", + "type": "Ground", + "damage": 70 + }, + { + "name": "Rock Slide", + "type": "Rock", + "damage": 50 + }, + { + "name": "Rock Tomb", + "type": "Rock", + "damage": 30 + } + ] + } + }, + { + "id": "075", + "name": "Graveler", + "classification": "Rock Pokémon", + "types": [ + "Rock", + "Ground" + ], + "resistant": [ + "Normal", + "Fire", + "Electric", + "Poison", + "Flying", + "Rock" + ], + "weaknesses": [ + "Water", + "Grass", + "Ice", + "Fighting", + "Ground", + "Steel" + ], + "weight": { + "minimum": "91.88kg", + "maximum": "118.13kg" + }, + "height": { + "minimum": "0.88m", + "maximum": "1.13m" + }, + "fleeRate": 0.07, + "Previous evolution(s)": [ + { + "id": 74, + "name": "Geodude" + } + ], + "evolutionRequirements": { + "amount": 100, + "name": "Geodude candies" + }, + "evolutions": [ + { + "id": 76, + "name": "Golem" + } + ], + "maxCP": 1294, + "maxHP": 1433, + "attacks": { + "fast": [ + { + "name": "Mud Shot", + "type": "Ground", + "damage": 6 + }, + { + "name": "Rock Throw", + "type": "Rock", + "damage": 12 + } + ], + "special": [ + { + "name": "Dig", + "type": "Ground", + "damage": 70 + }, + { + "name": "Rock Slide", + "type": "Rock", + "damage": 50 + }, + { + "name": "Stone Edge", + "type": "Rock", + "damage": 80 + } + ] + } + }, + { + "id": "076", + "name": "Golem", + "classification": "Megaton Pokémon", + "types": [ + "Rock", + "Ground" + ], + "resistant": [ + "Normal", + "Fire", + "Electric", + "Poison", + "Flying", + "Rock" + ], + "weaknesses": [ + "Water", + "Grass", + "Ice", + "Fighting", + "Ground", + "Steel" + ], + "weight": { + "minimum": "262.5kg", + "maximum": "337.5kg" + }, + "height": { + "minimum": "1.22m", + "maximum": "1.57m" + }, + "fleeRate": 0.05, + "Previous evolution(s)": [ + { + "id": 74, + "name": "Geodude" + }, + { + "id": 75, + "name": "Graveler" + } + ], + "maxCP": 2126, + "maxHP": 2303, + "attacks": { + "fast": [ + { + "name": "Mud Shot", + "type": "Ground", + "damage": 6 + }, + { + "name": "Rock Throw", + "type": "Rock", + "damage": 12 + } + ], + "special": [ + { + "name": "Ancient Power", + "type": "Rock", + "damage": 35 + }, + { + "name": "Earthquake", + "type": "Ground", + "damage": 100 + }, + { + "name": "Stone Edge", + "type": "Rock", + "damage": 80 + } + ] + } + }, + { + "id": "077", + "name": "Ponyta", + "classification": "Fire Horse Pokémon", + "types": [ + "Fire" + ], + "resistant": [ + "Fire", + "Grass", + "Ice", + "Bug", + "Steel", + "Fairy" + ], + "weaknesses": [ + "Water", + "Ground", + "Rock" + ], + "weight": { + "minimum": "26.25kg", + "maximum": "33.75kg" + }, + "height": { + "minimum": "0.88m", + "maximum": "1.13m" + }, + "fleeRate": 0.1, + "evolutionRequirements": { + "amount": 50, + "name": "Ponyta candies" + }, + "evolutions": [ + { + "id": 78, + "name": "Rapidash" + } + ], + "maxCP": 1370, + "maxHP": 1516, + "attacks": { + "fast": [ + { + "name": "Ember", + "type": "Fire", + "damage": 10 + }, + { + "name": "Tackle", + "type": "Normal", + "damage": 12 + } + ], + "special": [ + { + "name": "Fire Blast", + "type": "Fire", + "damage": 100 + }, + { + "name": "Flame Charge", + "type": "Fire", + "damage": 25 + }, + { + "name": "Flame Wheel", + "type": "Fire", + "damage": 40 + } + ] + } + }, + { + "id": "078", + "name": "Rapidash", + "classification": "Fire Horse Pokémon", + "types": [ + "Fire" + ], + "resistant": [ + "Fire", + "Grass", + "Ice", + "Bug", + "Steel", + "Fairy" + ], + "weaknesses": [ + "Water", + "Ground", + "Rock" + ], + "weight": { + "minimum": "83.13kg", + "maximum": "106.88kg" + }, + "height": { + "minimum": "1.49m", + "maximum": "1.91m" + }, + "fleeRate": 0.06, + "Previous evolution(s)": [ + { + "id": 77, + "name": "Ponyta" + } + ], + "maxCP": 2024, + "maxHP": 2199, + "attacks": { + "fast": [ + { + "name": "Ember", + "type": "Fire", + "damage": 10 + }, + { + "name": "Low Kick", + "type": "Fighting", + "damage": 5 + } + ], + "special": [ + { + "name": "Drill Run", + "type": "Ground", + "damage": 50 + }, + { + "name": "Fire Blast", + "type": "Fire", + "damage": 100 + }, + { + "name": "Heat Wave", + "type": "Fire", + "damage": 80 + } + ] + } + }, + { + "id": "079", + "name": "Slowpoke", + "classification": "Dopey Pokémon", + "types": [ + "Water", + "Psychic" + ], + "resistant": [ + "Fire", + "Water", + "Ice", + "Fighting", + "Psychic", + "Steel" + ], + "weaknesses": [ + "Electric", + "Grass", + "Bug", + "Ghost", + "Dark" + ], + "weight": { + "minimum": "31.5kg", + "maximum": "40.5kg" + }, + "height": { + "minimum": "1.05m", + "maximum": "1.35m" + }, + "fleeRate": 0.1, + "evolutionRequirements": { + "amount": 50, + "name": "Slowpoke candies" + }, + "evolutions": [ + { + "id": 80, + "name": "Slowbro" + } + ], + "maxCP": 1089, + "maxHP": 1218, + "attacks": { + "fast": [ + { + "name": "Confusion", + "type": "Psychic", + "damage": 15 + }, + { + "name": "Water Gun", + "type": "Water", + "damage": 6 + } + ], + "special": [ + { + "name": "Psychic", + "type": "Psychic", + "damage": 55 + }, + { + "name": "Psyshock", + "type": "Psychic", + "damage": 40 + }, + { + "name": "Water Pulse", + "type": "Water", + "damage": 35 + } + ] + } + }, + { + "id": "080", + "name": "Slowbro", + "classification": "Hermit Crab Pokémon", + "types": [ + "Water", + "Psychic" + ], + "resistant": [ + "Fire", + "Water", + "Ice", + "Fighting", + "Psychic", + "Steel" + ], + "weaknesses": [ + "Electric", + "Grass", + "Bug", + "Ghost", + "Dark" + ], + "weight": { + "minimum": "68.69kg", + "maximum": "88.31kg" + }, + "height": { + "minimum": "1.4m", + "maximum": "1.8m" + }, + "fleeRate": 0.06, + "Previous evolution(s)": [ + { + "id": 79, + "name": "Slowpoke" + } + ], + "maxCP": 2409, + "maxHP": 2597, + "attacks": { + "fast": [ + { + "name": "Confusion", + "type": "Psychic", + "damage": 15 + }, + { + "name": "Water Gun", + "type": "Water", + "damage": 6 + } + ], + "special": [ + { + "name": "Ice Beam", + "type": "Ice", + "damage": 65 + }, + { + "name": "Psychic", + "type": "Psychic", + "damage": 55 + }, + { + "name": "Water Pulse", + "type": "Water", + "damage": 35 + } + ] + } + }, + { + "id": "081", + "name": "Magnemite", + "classification": "Magnet Pokémon", + "types": [ + "Electric", + "Steel" + ], + "resistant": [ + "Normal", + "Electric", + "Grass", + "Ice", + "Poison", + "Flying", + "Psychic", + "Bug", + "Rock", + "Dragon", + "Steel", + "Fairy" + ], + "weaknesses": [ + "Fire", + "Fighting", + "Ground" + ], + "weight": { + "minimum": "5.25kg", + "maximum": "6.75kg" + }, + "height": { + "minimum": "0.26m", + "maximum": "0.34m" + }, + "fleeRate": 0.1, + "evolutionRequirements": { + "amount": 50, + "name": "Magnemite candies" + }, + "evolutions": [ + { + "id": 82, + "name": "Magneton" + } + ], + "maxCP": 774, + "maxHP": 890, + "attacks": { + "fast": [ + { + "name": "Spark", + "type": "Electric", + "damage": 7 + }, + { + "name": "Thunder Shock", + "type": "Electric", + "damage": 5 + } + ], + "special": [ + { + "name": "Discharge", + "type": "Electric", + "damage": 35 + }, + { + "name": "Magnet Bomb", + "type": "Steel", + "damage": 30 + }, + { + "name": "Thunderbolt", + "type": "Electric", + "damage": 55 + } + ] + } + }, + { + "id": "082", + "name": "Magneton", + "classification": "Magnet Pokémon", + "types": [ + "Electric", + "Steel" + ], + "resistant": [ + "Normal", + "Electric", + "Grass", + "Ice", + "Poison", + "Flying", + "Psychic", + "Bug", + "Rock", + "Dragon", + "Steel", + "Fairy" + ], + "weaknesses": [ + "Fire", + "Fighting", + "Ground" + ], + "weight": { + "minimum": "52.5kg", + "maximum": "67.5kg" + }, + "height": { + "minimum": "0.88m", + "maximum": "1.13m" + }, + "fleeRate": 0.06, + "Previous evolution(s)": [ + { + "id": 81, + "name": "Magnemite" + } + ], + "maxCP": 1715, + "maxHP": 1879, + "attacks": { + "fast": [ + { + "name": "Spark", + "type": "Electric", + "damage": 7 + }, + { + "name": "Thunder Shock", + "type": "Electric", + "damage": 5 + } + ], + "special": [ + { + "name": "Discharge", + "type": "Electric", + "damage": 35 + }, + { + "name": "Flash Cannon", + "type": "Steel", + "damage": 60 + }, + { + "name": "Magnet Bomb", + "type": "Steel", + "damage": 30 + } + ] + } + }, + { + "id": "083", + "name": "Farfetch'd", + "classification": "Wild Duck Pokémon", + "types": [ + "Normal", + "Flying" + ], + "resistant": [ + "Grass", + "Ground", + "Bug", + "Ghost" + ], + "weaknesses": [ + "Electric", + "Ice", + "Rock" + ], + "weight": { + "minimum": "13.13kg", + "maximum": "16.88kg" + }, + "height": { + "minimum": "0.7m", + "maximum": "0.9m" + }, + "fleeRate": 0.09, + "Common Capture Area": "Early reports that this Pokémon is likely to be found in: Asia", + "Asia": "Common Capture Area", + "maxCP": 1133, + "maxHP": 1263, + "attacks": { + "fast": [ + {}, + { + "name": "Fury Cutter", + "type": "Bug", + "damage": 3 + } + ], + "special": [ + { + "name": "Aerial Ace", + "type": "Flying", + "damage": 30 + }, + { + "name": "Air Cutter", + "type": "Flying", + "damage": 30 + }, + { + "name": "Leaf Blade", + "type": "Grass", + "damage": 55 + } + ] + } + }, + { + "id": "084", + "name": "Doduo", + "classification": "Twin Bird Pokémon", + "types": [ + "Normal", + "Flying" + ], + "resistant": [ + "Grass", + "Ground", + "Bug", + "Ghost" + ], + "weaknesses": [ + "Electric", + "Ice", + "Rock" + ], + "weight": { + "minimum": "34.3kg", + "maximum": "44.1kg" + }, + "height": { + "minimum": "1.22m", + "maximum": "1.57m" + }, + "fleeRate": 0.1, + "evolutionRequirements": { + "amount": 50, + "name": "Doduo candies" + }, + "evolutions": [ + { + "id": 85, + "name": "Dodrio" + } + ], + "maxCP": 746, + "maxHP": 855, + "attacks": { + "fast": [ + { + "name": "Peck", + "type": "Flying", + "damage": 10 + }, + { + "name": "Quick Attack", + "type": "Normal", + "damage": 10 + } + ], + "special": [ + { + "name": "Aerial Ace", + "type": "Flying", + "damage": 30 + }, + { + "name": "Drill Peck", + "type": "Flying", + "damage": 40 + }, + { + "name": "Swift", + "type": "Normal", + "damage": 30 + } + ] + } + }, + { + "id": "085", + "name": "Dodrio", + "classification": "Triple Bird Pokémon", + "types": [ + "Normal", + "Flying" + ], + "resistant": [ + "Grass", + "Ground", + "Bug", + "Ghost" + ], + "weaknesses": [ + "Electric", + "Ice", + "Rock" + ], + "weight": { + "minimum": "74.55kg", + "maximum": "95.85kg" + }, + "height": { + "minimum": "1.57m", + "maximum": "2.02m" + }, + "fleeRate": 0.06, + "Previous evolution(s)": [ + { + "id": 84, + "name": "Doduo" + } + ], + "maxCP": 1677, + "maxHP": 1836, + "attacks": { + "fast": [ + { + "name": "Feint Attack", + "type": "Dark", + "damage": 12 + }, + { + "name": "Steel Wing", + "type": "Steel", + "damage": 15 + } + ], + "special": [ + { + "name": "Aerial Ace", + "type": "Flying", + "damage": 30 + }, + { + "name": "Air Cutter", + "type": "Flying", + "damage": 30 + }, + { + "name": "Drill Peck", + "type": "Flying", + "damage": 40 + } + ] + } + }, + { + "id": "086", + "name": "Seel", + "classification": "Sea Lion Pokémon", + "types": [ + "Water" + ], + "resistant": [ + "Fire", + "Water", + "Ice", + "Steel" + ], + "weaknesses": [ + "Electric", + "Grass" + ], + "weight": { + "minimum": "78.75kg", + "maximum": "101.25kg" + }, + "height": { + "minimum": "0.96m", + "maximum": "1.24m" + }, + "fleeRate": 0.09, + "evolutionRequirements": { + "amount": 50, + "name": "Seel candies" + }, + "evolutions": [ + { + "id": 87, + "name": "Dewgong" + } + ], + "maxCP": 985, + "maxHP": 1107, + "attacks": { + "fast": [ + { + "name": "Ice Shard", + "type": "Ice", + "damage": 15 + }, + { + "name": "Water Gun", + "type": "Water", + "damage": 6 + } + ], + "special": [ + { + "name": "Aqua Jet", + "type": "Water", + "damage": 25 + }, + { + "name": "Aqua Tail", + "type": "Water", + "damage": 45 + }, + { + "name": "Icy Wind", + "type": "Ice", + "damage": 25 + } + ] + } + }, + { + "id": "087", + "name": "Dewgong", + "classification": "Sea Lion Pokémon", + "types": [ + "Water", + "Ice" + ], + "resistant": [ + "Water", + "Ice" + ], + "weaknesses": [ + "Electric", + "Grass", + "Fighting", + "Rock" + ], + "weight": { + "minimum": "105kg", + "maximum": "135kg" + }, + "height": { + "minimum": "1.49m", + "maximum": "1.91m" + }, + "fleeRate": 0.06, + "Previous evolution(s)": [ + { + "id": 86, + "name": "Seel" + } + ], + "maxCP": 1975, + "maxHP": 2145, + "attacks": { + "fast": [ + { + "name": "Frost Breath", + "type": "Ice", + "damage": 9 + }, + { + "name": "Ice Shard", + "type": "Ice", + "damage": 15 + } + ], + "special": [ + { + "name": "Aqua Jet", + "type": "Water", + "damage": 25 + }, + { + "name": "Blizzard", + "type": "Ice", + "damage": 100 + }, + { + "name": "Icy Wind", + "type": "Ice", + "damage": 25 + } + ] + } + }, + { + "id": "088", + "name": "Grimer", + "classification": "Sludge Pokémon", + "types": [ + "Poison" + ], + "resistant": [ + "Grass", + "Fighting", + "Poison", + "Bug", + "Fairy" + ], + "weaknesses": [ + "Ground", + "Psychic" + ], + "weight": { + "minimum": "26.25kg", + "maximum": "33.75kg" + }, + "height": { + "minimum": "0.79m", + "maximum": "1.01m" + }, + "fleeRate": 0.1, + "evolutionRequirements": { + "amount": 50, + "name": "Grimer candies" + }, + "evolutions": [ + { + "id": 89, + "name": "Muk" + } + ], + "maxCP": 1152, + "maxHP": 1284, + "attacks": { + "fast": [ + { + "name": "Acid", + "type": "Poison", + "damage": 10 + }, + { + "name": "Mud Slap", + "type": "Ground", + "damage": 15 + } + ], + "special": [ + { + "name": "Mud Bomb", + "type": "Ground", + "damage": 30 + }, + { + "name": "Sludge", + "type": "Poison", + "damage": 30 + }, + { + "name": "Sludge Bomb", + "type": "Poison", + "damage": 55 + } + ] + } + }, + { + "id": "089", + "name": "Muk", + "classification": "Sludge Pokémon", + "types": [ + "Poison" + ], + "resistant": [ + "Grass", + "Fighting", + "Poison", + "Bug", + "Fairy" + ], + "weaknesses": [ + "Ground", + "Psychic" + ], + "weight": { + "minimum": "26.25kg", + "maximum": "33.75kg" + }, + "height": { + "minimum": "1.05m", + "maximum": "1.35m" + }, + "fleeRate": 0.06, + "Previous evolution(s)": [ + { + "id": 88, + "name": "Grimer" + } + ], + "maxCP": 2414, + "maxHP": 2602, + "attacks": { + "fast": [ + { + "name": "Acid", + "type": "Poison", + "damage": 10 + }, + { + "name": "Poison Jab", + "type": "Poison", + "damage": 12 + } + ], + "special": [ + { + "name": "Dark Pulse", + "type": "Dark", + "damage": 45 + }, + { + "name": "Gunk Shot", + "type": "Poison", + "damage": 65 + }, + { + "name": "Sludge Wave", + "type": "Poison", + "damage": 70 + } + ] + } + }, + { + "id": "090", + "name": "Shellder", + "classification": "Bivalve Pokémon", + "types": [ + "Water" + ], + "resistant": [ + "Fire", + "Water", + "Ice", + "Steel" + ], + "weaknesses": [ + "Electric", + "Grass" + ], + "weight": { + "minimum": "3.5kg", + "maximum": "4.5kg" + }, + "height": { + "minimum": "0.26m", + "maximum": "0.34m" + }, + "fleeRate": 0.1, + "evolutionRequirements": { + "amount": 50, + "name": "Shellder candies" + }, + "evolutions": [ + { + "id": 91, + "name": "Cloyster" + } + ], + "maxCP": 715, + "maxHP": 822, + "attacks": { + "fast": [ + { + "name": "Ice Shard", + "type": "Ice", + "damage": 15 + }, + { + "name": "Tackle", + "type": "Normal", + "damage": 12 + } + ], + "special": [ + { + "name": "Bubble Beam", + "type": "Water", + "damage": 30 + }, + { + "name": "Icy Wind", + "type": "Ice", + "damage": 25 + }, + { + "name": "Water Pulse", + "type": "Water", + "damage": 35 + } + ] + } + }, + { + "id": "091", + "name": "Cloyster", + "classification": "Bivalve Pokémon", + "types": [ + "Water", + "Ice" + ], + "resistant": [ + "Water", + "Ice" + ], + "weaknesses": [ + "Electric", + "Grass", + "Fighting", + "Rock" + ], + "weight": { + "minimum": "115.94kg", + "maximum": "149.06kg" + }, + "height": { + "minimum": "1.31m", + "maximum": "1.69m" + }, + "fleeRate": 0.06, + "Previous evolution(s)": [ + { + "id": 90, + "name": "Shellder" + } + ], + "maxCP": 1879, + "maxHP": 2052, + "attacks": { + "fast": [ + { + "name": "Frost Breath", + "type": "Ice", + "damage": 9 + }, + { + "name": "Ice Shard", + "type": "Ice", + "damage": 15 + } + ], + "special": [ + { + "name": "Blizzard", + "type": "Ice", + "damage": 100 + }, + { + "name": "Hydro Pump", + "type": "Water", + "damage": 90 + }, + { + "name": "Icy Wind", + "type": "Ice", + "damage": 25 + } + ] + } + }, + { + "id": "092", + "name": "Gastly", + "classification": "Gas Pokémon", + "types": [ + "Ghost", + "Poison" + ], + "resistant": [ + "Normal", + "Grass", + "Fighting", + "Poison", + "Bug", + "Fairy" + ], + "weaknesses": [ + "Ground", + "Psychic", + "Ghost", + "Dark" + ], + "weight": { + "minimum": "0.09kg", + "maximum": "0.11kg" + }, + "height": { + "minimum": "1.14m", + "maximum": "1.46m" + }, + "fleeRate": 0.1, + "evolutionRequirements": { + "amount": 25, + "name": "Gastly candies" + }, + "evolutions": [ + { + "id": 93, + "name": "Haunter" + }, + { + "id": 94, + "name": "Gengar" + } + ], + "maxCP": 696, + "maxHP": 804, + "attacks": { + "fast": [ + { + "name": "Lick", + "type": "Ghost", + "damage": 5 + }, + { + "name": "Sucker Punch", + "type": "Dark", + "damage": 7 + } + ], + "special": [ + { + "name": "Dark Pulse", + "type": "Dark", + "damage": 45 + }, + { + "name": "Ominous Wind", + "type": "Ghost", + "damage": 30 + }, + { + "name": "Sludge Bomb", + "type": "Poison", + "damage": 55 + } + ] + } + }, + { + "id": "093", + "name": "Haunter", + "classification": "Gas Pokémon", + "types": [ + "Ghost", + "Poison" + ], + "resistant": [ + "Normal", + "Grass", + "Fighting", + "Poison", + "Bug", + "Fairy" + ], + "weaknesses": [ + "Ground", + "Psychic", + "Ghost", + "Dark" + ], + "weight": { + "minimum": "0.09kg", + "maximum": "0.11kg" + }, + "height": { + "minimum": "1.4m", + "maximum": "1.8m" + }, + "fleeRate": 0.07, + "Previous evolution(s)": [ + { + "id": 92, + "name": "Gastly" + } + ], + "evolutionRequirements": { + "amount": 100, + "name": "Gastly candies" + }, + "evolutions": [ + { + "id": 94, + "name": "Gengar" + } + ], + "maxCP": 1240, + "maxHP": 1380, + "attacks": { + "fast": [ + { + "name": "Lick", + "type": "Ghost", + "damage": 5 + }, + { + "name": "Shadow Claw", + "type": "Ghost", + "damage": 11 + } + ], + "special": [ + { + "name": "Dark Pulse", + "type": "Dark", + "damage": 45 + }, + { + "name": "Shadow Ball", + "type": "Ghost", + "damage": 45 + }, + { + "name": "Sludge Bomb", + "type": "Poison", + "damage": 55 + } + ] + } + }, + { + "id": "094", + "name": "Gengar", + "classification": "Shadow Pokémon", + "types": [ + "Ghost", + "Poison" + ], + "resistant": [ + "Normal", + "Grass", + "Fighting", + "Poison", + "Bug", + "Fairy" + ], + "weaknesses": [ + "Ground", + "Psychic", + "Ghost", + "Dark" + ], + "weight": { + "minimum": "35.44kg", + "maximum": "45.56kg" + }, + "height": { + "minimum": "1.31m", + "maximum": "1.69m" + }, + "fleeRate": 0.05, + "Previous evolution(s)": [ + { + "id": 92, + "name": "Gastly" + }, + { + "id": 93, + "name": "Haunter" + } + ], + "maxCP": 1907, + "maxHP": 2078, + "attacks": { + "fast": [ + { + "name": "Shadow Claw", + "type": "Ghost", + "damage": 11 + }, + { + "name": "Sucker Punch", + "type": "Dark", + "damage": 7 + } + ], + "special": [ + { + "name": "Dark Pulse", + "type": "Dark", + "damage": 45 + }, + { + "name": "Shadow Ball", + "type": "Ghost", + "damage": 45 + }, + { + "name": "Sludge Wave", + "type": "Poison", + "damage": 70 + } + ] + } + }, + { + "id": "095", + "name": "Onix", + "classification": "Rock Snake Pokémon", + "types": [ + "Rock", + "Ground" + ], + "resistant": [ + "Normal", + "Fire", + "Electric", + "Poison", + "Flying", + "Rock" + ], + "weaknesses": [ + "Water", + "Grass", + "Ice", + "Fighting", + "Ground", + "Steel" + ], + "weight": { + "minimum": "183.75kg", + "maximum": "236.25kg" + }, + "height": { + "minimum": "7.7m", + "maximum": "9.9m" + }, + "fleeRate": 0.09, + "maxCP": 745, + "maxHP": 857, + "attacks": { + "fast": [ + { + "name": "Rock Throw", + "type": "Rock", + "damage": 12 + }, + { + "name": "Tackle", + "type": "Normal", + "damage": 12 + } + ], + "special": [ + { + "name": "Iron Head", + "type": "Steel", + "damage": 30 + }, + { + "name": "Rock Slide", + "type": "Rock", + "damage": 50 + }, + { + "name": "Stone Edge", + "type": "Rock", + "damage": 80 + } + ] + } + }, + { + "id": "096", + "name": "Drowzee", + "classification": "Hypnosis Pokémon", + "types": [ + "Psychic" + ], + "resistant": [ + "Fighting", + "Psychic" + ], + "weaknesses": [ + "Bug", + "Ghost", + "Dark" + ], + "weight": { + "minimum": "28.35kg", + "maximum": "36.45kg" + }, + "height": { + "minimum": "0.88m", + "maximum": "1.13m" + }, + "fleeRate": 0.1, + "evolutionRequirements": { + "amount": 50, + "name": "Drowzee candies" + }, + "evolutions": [ + { + "id": 97, + "name": "Hypno" + } + ], + "maxCP": 955, + "maxHP": 1075, + "attacks": { + "fast": [ + { + "name": "Confusion", + "type": "Psychic", + "damage": 15 + }, + { + "name": "Pound", + "type": "Normal", + "damage": 7 + } + ], + "special": [ + { + "name": "Psybeam", + "type": "Psychic", + "damage": 40 + }, + { + "name": "Psychic", + "type": "Psychic", + "damage": 55 + }, + { + "name": "Psyshock", + "type": "Psychic", + "damage": 40 + } + ] + } + }, + { + "id": "097", + "name": "Hypno", + "classification": "Hypnosis Pokémon", + "types": [ + "Psychic" + ], + "resistant": [ + "Fighting", + "Psychic" + ], + "weaknesses": [ + "Bug", + "Ghost", + "Dark" + ], + "weight": { + "minimum": "66.15kg", + "maximum": "85.05kg" + }, + "height": { + "minimum": "1.4m", + "maximum": "1.8m" + }, + "fleeRate": 0.06, + "Previous evolution(s)": [ + { + "id": 96, + "name": "Drowzee" + } + ], + "maxCP": 2012, + "maxHP": 2184, + "attacks": { + "fast": [ + { + "name": "Confusion", + "type": "Psychic", + "damage": 15 + }, + { + "name": "Zen Headbutt", + "type": "Psychic", + "damage": 12 + } + ], + "special": [ + { + "name": "Psychic", + "type": "Psychic", + "damage": 55 + }, + { + "name": "Psyshock", + "type": "Psychic", + "damage": 40 + }, + { + "name": "Shadow Ball", + "type": "Ghost", + "damage": 45 + } + ] + } + }, + { + "id": "098", + "name": "Krabby", + "classification": "River Crab Pokémon", + "types": [ + "Water" + ], + "resistant": [ + "Fire", + "Water", + "Ice", + "Steel" + ], + "weaknesses": [ + "Electric", + "Grass" + ], + "weight": { + "minimum": "5.69kg", + "maximum": "7.31kg" + }, + "height": { + "minimum": "0.35m", + "maximum": "0.45m" + }, + "fleeRate": 0.15, + "evolutionRequirements": { + "amount": 50, + "name": "Krabby candies" + }, + "evolutions": [ + { + "id": 99, + "name": "Kingler" + } + ], + "maxCP": 686, + "maxHP": 792, + "attacks": { + "fast": [ + { + "name": "Bubble", + "type": "Water", + "damage": 25 + }, + { + "name": "Mud Shot", + "type": "Ground", + "damage": 6 + } + ], + "special": [ + { + "name": "Bubble Beam", + "type": "Water", + "damage": 30 + }, + { + "name": "Vice Grip", + "type": "Normal", + "damage": 25 + }, + { + "name": "Water Pulse", + "type": "Water", + "damage": 35 + } + ] + } + }, + { + "id": "099", + "name": "Kingler", + "classification": "Pincer Pokémon", + "types": [ + "Water" + ], + "resistant": [ + "Fire", + "Water", + "Ice", + "Steel" + ], + "weaknesses": [ + "Electric", + "Grass" + ], + "weight": { + "minimum": "52.5kg", + "maximum": "67.5kg" + }, + "height": { + "minimum": "1.14m", + "maximum": "1.46m" + }, + "fleeRate": 0.07, + "Previous evolution(s)": [ + { + "id": 98, + "name": "Krabby" + } + ], + "maxCP": 1663, + "maxHP": 1823, + "attacks": { + "fast": [ + { + "name": "Metal Claw", + "type": "Steel", + "damage": 8 + }, + { + "name": "Mud Shot", + "type": "Ground", + "damage": 6 + } + ], + "special": [ + { + "name": "Vice Grip", + "type": "Normal", + "damage": 25 + }, + { + "name": "Water Pulse", + "type": "Water", + "damage": 35 + }, + { + "name": "X Scissor", + "type": "Bug", + "damage": 35 + } + ] + } + }, + { + "id": "100", + "name": "Voltorb", + "classification": "Ball Pokémon", + "types": [ + "Electric" + ], + "resistant": [ + "Electric", + "Flying", + "Steel" + ], + "weaknesses": [ + "Ground" + ], + "weight": { + "minimum": "9.1kg", + "maximum": "11.7kg" + }, + "height": { + "minimum": "0.44m", + "maximum": "0.56m" + }, + "fleeRate": 0.1, + "evolutionRequirements": { + "amount": 50, + "name": "Voltorb candies" + }, + "evolutions": [ + { + "id": 101, + "name": "Electrode" + } + ], + "maxCP": 733, + "maxHP": 839, + "attacks": { + "fast": [ + { + "name": "Spark", + "type": "Electric", + "damage": 7 + }, + { + "name": "Tackle", + "type": "Normal", + "damage": 12 + } + ], + "special": [ + { + "name": "Discharge", + "type": "Electric", + "damage": 35 + }, + { + "name": "Signal Beam", + "type": "Bug", + "damage": 45 + }, + { + "name": "Thunderbolt", + "type": "Electric", + "damage": 55 + } + ] + } + }, + { + "id": "101", + "name": "Electrode", + "classification": "Ball Pokémon", + "types": [ + "Electric" + ], + "resistant": [ + "Electric", + "Flying", + "Steel" + ], + "weaknesses": [ + "Ground" + ], + "weight": { + "minimum": "58.27kg", + "maximum": "74.92kg" + }, + "height": { + "minimum": "1.05m", + "maximum": "1.35m" + }, + "fleeRate": 0.06, + "Previous evolution(s)": [ + { + "id": 100, + "name": "Voltorb" + } + ], + "maxCP": 1496, + "maxHP": 1646, + "attacks": { + "fast": [ + { + "name": "Spark", + "type": "Electric", + "damage": 7 + }, + { + "name": "Tackle", + "type": "Normal", + "damage": 12 + } + ], + "special": [ + { + "name": "Discharge", + "type": "Electric", + "damage": 35 + }, + { + "name": "Hyper Beam", + "type": "Normal", + "damage": 120 + }, + { + "name": "Thunderbolt", + "type": "Electric", + "damage": 55 + } + ] + } + }, + { + "id": "102", + "name": "Exeggcute", + "classification": "Egg Pokémon", + "types": [ + "Grass", + "Psychic" + ], + "resistant": [ + "Water", + "Electric", + "Grass", + "Fighting", + "Ground", + "Psychic" + ], + "weaknesses": [ + "Fire", + "Ice", + "Poison", + "Flying", + "Bug", + "Ghost", + "Dark" + ], + "weight": { + "minimum": "2.19kg", + "maximum": "2.81kg" + }, + "height": { + "minimum": "0.35m", + "maximum": "0.45m" + }, + "fleeRate": 0.1, + "evolutionRequirements": { + "amount": 50, + "name": "E" + }, + "evolutions": [ + { + "id": 103, + "name": "Exeggutor" + } + ], + "maxCP": 978, + "maxHP": 1099, + "attacks": { + "fast": [ + { + "name": "Confusion", + "type": "Psychic", + "damage": 15 + } + ], + "special": [ + { + "name": "Ancient Power", + "type": "Rock", + "damage": 35 + }, + { + "name": "Psychic", + "type": "Psychic", + "damage": 55 + }, + { + "name": "Seed Bomb", + "type": "Grass", + "damage": 40 + } + ] + } + }, + { + "id": "103", + "name": "Exeggutor", + "classification": "Coconut Pokémon", + "types": [ + "Grass", + "Psychic" + ], + "resistant": [ + "Water", + "Electric", + "Grass", + "Fighting", + "Ground", + "Psychic" + ], + "weaknesses": [ + "Fire", + "Ice", + "Poison", + "Flying", + "Bug", + "Ghost", + "Dark" + ], + "weight": { + "minimum": "105kg", + "maximum": "135kg" + }, + "height": { + "minimum": "1.75m", + "maximum": "2.25m" + }, + "fleeRate": 0.06, + "Previous evolution(s)": [ + { + "id": 102, + "name": "Exeggcute" + } + ], + "maxCP": 2752, + "maxHP": 2955, + "attacks": { + "fast": [ + { + "name": "Confusion", + "type": "Psychic", + "damage": 15 + }, + { + "name": "Zen Headbutt", + "type": "Psychic", + "damage": 12 + } + ], + "special": [ + { + "name": "Psychic", + "type": "Psychic", + "damage": 55 + }, + { + "name": "Seed Bomb", + "type": "Grass", + "damage": 40 + }, + { + "name": "Solar Beam", + "type": "Grass", + "damage": 120 + } + ] + } + }, + { + "id": "104", + "name": "Cubone", + "classification": "Lonely Pokémon", + "types": [ + "Ground" + ], + "resistant": [ + "Electric", + "Poison", + "Rock" + ], + "weaknesses": [ + "Water", + "Grass", + "Ice" + ], + "weight": { + "minimum": "5.69kg", + "maximum": "7.31kg" + }, + "height": { + "minimum": "0.35m", + "maximum": "0.45m" + }, + "fleeRate": 0.1, + "evolutionRequirements": { + "amount": 50, + "name": "Cubone candies" + }, + "evolutions": [ + { + "id": 105, + "name": "Marowak" + } + ], + "maxCP": 889, + "maxHP": 1006, + "attacks": { + "fast": [ + { + "name": "Mud Slap", + "type": "Ground", + "damage": 15 + }, + { + "name": "Rock Smash", + "type": "Fighting", + "damage": 15 + } + ], + "special": [ + { + "name": "Bulldoze", + "type": "Ground", + "damage": 35 + }, + { + "name": "Dig", + "type": "Ground", + "damage": 70 + }, + { + "name": "Earthquake", + "type": "Ground", + "damage": 100 + } + ] + } + }, + { + "id": "105", + "name": "Marowak", + "classification": "Bone Keeper Pokémon", + "types": [ + "Ground" + ], + "resistant": [ + "Electric", + "Poison", + "Rock" + ], + "weaknesses": [ + "Water", + "Grass", + "Ice" + ], + "weight": { + "minimum": "39.38kg", + "maximum": "50.63kg" + }, + "height": { + "minimum": "0.88m", + "maximum": "1.13m" + }, + "fleeRate": 0.06, + "Previous evolution(s)": [ + { + "id": 104, + "name": "Cubone" + } + ], + "maxCP": 1505, + "maxHP": 1656, + "attacks": { + "fast": [ + { + "name": "Mud Slap", + "type": "Ground", + "damage": 15 + }, + { + "name": "Rock Smash", + "type": "Fighting", + "damage": 15 + } + ], + "special": [ + { + "name": "Bone Club", + "type": "Ground", + "damage": 25 + }, + { + "name": "Dig", + "type": "Ground", + "damage": 70 + }, + { + "name": "Earthquake", + "type": "Ground", + "damage": 100 + } + ] + } + }, + { + "id": "106", + "name": "Hitmonlee", + "classification": "Kicking Pokémon", + "types": [ + "Fighting" + ], + "resistant": [ + "Bug", + "Rock", + "Dark" + ], + "weaknesses": [ + "Flying", + "Psychic", + "Fairy" + ], + "weight": { + "minimum": "43.57kg", + "maximum": "56.02kg" + }, + "height": { + "minimum": "1.31m", + "maximum": "1.69m" + }, + "fleeRate": 0.09, + "maxCP": 1349, + "maxHP": 1492, + "attacks": { + "fast": [ + { + "name": "Low Kick", + "type": "Fighting", + "damage": 5 + }, + { + "name": "Rock Smash", + "type": "Fighting", + "damage": 15 + } + ], + "special": [ + { + "name": "Low Sweep", + "type": "Fighting", + "damage": 30 + }, + { + "name": "Stomp", + "type": "Normal", + "damage": 30 + }, + { + "name": "Stone Edge", + "type": "Rock", + "damage": 80 + } + ] + } + }, + { + "id": "107", + "name": "Hitmonchan", + "classification": "Punching Pokémon", + "types": [ + "Fighting" + ], + "resistant": [ + "Bug", + "Rock", + "Dark" + ], + "weaknesses": [ + "Flying", + "Psychic", + "Fairy" + ], + "weight": { + "minimum": "43.93kg", + "maximum": "56.48kg" + }, + "height": { + "minimum": "1.22m", + "maximum": "1.57m" + }, + "fleeRate": 0.09, + "maxCP": 1370, + "maxHP": 1516, + "attacks": { + "fast": [ + { + "name": "Bullet Punch", + "type": "Steel", + "damage": 10 + }, + { + "name": "Rock Smash", + "type": "Fighting", + "damage": 15 + } + ], + "special": [ + { + "name": "Brick Break", + "type": "Fighting", + "damage": 30 + }, + { + "name": "Fire Punch", + "type": "Fire", + "damage": 40 + }, + { + "name": "Ice Punch", + "type": "Ice", + "damage": 45 + }, + { + "name": "Thunder Punch", + "type": "Electric", + "damage": 40 + } + ] + } + }, + { + "id": "108", + "name": "Lickitung", + "classification": "Licking Pokémon", + "types": [ + "Normal" + ], + "resistant": [ + "Ghost" + ], + "weaknesses": [ + "Fighting" + ], + "weight": { + "minimum": "57.31kg", + "maximum": "73.69kg" + }, + "height": { + "minimum": "1.05m", + "maximum": "1.35m" + }, + "fleeRate": 0.09, + "maxCP": 1477, + "maxHP": 1626, + "attacks": { + "fast": [ + { + "name": "Lick", + "type": "Ghost", + "damage": 5 + }, + { + "name": "Zen Headbutt", + "type": "Psychic", + "damage": 12 + } + ], + "special": [ + { + "name": "Hyper Beam", + "type": "Normal", + "damage": 120 + }, + { + "name": "Power Whip", + "type": "Grass", + "damage": 70 + }, + { + "name": "Stomp", + "type": "Normal", + "damage": 30 + } + ] + } + }, + { + "id": "109", + "name": "Koffing", + "classification": "Poison Gas Pokémon", + "types": [ + "Poison" + ], + "resistant": [ + "Grass", + "Fighting", + "Poison", + "Bug", + "Fairy" + ], + "weaknesses": [ + "Ground", + "Psychic" + ], + "weight": { + "minimum": "0.88kg", + "maximum": "1.13kg" + }, + "height": { + "minimum": "0.53m", + "maximum": "0.68m" + }, + "fleeRate": 0.1, + "evolutionRequirements": { + "amount": 50, + "name": "Koffing candies" + }, + "evolutions": [ + { + "id": 110, + "name": "Weezing" + } + ], + "maxCP": 1025, + "maxHP": 1151, + "attacks": { + "fast": [ + { + "name": "Acid", + "type": "Poison", + "damage": 10 + }, + { + "name": "Tackle", + "type": "Normal", + "damage": 12 + } + ], + "special": [ + { + "name": "Dark Pulse", + "type": "Dark", + "damage": 45 + }, + { + "name": "Sludge", + "type": "Poison", + "damage": 30 + }, + { + "name": "Sludge Bomb", + "type": "Poison", + "damage": 55 + } + ] + } + }, + { + "id": "110", + "name": "Weezing", + "classification": "Poison Gas Pokémon", + "types": [ + "Poison" + ], + "resistant": [ + "Grass", + "Fighting", + "Poison", + "Bug", + "Fairy" + ], + "weaknesses": [ + "Ground", + "Psychic" + ], + "weight": { + "minimum": "8.31kg", + "maximum": "10.69kg" + }, + "height": { + "minimum": "1.05m", + "maximum": "1.35m" + }, + "fleeRate": 0.06, + "Previous evolution(s)": [ + { + "id": 109, + "name": "Koffing" + } + ], + "maxCP": 2073, + "maxHP": 2250, + "attacks": { + "fast": [ + { + "name": "Acid", + "type": "Poison", + "damage": 10 + }, + { + "name": "Tackle", + "type": "Normal", + "damage": 12 + } + ], + "special": [ + { + "name": "Dark Pulse", + "type": "Dark", + "damage": 45 + }, + { + "name": "Shadow Ball", + "type": "Ghost", + "damage": 45 + }, + { + "name": "Sludge Bomb", + "type": "Poison", + "damage": 55 + } + ] + } + }, + { + "id": "111", + "name": "Rhyhorn", + "classification": "Spikes Pokémon", + "types": [ + "Ground", + "Rock" + ], + "resistant": [ + "Normal", + "Fire", + "Electric", + "Poison", + "Flying", + "Rock" + ], + "weaknesses": [ + "Water", + "Grass", + "Ice", + "Fighting", + "Ground", + "Steel" + ], + "weight": { + "minimum": "100.63kg", + "maximum": "129.38kg" + }, + "height": { + "minimum": "0.88m", + "maximum": "1.13m" + }, + "fleeRate": 0.1, + "evolutionRequirements": { + "amount": 50, + "name": "Rhyhorn candies" + }, + "evolutions": [ + { + "id": 112, + "name": "Rhydon" + } + ], + "maxCP": 1055, + "maxHP": 1182, + "attacks": { + "fast": [ + { + "name": "Mud Slap", + "type": "Ground", + "damage": 15 + }, + { + "name": "Rock Smash", + "type": "Fighting", + "damage": 15 + } + ], + "special": [ + { + "name": "Bulldoze", + "type": "Ground", + "damage": 35 + }, + { + "name": "Horn Attack", + "type": "Normal", + "damage": 25 + }, + { + "name": "Stomp", + "type": "Normal", + "damage": 30 + } + ] + } + }, + { + "id": "112", + "name": "Rhydon", + "classification": "Drill Pokémon", + "types": [ + "Ground", + "Rock" + ], + "resistant": [ + "Normal", + "Fire", + "Electric", + "Poison", + "Flying", + "Rock" + ], + "weaknesses": [ + "Water", + "Grass", + "Ice", + "Fighting", + "Ground", + "Steel" + ], + "weight": { + "minimum": "105kg", + "maximum": "135kg" + }, + "height": { + "minimum": "1.66m", + "maximum": "2.14m" + }, + "fleeRate": 0.06, + "Previous evolution(s)": [ + { + "id": 111, + "name": "Rhyhorn" + } + ], + "maxCP": 2068, + "maxHP": 2243, + "attacks": { + "fast": [ + { + "name": "Mud Slap", + "type": "Ground", + "damage": 15 + }, + { + "name": "Rock Smash", + "type": "Fighting", + "damage": 15 + } + ], + "special": [ + { + "name": "Earthquake", + "type": "Ground", + "damage": 100 + }, + { + "name": "Megahorn", + "type": "Bug", + "damage": 80 + }, + { + "name": "Stone Edge", + "type": "Rock", + "damage": 80 + } + ] + } + }, + { + "id": "113", + "name": "Chansey", + "classification": "Egg Pokémon", + "types": [ + "Normal" + ], + "resistant": [ + "Ghost" + ], + "weaknesses": [ + "Fighting" + ], + "weight": { + "minimum": "30.27kg", + "maximum": "38.92kg" + }, + "height": { + "minimum": "0.96m", + "maximum": "1.24m" + }, + "fleeRate": 0.09, + "maxCP": 549, + "maxHP": 675, + "attacks": { + "fast": [ + { + "name": "Pound", + "type": "Normal", + "damage": 7 + }, + { + "name": "Zen Headbutt", + "type": "Psychic", + "damage": 12 + } + ], + "special": [ + { + "name": "Dazzling Gleam", + "type": "Fairy", + "damage": 55 + }, + { + "name": "Psybeam", + "type": "Psychic", + "damage": 40 + }, + { + "name": "Psychic", + "type": "Psychic", + "damage": 55 + } + ] + } + }, + { + "id": "114", + "name": "Tangela", + "classification": "Vine Pokémon", + "types": [ + "Grass" + ], + "resistant": [ + "Water", + "Electric", + "Grass", + "Ground" + ], + "weaknesses": [ + "Fire", + "Ice", + "Poison", + "Flying", + "Bug" + ], + "weight": { + "minimum": "30.63kg", + "maximum": "39.38kg" + }, + "height": { + "minimum": "0.88m", + "maximum": "1.13m" + }, + "fleeRate": 0.09, + "maxCP": 1586, + "maxHP": 1739, + "attacks": { + "fast": [ + { + "name": "Vine Whip", + "type": "Grass", + "damage": 7 + } + ], + "special": [ + { + "name": "Power Whip", + "type": "Grass", + "damage": 70 + }, + { + "name": "Sludge Bomb", + "type": "Poison", + "damage": 55 + }, + { + "name": "Solar Beam", + "type": "Grass", + "damage": 120 + } + ] + } + }, + { + "id": "115", + "name": "Kangaskhan", + "classification": "Parent Pokémon", + "types": [ + "Normal" + ], + "resistant": [ + "Ghost" + ], + "weaknesses": [ + "Fighting" + ], + "weight": { + "minimum": "70kg", + "maximum": "90kg" + }, + "height": { + "minimum": "1.93m", + "maximum": "2.48m" + }, + "fleeRate": 0.09, + "Common Capture Area": "Early reports that this Pokémon is likely to be found in: Australia, New Zealand", + "Australia, New Zealand": "Common Capture Area", + "maxCP": 1875, + "maxHP": 2043, + "attacks": { + "fast": [ + { + "name": "Low Kick", + "type": "Fighting", + "damage": 5 + }, + { + "name": "Mud Slap", + "type": "Ground", + "damage": 15 + } + ], + "special": [ + { + "name": "Brick Break", + "type": "Fighting", + "damage": 30 + }, + { + "name": "Earthquake", + "type": "Ground", + "damage": 100 + }, + { + "name": "Stomp", + "type": "Normal", + "damage": 30 + } + ] + } + }, + { + "id": "116", + "name": "Horsea", + "classification": "Dragon Pokémon", + "types": [ + "Water" + ], + "resistant": [ + "Fire", + "Water", + "Ice", + "Steel" + ], + "weaknesses": [ + "Electric", + "Grass" + ], + "weight": { + "minimum": "7kg", + "maximum": "9kg" + }, + "height": { + "minimum": "0.35m", + "maximum": "0.45m" + }, + "fleeRate": 0.1, + "evolutionRequirements": { + "amount": 50, + "name": "Horsea candies" + }, + "evolutions": [ + { + "id": 117, + "name": "Seadra" + } + ], + "maxCP": 688, + "maxHP": 794, + "attacks": { + "fast": [ + { + "name": "Bubble", + "type": "Water", + "damage": 25 + }, + { + "name": "Water Gun", + "type": "Water", + "damage": 6 + } + ], + "special": [ + { + "name": "Bubble Beam", + "type": "Water", + "damage": 30 + }, + { + "name": "Dragon Pulse", + "type": "Dragon", + "damage": 65 + }, + { + "name": "Flash Cannon", + "type": "Steel", + "damage": 60 + } + ] + } + }, + { + "id": "117", + "name": "Seadra", + "classification": "Dragon Pokémon", + "types": [ + "Water" + ], + "resistant": [ + "Fire", + "Water", + "Ice", + "Steel" + ], + "weaknesses": [ + "Electric", + "Grass" + ], + "weight": { + "minimum": "21.88kg", + "maximum": "28.13kg" + }, + "height": { + "minimum": "1.05m", + "maximum": "1.35m" + }, + "fleeRate": 0.06, + "Previous evolution(s)": [ + { + "id": 116, + "name": "Horsea" + } + ], + "maxCP": 1559, + "maxHP": 1713, + "attacks": { + "fast": [ + { + "name": "Dragon Breath", + "type": "Dragon", + "damage": 6 + }, + { + "name": "Water Gun", + "type": "Water", + "damage": 6 + } + ], + "special": [ + { + "name": "Blizzard", + "type": "Ice", + "damage": 100 + }, + { + "name": "Dragon Pulse", + "type": "Dragon", + "damage": 65 + }, + { + "name": "Hydro Pump", + "type": "Water", + "damage": 90 + } + ] + } + }, + { + "id": "118", + "name": "Goldeen", + "classification": "Goldfish Pokémon", + "types": [ + "Water" + ], + "resistant": [ + "Fire", + "Water", + "Ice", + "Steel" + ], + "weaknesses": [ + "Electric", + "Grass" + ], + "weight": { + "minimum": "13.13kg", + "maximum": "16.88kg" + }, + "height": { + "minimum": "0.53m", + "maximum": "0.68m" + }, + "fleeRate": 0.15, + "evolutionRequirements": { + "amount": 50, + "name": "Goldeen candies" + }, + "evolutions": [ + { + "id": 119, + "name": "Seaking" + } + ], + "maxCP": 851, + "maxHP": 965, + "attacks": { + "fast": [ + { + "name": "Mud Shot", + "type": "Ground", + "damage": 6 + }, + { + "name": "Peck", + "type": "Flying", + "damage": 10 + } + ], + "special": [ + { + "name": "Aqua Tail", + "type": "Water", + "damage": 45 + }, + { + "name": "Horn Attack", + "type": "Normal", + "damage": 25 + }, + { + "name": "Water Pulse", + "type": "Water", + "damage": 35 + } + ] + } + }, + { + "id": "119", + "name": "Seaking", + "classification": "Goldfish Pokémon", + "types": [ + "Water" + ], + "resistant": [ + "Fire", + "Water", + "Ice", + "Steel" + ], + "weaknesses": [ + "Electric", + "Grass" + ], + "weight": { + "minimum": "34.13kg", + "maximum": "43.88kg" + }, + "height": { + "minimum": "1.14m", + "maximum": "1.46m" + }, + "fleeRate": 0.07, + "Previous evolution(s)": [ + { + "id": 118, + "name": "Goldeen" + } + ], + "maxCP": 1877, + "maxHP": 2043, + "attacks": { + "fast": [ + { + "name": "Peck", + "type": "Flying", + "damage": 10 + }, + { + "name": "Poison Jab", + "type": "Poison", + "damage": 12 + } + ], + "special": [ + { + "name": "Drill Run", + "type": "Ground", + "damage": 50 + }, + { + "name": "Icy Wind", + "type": "Ice", + "damage": 25 + }, + { + "name": "Megahorn", + "type": "Bug", + "damage": 80 + } + ] + } + }, + { + "id": "120", + "name": "Staryu", + "classification": "Starshape Pokémon", + "types": [ + "Water" + ], + "resistant": [ + "Fire", + "Water", + "Ice", + "Steel" + ], + "weaknesses": [ + "Electric", + "Grass" + ], + "weight": { + "minimum": "30.19kg", + "maximum": "38.81kg" + }, + "height": { + "minimum": "0.7m", + "maximum": "0.9m" + }, + "fleeRate": 0.15, + "evolutionRequirements": { + "amount": 50, + "name": "Staryu candies" + }, + "evolutions": [ + { + "id": 121, + "name": "Starmie" + } + ], + "maxCP": 821, + "maxHP": 937, + "attacks": { + "fast": [ + { + "name": "Quick Attack", + "type": "Normal", + "damage": 10 + }, + { + "name": "Water Gun", + "type": "Water", + "damage": 6 + } + ], + "special": [ + { + "name": "Bubble Beam", + "type": "Water", + "damage": 30 + }, + { + "name": "Power Gem", + "type": "Rock", + "damage": 40 + }, + { + "name": "Swift", + "type": "Normal", + "damage": 30 + } + ] + } + }, + { + "id": "121", + "name": "Starmie", + "classification": "Mysterious Pokémon", + "types": [ + "Water", + "Psychic" + ], + "resistant": [ + "Fire", + "Water", + "Ice", + "Fighting", + "Psychic", + "Steel" + ], + "weaknesses": [ + "Electric", + "Grass", + "Bug", + "Ghost", + "Dark" + ], + "weight": { + "minimum": "70kg", + "maximum": "90kg" + }, + "height": { + "minimum": "0.96m", + "maximum": "1.24m" + }, + "fleeRate": 0.06, + "Previous evolution(s)": [ + { + "id": 120, + "name": "Staryu" + } + ], + "maxCP": 2007, + "maxHP": 2182, + "attacks": { + "fast": [ + { + "name": "Quick Attack", + "type": "Normal", + "damage": 10 + }, + { + "name": "Water Gun", + "type": "Water", + "damage": 6 + } + ], + "special": [ + { + "name": "Hydro Pump", + "type": "Water", + "damage": 90 + }, + { + "name": "Power Gem", + "type": "Rock", + "damage": 40 + }, + { + "name": "Psybeam", + "type": "Psychic", + "damage": 40 + } + ] + } + }, + { + "id": "122", + "name": "Mr. Mime", + "classification": "Barrier Pokémon", + "types": [ + "Psychic", + "Fairy" + ], + "resistant": [ + "Fighting", + "Psychic", + "Dragon" + ], + "weaknesses": [ + "Poison", + "Ghost", + "Steel" + ], + "weight": { + "minimum": "47.69kg", + "maximum": "61.31kg" + }, + "height": { + "minimum": "1.14m", + "maximum": "1.46m" + }, + "fleeRate": 0.09, + "Common Capture Area": "Early reports that this Pokémon is likely to be found in: Western Europe", + "Western Europe": "Common Capture Area", + "maxCP": 1345, + "maxHP": 1494, + "attacks": { + "fast": [ + { + "name": "Confusion", + "type": "Psychic", + "damage": 15 + }, + { + "name": "Zen Headbutt", + "type": "Psychic", + "damage": 12 + } + ], + "special": [ + { + "name": "Psybeam", + "type": "Psychic", + "damage": 40 + }, + { + "name": "Psychic", + "type": "Psychic", + "damage": 55 + }, + { + "name": "Shadow Ball", + "type": "Ghost", + "damage": 45 + } + ] + } + }, + { + "id": "123", + "name": "Scyther", + "classification": "Mantis Pokémon", + "types": [ + "Bug", + "Flying" + ], + "resistant": [ + "Grass", + "Fighting", + "Ground", + "Bug" + ], + "weaknesses": [ + "Fire", + "Electric", + "Ice", + "Flying", + "Rock" + ], + "weight": { + "minimum": "49kg", + "maximum": "63kg" + }, + "height": { + "minimum": "1.31m", + "maximum": "1.69m" + }, + "fleeRate": 0.09, + "maxCP": 1905, + "maxHP": 2073, + "attacks": { + "fast": [ + { + "name": "Fury Cutter", + "type": "Bug", + "damage": 3 + }, + { + "name": "Steel Wing", + "type": "Steel", + "damage": 15 + } + ], + "special": [ + { + "name": "Bug Buzz", + "type": "Bug", + "damage": 75 + }, + { + "name": "Night Slash", + "type": "Dark", + "damage": 30 + }, + { + "name": "X Scissor", + "type": "Bug", + "damage": 35 + } + ] + } + }, + { + "id": "124", + "name": "Jynx", + "classification": "Humanshape Pokémon", + "types": [ + "Ice", + "Psychic" + ], + "resistant": [ + "Ice", + "Psychic" + ], + "weaknesses": [ + "Fire", + "Bug", + "Rock", + "Ghost", + "Dark", + "Steel" + ], + "weight": { + "minimum": "35.52kg", + "maximum": "45.67kg" + }, + "height": { + "minimum": "1.22m", + "maximum": "1.57m" + }, + "fleeRate": 0.09, + "maxCP": 1563, + "maxHP": 1716, + "attacks": { + "fast": [ + { + "name": "Frost Breath", + "type": "Ice", + "damage": 9 + }, + { + "name": "Pound", + "type": "Normal", + "damage": 7 + } + ], + "special": [ + { + "name": "Draining Kiss", + "type": "Fairy", + "damage": 25 + }, + { + "name": "Ice Punch", + "type": "Ice", + "damage": 45 + }, + { + "name": "Psyshock", + "type": "Psychic", + "damage": 40 + } + ] + } + }, + { + "id": "125", + "name": "Electabuzz", + "classification": "Electric Pokémon", + "types": [ + "Electric" + ], + "resistant": [ + "Electric", + "Flying", + "Steel" + ], + "weaknesses": [ + "Ground" + ], + "weight": { + "minimum": "26.25kg", + "maximum": "33.75kg" + }, + "height": { + "minimum": "0.96m", + "maximum": "1.24m" + }, + "fleeRate": 0.09, + "maxCP": 1947, + "maxHP": 2119, + "attacks": { + "fast": [ + { + "name": "Low Kick", + "type": "Fighting", + "damage": 5 + }, + { + "name": "Thunder Shock", + "type": "Electric", + "damage": 5 + } + ], + "special": [ + { + "name": "Thunder", + "type": "Electric", + "damage": 100 + }, + { + "name": "Thunder Punch", + "type": "Electric", + "damage": 40 + }, + { + "name": "Thunderbolt", + "type": "Electric", + "damage": 55 + } + ] + } + }, + { + "id": "126", + "name": "Magmar", + "classification": "Spitfire Pokémon", + "types": [ + "Fire" + ], + "resistant": [ + "Fire", + "Grass", + "Ice", + "Bug", + "Steel", + "Fairy" + ], + "weaknesses": [ + "Water", + "Ground", + "Rock" + ], + "weight": { + "minimum": "38.94kg", + "maximum": "50.06kg" + }, + "height": { + "minimum": "1.14m", + "maximum": "1.46m" + }, + "fleeRate": 0.09, + "maxCP": 2086, + "maxHP": 2265, + "attacks": { + "fast": [ + { + "name": "Ember", + "type": "Fire", + "damage": 10 + }, + { + "name": "Karate Chop", + "type": "Fighting", + "damage": 6 + } + ], + "special": [ + { + "name": "Fire Blast", + "type": "Fire", + "damage": 100 + }, + { + "name": "Fire Punch", + "type": "Fire", + "damage": 40 + }, + { + "name": "Flamethrower", + "type": "Fire", + "damage": 55 + } + ] + } + }, + { + "id": "127", + "name": "Pinsir", + "classification": "Stagbeetle Pokémon", + "types": [ + "Bug" + ], + "resistant": [ + "Grass", + "Fighting", + "Ground" + ], + "weaknesses": [ + "Fire", + "Flying", + "Rock" + ], + "weight": { + "minimum": "48.13kg", + "maximum": "61.88kg" + }, + "height": { + "minimum": "1.31m", + "maximum": "1.69m" + }, + "fleeRate": 0.09, + "maxCP": 1950, + "maxHP": 2121, + "attacks": { + "fast": [ + { + "name": "Fury Cutter", + "type": "Bug", + "damage": 3 + }, + { + "name": "Rock Smash", + "type": "Fighting", + "damage": 15 + } + ], + "special": [ + { + "name": "Submission", + "type": "Fighting", + "damage": 30 + }, + { + "name": "Vice Grip", + "type": "Normal", + "damage": 25 + }, + { + "name": "X Scissor", + "type": "Bug", + "damage": 35 + } + ] + } + }, + { + "id": "128", + "name": "Tauros", + "classification": "Wild Bull Pokémon", + "types": [ + "Normal" + ], + "resistant": [ + "Ghost" + ], + "weaknesses": [ + "Fighting" + ], + "weight": { + "minimum": "77.35kg", + "maximum": "99.45kg" + }, + "height": { + "minimum": "1.22m", + "maximum": "1.57m" + }, + "fleeRate": 0.09, + "Common Capture Area": "Early reports that this Pokémon is likely to be found in: North America", + "North America": "Common Capture Area", + "maxCP": 1686, + "maxHP": 1844, + "attacks": { + "fast": [ + { + "name": "Tackle", + "type": "Normal", + "damage": 12 + }, + { + "name": "Zen Headbutt", + "type": "Psychic", + "damage": 12 + } + ], + "special": [ + { + "name": "Earthquake", + "type": "Ground", + "damage": 100 + }, + { + "name": "Horn Attack", + "type": "Normal", + "damage": 25 + }, + { + "name": "Iron Head", + "type": "Steel", + "damage": 30 + } + ] + } + }, + { + "id": "129", + "name": "Magikarp", + "classification": "Fish Pokémon", + "types": [ + "Water" + ], + "resistant": [ + "Fire", + "Water", + "Ice", + "Steel" + ], + "weaknesses": [ + "Electric", + "Grass" + ], + "weight": { + "minimum": "8.75kg", + "maximum": "11.25kg" + }, + "height": { + "minimum": "0.79m", + "maximum": "1.01m" + }, + "fleeRate": 0.15, + "evolutionRequirements": { + "amount": 400, + "name": "Magikarp candies" + }, + "evolutions": [ + { + "id": 130, + "name": "Gyarados" + } + ], + "maxCP": 203, + "maxHP": 262, + "attacks": { + "fast": [ + { + "name": "Splash", + "type": "Water", + "damage": 0 + } + ], + "special": [ + { + "name": "Struggle", + "type": "Normal", + "damage": 15 + } + ] + } + }, + { + "id": "130", + "name": "Gyarados", + "classification": "Atrocious Pokémon", + "types": [ + "Water", + "Flying" + ], + "resistant": [ + "Fire", + "Water", + "Fighting", + "Ground", + "Bug", + "Steel" + ], + "weaknesses": [ + "Electric", + "Rock" + ], + "weight": { + "minimum": "205.63kg", + "maximum": "264.38kg" + }, + "height": { + "minimum": "5.69m", + "maximum": "7.31m" + }, + "fleeRate": 0.07, + "Previous evolution(s)": [ + { + "id": 129, + "name": "Magikarp" + } + ], + "maxCP": 2498, + "maxHP": 2688, + "attacks": { + "fast": [ + { + "name": "Bite", + "type": "Dark", + "damage": 6 + }, + { + "name": "Dragon Breath", + "type": "Dragon", + "damage": 6 + } + ], + "special": [ + { + "name": "Dragon Pulse", + "type": "Dragon", + "damage": 65 + }, + { + "name": "Hydro Pump", + "type": "Water", + "damage": 90 + }, + { + "name": "Twister", + "type": "Dragon", + "damage": 25 + } + ] + } + }, + { + "id": "131", + "name": "Lapras", + "classification": "Transport Pokémon", + "types": [ + "Water", + "Ice" + ], + "resistant": [ + "Water", + "Ice" + ], + "weaknesses": [ + "Electric", + "Grass", + "Fighting", + "Rock" + ], + "weight": { + "minimum": "192.5kg", + "maximum": "247.5kg" + }, + "height": { + "minimum": "2.19m", + "maximum": "2.81m" + }, + "fleeRate": 0.09, + "maxCP": 2777, + "maxHP": 2980, + "attacks": { + "fast": [ + { + "name": "Frost Breath", + "type": "Ice", + "damage": 9 + }, + { + "name": "Ice Shard", + "type": "Ice", + "damage": 15 + } + ], + "special": [ + { + "name": "Blizzard", + "type": "Ice", + "damage": 100 + }, + { + "name": "Dragon Pulse", + "type": "Dragon", + "damage": 65 + }, + { + "name": "Ice Beam", + "type": "Ice", + "damage": 65 + } + ] + } + }, + { + "id": "132", + "name": "Ditto", + "classification": "Transform Pokémon", + "types": [ + "Normal" + ], + "resistant": [ + "Ghost" + ], + "weaknesses": [ + "Fighting" + ], + "weight": { + "minimum": "3.5kg", + "maximum": "4.5kg" + }, + "height": { + "minimum": "0.26m", + "maximum": "0.34m" + }, + "fleeRate": 0.1, + "maxCP": 809, + "maxHP": 919, + "attacks": { + "fast": [ + { + "name": "Pound", + "type": "Normal", + "damage": 7 + } + ], + "special": [ + { + "name": "Struggle", + "type": "Normal", + "damage": 15 + } + ] + } + }, + { + "id": "133", + "name": "Eevee", + "classification": "Evolution Pokémon", + "types": [ + "Normal" + ], + "resistant": [ + "Ghost" + ], + "weaknesses": [ + "Fighting" + ], + "weight": { + "minimum": "5.69kg", + "maximum": "7.31kg" + }, + "height": { + "minimum": "0.26m", + "maximum": "0.34m" + }, + "fleeRate": 0.1, + "evolutionRequirements": { + "amount": 25, + "name": "Eevee candies" + }, + "evolutions": [ + { + "id": 134, + "name": "Vaporeon" + }, + { + "id": 135, + "name": "Jolteon" + }, + { + "id": 136, + "name": "Flareon" + } + ], + "maxCP": 957, + "maxHP": 1077, + "attacks": { + "fast": [ + { + "name": "Quick Attack", + "type": "Normal", + "damage": 10 + }, + { + "name": "Tackle", + "type": "Normal", + "damage": 12 + } + ], + "special": [ + { + "name": "Body Slam", + "type": "Normal", + "damage": 40 + }, + { + "name": "Dig", + "type": "Ground", + "damage": 70 + }, + { + "name": "Swift", + "type": "Normal", + "damage": 30 + } + ] + } + }, + { + "id": "134", + "name": "Vaporeon", + "classification": "Bubble Jet Pokémon", + "types": [ + "Water" + ], + "resistant": [ + "Fire", + "Water", + "Ice", + "Steel" + ], + "weaknesses": [ + "Electric", + "Grass" + ], + "weight": { + "minimum": "25.38kg", + "maximum": "32.63kg" + }, + "height": { + "minimum": "0.88m", + "maximum": "1.13m" + }, + "fleeRate": 0.06, + "Previous evolution(s)": [ + { + "id": 133, + "name": "Eevee" + } + ], + "maxCP": 2618, + "maxHP": 2816, + "attacks": { + "fast": [ + { + "name": "Water Gun", + "type": "Water", + "damage": 6 + } + ], + "special": [ + { + "name": "Aqua Tail", + "type": "Water", + "damage": 45 + }, + { + "name": "Hydro Pump", + "type": "Water", + "damage": 90 + }, + { + "name": "Water Pulse", + "type": "Water", + "damage": 35 + } + ] + } + }, + { + "id": "135", + "name": "Jolteon", + "classification": "Lightning Pokémon", + "types": [ + "Electric" + ], + "resistant": [ + "Electric", + "Flying", + "Steel" + ], + "weaknesses": [ + "Ground" + ], + "weight": { + "minimum": "21.44kg", + "maximum": "27.56kg" + }, + "height": { + "minimum": "0.7m", + "maximum": "0.9m" + }, + "fleeRate": 0.06, + "Previous evolution(s)": [ + { + "id": 133, + "name": "Eevee" + } + ], + "maxCP": 1968, + "maxHP": 2140, + "attacks": { + "fast": [ + { + "name": "Thunder Shock", + "type": "Electric", + "damage": 5 + } + ], + "special": [ + { + "name": "Discharge", + "type": "Electric", + "damage": 35 + }, + { + "name": "Thunder", + "type": "Electric", + "damage": 100 + }, + { + "name": "Thunderbolt", + "type": "Electric", + "damage": 55 + } + ] + } + }, + { + "id": "136", + "name": "Flareon", + "classification": "Flame Pokémon", + "types": [ + "Fire" + ], + "resistant": [ + "Fire", + "Grass", + "Ice", + "Bug", + "Steel", + "Fairy" + ], + "weaknesses": [ + "Water", + "Ground", + "Rock" + ], + "weight": { + "minimum": "21.88kg", + "maximum": "28.13kg" + }, + "height": { + "minimum": "0.79m", + "maximum": "1.01m" + }, + "fleeRate": 0.06, + "Previous evolution(s)": [ + { + "id": 133, + "name": "Eevee" + } + ], + "maxCP": 2448, + "maxHP": 2643, + "attacks": { + "fast": [ + { + "name": "Ember", + "type": "Fire", + "damage": 10 + } + ], + "special": [ + { + "name": "Fire Blast", + "type": "Fire", + "damage": 100 + }, + { + "name": "Flamethrower", + "type": "Fire", + "damage": 55 + }, + { + "name": "Heat Wave", + "type": "Fire", + "damage": 80 + } + ] + } + }, + { + "id": "137", + "name": "Porygon", + "classification": "Virtual Pokémon", + "types": [ + "Normal" + ], + "resistant": [ + "Ghost" + ], + "weaknesses": [ + "Fighting" + ], + "weight": { + "minimum": "31.94kg", + "maximum": "41.06kg" + }, + "height": { + "minimum": "0.7m", + "maximum": "0.9m" + }, + "fleeRate": 0.09, + "maxCP": 1540, + "maxHP": 1691, + "attacks": { + "fast": [ + { + "name": "Quick Attack", + "type": "Normal", + "damage": 10 + }, + { + "name": "Tackle", + "type": "Normal", + "damage": 12 + } + ], + "special": [ + { + "name": "Discharge", + "type": "Electric", + "damage": 35 + }, + { + "name": "Psybeam", + "type": "Psychic", + "damage": 40 + }, + { + "name": "Signal Beam", + "type": "Bug", + "damage": 45 + } + ] + } + }, + { + "id": "138", + "name": "Omanyte", + "classification": "Spiral Pokémon", + "types": [ + "Rock", + "Water" + ], + "resistant": [ + "Normal", + "Fire", + "Ice", + "Poison", + "Flying" + ], + "weaknesses": [ + "Electric", + "Grass", + "Fighting", + "Ground" + ], + "weight": { + "minimum": "6.56kg", + "maximum": "8.44kg" + }, + "height": { + "minimum": "0.35m", + "maximum": "0.45m" + }, + "fleeRate": 0.09, + "evolutionRequirements": { + "amount": 50, + "name": "Omanyte candies" + }, + "evolutions": [ + { + "id": 139, + "name": "Omastar" + } + ], + "maxCP": 992, + "maxHP": 1119, + "attacks": { + "fast": [ + { + "name": "Mud Shot", + "type": "Ground", + "damage": 6 + }, + { + "name": "Water Gun", + "type": "Water", + "damage": 6 + } + ], + "special": [ + { + "name": "Ancient Power", + "type": "Rock", + "damage": 35 + }, + { + "name": "Brine", + "type": "Water", + "damage": 25 + }, + { + "name": "Rock Tomb", + "type": "Rock", + "damage": 30 + } + ] + } + }, + { + "id": "139", + "name": "Omastar", + "classification": "Spiral Pokémon", + "types": [ + "Rock", + "Water" + ], + "resistant": [ + "Normal", + "Fire", + "Ice", + "Poison", + "Flying" + ], + "weaknesses": [ + "Electric", + "Grass", + "Fighting", + "Ground" + ], + "weight": { + "minimum": "30.63kg", + "maximum": "39.38kg" + }, + "height": { + "minimum": "0.88m", + "maximum": "1.13m" + }, + "fleeRate": 0.05, + "Previous evolution(s)": [ + { + "id": 138, + "name": "Omanyte" + } + ], + "maxCP": 2058, + "maxHP": 2233, + "attacks": { + "fast": [ + { + "name": "Rock Throw", + "type": "Rock", + "damage": 12 + }, + { + "name": "Water Gun", + "type": "Water", + "damage": 6 + } + ], + "special": [ + { + "name": "Ancient Power", + "type": "Rock", + "damage": 35 + }, + { + "name": "Hydro Pump", + "type": "Water", + "damage": 90 + }, + { + "name": "Rock Slide", + "type": "Rock", + "damage": 50 + } + ] + } + }, + { + "id": "140", + "name": "Kabuto", + "classification": "Shellfish Pokémon", + "types": [ + "Rock", + "Water" + ], + "resistant": [ + "Normal", + "Fire", + "Ice", + "Poison", + "Flying" + ], + "weaknesses": [ + "Electric", + "Grass", + "Fighting", + "Ground" + ], + "weight": { + "minimum": "10.06kg", + "maximum": "12.94kg" + }, + "height": { + "minimum": "0.44m", + "maximum": "0.56m" + }, + "fleeRate": 0.09, + "evolutionRequirements": { + "amount": 50, + "name": "Kabuto candies" + }, + "evolutions": [ + { + "id": 141, + "name": "Kabutops" + } + ], + "maxCP": 975, + "maxHP": 1104, + "attacks": { + "fast": [ + { + "name": "Mud Shot", + "type": "Ground", + "damage": 6 + }, + { + "name": "Scratch", + "type": "Normal", + "damage": 6 + } + ], + "special": [ + { + "name": "Ancient Power", + "type": "Rock", + "damage": 35 + }, + { + "name": "Aqua Jet", + "type": "Water", + "damage": 25 + }, + { + "name": "Rock Tomb", + "type": "Rock", + "damage": 30 + } + ] + } + }, + { + "id": "141", + "name": "Kabutops", + "classification": "Shellfish Pokémon", + "types": [ + "Rock", + "Water" + ], + "resistant": [ + "Normal", + "Fire", + "Ice", + "Poison", + "Flying" + ], + "weaknesses": [ + "Electric", + "Grass", + "Fighting", + "Ground" + ], + "weight": { + "minimum": "35.44kg", + "maximum": "45.56kg" + }, + "height": { + "minimum": "1.14m", + "maximum": "1.46m" + }, + "fleeRate": 0.05, + "Previous evolution(s)": [ + { + "id": 140, + "name": "Kabuto" + } + ], + "maxCP": 1957, + "maxHP": 2130, + "attacks": { + "fast": [ + { + "name": "Fury Cutter", + "type": "Bug", + "damage": 3 + }, + { + "name": "Mud Shot", + "type": "Ground", + "damage": 6 + } + ], + "special": [ + { + "name": "Ancient Power", + "type": "Rock", + "damage": 35 + }, + { + "name": "Stone Edge", + "type": "Rock", + "damage": 80 + }, + { + "name": "Water Pulse", + "type": "Water", + "damage": 35 + } + ] + } + }, + { + "id": "142", + "name": "Aerodactyl", + "classification": "Fossil Pokémon", + "types": [ + "Rock", + "Flying" + ], + "resistant": [ + "Normal", + "Fire", + "Poison", + "Flying", + "Bug" + ], + "weaknesses": [ + "Water", + "Electric", + "Ice", + "Rock", + "Steel" + ], + "weight": { + "minimum": "51.63kg", + "maximum": "66.38kg" + }, + "height": { + "minimum": "1.57m", + "maximum": "2.02m" + }, + "fleeRate": 0.09, + "maxCP": 1994, + "maxHP": 2165, + "attacks": { + "fast": [ + { + "name": "Bite", + "type": "Dark", + "damage": 6 + }, + { + "name": "Steel Wing", + "type": "Steel", + "damage": 15 + } + ], + "special": [ + { + "name": "Ancient Power", + "type": "Rock", + "damage": 35 + }, + { + "name": "Hyper Beam", + "type": "Normal", + "damage": 120 + }, + { + "name": "Iron Head", + "type": "Steel", + "damage": 30 + } + ] + } + }, + { + "id": "143", + "name": "Snorlax", + "classification": "Sleeping Pokémon", + "types": [ + "Normal" + ], + "resistant": [ + "Ghost" + ], + "weaknesses": [ + "Fighting" + ], + "weight": { + "minimum": "402.5kg", + "maximum": "517.5kg" + }, + "height": { + "minimum": "1.84m", + "maximum": "2.36m" + }, + "fleeRate": 0.09, + "maxCP": 2901, + "maxHP": 3112, + "attacks": { + "fast": [ + { + "name": "Lick", + "type": "Ghost", + "damage": 5 + }, + { + "name": "Zen Headbutt", + "type": "Psychic", + "damage": 12 + } + ], + "special": [ + { + "name": "Body Slam", + "type": "Normal", + "damage": 40 + }, + { + "name": "Earthquake", + "type": "Ground", + "damage": 100 + }, + { + "name": "Hyper Beam", + "type": "Normal", + "damage": 120 + } + ] + } + }, + { + "id": "144", + "name": "Articuno", + "classification": "Freeze Pokémon", + "types": [ + "Ice", + "Flying" + ], + "resistant": [ + "Grass", + "Ground", + "Bug" + ], + "weaknesses": [ + "Fire", + "Electric", + "Rock", + "Steel" + ], + "weight": { + "minimum": "48.48kg", + "maximum": "62.33kg" + }, + "height": { + "minimum": "1.49m", + "maximum": "1.91m" + }, + "fleeRate": 0.1, + "Pokémon Class": "This is a LEGENDARY Pokémon.", + "LEGENDARY": "Pokémon Class", + "maxCP": 2776, + "maxHP": 2978, + "attacks": { + "fast": [ + { + "name": "Frost Breath", + "type": "Ice", + "damage": 9 + } + ], + "special": [ + { + "name": "Blizzard", + "type": "Ice", + "damage": 100 + }, + { + "name": "Ice Beam", + "type": "Ice", + "damage": 65 + }, + { + "name": "Icy Wind", + "type": "Ice", + "damage": 25 + } + ] + } + }, + { + "id": "145", + "name": "Zapdos", + "classification": "Electric Pokémon", + "types": [ + "Electric", + "Flying" + ], + "resistant": [ + "Grass", + "Fighting", + "Flying", + "Bug", + "Steel" + ], + "weaknesses": [ + "Ice", + "Rock" + ], + "weight": { + "minimum": "46.02kg", + "maximum": "59.17kg" + }, + "height": { + "minimum": "1.4m", + "maximum": "1.8m" + }, + "fleeRate": 0.1, + "Pokémon Class": "This is a LEGENDARY Pokémon.", + "LEGENDARY": "Pokémon Class", + "maxCP": 2907, + "maxHP": 3114, + "attacks": { + "fast": [ + { + "name": "Thunder Shock", + "type": "Electric", + "damage": 5 + } + ], + "special": [ + { + "name": "Discharge", + "type": "Electric", + "damage": 35 + }, + { + "name": "Thunder", + "type": "Electric", + "damage": 100 + }, + { + "name": "Thunderbolt", + "type": "Electric", + "damage": 55 + } + ] + } + }, + { + "id": "146", + "name": "Moltres", + "classification": "Flame Pokémon", + "types": [ + "Fire", + "Flying" + ], + "resistant": [ + "Fire", + "Grass", + "Fighting", + "Bug", + "Steel", + "Fairy" + ], + "weaknesses": [ + "Water", + "Electric", + "Rock" + ], + "weight": { + "minimum": "52.5kg", + "maximum": "67.5kg" + }, + "height": { + "minimum": "1.75m", + "maximum": "2.25m" + }, + "fleeRate": 0.1, + "Pokémon Class": "This is a LEGENDARY Pokémon.", + "LEGENDARY": "Pokémon Class", + "maxCP": 3028, + "maxHP": 3240, + "attacks": { + "fast": [ + { + "name": "Ember", + "type": "Fire", + "damage": 10 + } + ], + "special": [ + { + "name": "Fire Blast", + "type": "Fire", + "damage": 100 + }, + { + "name": "Flamethrower", + "type": "Fire", + "damage": 55 + }, + { + "name": "Heat Wave", + "type": "Fire", + "damage": 80 + } + ] + } + }, + { + "id": "147", + "name": "Dratini", + "classification": "Dragon Pokémon", + "types": [ + "Dragon" + ], + "resistant": [ + "Fire", + "Water", + "Electric", + "Grass" + ], + "weaknesses": [ + "Ice", + "Dragon", + "Fairy" + ], + "weight": { + "minimum": "2.89kg", + "maximum": "3.71kg" + }, + "height": { + "minimum": "1.57m", + "maximum": "2.02m" + }, + "fleeRate": 0.09, + "evolutionRequirements": { + "amount": 25, + "name": "Dratini candies" + }, + "evolutions": [ + { + "id": 148, + "name": "Dragonair" + } + ], + "maxCP": 867, + "maxHP": 983, + "attacks": { + "fast": [ + { + "name": "Dragon Breath", + "type": "Dragon", + "damage": 6 + } + ], + "special": [ + { + "name": "Aqua Tail", + "type": "Water", + "damage": 45 + }, + { + "name": "Twister", + "type": "Dragon", + "damage": 25 + }, + { + "name": "Wrap", + "type": "Normal", + "damage": 25 + } + ] + } + }, + { + "id": "148", + "name": "Dragonair", + "classification": "Dragon Pokémon", + "types": [ + "Dragon" + ], + "resistant": [ + "Fire", + "Water", + "Electric", + "Grass" + ], + "weaknesses": [ + "Ice", + "Dragon", + "Fairy" + ], + "weight": { + "minimum": "14.44kg", + "maximum": "18.56kg" + }, + "height": { + "minimum": "3.5m", + "maximum": "4.5m" + }, + "fleeRate": 0.06, + "Previous evolution(s)": [ + { + "id": 147, + "name": "Dratini" + } + ], + "evolutionRequirements": { + "amount": 100, + "name": "Dratini candies" + }, + "evolutions": [ + { + "id": 149, + "name": "Dragonite" + } + ], + "maxCP": 1593, + "maxHP": 1747, + "attacks": { + "fast": [ + { + "name": "Dragon Breath", + "type": "Dragon", + "damage": 6 + } + ], + "special": [ + { + "name": "Aqua Tail", + "type": "Water", + "damage": 45 + }, + { + "name": "Dragon Pulse", + "type": "Dragon", + "damage": 65 + }, + { + "name": "Wrap", + "type": "Normal", + "damage": 25 + } + ] + } + }, + { + "id": "149", + "name": "Dragonite", + "classification": "Dragon Pokémon", + "types": [ + "Dragon", + "Flying" + ], + "resistant": [ + "Fire", + "Water", + "Grass", + "Fighting", + "Ground", + "Bug" + ], + "weaknesses": [ + "Ice", + "Rock", + "Dragon", + "Fairy" + ], + "weight": { + "minimum": "183.75kg", + "maximum": "236.25kg" + }, + "height": { + "minimum": "1.93m", + "maximum": "2.48m" + }, + "fleeRate": 0.05, + "Previous evolution(s)": [ + { + "id": 147, + "name": "Dratini" + }, + { + "id": 148, + "name": "Dragonair" + } + ], + "maxCP": 3280, + "maxHP": 3500, + "attacks": { + "fast": [ + { + "name": "Dragon Breath", + "type": "Dragon", + "damage": 6 + }, + { + "name": "Steel Wing", + "type": "Steel", + "damage": 15 + } + ], + "special": [ + { + "name": "Dragon Claw", + "type": "Dragon", + "damage": 35 + }, + { + "name": "Dragon Pulse", + "type": "Dragon", + "damage": 65 + }, + { + "name": "Hyper Beam", + "type": "Normal", + "damage": 120 + } + ] + } + }, + { + "id": "150", + "name": "Mewtwo", + "classification": "Genetic Pokémon", + "types": [ + "Psychic" + ], + "resistant": [ + "Fighting", + "Psychic" + ], + "weaknesses": [ + "Bug", + "Ghost", + "Dark" + ], + "weight": { + "minimum": "106.75kg", + "maximum": "137.25kg" + }, + "height": { + "minimum": "1.75m", + "maximum": "2.25m" + }, + "fleeRate": 0.1, + "Pokémon Class": "This is a LEGENDARY Pokémon.", + "LEGENDARY": "Pokémon Class", + "maxCP": 3904, + "maxHP": 4144, + "attacks": { + "fast": [ + { + "name": "Confusion", + "type": "Psychic", + "damage": 15 + }, + { + "name": "Psycho Cut", + "type": "Psychic", + "damage": 7 + } + ], + "special": [ + { + "name": "Hyper Beam", + "type": "Normal", + "damage": 120 + }, + { + "name": "Psychic", + "type": "Psychic", + "damage": 55 + }, + { + "name": "Shadow Ball", + "type": "Ghost", + "damage": 45 + } + ] + } + }, + { + "id": "151", + "name": "Mew", + "classification": "New Species Pokémon", + "types": [ + "Psychic" + ], + "resistant": [ + "Fighting", + "Psychic" + ], + "weaknesses": [ + "Bug", + "Ghost", + "Dark" + ], + "weight": { + "minimum": "3.5kg", + "maximum": "4.5kg" + }, + "height": { + "minimum": "0.35m", + "maximum": "0.45m" + }, + "fleeRate": 0.1, + "Pokémon Class": "This is a MYTHIC Pokémon.", + "MYTHIC": "Pokémon Class", + "maxCP": 3087, + "maxHP": 3299, + "attacks": { + "fast": [ + { + "name": "Pound", + "type": "Normal", + "damage": 7 + } + ], + "special": [ + { + "name": "Dragon Pulse", + "type": "Dragon", + "damage": 65 + }, + { + "name": "Earthquake", + "type": "Ground", + "damage": 100 + }, + { + "name": "Fire Blast", + "type": "Fire", + "damage": 100 + }, + { + "name": "Hurricane", + "type": "Flying", + "damage": 80 + }, + { + "name": "Hyper Beam", + "type": "Normal", + "damage": 120 + }, + { + "name": "Moonblast", + "type": "Fairy", + "damage": 85 + }, + { + "name": "Psychic", + "type": "Psychic", + "damage": 55 + }, + { + "name": "Solar Beam", + "type": "Grass", + "damage": 120 + }, + { + "name": "Thunder", + "type": "Electric", + "damage": 100 + } + ] + } + } + ] +} diff --git a/dist/src/app/assets/templates.json b/dist/src/app/assets/templates.json new file mode 100644 index 0000000..a94e1ce --- /dev/null +++ b/dist/src/app/assets/templates.json @@ -0,0 +1,27 @@ +[ + { + "fileName": "users", + "name": "User List", + "description": "Realistic sample user data for testing authentication systems, user management features" + }, + { + "fileName": "posts", + "name": "Blog Posts", + "description": "Sample blog post data for testing CMS features, content management, and publishing workflows." + }, + { + "fileName": "events", + "name": "Event List", + "description": "Sample event data for testing calendar features, registrations, and event management." + }, + { + "fileName": "pokemon", + "name": "Pokémon Info", + "description": "The original 150 Pokémon, complete with their stats, classifications, evolutions, and attacks." + }, + { + "fileName": "airports", + "name": "World Airports", + "description": "Top 30 busiest international airports with IATA codes and coordinates." + } +] diff --git a/dist/src/app/assets/templates/pokemon.json b/dist/src/app/assets/templates/pokemon.json new file mode 100644 index 0000000..03270ff --- /dev/null +++ b/dist/src/app/assets/templates/pokemon.json @@ -0,0 +1,10531 @@ +{ + "generation001": [ + { + "id": "001", + "name": "Bulbasaur", + "classification": "Seed Pokémon", + "types": [ + "Grass", + "Poison" + ], + "resistant": [ + "Water", + "Electric", + "Grass", + "Fighting", + "Fairy" + ], + "weaknesses": [ + "Fire", + "Ice", + "Flying", + "Psychic" + ], + "weight": { + "minimum": "6.04kg", + "maximum": "7.76kg" + }, + "height": { + "minimum": "0.61m", + "maximum": "0.79m" + }, + "fleeRate": 0.1, + "evolutionRequirements": { + "amount": 25, + "name": "Bulbasaur candies" + }, + "evolutions": [ + { + "id": 2, + "name": "Ivysaur" + }, + { + "id": 3, + "name": "Venusaur" + } + ], + "maxCP": 951, + "maxHP": 1071, + "attacks": { + "fast": [ + { + "name": "Tackle", + "type": "Normal", + "damage": 12 + }, + { + "name": "Vine Whip", + "type": "Grass", + "damage": 7 + } + ], + "special": [ + { + "name": "Power Whip", + "type": "Grass", + "damage": 70 + }, + { + "name": "Seed Bomb", + "type": "Grass", + "damage": 40 + }, + { + "name": "Sludge Bomb", + "type": "Poison", + "damage": 55 + } + ] + } + }, + { + "id": "002", + "name": "Ivysaur", + "classification": "Seed Pokémon", + "types": [ + "Grass", + "Poison" + ], + "resistant": [ + "Water", + "Electric", + "Grass", + "Fighting", + "Fairy" + ], + "weaknesses": [ + "Fire", + "Ice", + "Flying", + "Psychic" + ], + "weight": { + "minimum": "11.38kg", + "maximum": "14.63kg" + }, + "height": { + "minimum": "0.88m", + "maximum": "1.13m" + }, + "fleeRate": 0.07, + "Previous evolution(s)": [ + { + "id": 1, + "name": "Bulbasaur" + } + ], + "evolutionRequirements": { + "amount": 100, + "name": "Bulbasaur candies" + }, + "evolutions": [ + { + "id": 3, + "name": "Venusaur" + } + ], + "maxCP": 1483, + "maxHP": 1632, + "attacks": { + "fast": [ + { + "name": "Razor Leaf", + "type": "Grass", + "damage": 15 + }, + { + "name": "Vine Whip", + "type": "Grass", + "damage": 7 + } + ], + "special": [ + { + "name": "Power Whip", + "type": "Grass", + "damage": 70 + }, + { + "name": "Sludge Bomb", + "type": "Poison", + "damage": 55 + }, + { + "name": "Solar Beam", + "type": "Grass", + "damage": 120 + } + ] + } + }, + { + "id": "003", + "name": "Venusaur", + "classification": "Seed Pokémon", + "types": [ + "Grass", + "Poison" + ], + "resistant": [ + "Water", + "Electric", + "Grass", + "Fighting", + "Fairy" + ], + "weaknesses": [ + "Fire", + "Ice", + "Flying", + "Psychic" + ], + "weight": { + "minimum": "87.5kg", + "maximum": "112.5kg" + }, + "height": { + "minimum": "1.75m", + "maximum": "2.25m" + }, + "fleeRate": 0.05, + "Previous evolution(s)": [ + { + "id": 1, + "name": "Bulbasaur" + }, + { + "id": 2, + "name": "Ivysaur" + } + ], + "maxCP": 2392, + "maxHP": 2580, + "attacks": { + "fast": [ + { + "name": "Razor Leaf", + "type": "Grass", + "damage": 15 + }, + { + "name": "Vine Whip", + "type": "Grass", + "damage": 7 + } + ], + "special": [ + { + "name": "Petal Blizzard", + "type": "Grass", + "damage": 65 + }, + { + "name": "Sludge Bomb", + "type": "Poison", + "damage": 55 + }, + { + "name": "Solar Beam", + "type": "Grass", + "damage": 120 + } + ] + } + }, + { + "id": "004", + "name": "Charmander", + "classification": "Lizard Pokémon", + "types": [ + "Fire" + ], + "resistant": [ + "Fire", + "Grass", + "Ice", + "Bug", + "Steel", + "Fairy" + ], + "weaknesses": [ + "Water", + "Ground", + "Rock" + ], + "weight": { + "minimum": "7.44kg", + "maximum": "9.56kg" + }, + "height": { + "minimum": "0.53m", + "maximum": "0.68m" + }, + "fleeRate": 0.1, + "evolutionRequirements": { + "amount": 25, + "name": "Charmander candies" + }, + "evolutions": [ + { + "id": 5, + "name": "Charmeleon" + }, + { + "id": 6, + "name": "Charizard" + } + ], + "maxCP": 841, + "maxHP": 955, + "attacks": { + "fast": [ + { + "name": "Ember", + "type": "Fire", + "damage": 10 + }, + { + "name": "Scratch", + "type": "Normal", + "damage": 6 + } + ], + "special": [ + { + "name": "Flame Burst", + "type": "Fire", + "damage": 30 + }, + { + "name": "Flame Charge", + "type": "Fire", + "damage": 25 + }, + { + "name": "Flamethrower", + "type": "Fire", + "damage": 55 + } + ] + } + }, + { + "id": "005", + "name": "Charmeleon", + "classification": "Flame Pokémon", + "types": [ + "Fire" + ], + "resistant": [ + "Fire", + "Grass", + "Ice", + "Bug", + "Steel", + "Fairy" + ], + "weaknesses": [ + "Water", + "Ground", + "Rock" + ], + "weight": { + "minimum": "16.63kg", + "maximum": "21.38kg" + }, + "height": { + "minimum": "0.96m", + "maximum": "1.24m" + }, + "fleeRate": 0.07, + "Previous evolution(s)": [ + { + "id": 4, + "name": "Charmander" + } + ], + "evolutionRequirements": { + "amount": 100, + "name": "Charmander candies" + }, + "evolutions": [ + { + "id": 6, + "name": "Charizard" + } + ], + "maxCP": 1411, + "maxHP": 1557, + "attacks": { + "fast": [ + { + "name": "Ember", + "type": "Fire", + "damage": 10 + }, + { + "name": "Scratch", + "type": "Normal", + "damage": 6 + } + ], + "special": [ + { + "name": "Fire Punch", + "type": "Fire", + "damage": 40 + }, + { + "name": "Flame Burst", + "type": "Fire", + "damage": 30 + }, + { + "name": "Flamethrower", + "type": "Fire", + "damage": 55 + } + ] + } + }, + { + "id": "006", + "name": "Charizard", + "classification": "Flame Pokémon", + "types": [ + "Fire", + "Flying" + ], + "resistant": [ + "Fire", + "Grass", + "Fighting", + "Bug", + "Steel", + "Fairy" + ], + "weaknesses": [ + "Water", + "Electric", + "Rock" + ], + "weight": { + "minimum": "79.19kg", + "maximum": "101.81kg" + }, + "height": { + "minimum": "1.49m", + "maximum": "1.91m" + }, + "fleeRate": 0.05, + "Previous evolution(s)": [ + { + "id": 4, + "name": "Charmander" + }, + { + "id": 5, + "name": "Charmeleon" + } + ], + "maxCP": 2413, + "maxHP": 2602, + "attacks": { + "fast": [ + { + "name": "Ember", + "type": "Fire", + "damage": 10 + }, + { + "name": "Wing Attack", + "type": "Flying", + "damage": 9 + } + ], + "special": [ + { + "name": "Dragon Claw", + "type": "Dragon", + "damage": 35 + }, + { + "name": "Fire Blast", + "type": "Fire", + "damage": 100 + }, + { + "name": "Flamethrower", + "type": "Fire", + "damage": 55 + } + ] + } + }, + { + "id": "007", + "name": "Squirtle", + "classification": "Tiny Turtle Pokémon", + "types": [ + "Water" + ], + "resistant": [ + "Fire", + "Water", + "Ice", + "Steel" + ], + "weaknesses": [ + "Electric", + "Grass" + ], + "weight": { + "minimum": "7.88kg", + "maximum": "10.13kg" + }, + "height": { + "minimum": "0.44m", + "maximum": "0.56m" + }, + "fleeRate": 0.1, + "evolutionRequirements": { + "amount": 25, + "name": "Squirtle candies" + }, + "evolutions": [ + { + "id": 8, + "name": "Wartortle" + }, + { + "id": 9, + "name": "Blastoise" + } + ], + "maxCP": 891, + "maxHP": 1008, + "attacks": { + "fast": [ + { + "name": "Bubble", + "type": "Water", + "damage": 25 + }, + { + "name": "Tackle", + "type": "Normal", + "damage": 12 + } + ], + "special": [ + { + "name": "Aqua Jet", + "type": "Water", + "damage": 25 + }, + { + "name": "Aqua Tail", + "type": "Water", + "damage": 45 + }, + { + "name": "Water Pulse", + "type": "Water", + "damage": 35 + } + ] + } + }, + { + "id": "008", + "name": "Wartortle", + "classification": "Turtle Pokémon", + "types": [ + "Water" + ], + "resistant": [ + "Fire", + "Water", + "Ice", + "Steel" + ], + "weaknesses": [ + "Electric", + "Grass" + ], + "weight": { + "minimum": "19.69kg", + "maximum": "25.31kg" + }, + "height": { + "minimum": "0.88m", + "maximum": "1.13m" + }, + "fleeRate": 0.07, + "Previous evolution(s)": [ + { + "id": 7, + "name": "Squirtle" + } + ], + "evolutionRequirements": { + "amount": 100, + "name": "Squirtle candies" + }, + "evolutions": [ + { + "id": 9, + "name": "Blastoise" + } + ], + "maxCP": 1435, + "maxHP": 1582, + "attacks": { + "fast": [ + { + "name": "Bite", + "type": "Dark", + "damage": 6 + }, + { + "name": "Water Gun", + "type": "Water", + "damage": 6 + } + ], + "special": [ + { + "name": "Aqua Jet", + "type": "Water", + "damage": 25 + }, + { + "name": "Gunk Shot", + "type": "Poison", + "damage": 65 + }, + { + "name": "Hydro Pump", + "type": "Water", + "damage": 90 + }, + { + "name": "Ice Beam", + "type": "Ice", + "damage": 65 + } + ] + } + }, + { + "id": "009", + "name": "Blastoise", + "classification": "Shellfish Pokémon", + "types": [ + "Water" + ], + "resistant": [ + "Fire", + "Water", + "Ice", + "Steel" + ], + "weaknesses": [ + "Electric", + "Grass" + ], + "weight": { + "minimum": "74.81kg", + "maximum": "96.19kg" + }, + "height": { + "minimum": "1.4m", + "maximum": "1.8m" + }, + "fleeRate": 0.05, + "Previous evolution(s)": [ + { + "id": 7, + "name": "Squirtle" + }, + { + "id": 8, + "name": "Wartortle" + } + ], + "maxCP": 2355, + "maxHP": 2542, + "attacks": { + "fast": [ + { + "name": "Bite", + "type": "Dark", + "damage": 6 + }, + { + "name": "Water Gun", + "type": "Water", + "damage": 6 + } + ], + "special": [ + { + "name": "Flash Cannon", + "type": "Steel", + "damage": 60 + }, + { + "name": "Gunk Shot", + "type": "Poison", + "damage": 65 + }, + { + "name": "Hydro Pump", + "type": "Water", + "damage": 90 + }, + { + "name": "Ice Beam", + "type": "Ice", + "damage": 65 + } + ] + } + }, + { + "id": "010", + "name": "Caterpie", + "classification": "Worm Pokémon", + "types": [ + "Bug" + ], + "resistant": [ + "Grass", + "Fighting", + "Ground" + ], + "weaknesses": [ + "Fire", + "Flying", + "Rock" + ], + "weight": { + "minimum": "2.54kg", + "maximum": "3.26kg" + }, + "height": { + "minimum": "0.26m", + "maximum": "0.34m" + }, + "fleeRate": 0.2, + "evolutionRequirements": { + "amount": 12, + "name": "Caterpie candies" + }, + "evolutions": [ + { + "id": 11, + "name": "Metapod" + }, + { + "id": 12, + "name": "Butterfree" + } + ], + "maxCP": 367, + "maxHP": 443, + "attacks": { + "fast": [ + { + "name": "Bug Bite", + "type": "Bug", + "damage": 5 + }, + { + "name": "Tackle", + "type": "Normal", + "damage": 12 + } + ], + "special": [ + { + "name": "Struggle", + "type": "Normal", + "damage": 15 + } + ] + } + }, + { + "id": "011", + "name": "Metapod", + "classification": "Cocoon Pokémon", + "types": [ + "Bug" + ], + "resistant": [ + "Grass", + "Fighting", + "Ground" + ], + "weaknesses": [ + "Fire", + "Flying", + "Rock" + ], + "weight": { + "minimum": "8.66kg", + "maximum": "11.14kg" + }, + "height": { + "minimum": "0.61m", + "maximum": "0.79m" + }, + "fleeRate": 0.09, + "Previous evolution(s)": [ + { + "id": 10, + "name": "Caterpie" + } + ], + "evolutionRequirements": { + "amount": 50, + "name": "Caterpie candies" + }, + "evolutions": [ + { + "id": 12, + "name": "Butterfree" + } + ], + "maxCP": 397, + "maxHP": 477, + "attacks": { + "fast": [ + { + "name": "Bug Bite", + "type": "Bug", + "damage": 5 + }, + { + "name": "Tackle", + "type": "Normal", + "damage": 12 + } + ], + "special": [ + { + "name": "Struggle", + "type": "Normal", + "damage": 15 + } + ] + } + }, + { + "id": "012", + "name": "Butterfree", + "classification": "Butterfly Pokémon", + "types": [ + "Bug", + "Flying" + ], + "resistant": [ + "Grass", + "Fighting", + "Ground", + "Bug" + ], + "weaknesses": [ + "Fire", + "Electric", + "Ice", + "Flying", + "Rock" + ], + "weight": { + "minimum": "28kg", + "maximum": "36kg" + }, + "height": { + "minimum": "0.96m", + "maximum": "1.24m" + }, + "fleeRate": 0.06, + "Previous evolution(s)": [ + { + "id": 10, + "name": "Caterpie" + }, + { + "id": 11, + "name": "Metapod" + } + ], + "maxCP": 1315, + "maxHP": 1454, + "attacks": { + "fast": [ + { + "name": "Bug Bite", + "type": "Bug", + "damage": 5 + }, + { + "name": "Confusion", + "type": "Psychic", + "damage": 15 + } + ], + "special": [ + { + "name": "Bug Buzz", + "type": "Bug", + "damage": 75 + }, + { + "name": "Psychic", + "type": "Psychic", + "damage": 55 + }, + { + "name": "Signal Beam", + "type": "Bug", + "damage": 45 + } + ] + } + }, + { + "id": "013", + "name": "Weedle", + "classification": "Hairy Pokémon", + "types": [ + "Bug", + "Poison" + ], + "resistant": [ + "Grass", + "Fighting", + "Poison", + "Bug", + "Fairy" + ], + "weaknesses": [ + "Fire", + "Flying", + "Psychic", + "Rock" + ], + "weight": { + "minimum": "2.8kg", + "maximum": "3.6kg" + }, + "height": { + "minimum": "0.26m", + "maximum": "0.34m" + }, + "fleeRate": 0.2, + "evolutionRequirements": { + "amount": 12, + "name": "Weedle candies" + }, + "evolutions": [ + { + "id": 14, + "name": "Kakuna" + }, + { + "id": 15, + "name": "Beedrill" + } + ], + "maxCP": 372, + "maxHP": 449, + "attacks": { + "fast": [ + { + "name": "Bug Bite", + "type": "Bug", + "damage": 5 + }, + { + "name": "Poison Sting", + "type": "Poison", + "damage": 6 + } + ], + "special": [ + { + "name": "Struggle", + "type": "Normal", + "damage": 15 + } + ] + } + }, + { + "id": "014", + "name": "Kakuna", + "classification": "Cocoon Pokémon", + "types": [ + "Bug", + "Poison" + ], + "resistant": [ + "Grass", + "Fighting", + "Poison", + "Bug", + "Fairy" + ], + "weaknesses": [ + "Fire", + "Flying", + "Psychic", + "Rock" + ], + "weight": { + "minimum": "8.75kg", + "maximum": "11.25kg" + }, + "height": { + "minimum": "0.53m", + "maximum": "0.68m" + }, + "fleeRate": 0.09, + "Previous evolution(s)": [ + { + "id": 13, + "name": "Weedle" + } + ], + "evolutionRequirements": { + "amount": 50, + "name": "Weedle candies" + }, + "evolutions": [ + { + "id": 15, + "name": "Beedrill" + } + ], + "maxCP": 405, + "maxHP": 485, + "attacks": { + "fast": [ + { + "name": "Bug Bite", + "type": "Bug", + "damage": 5 + }, + { + "name": "Poison Sting", + "type": "Poison", + "damage": 6 + } + ], + "special": [ + { + "name": "Struggle", + "type": "Normal", + "damage": 15 + } + ] + } + }, + { + "id": "015", + "name": "Beedrill", + "classification": "Poison Bee Pokémon", + "types": [ + "Bug", + "Poison" + ], + "resistant": [ + "Grass", + "Fighting", + "Poison", + "Bug", + "Fairy" + ], + "weaknesses": [ + "Fire", + "Flying", + "Psychic", + "Rock" + ], + "weight": { + "minimum": "25.81kg", + "maximum": "33.19kg" + }, + "height": { + "minimum": "0.88m", + "maximum": "1.13m" + }, + "fleeRate": 0.06, + "Previous evolution(s)": [ + { + "id": 13, + "name": "Weedle" + }, + { + "id": 14, + "name": "Kakuna" + } + ], + "maxCP": 1301, + "maxHP": 1439, + "attacks": { + "fast": [ + { + "name": "Bug Bite", + "type": "Bug", + "damage": 5 + }, + { + "name": "Poison Jab", + "type": "Poison", + "damage": 12 + } + ], + "special": [ + { + "name": "Aerial Ace", + "type": "Flying", + "damage": 30 + }, + { + "name": "Sludge Bomb", + "type": "Poison", + "damage": 55 + }, + { + "name": "X Scissor", + "type": "Bug", + "damage": 35 + } + ] + } + }, + { + "id": "016", + "name": "Pidgey", + "classification": "Tiny Bird Pokémon", + "types": [ + "Normal", + "Flying" + ], + "resistant": [ + "Grass", + "Ground", + "Bug", + "Ghost" + ], + "weaknesses": [ + "Electric", + "Ice", + "Rock" + ], + "weight": { + "minimum": "1.57kg", + "maximum": "2.02kg" + }, + "height": { + "minimum": "0.26m", + "maximum": "0.34m" + }, + "fleeRate": 0.2, + "evolutionRequirements": { + "amount": 12, + "name": "Pidgey candies" + }, + "evolutions": [ + { + "id": 17, + "name": "Pidgeotto" + }, + { + "id": 18, + "name": "Pidgeot" + } + ], + "maxCP": 585, + "maxHP": 679, + "attacks": { + "fast": [ + { + "name": "Quick Attack", + "type": "Normal", + "damage": 10 + }, + { + "name": "Tackle", + "type": "Normal", + "damage": 12 + } + ], + "special": [ + { + "name": "Aerial Ace", + "type": "Flying", + "damage": 30 + }, + { + "name": "Air Cutter", + "type": "Flying", + "damage": 30 + }, + { + "name": "Twister", + "type": "Dragon", + "damage": 25 + } + ] + } + }, + { + "id": "017", + "name": "Pidgeotto", + "classification": "Bird Pokémon", + "types": [ + "Normal", + "Flying" + ], + "resistant": [ + "Grass", + "Ground", + "Bug", + "Ghost" + ], + "weaknesses": [ + "Electric", + "Ice", + "Rock" + ], + "weight": { + "minimum": "26.25kg", + "maximum": "33.75kg" + }, + "height": { + "minimum": "0.96m", + "maximum": "1.24m" + }, + "fleeRate": 0.09, + "Previous evolution(s)": [ + { + "id": 16, + "name": "Pidgey" + } + ], + "evolutionRequirements": { + "amount": 50, + "name": "Pidgey candies" + }, + "evolutions": [ + { + "id": 18, + "name": "Pidgeot" + } + ], + "maxCP": 1096, + "maxHP": 1223, + "attacks": { + "fast": [ + { + "name": "Steel Wing", + "type": "Steel", + "damage": 15 + }, + { + "name": "Wing Attack", + "type": "Flying", + "damage": 9 + } + ], + "special": [ + { + "name": "Aerial Ace", + "type": "Flying", + "damage": 30 + }, + { + "name": "Air Cutter", + "type": "Flying", + "damage": 30 + }, + { + "name": "Twister", + "type": "Dragon", + "damage": 25 + } + ] + } + }, + { + "id": "018", + "name": "Pidgeot", + "classification": "Bird Pokémon", + "types": [ + "Normal", + "Flying" + ], + "resistant": [ + "Grass", + "Ground", + "Bug", + "Ghost" + ], + "weaknesses": [ + "Electric", + "Ice", + "Rock" + ], + "weight": { + "minimum": "34.56kg", + "maximum": "44.44kg" + }, + "height": { + "minimum": "1.31m", + "maximum": "1.69m" + }, + "fleeRate": 0.06, + "Previous evolution(s)": [ + { + "id": 16, + "name": "Pidgey" + }, + { + "id": 17, + "name": "Pidgeotto" + } + ], + "maxCP": 1923, + "maxHP": 2091, + "attacks": { + "fast": [ + { + "name": "Steel Wing", + "type": "Steel", + "damage": 15 + }, + { + "name": "Wing Attack", + "type": "Flying", + "damage": 9 + } + ], + "special": [ + { + "name": "Aerial Ace", + "type": "Flying", + "damage": 30 + }, + { + "name": "Air Cutter", + "type": "Flying", + "damage": 30 + }, + { + "name": "Hurricane", + "type": "Flying", + "damage": 80 + } + ] + } + }, + { + "id": "019", + "name": "Rattata", + "classification": "Mouse Pokémon", + "types": [ + "Normal" + ], + "resistant": [ + "Ghost" + ], + "weaknesses": [ + "Fighting" + ], + "weight": { + "minimum": "3.06kg", + "maximum": "3.94kg" + }, + "height": { + "minimum": "0.26m", + "maximum": "0.34m" + }, + "fleeRate": 0.2, + "evolutionRequirements": { + "amount": 25, + "name": "Rattata candies" + }, + "evolutions": [ + { + "id": 20, + "name": "Raticate" + } + ], + "maxCP": 493, + "maxHP": 581, + "attacks": { + "fast": [ + { + "name": "Quick Attack", + "type": "Normal", + "damage": 10 + }, + { + "name": "Tackle", + "type": "Normal", + "damage": 12 + } + ], + "special": [ + { + "name": "Body Slam", + "type": "Normal", + "damage": 40 + }, + { + "name": "Dig", + "type": "Ground", + "damage": 70 + }, + { + "name": "Hyper Fang", + "type": "Normal", + "damage": 35 + } + ] + } + }, + { + "id": "020", + "name": "Raticate", + "classification": "Mouse Pokémon", + "types": [ + "Normal" + ], + "resistant": [ + "Ghost" + ], + "weaknesses": [ + "Fighting" + ], + "weight": { + "minimum": "16.19kg", + "maximum": "20.81kg" + }, + "height": { + "minimum": "0.61m", + "maximum": "0.79m" + }, + "fleeRate": 0.07, + "Previous evolution(s)": [ + { + "id": 19, + "name": "Rattata" + } + ], + "maxCP": 1304, + "maxHP": 1444, + "attacks": { + "fast": [ + { + "name": "Bite", + "type": "Dark", + "damage": 6 + }, + { + "name": "Quick Attack", + "type": "Normal", + "damage": 10 + } + ], + "special": [ + { + "name": "Dig", + "type": "Ground", + "damage": 70 + }, + { + "name": "Hyper Beam", + "type": "Normal", + "damage": 120 + }, + { + "name": "Hyper Fang", + "type": "Normal", + "damage": 35 + } + ] + } + }, + { + "id": "021", + "name": "Spearow", + "classification": "Tiny Bird Pokémon", + "types": [ + "Normal", + "Flying" + ], + "resistant": [ + "Grass", + "Ground", + "Bug", + "Ghost" + ], + "weaknesses": [ + "Electric", + "Ice", + "Rock" + ], + "weight": { + "minimum": "1.75kg", + "maximum": "2.25kg" + }, + "height": { + "minimum": "0.26m", + "maximum": "0.34m" + }, + "fleeRate": 0.15, + "evolutionRequirements": { + "amount": 50, + "name": "Spearow candies" + }, + "evolutions": [ + { + "id": 22, + "name": "Fearow" + } + ], + "maxCP": 591, + "maxHP": 686, + "attacks": { + "fast": [ + { + "name": "Peck", + "type": "Flying", + "damage": 10 + }, + { + "name": "Quick Attack", + "type": "Normal", + "damage": 10 + } + ], + "special": [ + { + "name": "Aerial Ace", + "type": "Flying", + "damage": 30 + }, + { + "name": "Drill Peck", + "type": "Flying", + "damage": 40 + }, + { + "name": "Twister", + "type": "Dragon", + "damage": 25 + } + ] + } + }, + { + "id": "022", + "name": "Fearow", + "classification": "Beak Pokémon", + "types": [ + "Normal", + "Flying" + ], + "resistant": [ + "Grass", + "Ground", + "Bug", + "Ghost" + ], + "weaknesses": [ + "Electric", + "Ice", + "Rock" + ], + "weight": { + "minimum": "33.25kg", + "maximum": "42.75kg" + }, + "height": { + "minimum": "1.05m", + "maximum": "1.35m" + }, + "fleeRate": 0.07, + "Previous evolution(s)": [ + { + "id": 21, + "name": "Spearow" + } + ], + "maxCP": 1592, + "maxHP": 1746, + "attacks": { + "fast": [ + { + "name": "Peck", + "type": "Flying", + "damage": 10 + }, + { + "name": "Steel Wing", + "type": "Steel", + "damage": 15 + } + ], + "special": [ + { + "name": "Aerial Ace", + "type": "Flying", + "damage": 30 + }, + { + "name": "Drill Run", + "type": "Ground", + "damage": 50 + }, + { + "name": "Twister", + "type": "Dragon", + "damage": 25 + } + ] + } + }, + { + "id": "023", + "name": "Ekans", + "classification": "Snake Pokémon", + "types": [ + "Poison" + ], + "resistant": [ + "Grass", + "Fighting", + "Poison", + "Bug", + "Fairy" + ], + "weaknesses": [ + "Ground", + "Psychic" + ], + "weight": { + "minimum": "6.04kg", + "maximum": "7.76kg" + }, + "height": { + "minimum": "1.75m", + "maximum": "2.25m" + }, + "fleeRate": 0.15, + "evolutionRequirements": { + "amount": 50, + "name": "Ekans candies" + }, + "evolutions": [ + { + "id": 24, + "name": "Arbok" + } + ], + "maxCP": 718, + "maxHP": 824, + "attacks": { + "fast": [ + { + "name": "Acid", + "type": "Poison", + "damage": 10 + }, + { + "name": "Poison Sting", + "type": "Poison", + "damage": 6 + } + ], + "special": [ + { + "name": "Gunk Shot", + "type": "Poison", + "damage": 65 + }, + { + "name": "Sludge Bomb", + "type": "Poison", + "damage": 55 + }, + { + "name": "Wrap", + "type": "Normal", + "damage": 25 + } + ] + } + }, + { + "id": "024", + "name": "Arbok", + "classification": "Cobra Pokémon", + "types": [ + "Poison" + ], + "resistant": [ + "Grass", + "Fighting", + "Poison", + "Bug", + "Fairy" + ], + "weaknesses": [ + "Ground", + "Psychic" + ], + "weight": { + "minimum": "56.88kg", + "maximum": "73.13kg" + }, + "height": { + "minimum": "3.06m", + "maximum": "3.94m" + }, + "fleeRate": 0.07, + "Previous evolution(s)": [ + { + "id": 23, + "name": "Ekans" + } + ], + "maxCP": 1611, + "maxHP": 1767, + "attacks": { + "fast": [ + { + "name": "Acid", + "type": "Poison", + "damage": 10 + }, + { + "name": "Bite", + "type": "Dark", + "damage": 6 + } + ], + "special": [ + { + "name": "Dark Pulse", + "type": "Dark", + "damage": 45 + }, + { + "name": "Gunk Shot", + "type": "Poison", + "damage": 65 + }, + { + "name": "Sludge Wave", + "type": "Poison", + "damage": 70 + } + ] + } + }, + { + "id": "025", + "name": "Pikachu", + "classification": "Mouse Pokémon", + "types": [ + "Electric" + ], + "resistant": [ + "Electric", + "Flying", + "Steel" + ], + "weaknesses": [ + "Ground" + ], + "weight": { + "minimum": "5.25kg", + "maximum": "6.75kg" + }, + "height": { + "minimum": "0.35m", + "maximum": "0.45m" + }, + "fleeRate": 0.1, + "evolutionRequirements": { + "amount": 50, + "name": "Pikachu candies" + }, + "evolutions": [ + { + "id": 26, + "name": "Raichu" + } + ], + "maxCP": 777, + "maxHP": 887, + "attacks": { + "fast": [ + { + "name": "Quick Attack", + "type": "Normal", + "damage": 10 + }, + { + "name": "Thunder Shock", + "type": "Electric", + "damage": 5 + } + ], + "special": [ + { + "name": "Discharge", + "type": "Electric", + "damage": 35 + }, + { + "name": "Thunder", + "type": "Electric", + "damage": 100 + }, + { + "name": "Thunderbolt", + "type": "Electric", + "damage": 55 + } + ] + } + }, + { + "id": "026", + "name": "Raichu", + "classification": "Mouse Pokémon", + "types": [ + "Electric" + ], + "resistant": [ + "Electric", + "Flying", + "Steel" + ], + "weaknesses": [ + "Ground" + ], + "weight": { + "minimum": "26.25kg", + "maximum": "33.75kg" + }, + "height": { + "minimum": "0.7m", + "maximum": "0.9m" + }, + "fleeRate": 0.06, + "Previous evolution(s)": [ + { + "id": 25, + "name": "Pikachu" + } + ], + "maxCP": 1859, + "maxHP": 2028, + "attacks": { + "fast": [ + { + "name": "Spark", + "type": "Electric", + "damage": 7 + }, + { + "name": "Thunder Shock", + "type": "Electric", + "damage": 5 + } + ], + "special": [ + { + "name": "Brick Break", + "type": "Fighting", + "damage": 30 + }, + { + "name": "Thunder", + "type": "Electric", + "damage": 100 + }, + { + "name": "Thunder Punch", + "type": "Electric", + "damage": 40 + } + ] + } + }, + { + "id": "027", + "name": "Sandshrew", + "classification": "Mouse Pokémon", + "types": [ + "Ground" + ], + "resistant": [ + "Electric", + "Poison", + "Rock" + ], + "weaknesses": [ + "Water", + "Grass", + "Ice" + ], + "weight": { + "minimum": "10.5kg", + "maximum": "13.5kg" + }, + "height": { + "minimum": "0.53m", + "maximum": "0.68m" + }, + "fleeRate": 0.1, + "evolutionRequirements": { + "amount": 50, + "name": "Sandshrew candies" + }, + "evolutions": [ + { + "id": 28, + "name": "Sandslash" + } + ], + "maxCP": 695, + "maxHP": 798, + "attacks": { + "fast": [ + { + "name": "Mud Shot", + "type": "Ground", + "damage": 6 + }, + { + "name": "Scratch", + "type": "Normal", + "damage": 6 + } + ], + "special": [ + { + "name": "Dig", + "type": "Ground", + "damage": 70 + }, + { + "name": "Rock Slide", + "type": "Rock", + "damage": 50 + }, + { + "name": "Rock Tomb", + "type": "Rock", + "damage": 30 + } + ] + } + }, + { + "id": "028", + "name": "Sandslash", + "classification": "Mouse Pokémon", + "types": [ + "Ground" + ], + "resistant": [ + "Electric", + "Poison", + "Rock" + ], + "weaknesses": [ + "Water", + "Grass", + "Ice" + ], + "weight": { + "minimum": "25.81kg", + "maximum": "33.19kg" + }, + "height": { + "minimum": "0.88m", + "maximum": "1.13m" + }, + "fleeRate": 0.06, + "Previous evolution(s)": [ + { + "id": 27, + "name": "Sandshrew" + } + ], + "maxCP": 1654, + "maxHP": 1810, + "attacks": { + "fast": [ + { + "name": "Metal Claw", + "type": "Steel", + "damage": 8 + }, + { + "name": "Mud Shot", + "type": "Ground", + "damage": 6 + } + ], + "special": [ + { + "name": "Bulldoze", + "type": "Ground", + "damage": 35 + }, + { + "name": "Earthquake", + "type": "Ground", + "damage": 100 + }, + { + "name": "Rock Tomb", + "type": "Rock", + "damage": 30 + } + ] + } + }, + { + "id": "029", + "name": "Nidoran-F", + "classification": "Poison Pin Pokémon", + "types": [ + "Poison" + ], + "resistant": [ + "Grass", + "Fighting", + "Poison", + "Bug", + "Fairy" + ], + "weaknesses": [ + "Ground", + "Psychic" + ], + "weight": { + "minimum": "6.13kg", + "maximum": "7.88kg" + }, + "height": { + "minimum": "0.35m", + "maximum": "0.45m" + }, + "fleeRate": 0.15, + "evolutionRequirements": { + "amount": 25, + "name": "Nidoran♀ candies" + }, + "evolutions": [ + { + "id": 30, + "name": "Nidorina" + }, + { + "id": 31, + "name": "Nidoqueen" + } + ], + "maxCP": 768, + "maxHP": 876, + "attacks": { + "fast": [ + { + "name": "Bite", + "type": "Dark", + "damage": 6 + }, + { + "name": "Poison Sting", + "type": "Poison", + "damage": 6 + } + ], + "special": [ + { + "name": "Body Slam", + "type": "Normal", + "damage": 40 + }, + { + "name": "Poison Fang", + "type": "Poison", + "damage": 25 + }, + { + "name": "Sludge Bomb", + "type": "Poison", + "damage": 55 + } + ] + } + }, + { + "id": "030", + "name": "Nidorina", + "classification": "Poison Pin Pokémon", + "types": [ + "Poison" + ], + "resistant": [ + "Grass", + "Fighting", + "Poison", + "Bug", + "Fairy" + ], + "weaknesses": [ + "Ground", + "Psychic" + ], + "weight": { + "minimum": "17.5kg", + "maximum": "22.5kg" + }, + "height": { + "minimum": "0.7m", + "maximum": "0.9m" + }, + "fleeRate": 0.07, + "Previous evolution(s)": [ + { + "id": 29, + "name": "Nidoran-F" + } + ], + "evolutionRequirements": { + "amount": 100, + "name": "Nidoran♀ candies" + }, + "evolutions": [ + { + "id": 31, + "name": "Nidoqueen" + } + ], + "maxCP": 1267, + "maxHP": 1404, + "attacks": { + "fast": [ + { + "name": "Bite", + "type": "Dark", + "damage": 6 + }, + { + "name": "Poison Sting", + "type": "Poison", + "damage": 6 + } + ], + "special": [ + { + "name": "Dig", + "type": "Ground", + "damage": 70 + }, + { + "name": "Poison Fang", + "type": "Poison", + "damage": 25 + }, + { + "name": "Sludge Bomb", + "type": "Poison", + "damage": 55 + } + ] + } + }, + { + "id": "031", + "name": "Nidoqueen", + "classification": "Drill Pokémon", + "types": [ + "Poison", + "Ground" + ], + "resistant": [ + "Electric", + "Fighting", + "Poison", + "Bug", + "Rock", + "Fairy" + ], + "weaknesses": [ + "Water", + "Ice", + "Ground", + "Psychic" + ], + "weight": { + "minimum": "52.5kg", + "maximum": "67.5kg" + }, + "height": { + "minimum": "1.14m", + "maximum": "1.46m" + }, + "fleeRate": 0.05, + "Previous evolution(s)": [ + { + "id": 29, + "name": "Nidoran-F" + }, + { + "id": 30, + "name": "Nidorina" + } + ], + "maxCP": 2301, + "maxHP": 2485, + "attacks": { + "fast": [ + { + "name": "Bite", + "type": "Dark", + "damage": 6 + }, + { + "name": "Poison Jab", + "type": "Poison", + "damage": 12 + } + ], + "special": [ + { + "name": "Earthquake", + "type": "Ground", + "damage": 100 + }, + { + "name": "Sludge Wave", + "type": "Poison", + "damage": 70 + }, + { + "name": "Stone Edge", + "type": "Rock", + "damage": 80 + } + ] + } + }, + { + "id": "032", + "name": "Nidoran-M", + "classification": "Poison Pin Pokémon", + "types": [ + "Poison" + ], + "resistant": [ + "Grass", + "Fighting", + "Poison", + "Bug", + "Fairy" + ], + "weaknesses": [ + "Ground", + "Psychic" + ], + "weight": { + "minimum": "7.88kg", + "maximum": "10.13kg" + }, + "height": { + "minimum": "0.44m", + "maximum": "0.56m" + }, + "fleeRate": 0.15, + "evolutionRequirements": { + "amount": 25, + "name": "Nidoran-M candies" + }, + "evolutions": [ + { + "id": 33, + "name": "Nidorino" + }, + { + "id": 34, + "name": "Nidoking" + } + ], + "maxCP": 737, + "maxHP": 843, + "attacks": { + "fast": [ + { + "name": "Peck", + "type": "Flying", + "damage": 10 + }, + { + "name": "Poison Sting", + "type": "Poison", + "damage": 6 + } + ], + "special": [ + { + "name": "Body Slam", + "type": "Normal", + "damage": 40 + }, + { + "name": "Horn Attack", + "type": "Normal", + "damage": 25 + }, + { + "name": "Sludge Bomb", + "type": "Poison", + "damage": 55 + } + ] + } + }, + { + "id": "033", + "name": "Nidorino", + "classification": "Poison Pin Pokémon", + "types": [ + "Poison" + ], + "resistant": [ + "Grass", + "Fighting", + "Poison", + "Bug", + "Fairy" + ], + "weaknesses": [ + "Ground", + "Psychic" + ], + "weight": { + "minimum": "17.06kg", + "maximum": "21.94kg" + }, + "height": { + "minimum": "0.79m", + "maximum": "1.01m" + }, + "fleeRate": 0.07, + "Previous evolution(s)": [ + { + "id": 32, + "name": "Nidoran-M" + } + ], + "evolutionRequirements": { + "amount": 100, + "name": "Nidoran-M candies" + }, + "evolutions": [ + { + "id": 34, + "name": "Nidoking" + } + ], + "maxCP": 1236, + "maxHP": 1372, + "attacks": { + "fast": [ + { + "name": "Bite", + "type": "Dark", + "damage": 6 + }, + { + "name": "Poison Jab", + "type": "Poison", + "damage": 12 + } + ], + "special": [ + { + "name": "Dig", + "type": "Ground", + "damage": 70 + }, + { + "name": "Horn Attack", + "type": "Normal", + "damage": 25 + }, + { + "name": "Sludge Bomb", + "type": "Poison", + "damage": 55 + } + ] + } + }, + { + "id": "034", + "name": "Nidoking", + "classification": "Drill Pokémon", + "types": [ + "Poison", + "Ground" + ], + "resistant": [ + "Electric", + "Fighting", + "Poison", + "Bug", + "Rock", + "Fairy" + ], + "weaknesses": [ + "Water", + "Ice", + "Ground", + "Psychic" + ], + "weight": { + "minimum": "54.25kg", + "maximum": "69.75kg" + }, + "height": { + "minimum": "1.22m", + "maximum": "1.57m" + }, + "fleeRate": 0.05, + "Previous evolution(s)": [ + { + "id": 32, + "name": "Nidoran-M" + }, + { + "id": 33, + "name": "Nidorino" + } + ], + "maxCP": 2291, + "maxHP": 2475, + "attacks": { + "fast": [ + { + "name": "Fury Cutter", + "type": "Bug", + "damage": 3 + }, + { + "name": "Poison Jab", + "type": "Poison", + "damage": 12 + } + ], + "special": [ + { + "name": "Earthquake", + "type": "Ground", + "damage": 100 + }, + { + "name": "Megahorn", + "type": "Bug", + "damage": 80 + }, + { + "name": "Sludge Wave", + "type": "Poison", + "damage": 70 + } + ] + } + }, + { + "id": "035", + "name": "Clefairy", + "classification": "Fairy Pokémon", + "types": [ + "Fairy" + ], + "resistant": [ + "Fighting", + "Bug", + "Dragon", + "Dark" + ], + "weaknesses": [ + "Poison", + "Steel" + ], + "weight": { + "minimum": "6.56kg", + "maximum": "8.44kg" + }, + "height": { + "minimum": "0.53m", + "maximum": "0.68m" + }, + "fleeRate": 0.1, + "evolutionRequirements": { + "amount": 50, + "name": "Clefairy candies" + }, + "evolutions": [ + { + "id": 36, + "name": "Clefable" + } + ], + "maxCP": 1074, + "maxHP": 1200, + "attacks": { + "fast": [ + { + "name": "Pound", + "type": "Normal", + "damage": 7 + }, + { + "name": "Zen Headbutt", + "type": "Psychic", + "damage": 12 + } + ], + "special": [ + { + "name": "Body Slam", + "type": "Normal", + "damage": 40 + }, + { + "name": "Disarming Voice", + "type": "Fairy", + "damage": 25 + }, + { + "name": "Moonblast", + "type": "Fairy", + "damage": 85 + } + ] + } + }, + { + "id": "036", + "name": "Clefable", + "classification": "Fairy Pokémon", + "types": [ + "Fairy" + ], + "resistant": [ + "Fighting", + "Bug", + "Dragon", + "Dark" + ], + "weaknesses": [ + "Poison", + "Steel" + ], + "weight": { + "minimum": "35kg", + "maximum": "45kg" + }, + "height": { + "minimum": "1.14m", + "maximum": "1.46m" + }, + "fleeRate": 0.06, + "Previous evolution(s)": [ + { + "id": 35, + "name": "Clefairy" + } + ], + "maxCP": 2217, + "maxHP": 2397, + "attacks": { + "fast": [ + { + "name": "Pound", + "type": "Normal", + "damage": 7 + }, + { + "name": "Zen Headbutt", + "type": "Psychic", + "damage": 12 + } + ], + "special": [ + { + "name": "Dazzling Gleam", + "type": "Fairy", + "damage": 55 + }, + { + "name": "Moonblast", + "type": "Fairy", + "damage": 85 + }, + { + "name": "Psychic", + "type": "Psychic", + "damage": 55 + } + ] + } + }, + { + "id": "037", + "name": "Vulpix", + "classification": "Fox Pokémon", + "types": [ + "Fire" + ], + "resistant": [ + "Fire", + "Grass", + "Ice", + "Bug", + "Steel", + "Fairy" + ], + "weaknesses": [ + "Water", + "Ground", + "Rock" + ], + "weight": { + "minimum": "8.66kg", + "maximum": "11.14kg" + }, + "height": { + "minimum": "0.53m", + "maximum": "0.68m" + }, + "fleeRate": 0.1, + "evolutionRequirements": { + "amount": 50, + "name": "Vulpi" + }, + "evolutions": [ + { + "id": 38, + "name": "Ninetales" + } + ], + "maxCP": 725, + "maxHP": 831, + "attacks": { + "fast": [ + { + "name": "Ember", + "type": "Fire", + "damage": 10 + }, + { + "name": "Quick Attack", + "type": "Normal", + "damage": 10 + } + ], + "special": [ + { + "name": "Body Slam", + "type": "Normal", + "damage": 40 + }, + { + "name": "Flame Charge", + "type": "Fire", + "damage": 25 + }, + { + "name": "Flamethrower", + "type": "Fire", + "damage": 55 + } + ] + } + }, + { + "id": "038", + "name": "Ninetales", + "classification": "Fox Pokémon", + "types": [ + "Fire" + ], + "resistant": [ + "Fire", + "Grass", + "Ice", + "Bug", + "Steel", + "Fairy" + ], + "weaknesses": [ + "Water", + "Ground", + "Rock" + ], + "weight": { + "minimum": "17.41kg", + "maximum": "22.39kg" + }, + "height": { + "minimum": "0.96m", + "maximum": "1.24m" + }, + "fleeRate": 0.06, + "Previous evolution(s)": [ + { + "id": 37, + "name": "Vulpix" + } + ], + "maxCP": 2015, + "maxHP": 2188, + "attacks": { + "fast": [ + { + "name": "Ember", + "type": "Fire", + "damage": 10 + }, + { + "name": "Quick Attack", + "type": "Normal", + "damage": 10 + } + ], + "special": [ + { + "name": "Fire Blast", + "type": "Fire", + "damage": 100 + }, + { + "name": "Flamethrower", + "type": "Fire", + "damage": 55 + }, + { + "name": "Heat Wave", + "type": "Fire", + "damage": 80 + } + ] + } + }, + { + "id": "039", + "name": "Jigglypuff", + "classification": "Balloon Pokémon", + "types": [ + "Normal", + "Fairy" + ], + "resistant": [ + "Bug", + "Ghost", + "Dragon", + "Dark" + ], + "weaknesses": [ + "Poison", + "Steel" + ], + "weight": { + "minimum": "4.81kg", + "maximum": "6.19kg" + }, + "height": { + "minimum": "0.44m", + "maximum": "0.56m" + }, + "fleeRate": 0.1, + "evolutionRequirements": { + "amount": 50, + "name": "Jigglypuff candies" + }, + "evolutions": [ + { + "id": 40, + "name": "Wigglytuff" + } + ], + "maxCP": 796, + "maxHP": 917, + "attacks": { + "fast": [ + { + "name": "Feint Attack", + "type": "Dark", + "damage": 12 + }, + { + "name": "Pound", + "type": "Normal", + "damage": 7 + } + ], + "special": [ + { + "name": "Body Slam", + "type": "Normal", + "damage": 40 + }, + { + "name": "Disarming Voice", + "type": "Fairy", + "damage": 25 + }, + { + "name": "Play Rough", + "type": "Fairy", + "damage": 55 + } + ] + } + }, + { + "id": "040", + "name": "Wigglytuff", + "classification": "Balloon Pokémon", + "types": [ + "Normal", + "Fairy" + ], + "resistant": [ + "Bug", + "Ghost", + "Dragon", + "Dark" + ], + "weaknesses": [ + "Poison", + "Steel" + ], + "weight": { + "minimum": "10.5kg", + "maximum": "13.5kg" + }, + "height": { + "minimum": "0.88m", + "maximum": "1.13m" + }, + "fleeRate": 0.06, + "Previous evolution(s)": [ + { + "id": 40, + "name": "Wigglytuff" + } + ], + "maxCP": 1997, + "maxHP": 2177, + "attacks": { + "fast": [ + { + "name": "Feint Attack", + "type": "Dark", + "damage": 12 + }, + { + "name": "Pound", + "type": "Normal", + "damage": 7 + } + ], + "special": [ + { + "name": "Dazzling Gleam", + "type": "Fairy", + "damage": 55 + }, + { + "name": "Hyper Beam", + "type": "Normal", + "damage": 120 + }, + { + "name": "Play Rough", + "type": "Fairy", + "damage": 55 + } + ] + } + }, + { + "id": "041", + "name": "Zubat", + "classification": "Bat Pokémon", + "types": [ + "Poison", + "Flying" + ], + "resistant": [ + "Grass", + "Fighting", + "Poison", + "Bug", + "Fairy" + ], + "weaknesses": [ + "Electric", + "Ice", + "Psychic", + "Rock" + ], + "weight": { + "minimum": "6.56kg", + "maximum": "8.44kg" + }, + "height": { + "minimum": "0.7m", + "maximum": "0.9m" + }, + "fleeRate": 0.2, + "evolutionRequirements": { + "amount": 50, + "name": "Zubat candies" + }, + "evolutions": [ + { + "id": 42, + "name": "Golbat" + } + ], + "maxCP": 550, + "maxHP": 642, + "attacks": { + "fast": [ + { + "name": "Bite", + "type": "Dark", + "damage": 6 + }, + { + "name": "Quick Attack", + "type": "Normal", + "damage": 10 + } + ], + "special": [ + { + "name": "Air Cutter", + "type": "Flying", + "damage": 30 + }, + { + "name": "Poison Fang", + "type": "Poison", + "damage": 25 + }, + { + "name": "Sludge Bomb", + "type": "Poison", + "damage": 55 + } + ] + } + }, + { + "id": "042", + "name": "Golbat", + "classification": "Bat Pokémon", + "types": [ + "Poison", + "Flying" + ], + "resistant": [ + "Grass", + "Fighting", + "Poison", + "Bug", + "Fairy" + ], + "weaknesses": [ + "Electric", + "Ice", + "Psychic", + "Rock" + ], + "weight": { + "minimum": "48.13kg", + "maximum": "61.88kg" + }, + "height": { + "minimum": "1.4m", + "maximum": "1.8m" + }, + "fleeRate": 0.07, + "Previous evolution(s)": [ + { + "id": 41, + "name": "Zubat" + } + ], + "maxCP": 1760, + "maxHP": 1921, + "attacks": { + "fast": [ + { + "name": "Bite", + "type": "Dark", + "damage": 6 + }, + { + "name": "Wing Attack", + "type": "Flying", + "damage": 9 + } + ], + "special": [ + { + "name": "Air Cutter", + "type": "Flying", + "damage": 30 + }, + { + "name": "Ominous Wind", + "type": "Ghost", + "damage": 30 + }, + { + "name": "Poison Fang", + "type": "Poison", + "damage": 25 + } + ] + } + }, + { + "id": "043", + "name": "Oddish", + "classification": "Weed Pokémon", + "types": [ + "Grass", + "Poison" + ], + "resistant": [ + "Water", + "Electric", + "Grass", + "Fighting", + "Fairy" + ], + "weaknesses": [ + "Fire", + "Ice", + "Flying", + "Psychic" + ], + "weight": { + "minimum": "4.73kg", + "maximum": "6.08kg" + }, + "height": { + "minimum": "0.44m", + "maximum": "0.56m" + }, + "fleeRate": 0.15, + "evolutionRequirements": { + "amount": 25, + "name": "Oddish candies" + }, + "evolutions": [ + { + "id": 44, + "name": "Gloom" + }, + { + "id": 45, + "name": "Vileplume" + } + ], + "maxCP": 1023, + "maxHP": 1148, + "attacks": { + "fast": [ + { + "name": "Acid", + "type": "Poison", + "damage": 10 + }, + { + "name": "Razor Leaf", + "type": "Grass", + "damage": 15 + } + ], + "special": [ + { + "name": "Moonblast", + "type": "Fairy", + "damage": 85 + }, + { + "name": "Seed Bomb", + "type": "Grass", + "damage": 40 + }, + { + "name": "Sludge Bomb", + "type": "Poison", + "damage": 55 + } + ] + } + }, + { + "id": "044", + "name": "Gloom", + "classification": "Weed Pokémon", + "types": [ + "Grass", + "Poison" + ], + "resistant": [ + "Water", + "Electric", + "Grass", + "Fighting", + "Fairy" + ], + "weaknesses": [ + "Fire", + "Ice", + "Flying", + "Psychic" + ], + "weight": { + "minimum": "7.53kg", + "maximum": "9.68kg" + }, + "height": { + "minimum": "0.7m", + "maximum": "0.9m" + }, + "fleeRate": 0.07, + "Previous evolution(s)": [ + { + "id": 43, + "name": "Oddish" + } + ], + "evolutionRequirements": { + "amount": 100, + "name": "Oddish candies" + }, + "evolutions": [ + { + "id": 45, + "name": "Vileplume" + } + ], + "maxCP": 1537, + "maxHP": 1689, + "attacks": { + "fast": [ + { + "name": "Acid", + "type": "Poison", + "damage": 10 + }, + { + "name": "Razor Leaf", + "type": "Grass", + "damage": 15 + } + ], + "special": [ + { + "name": "Moonblast", + "type": "Fairy", + "damage": 85 + }, + { + "name": "Petal Blizzard", + "type": "Grass", + "damage": 65 + }, + { + "name": "Sludge Bomb", + "type": "Poison", + "damage": 55 + } + ] + } + }, + { + "id": "045", + "name": "Vileplume", + "classification": "Flower Pokémon", + "types": [ + "Grass", + "Poison" + ], + "resistant": [ + "Water", + "Electric", + "Grass", + "Fighting", + "Fairy" + ], + "weaknesses": [ + "Fire", + "Ice", + "Flying", + "Psychic" + ], + "weight": { + "minimum": "16.28kg", + "maximum": "20.93kg" + }, + "height": { + "minimum": "1.05m", + "maximum": "1.35m" + }, + "fleeRate": 0.05, + "Previous evolution(s)": [ + { + "id": 43, + "name": "Oddish" + }, + { + "id": 44, + "name": "Gloom" + } + ], + "maxCP": 2307, + "maxHP": 2492, + "attacks": { + "fast": [ + { + "name": "Acid", + "type": "Poison", + "damage": 10 + }, + { + "name": "Razor Leaf", + "type": "Grass", + "damage": 15 + } + ], + "special": [ + { + "name": "Moonblast", + "type": "Fairy", + "damage": 85 + }, + { + "name": "Petal Blizzard", + "type": "Grass", + "damage": 65 + }, + { + "name": "Solar Beam", + "type": "Grass", + "damage": 120 + } + ] + } + }, + { + "id": "046", + "name": "Paras", + "classification": "Mushroom Pokémon", + "types": [ + "Bug", + "Grass" + ], + "resistant": [ + "Water", + "Electric", + "Grass", + "Fighting", + "Ground" + ], + "weaknesses": [ + "Fire", + "Ice", + "Poison", + "Flying", + "Bug", + "Rock" + ], + "weight": { + "minimum": "4.73kg", + "maximum": "6.08kg" + }, + "height": { + "minimum": "0.26m", + "maximum": "0.34m" + }, + "fleeRate": 0.15, + "evolutionRequirements": { + "amount": 50, + "name": "Paras candies" + }, + "evolutions": [ + { + "id": 47, + "name": "Parasect" + } + ], + "maxCP": 804, + "maxHP": 916, + "attacks": { + "fast": [ + { + "name": "Bug Bite", + "type": "Bug", + "damage": 5 + }, + { + "name": "Scratch", + "type": "Normal", + "damage": 6 + } + ], + "special": [ + { + "name": "Cross Poison", + "type": "Poison", + "damage": 25 + }, + { + "name": "Seed Bomb", + "type": "Grass", + "damage": 40 + }, + { + "name": "X Scissor", + "type": "Bug", + "damage": 35 + } + ] + } + }, + { + "id": "047", + "name": "Parasect", + "classification": "Mushroom Pokémon", + "types": [ + "Bug", + "Grass" + ], + "resistant": [ + "Water", + "Electric", + "Grass", + "Fighting", + "Ground" + ], + "weaknesses": [ + "Fire", + "Ice", + "Poison", + "Flying", + "Bug", + "Rock" + ], + "weight": { + "minimum": "25.81kg", + "maximum": "33.19kg" + }, + "height": { + "minimum": "0.88m", + "maximum": "1.13m" + }, + "fleeRate": 0.07, + "Previous evolution(s)": [ + { + "id": 46, + "name": "Paras" + } + ], + "maxCP": 1592, + "maxHP": 1747, + "attacks": { + "fast": [ + { + "name": "Bug Bite", + "type": "Bug", + "damage": 5 + }, + { + "name": "Fury Cutter", + "type": "Bug", + "damage": 3 + } + ], + "special": [ + { + "name": "Cross Poison", + "type": "Poison", + "damage": 25 + }, + { + "name": "Solar Beam", + "type": "Grass", + "damage": 120 + }, + { + "name": "X Scissor", + "type": "Bug", + "damage": 35 + } + ] + } + }, + { + "id": "048", + "name": "Venonat", + "classification": "Insect Pokémon", + "types": [ + "Bug", + "Poison" + ], + "resistant": [ + "Grass", + "Fighting", + "Poison", + "Bug", + "Fairy" + ], + "weaknesses": [ + "Fire", + "Flying", + "Psychic", + "Rock" + ], + "weight": { + "minimum": "26.25kg", + "maximum": "33.75kg" + }, + "height": { + "minimum": "0.88m", + "maximum": "1.13m" + }, + "fleeRate": 0.15, + "evolutionRequirements": { + "amount": 50, + "name": "Venonat candies" + }, + "evolutions": [ + { + "id": 49, + "name": "Venomoth" + } + ], + "maxCP": 912, + "maxHP": 1029, + "attacks": { + "fast": [ + { + "name": "Bug Bite", + "type": "Bug", + "damage": 5 + }, + { + "name": "Confusion", + "type": "Psychic", + "damage": 15 + } + ], + "special": [ + { + "name": "Poison Fang", + "type": "Poison", + "damage": 25 + }, + { + "name": "Psybeam", + "type": "Psychic", + "damage": 40 + }, + { + "name": "Signal Beam", + "type": "Bug", + "damage": 45 + } + ] + } + }, + { + "id": "049", + "name": "Venomoth", + "classification": "Poison Moth Pokémon", + "types": [ + "Bug", + "Poison" + ], + "resistant": [ + "Grass", + "Fighting", + "Poison", + "Bug", + "Fairy" + ], + "weaknesses": [ + "Fire", + "Flying", + "Psychic", + "Rock" + ], + "weight": { + "minimum": "10.94kg", + "maximum": "14.06kg" + }, + "height": { + "minimum": "1.31m", + "maximum": "1.69m" + }, + "fleeRate": 0.07, + "Previous evolution(s)": [ + { + "id": 48, + "name": "Venonat" + } + ], + "maxCP": 1730, + "maxHP": 1890, + "attacks": { + "fast": [ + { + "name": "Bug Bite", + "type": "Bug", + "damage": 5 + }, + { + "name": "Confusion", + "type": "Psychic", + "damage": 15 + } + ], + "special": [ + { + "name": "Bug Buzz", + "type": "Bug", + "damage": 75 + }, + { + "name": "Poison Fang", + "type": "Poison", + "damage": 25 + }, + { + "name": "Psychic", + "type": "Psychic", + "damage": 55 + } + ] + } + }, + { + "id": "050", + "name": "Diglett", + "classification": "Mole Pokémon", + "types": [ + "Ground" + ], + "resistant": [ + "Electric", + "Poison", + "Rock" + ], + "weaknesses": [ + "Water", + "Grass", + "Ice" + ], + "weight": { + "minimum": "0.7kg", + "maximum": "0.9kg" + }, + "height": { + "minimum": "0.18m", + "maximum": "0.23m" + }, + "fleeRate": 0.1, + "evolutionRequirements": { + "amount": 50, + "name": "Diglett candies" + }, + "evolutions": [ + { + "id": 51, + "name": "Dugtrio" + } + ], + "maxCP": 365, + "maxHP": 456, + "attacks": { + "fast": [ + { + "name": "Mud Shot", + "type": "Ground", + "damage": 6 + }, + { + "name": "Scratch", + "type": "Normal", + "damage": 6 + } + ], + "special": [ + { + "name": "Dig", + "type": "Ground", + "damage": 70 + }, + { + "name": "Mud Bomb", + "type": "Ground", + "damage": 30 + }, + { + "name": "Rock Tomb", + "type": "Rock", + "damage": 30 + } + ] + } + }, + { + "id": "051", + "name": "Dugtrio", + "classification": "Mole Pokémon", + "types": [ + "Ground" + ], + "resistant": [ + "Electric", + "Poison", + "Rock" + ], + "weaknesses": [ + "Water", + "Grass", + "Ice" + ], + "weight": { + "minimum": "29.14kg", + "maximum": "37.46kg" + }, + "height": { + "minimum": "0.61m", + "maximum": "0.79m" + }, + "fleeRate": 0.06, + "Previous evolution(s)": [ + { + "id": 50, + "name": "Diglett" + } + ], + "maxCP": 1038, + "maxHP": 1168, + "attacks": { + "fast": [ + { + "name": "Mud Shot", + "type": "Ground", + "damage": 6 + }, + { + "name": "Sucker Punch", + "type": "Dark", + "damage": 7 + } + ], + "special": [ + { + "name": "Earthquake", + "type": "Ground", + "damage": 100 + }, + { + "name": "Mud Bomb", + "type": "Ground", + "damage": 30 + }, + { + "name": "Stone Edge", + "type": "Rock", + "damage": 80 + } + ] + } + }, + { + "id": "052", + "name": "Meowth", + "classification": "Scratch Cat Pokémon", + "types": [ + "Normal" + ], + "resistant": [ + "Ghost" + ], + "weaknesses": [ + "Fighting" + ], + "weight": { + "minimum": "3.67kg", + "maximum": "4.72kg" + }, + "height": { + "minimum": "0.35m", + "maximum": "0.45m" + }, + "fleeRate": 0.15, + "evolutionRequirements": { + "amount": 50, + "name": "Meowth candies" + }, + "evolutions": [ + { + "id": 53, + "name": "Persian" + } + ], + "maxCP": 656, + "maxHP": 756, + "attacks": { + "fast": [ + { + "name": "Bite", + "type": "Dark", + "damage": 6 + }, + { + "name": "Scratch", + "type": "Normal", + "damage": 6 + } + ], + "special": [ + { + "name": "Body Slam", + "type": "Normal", + "damage": 40 + }, + { + "name": "Dark Pulse", + "type": "Dark", + "damage": 45 + }, + { + "name": "Night Slash", + "type": "Dark", + "damage": 30 + } + ] + } + }, + { + "id": "053", + "name": "Persian", + "classification": "Classy Cat Pokémon", + "types": [ + "Normal" + ], + "resistant": [ + "Ghost" + ], + "weaknesses": [ + "Fighting" + ], + "weight": { + "minimum": "28kg", + "maximum": "36kg" + }, + "height": { + "minimum": "0.88m", + "maximum": "1.13m" + }, + "fleeRate": 0.07, + "Previous evolution(s)": [ + { + "id": 52, + "name": "Meowth" + } + ], + "maxCP": 1483, + "maxHP": 1631, + "attacks": { + "fast": [ + { + "name": "Feint Attack", + "type": "Dark", + "damage": 12 + }, + { + "name": "Scratch", + "type": "Normal", + "damage": 6 + } + ], + "special": [ + { + "name": "Night Slash", + "type": "Dark", + "damage": 30 + }, + { + "name": "Play Rough", + "type": "Fairy", + "damage": 55 + }, + { + "name": "Power Gem", + "type": "Rock", + "damage": 40 + } + ] + } + }, + { + "id": "054", + "name": "Psyduck", + "classification": "Duck Pokémon", + "types": [ + "Water" + ], + "resistant": [ + "Fire", + "Water", + "Ice", + "Steel" + ], + "weaknesses": [ + "Electric", + "Grass" + ], + "weight": { + "minimum": "17.15kg", + "maximum": "22.05kg" + }, + "height": { + "minimum": "0.7m", + "maximum": "0.9m" + }, + "fleeRate": 0.1, + "evolutionRequirements": { + "amount": 50, + "name": "Psyduck candies" + }, + "evolutions": [ + { + "id": 55, + "name": "Golduck" + } + ], + "maxCP": 987, + "maxHP": 1109, + "attacks": { + "fast": [ + { + "name": "Water Gun", + "type": "Water", + "damage": 6 + }, + { + "name": "Zen Headbutt", + "type": "Psychic", + "damage": 12 + } + ], + "special": [ + { + "name": "Aqua Tail", + "type": "Water", + "damage": 45 + }, + { + "name": "Cross Chop", + "type": "Fighting", + "damage": 60 + }, + { + "name": "Psybeam", + "type": "Psychic", + "damage": 40 + } + ] + } + }, + { + "id": "055", + "name": "Golduck", + "classification": "Duck Pokémon", + "types": [ + "Water" + ], + "resistant": [ + "Fire", + "Water", + "Ice", + "Steel" + ], + "weaknesses": [ + "Electric", + "Grass" + ], + "weight": { + "minimum": "67.02kg", + "maximum": "86.17kg" + }, + "height": { + "minimum": "1.49m", + "maximum": "1.91m" + }, + "fleeRate": 0.06, + "Previous evolution(s)": [ + { + "id": 54, + "name": "Psyduck" + } + ], + "maxCP": 2206, + "maxHP": 2386, + "attacks": { + "fast": [ + { + "name": "Confusion", + "type": "Psychic", + "damage": 15 + }, + { + "name": "Zen Headbutt", + "type": "Psychic", + "damage": 12 + } + ], + "special": [ + { + "name": "Gunk Shot", + "type": "Poison", + "damage": 65 + }, + { + "name": "Hydro Pump", + "type": "Water", + "damage": 90 + }, + { + "name": "Ice Beam", + "type": "Ice", + "damage": 65 + }, + { + "name": "Psychic", + "type": "Psychic", + "damage": 55 + } + ] + } + }, + { + "id": "056", + "name": "Mankey", + "classification": "Pig Monkey Pokémon", + "types": [ + "Fighting" + ], + "resistant": [ + "Bug", + "Rock", + "Dark" + ], + "weaknesses": [ + "Flying", + "Psychic", + "Fairy" + ], + "weight": { + "minimum": "24.5kg", + "maximum": "31.5kg" + }, + "height": { + "minimum": "0.44m", + "maximum": "0.56m" + }, + "fleeRate": 0.1, + "evolutionRequirements": { + "amount": 50, + "name": "Mankey candies" + }, + "evolutions": [ + { + "id": 57, + "name": "Primeape" + } + ], + "maxCP": 769, + "maxHP": 878, + "attacks": { + "fast": [ + { + "name": "Karate Chop", + "type": "Fighting", + "damage": 6 + }, + { + "name": "Scratch", + "type": "Normal", + "damage": 6 + } + ], + "special": [ + { + "name": "Brick Break", + "type": "Fighting", + "damage": 30 + }, + { + "name": "Cross Chop", + "type": "Fighting", + "damage": 60 + }, + { + "name": "Low Sweep", + "type": "Fighting", + "damage": 30 + } + ] + } + }, + { + "id": "057", + "name": "Primeape", + "classification": "Pig Monkey Pokémon", + "types": [ + "Fighting" + ], + "resistant": [ + "Bug", + "Rock", + "Dark" + ], + "weaknesses": [ + "Flying", + "Psychic", + "Fairy" + ], + "weight": { + "minimum": "28kg", + "maximum": "36kg" + }, + "height": { + "minimum": "0.88m", + "maximum": "1.13m" + }, + "fleeRate": 0.06, + "Previous evolution(s)": [ + { + "id": 56, + "name": "Mankey" + } + ], + "maxCP": 1704, + "maxHP": 1864, + "attacks": { + "fast": [ + { + "name": "Karate Chop", + "type": "Fighting", + "damage": 6 + }, + { + "name": "Low Kick", + "type": "Fighting", + "damage": 5 + } + ], + "special": [ + { + "name": "Cross Chop", + "type": "Fighting", + "damage": 60 + }, + { + "name": "Low Sweep", + "type": "Fighting", + "damage": 30 + }, + { + "name": "Night Slash", + "type": "Dark", + "damage": 30 + } + ] + } + }, + { + "id": "058", + "name": "Growlithe", + "classification": "Puppy Pokémon", + "types": [ + "Fire" + ], + "resistant": [ + "Fire", + "Grass", + "Ice", + "Bug", + "Steel", + "Fairy" + ], + "weaknesses": [ + "Water", + "Ground", + "Rock" + ], + "weight": { + "minimum": "16.63kg", + "maximum": "21.38kg" + }, + "height": { + "minimum": "0.61m", + "maximum": "0.79m" + }, + "fleeRate": 0.1, + "evolutionRequirements": { + "amount": 50, + "name": "Growlithe candies" + }, + "evolutions": [ + { + "id": 59, + "name": "Arcanine" + } + ], + "maxCP": 1199, + "maxHP": 1335, + "attacks": { + "fast": [ + { + "name": "Bite", + "type": "Dark", + "damage": 6 + }, + { + "name": "Ember", + "type": "Fire", + "damage": 10 + } + ], + "special": [ + { + "name": "Body Slam", + "type": "Normal", + "damage": 40 + }, + { + "name": "Flame Wheel", + "type": "Fire", + "damage": 40 + }, + { + "name": "Flamethrower", + "type": "Fire", + "damage": 55 + } + ] + } + }, + { + "id": "059", + "name": "Arcanine", + "classification": "Legendary Pokémon", + "types": [ + "Fire" + ], + "resistant": [ + "Fire", + "Grass", + "Ice", + "Bug", + "Steel", + "Fairy" + ], + "weaknesses": [ + "Water", + "Ground", + "Rock" + ], + "weight": { + "minimum": "135.63kg", + "maximum": "174.38kg" + }, + "height": { + "minimum": "1.66m", + "maximum": "2.14m" + }, + "fleeRate": 0.06, + "Previous evolution(s)": [ + { + "id": 58, + "name": "Growlithe" + } + ], + "maxCP": 2781, + "maxHP": 2983, + "attacks": { + "fast": [ + { + "name": "Bite", + "type": "Dark", + "damage": 6 + }, + { + "name": "Fire Fang", + "type": "Fire", + "damage": 10 + } + ], + "special": [ + { + "name": "Bulldoze", + "type": "Ground", + "damage": 35 + }, + { + "name": "Fire Blast", + "type": "Fire", + "damage": 100 + }, + { + "name": "Flamethrower", + "type": "Fire", + "damage": 55 + } + ] + } + }, + { + "id": "060", + "name": "Poliwag", + "classification": "Tadpole Pokémon", + "types": [ + "Water" + ], + "resistant": [ + "Fire", + "Water", + "Ice", + "Steel" + ], + "weaknesses": [ + "Electric", + "Grass" + ], + "weight": { + "minimum": "10.85kg", + "maximum": "13.95kg" + }, + "height": { + "minimum": "0.53m", + "maximum": "0.68m" + }, + "fleeRate": 0.15, + "evolutionRequirements": { + "amount": 25, + "name": "Poliwag candies" + }, + "evolutions": [ + { + "id": 61, + "name": "Poliwhirl" + }, + { + "id": 62, + "name": "Poliwrath" + } + ], + "maxCP": 693, + "maxHP": 795, + "attacks": { + "fast": [ + { + "name": "Bubble", + "type": "Water", + "damage": 25 + }, + { + "name": "Mud Shot", + "type": "Ground", + "damage": 6 + } + ], + "special": [ + { + "name": "Body Slam", + "type": "Normal", + "damage": 40 + }, + { + "name": "Bubble Beam", + "type": "Water", + "damage": 30 + }, + { + "name": "Mud Bomb", + "type": "Ground", + "damage": 30 + } + ] + } + }, + { + "id": "061", + "name": "Poliwhirl", + "classification": "Tadpole Pokémon", + "types": [ + "Water" + ], + "resistant": [ + "Fire", + "Water", + "Ice", + "Steel" + ], + "weaknesses": [ + "Electric", + "Grass" + ], + "weight": { + "minimum": "17.5kg", + "maximum": "22.5kg" + }, + "height": { + "minimum": "0.88m", + "maximum": "1.13m" + }, + "fleeRate": 0.07, + "Previous evolution(s)": [ + { + "id": 60, + "name": "Poliwag" + } + ], + "evolutionRequirements": { + "amount": 100, + "name": "Poliwag candies" + }, + "evolutions": [ + { + "id": 62, + "name": "Poliwrath" + } + ], + "maxCP": 1206, + "maxHP": 1340, + "attacks": { + "fast": [ + { + "name": "Bubble", + "type": "Water", + "damage": 25 + }, + { + "name": "Mud Shot", + "type": "Ground", + "damage": 6 + } + ], + "special": [ + { + "name": "Bubble Beam", + "type": "Water", + "damage": 30 + }, + { + "name": "Mud Bomb", + "type": "Ground", + "damage": 30 + }, + { + "name": "Scald", + "type": "Water", + "damage": 55 + } + ] + } + }, + { + "id": "062", + "name": "Poliwrath", + "classification": "Tadpole Pokémon", + "types": [ + "Water", + "Fighting" + ], + "resistant": [ + "Fire", + "Water", + "Ice", + "Bug", + "Rock", + "Dark", + "Steel" + ], + "weaknesses": [ + "Electric", + "Grass", + "Flying", + "Psychic", + "Fairy" + ], + "weight": { + "minimum": "47.25kg", + "maximum": "60.75kg" + }, + "height": { + "minimum": "1.14m", + "maximum": "1.46m" + }, + "fleeRate": 0.05, + "Previous evolution(s)": [ + { + "id": 60, + "name": "Poliwag" + }, + { + "id": 61, + "name": "Poliwhirl" + } + ], + "maxCP": 2321, + "maxHP": 2505, + "attacks": { + "fast": [ + { + "name": "Bubble", + "type": "Water", + "damage": 25 + }, + { + "name": "Mud Shot", + "type": "Ground", + "damage": 6 + } + ], + "special": [ + { + "name": "Hydro Pump", + "type": "Water", + "damage": 90 + }, + { + "name": "Ice Punch", + "type": "Ice", + "damage": 45 + }, + { + "name": "Submission", + "type": "Fighting", + "damage": 30 + } + ] + } + }, + { + "id": "063", + "name": "Abra", + "classification": "Psi Pokémon", + "types": [ + "Psychic" + ], + "resistant": [ + "Fighting", + "Psychic" + ], + "weaknesses": [ + "Bug", + "Ghost", + "Dark" + ], + "weight": { + "minimum": "17.06kg", + "maximum": "21.94kg" + }, + "height": { + "minimum": "0.79m", + "maximum": "1.01m" + }, + "fleeRate": 0.99, + "evolutionRequirements": { + "amount": 25, + "name": "Abra candies" + }, + "evolutions": [ + { + "id": 64, + "name": "Kadabra" + }, + { + "id": 65, + "name": "Alakazam" + } + ], + "maxCP": 508, + "maxHP": 600, + "attacks": { + "fast": [ + {}, + { + "name": "Zen Headbutt", + "type": "Psychic", + "damage": 12 + } + ], + "special": [ + { + "name": "Psyshock", + "type": "Psychic", + "damage": 40 + }, + { + "name": "Shadow Ball", + "type": "Ghost", + "damage": 45 + }, + { + "name": "Signal Beam", + "type": "Bug", + "damage": 45 + } + ] + } + }, + { + "id": "064", + "name": "Kadabra", + "classification": "Psi Pokémon", + "types": [ + "Psychic" + ], + "resistant": [ + "Fighting", + "Psychic" + ], + "weaknesses": [ + "Bug", + "Ghost", + "Dark" + ], + "weight": { + "minimum": "49.44kg", + "maximum": "63.56kg" + }, + "height": { + "minimum": "1.14m", + "maximum": "1.46m" + }, + "fleeRate": 0.07, + "Previous evolution(s)": [ + { + "id": 63, + "name": "Abra" + } + ], + "evolutionRequirements": { + "amount": 100, + "name": "Abra candies" + }, + "evolutions": [ + { + "id": 65, + "name": "Alakazam" + } + ], + "maxCP": 1005, + "maxHP": 1131, + "attacks": { + "fast": [ + { + "name": "Confusion", + "type": "Psychic", + "damage": 15 + }, + { + "name": "Psycho Cut", + "type": "Psychic", + "damage": 7 + } + ], + "special": [ + { + "name": "Dazzling Gleam", + "type": "Fairy", + "damage": 55 + }, + { + "name": "Psybeam", + "type": "Psychic", + "damage": 40 + }, + { + "name": "Shadow Ball", + "type": "Ghost", + "damage": 45 + } + ] + } + }, + { + "id": "065", + "name": "Alakazam", + "classification": "Psi Pokémon", + "types": [ + "Psychic" + ], + "resistant": [ + "Fighting", + "Psychic" + ], + "weaknesses": [ + "Bug", + "Ghost", + "Dark" + ], + "weight": { + "minimum": "42kg", + "maximum": "54kg" + }, + "height": { + "minimum": "1.31m", + "maximum": "1.69m" + }, + "fleeRate": 0.05, + "Previous evolution(s)": [ + { + "id": 63, + "name": "Abra" + }, + { + "id": 64, + "name": "Kadabra" + } + ], + "maxCP": 1654, + "maxHP": 1813, + "attacks": { + "fast": [ + { + "name": "Confusion", + "type": "Psychic", + "damage": 15 + }, + { + "name": "Psycho Cut", + "type": "Psychic", + "damage": 7 + } + ], + "special": [ + { + "name": "Dazzling Gleam", + "type": "Fairy", + "damage": 55 + }, + { + "name": "Psychic", + "type": "Psychic", + "damage": 55 + }, + { + "name": "Shadow Ball", + "type": "Ghost", + "damage": 45 + } + ] + } + }, + { + "id": "066", + "name": "Machop", + "classification": "Superpower Pokémon", + "types": [ + "Fighting" + ], + "resistant": [ + "Bug", + "Rock", + "Dark" + ], + "weaknesses": [ + "Flying", + "Psychic", + "Fairy" + ], + "weight": { + "minimum": "17.06kg", + "maximum": "21.94kg" + }, + "height": { + "minimum": "0.7m", + "maximum": "0.9m" + }, + "fleeRate": 0.1, + "evolutionRequirements": { + "amount": 25, + "name": "Machop candies" + }, + "evolutions": [ + { + "id": 67, + "name": "Machoke" + }, + { + "id": 68, + "name": "Machamp" + } + ], + "maxCP": 968, + "maxHP": 1089, + "attacks": { + "fast": [ + { + "name": "Karate Chop", + "type": "Fighting", + "damage": 6 + }, + { + "name": "Low Kick", + "type": "Fighting", + "damage": 5 + } + ], + "special": [ + { + "name": "Brick Break", + "type": "Fighting", + "damage": 30 + }, + { + "name": "Cross Chop", + "type": "Fighting", + "damage": 60 + }, + { + "name": "Low Sweep", + "type": "Fighting", + "damage": 30 + } + ] + } + }, + { + "id": "067", + "name": "Machoke", + "classification": "Superpower Pokémon", + "types": [ + "Fighting" + ], + "resistant": [ + "Bug", + "Rock", + "Dark" + ], + "weaknesses": [ + "Flying", + "Psychic", + "Fairy" + ], + "weight": { + "minimum": "61.69kg", + "maximum": "79.31kg" + }, + "height": { + "minimum": "1.31m", + "maximum": "1.69m" + }, + "fleeRate": 0.07, + "Previous evolution(s)": [ + { + "id": 66, + "name": "Machop" + } + ], + "evolutionRequirements": { + "amount": 100, + "name": "Machop candies" + }, + "evolutions": [ + { + "id": 68, + "name": "Machamp" + } + ], + "maxCP": 1606, + "maxHP": 1760, + "attacks": { + "fast": [ + { + "name": "Karate Chop", + "type": "Fighting", + "damage": 6 + }, + { + "name": "Low Kick", + "type": "Fighting", + "damage": 5 + } + ], + "special": [ + { + "name": "Brick Break", + "type": "Fighting", + "damage": 30 + }, + { + "name": "Cross Chop", + "type": "Fighting", + "damage": 60 + }, + { + "name": "Submission", + "type": "Fighting", + "damage": 30 + } + ] + } + }, + { + "id": "068", + "name": "Machamp", + "classification": "Superpower Pokémon", + "types": [ + "Fighting" + ], + "resistant": [ + "Bug", + "Rock", + "Dark" + ], + "weaknesses": [ + "Flying", + "Psychic", + "Fairy" + ], + "weight": { + "minimum": "113.75kg", + "maximum": "146.25kg" + }, + "height": { + "minimum": "1.4m", + "maximum": "1.8m" + }, + "fleeRate": 0.05, + "Previous evolution(s)": [ + { + "id": 66, + "name": "Machop" + }, + { + "id": 67, + "name": "Machoke" + } + ], + "maxCP": 2406, + "maxHP": 2594, + "attacks": { + "fast": [ + { + "name": "Bullet Punch", + "type": "Steel", + "damage": 10 + }, + { + "name": "Karate Chop", + "type": "Fighting", + "damage": 6 + } + ], + "special": [ + { + "name": "Cross Chop", + "type": "Fighting", + "damage": 60 + }, + { + "name": "Stone Edge", + "type": "Rock", + "damage": 80 + }, + { + "name": "Submission", + "type": "Fighting", + "damage": 30 + } + ] + } + }, + { + "id": "069", + "name": "Bellsprout", + "classification": "Flower Pokémon", + "types": [ + "Grass", + "Poison" + ], + "resistant": [ + "Water", + "Electric", + "Grass", + "Fighting", + "Fairy" + ], + "weaknesses": [ + "Fire", + "Ice", + "Flying", + "Psychic" + ], + "weight": { + "minimum": "3.5kg", + "maximum": "4.5kg" + }, + "height": { + "minimum": "0.61m", + "maximum": "0.79m" + }, + "fleeRate": 0.15, + "evolutionRequirements": { + "amount": 25, + "name": "Bellsprout candies" + }, + "evolutions": [ + { + "id": 70, + "name": "Weepinbell" + }, + { + "id": 71, + "name": "Victreebel" + } + ], + "maxCP": 990, + "maxHP": 1117, + "attacks": { + "fast": [ + { + "name": "Acid", + "type": "Poison", + "damage": 10 + }, + { + "name": "Vine Whip", + "type": "Grass", + "damage": 7 + } + ], + "special": [ + { + "name": "Power Whip", + "type": "Grass", + "damage": 70 + }, + { + "name": "Sludge Bomb", + "type": "Poison", + "damage": 55 + }, + { + "name": "Wrap", + "type": "Normal", + "damage": 25 + } + ] + } + }, + { + "id": "070", + "name": "Weepinbell", + "classification": "Flycatcher Pokémon", + "types": [ + "Grass", + "Poison" + ], + "resistant": [ + "Water", + "Electric", + "Grass", + "Fighting", + "Fairy" + ], + "weaknesses": [ + "Fire", + "Ice", + "Flying", + "Psychic" + ], + "weight": { + "minimum": "5.6kg", + "maximum": "7.2kg" + }, + "height": { + "minimum": "0.88m", + "maximum": "1.13m" + }, + "fleeRate": 0.07, + "Previous evolution(s)": [ + { + "id": 69, + "name": "Bellsprout" + } + ], + "evolutionRequirements": { + "amount": 100, + "name": "Bellsprout candies" + }, + "evolutions": [ + { + "id": 71, + "name": "Victreebel" + } + ], + "maxCP": 1567, + "maxHP": 1723, + "attacks": { + "fast": [ + { + "name": "Acid", + "type": "Poison", + "damage": 10 + }, + { + "name": "Razor Leaf", + "type": "Grass", + "damage": 15 + } + ], + "special": [ + { + "name": "Power Whip", + "type": "Grass", + "damage": 70 + }, + { + "name": "Seed Bomb", + "type": "Grass", + "damage": 40 + }, + { + "name": "Sludge Bomb", + "type": "Poison", + "damage": 55 + } + ] + } + }, + { + "id": "071", + "name": "Victreebel", + "classification": "Flycatcher Pokémon", + "types": [ + "Grass", + "Poison" + ], + "resistant": [ + "Water", + "Electric", + "Grass", + "Fighting", + "Fairy" + ], + "weaknesses": [ + "Fire", + "Ice", + "Flying", + "Psychic" + ], + "weight": { + "minimum": "13.56kg", + "maximum": "17.44kg" + }, + "height": { + "minimum": "1.49m", + "maximum": "1.91m" + }, + "fleeRate": 0.05, + "Previous evolution(s)": [ + { + "id": 69, + "name": "Bellsprout" + }, + { + "id": 70, + "name": "Weepinbell" + } + ], + "maxCP": 2342, + "maxHP": 2530, + "attacks": { + "fast": [ + { + "name": "Acid", + "type": "Poison", + "damage": 10 + }, + { + "name": "Razor Leaf", + "type": "Grass", + "damage": 15 + } + ], + "special": [ + { + "name": "Leaf Blade", + "type": "Grass", + "damage": 55 + }, + { + "name": "Sludge Bomb", + "type": "Poison", + "damage": 55 + }, + { + "name": "Solar Beam", + "type": "Grass", + "damage": 120 + } + ] + } + }, + { + "id": "072", + "name": "Tentacool", + "classification": "Jellyfish Pokémon", + "types": [ + "Water", + "Poison" + ], + "resistant": [ + "Fire", + "Water", + "Ice", + "Fighting", + "Poison", + "Bug", + "Steel", + "Fairy" + ], + "weaknesses": [ + "Electric", + "Ground", + "Psychic" + ], + "weight": { + "minimum": "39.81kg", + "maximum": "51.19kg" + }, + "height": { + "minimum": "0.79m", + "maximum": "1.01m" + }, + "fleeRate": 0.15, + "evolutionRequirements": { + "amount": 50, + "name": "Tentacool candies" + }, + "evolutions": [ + { + "id": 73, + "name": "Tentacruel" + } + ], + "maxCP": 794, + "maxHP": 905, + "attacks": { + "fast": [ + { + "name": "Bubble", + "type": "Water", + "damage": 25 + }, + { + "name": "Poison Sting", + "type": "Poison", + "damage": 6 + } + ], + "special": [ + { + "name": "Bubble Beam", + "type": "Water", + "damage": 30 + }, + { + "name": "Water Pulse", + "type": "Water", + "damage": 35 + }, + { + "name": "Wrap", + "type": "Normal", + "damage": 25 + } + ] + } + }, + { + "id": "073", + "name": "Tentacruel", + "classification": "Jellyfish Pokémon", + "types": [ + "Water", + "Poison" + ], + "resistant": [ + "Fire", + "Water", + "Ice", + "Fighting", + "Poison", + "Bug", + "Steel", + "Fairy" + ], + "weaknesses": [ + "Electric", + "Ground", + "Psychic" + ], + "weight": { + "minimum": "48.13kg", + "maximum": "61.88kg" + }, + "height": { + "minimum": "1.4m", + "maximum": "1.8m" + }, + "fleeRate": 0.07, + "Previous evolution(s)": [ + { + "id": 72, + "name": "Tentacool" + } + ], + "maxCP": 2046, + "maxHP": 2220, + "attacks": { + "fast": [ + { + "name": "Acid", + "type": "Poison", + "damage": 10 + }, + { + "name": "Poison Jab", + "type": "Poison", + "damage": 12 + } + ], + "special": [ + { + "name": "Blizzard", + "type": "Ice", + "damage": 100 + }, + { + "name": "Hydro Pump", + "type": "Water", + "damage": 90 + }, + { + "name": "Sludge Wave", + "type": "Poison", + "damage": 70 + } + ] + } + }, + { + "id": "074", + "name": "Geodude", + "classification": "Rock Pokémon", + "types": [ + "Rock", + "Ground" + ], + "resistant": [ + "Normal", + "Fire", + "Electric", + "Poison", + "Flying", + "Rock" + ], + "weaknesses": [ + "Water", + "Grass", + "Ice", + "Fighting", + "Ground", + "Steel" + ], + "weight": { + "minimum": "17.5kg", + "maximum": "22.5kg" + }, + "height": { + "minimum": "0.35m", + "maximum": "0.45m" + }, + "fleeRate": 0.1, + "evolutionRequirements": { + "amount": 25, + "name": "Geodude candies" + }, + "evolutions": [ + { + "id": 75, + "name": "Graveler" + }, + { + "id": 76, + "name": "Golem" + } + ], + "maxCP": 742, + "maxHP": 849, + "attacks": { + "fast": [ + { + "name": "Rock Throw", + "type": "Rock", + "damage": 12 + }, + { + "name": "Tackle", + "type": "Normal", + "damage": 12 + } + ], + "special": [ + { + "name": "Dig", + "type": "Ground", + "damage": 70 + }, + { + "name": "Rock Slide", + "type": "Rock", + "damage": 50 + }, + { + "name": "Rock Tomb", + "type": "Rock", + "damage": 30 + } + ] + } + }, + { + "id": "075", + "name": "Graveler", + "classification": "Rock Pokémon", + "types": [ + "Rock", + "Ground" + ], + "resistant": [ + "Normal", + "Fire", + "Electric", + "Poison", + "Flying", + "Rock" + ], + "weaknesses": [ + "Water", + "Grass", + "Ice", + "Fighting", + "Ground", + "Steel" + ], + "weight": { + "minimum": "91.88kg", + "maximum": "118.13kg" + }, + "height": { + "minimum": "0.88m", + "maximum": "1.13m" + }, + "fleeRate": 0.07, + "Previous evolution(s)": [ + { + "id": 74, + "name": "Geodude" + } + ], + "evolutionRequirements": { + "amount": 100, + "name": "Geodude candies" + }, + "evolutions": [ + { + "id": 76, + "name": "Golem" + } + ], + "maxCP": 1294, + "maxHP": 1433, + "attacks": { + "fast": [ + { + "name": "Mud Shot", + "type": "Ground", + "damage": 6 + }, + { + "name": "Rock Throw", + "type": "Rock", + "damage": 12 + } + ], + "special": [ + { + "name": "Dig", + "type": "Ground", + "damage": 70 + }, + { + "name": "Rock Slide", + "type": "Rock", + "damage": 50 + }, + { + "name": "Stone Edge", + "type": "Rock", + "damage": 80 + } + ] + } + }, + { + "id": "076", + "name": "Golem", + "classification": "Megaton Pokémon", + "types": [ + "Rock", + "Ground" + ], + "resistant": [ + "Normal", + "Fire", + "Electric", + "Poison", + "Flying", + "Rock" + ], + "weaknesses": [ + "Water", + "Grass", + "Ice", + "Fighting", + "Ground", + "Steel" + ], + "weight": { + "minimum": "262.5kg", + "maximum": "337.5kg" + }, + "height": { + "minimum": "1.22m", + "maximum": "1.57m" + }, + "fleeRate": 0.05, + "Previous evolution(s)": [ + { + "id": 74, + "name": "Geodude" + }, + { + "id": 75, + "name": "Graveler" + } + ], + "maxCP": 2126, + "maxHP": 2303, + "attacks": { + "fast": [ + { + "name": "Mud Shot", + "type": "Ground", + "damage": 6 + }, + { + "name": "Rock Throw", + "type": "Rock", + "damage": 12 + } + ], + "special": [ + { + "name": "Ancient Power", + "type": "Rock", + "damage": 35 + }, + { + "name": "Earthquake", + "type": "Ground", + "damage": 100 + }, + { + "name": "Stone Edge", + "type": "Rock", + "damage": 80 + } + ] + } + }, + { + "id": "077", + "name": "Ponyta", + "classification": "Fire Horse Pokémon", + "types": [ + "Fire" + ], + "resistant": [ + "Fire", + "Grass", + "Ice", + "Bug", + "Steel", + "Fairy" + ], + "weaknesses": [ + "Water", + "Ground", + "Rock" + ], + "weight": { + "minimum": "26.25kg", + "maximum": "33.75kg" + }, + "height": { + "minimum": "0.88m", + "maximum": "1.13m" + }, + "fleeRate": 0.1, + "evolutionRequirements": { + "amount": 50, + "name": "Ponyta candies" + }, + "evolutions": [ + { + "id": 78, + "name": "Rapidash" + } + ], + "maxCP": 1370, + "maxHP": 1516, + "attacks": { + "fast": [ + { + "name": "Ember", + "type": "Fire", + "damage": 10 + }, + { + "name": "Tackle", + "type": "Normal", + "damage": 12 + } + ], + "special": [ + { + "name": "Fire Blast", + "type": "Fire", + "damage": 100 + }, + { + "name": "Flame Charge", + "type": "Fire", + "damage": 25 + }, + { + "name": "Flame Wheel", + "type": "Fire", + "damage": 40 + } + ] + } + }, + { + "id": "078", + "name": "Rapidash", + "classification": "Fire Horse Pokémon", + "types": [ + "Fire" + ], + "resistant": [ + "Fire", + "Grass", + "Ice", + "Bug", + "Steel", + "Fairy" + ], + "weaknesses": [ + "Water", + "Ground", + "Rock" + ], + "weight": { + "minimum": "83.13kg", + "maximum": "106.88kg" + }, + "height": { + "minimum": "1.49m", + "maximum": "1.91m" + }, + "fleeRate": 0.06, + "Previous evolution(s)": [ + { + "id": 77, + "name": "Ponyta" + } + ], + "maxCP": 2024, + "maxHP": 2199, + "attacks": { + "fast": [ + { + "name": "Ember", + "type": "Fire", + "damage": 10 + }, + { + "name": "Low Kick", + "type": "Fighting", + "damage": 5 + } + ], + "special": [ + { + "name": "Drill Run", + "type": "Ground", + "damage": 50 + }, + { + "name": "Fire Blast", + "type": "Fire", + "damage": 100 + }, + { + "name": "Heat Wave", + "type": "Fire", + "damage": 80 + } + ] + } + }, + { + "id": "079", + "name": "Slowpoke", + "classification": "Dopey Pokémon", + "types": [ + "Water", + "Psychic" + ], + "resistant": [ + "Fire", + "Water", + "Ice", + "Fighting", + "Psychic", + "Steel" + ], + "weaknesses": [ + "Electric", + "Grass", + "Bug", + "Ghost", + "Dark" + ], + "weight": { + "minimum": "31.5kg", + "maximum": "40.5kg" + }, + "height": { + "minimum": "1.05m", + "maximum": "1.35m" + }, + "fleeRate": 0.1, + "evolutionRequirements": { + "amount": 50, + "name": "Slowpoke candies" + }, + "evolutions": [ + { + "id": 80, + "name": "Slowbro" + } + ], + "maxCP": 1089, + "maxHP": 1218, + "attacks": { + "fast": [ + { + "name": "Confusion", + "type": "Psychic", + "damage": 15 + }, + { + "name": "Water Gun", + "type": "Water", + "damage": 6 + } + ], + "special": [ + { + "name": "Psychic", + "type": "Psychic", + "damage": 55 + }, + { + "name": "Psyshock", + "type": "Psychic", + "damage": 40 + }, + { + "name": "Water Pulse", + "type": "Water", + "damage": 35 + } + ] + } + }, + { + "id": "080", + "name": "Slowbro", + "classification": "Hermit Crab Pokémon", + "types": [ + "Water", + "Psychic" + ], + "resistant": [ + "Fire", + "Water", + "Ice", + "Fighting", + "Psychic", + "Steel" + ], + "weaknesses": [ + "Electric", + "Grass", + "Bug", + "Ghost", + "Dark" + ], + "weight": { + "minimum": "68.69kg", + "maximum": "88.31kg" + }, + "height": { + "minimum": "1.4m", + "maximum": "1.8m" + }, + "fleeRate": 0.06, + "Previous evolution(s)": [ + { + "id": 79, + "name": "Slowpoke" + } + ], + "maxCP": 2409, + "maxHP": 2597, + "attacks": { + "fast": [ + { + "name": "Confusion", + "type": "Psychic", + "damage": 15 + }, + { + "name": "Water Gun", + "type": "Water", + "damage": 6 + } + ], + "special": [ + { + "name": "Ice Beam", + "type": "Ice", + "damage": 65 + }, + { + "name": "Psychic", + "type": "Psychic", + "damage": 55 + }, + { + "name": "Water Pulse", + "type": "Water", + "damage": 35 + } + ] + } + }, + { + "id": "081", + "name": "Magnemite", + "classification": "Magnet Pokémon", + "types": [ + "Electric", + "Steel" + ], + "resistant": [ + "Normal", + "Electric", + "Grass", + "Ice", + "Poison", + "Flying", + "Psychic", + "Bug", + "Rock", + "Dragon", + "Steel", + "Fairy" + ], + "weaknesses": [ + "Fire", + "Fighting", + "Ground" + ], + "weight": { + "minimum": "5.25kg", + "maximum": "6.75kg" + }, + "height": { + "minimum": "0.26m", + "maximum": "0.34m" + }, + "fleeRate": 0.1, + "evolutionRequirements": { + "amount": 50, + "name": "Magnemite candies" + }, + "evolutions": [ + { + "id": 82, + "name": "Magneton" + } + ], + "maxCP": 774, + "maxHP": 890, + "attacks": { + "fast": [ + { + "name": "Spark", + "type": "Electric", + "damage": 7 + }, + { + "name": "Thunder Shock", + "type": "Electric", + "damage": 5 + } + ], + "special": [ + { + "name": "Discharge", + "type": "Electric", + "damage": 35 + }, + { + "name": "Magnet Bomb", + "type": "Steel", + "damage": 30 + }, + { + "name": "Thunderbolt", + "type": "Electric", + "damage": 55 + } + ] + } + }, + { + "id": "082", + "name": "Magneton", + "classification": "Magnet Pokémon", + "types": [ + "Electric", + "Steel" + ], + "resistant": [ + "Normal", + "Electric", + "Grass", + "Ice", + "Poison", + "Flying", + "Psychic", + "Bug", + "Rock", + "Dragon", + "Steel", + "Fairy" + ], + "weaknesses": [ + "Fire", + "Fighting", + "Ground" + ], + "weight": { + "minimum": "52.5kg", + "maximum": "67.5kg" + }, + "height": { + "minimum": "0.88m", + "maximum": "1.13m" + }, + "fleeRate": 0.06, + "Previous evolution(s)": [ + { + "id": 81, + "name": "Magnemite" + } + ], + "maxCP": 1715, + "maxHP": 1879, + "attacks": { + "fast": [ + { + "name": "Spark", + "type": "Electric", + "damage": 7 + }, + { + "name": "Thunder Shock", + "type": "Electric", + "damage": 5 + } + ], + "special": [ + { + "name": "Discharge", + "type": "Electric", + "damage": 35 + }, + { + "name": "Flash Cannon", + "type": "Steel", + "damage": 60 + }, + { + "name": "Magnet Bomb", + "type": "Steel", + "damage": 30 + } + ] + } + }, + { + "id": "083", + "name": "Farfetch'd", + "classification": "Wild Duck Pokémon", + "types": [ + "Normal", + "Flying" + ], + "resistant": [ + "Grass", + "Ground", + "Bug", + "Ghost" + ], + "weaknesses": [ + "Electric", + "Ice", + "Rock" + ], + "weight": { + "minimum": "13.13kg", + "maximum": "16.88kg" + }, + "height": { + "minimum": "0.7m", + "maximum": "0.9m" + }, + "fleeRate": 0.09, + "Common Capture Area": "Early reports that this Pokémon is likely to be found in: Asia", + "Asia": "Common Capture Area", + "maxCP": 1133, + "maxHP": 1263, + "attacks": { + "fast": [ + {}, + { + "name": "Fury Cutter", + "type": "Bug", + "damage": 3 + } + ], + "special": [ + { + "name": "Aerial Ace", + "type": "Flying", + "damage": 30 + }, + { + "name": "Air Cutter", + "type": "Flying", + "damage": 30 + }, + { + "name": "Leaf Blade", + "type": "Grass", + "damage": 55 + } + ] + } + }, + { + "id": "084", + "name": "Doduo", + "classification": "Twin Bird Pokémon", + "types": [ + "Normal", + "Flying" + ], + "resistant": [ + "Grass", + "Ground", + "Bug", + "Ghost" + ], + "weaknesses": [ + "Electric", + "Ice", + "Rock" + ], + "weight": { + "minimum": "34.3kg", + "maximum": "44.1kg" + }, + "height": { + "minimum": "1.22m", + "maximum": "1.57m" + }, + "fleeRate": 0.1, + "evolutionRequirements": { + "amount": 50, + "name": "Doduo candies" + }, + "evolutions": [ + { + "id": 85, + "name": "Dodrio" + } + ], + "maxCP": 746, + "maxHP": 855, + "attacks": { + "fast": [ + { + "name": "Peck", + "type": "Flying", + "damage": 10 + }, + { + "name": "Quick Attack", + "type": "Normal", + "damage": 10 + } + ], + "special": [ + { + "name": "Aerial Ace", + "type": "Flying", + "damage": 30 + }, + { + "name": "Drill Peck", + "type": "Flying", + "damage": 40 + }, + { + "name": "Swift", + "type": "Normal", + "damage": 30 + } + ] + } + }, + { + "id": "085", + "name": "Dodrio", + "classification": "Triple Bird Pokémon", + "types": [ + "Normal", + "Flying" + ], + "resistant": [ + "Grass", + "Ground", + "Bug", + "Ghost" + ], + "weaknesses": [ + "Electric", + "Ice", + "Rock" + ], + "weight": { + "minimum": "74.55kg", + "maximum": "95.85kg" + }, + "height": { + "minimum": "1.57m", + "maximum": "2.02m" + }, + "fleeRate": 0.06, + "Previous evolution(s)": [ + { + "id": 84, + "name": "Doduo" + } + ], + "maxCP": 1677, + "maxHP": 1836, + "attacks": { + "fast": [ + { + "name": "Feint Attack", + "type": "Dark", + "damage": 12 + }, + { + "name": "Steel Wing", + "type": "Steel", + "damage": 15 + } + ], + "special": [ + { + "name": "Aerial Ace", + "type": "Flying", + "damage": 30 + }, + { + "name": "Air Cutter", + "type": "Flying", + "damage": 30 + }, + { + "name": "Drill Peck", + "type": "Flying", + "damage": 40 + } + ] + } + }, + { + "id": "086", + "name": "Seel", + "classification": "Sea Lion Pokémon", + "types": [ + "Water" + ], + "resistant": [ + "Fire", + "Water", + "Ice", + "Steel" + ], + "weaknesses": [ + "Electric", + "Grass" + ], + "weight": { + "minimum": "78.75kg", + "maximum": "101.25kg" + }, + "height": { + "minimum": "0.96m", + "maximum": "1.24m" + }, + "fleeRate": 0.09, + "evolutionRequirements": { + "amount": 50, + "name": "Seel candies" + }, + "evolutions": [ + { + "id": 87, + "name": "Dewgong" + } + ], + "maxCP": 985, + "maxHP": 1107, + "attacks": { + "fast": [ + { + "name": "Ice Shard", + "type": "Ice", + "damage": 15 + }, + { + "name": "Water Gun", + "type": "Water", + "damage": 6 + } + ], + "special": [ + { + "name": "Aqua Jet", + "type": "Water", + "damage": 25 + }, + { + "name": "Aqua Tail", + "type": "Water", + "damage": 45 + }, + { + "name": "Icy Wind", + "type": "Ice", + "damage": 25 + } + ] + } + }, + { + "id": "087", + "name": "Dewgong", + "classification": "Sea Lion Pokémon", + "types": [ + "Water", + "Ice" + ], + "resistant": [ + "Water", + "Ice" + ], + "weaknesses": [ + "Electric", + "Grass", + "Fighting", + "Rock" + ], + "weight": { + "minimum": "105kg", + "maximum": "135kg" + }, + "height": { + "minimum": "1.49m", + "maximum": "1.91m" + }, + "fleeRate": 0.06, + "Previous evolution(s)": [ + { + "id": 86, + "name": "Seel" + } + ], + "maxCP": 1975, + "maxHP": 2145, + "attacks": { + "fast": [ + { + "name": "Frost Breath", + "type": "Ice", + "damage": 9 + }, + { + "name": "Ice Shard", + "type": "Ice", + "damage": 15 + } + ], + "special": [ + { + "name": "Aqua Jet", + "type": "Water", + "damage": 25 + }, + { + "name": "Blizzard", + "type": "Ice", + "damage": 100 + }, + { + "name": "Icy Wind", + "type": "Ice", + "damage": 25 + } + ] + } + }, + { + "id": "088", + "name": "Grimer", + "classification": "Sludge Pokémon", + "types": [ + "Poison" + ], + "resistant": [ + "Grass", + "Fighting", + "Poison", + "Bug", + "Fairy" + ], + "weaknesses": [ + "Ground", + "Psychic" + ], + "weight": { + "minimum": "26.25kg", + "maximum": "33.75kg" + }, + "height": { + "minimum": "0.79m", + "maximum": "1.01m" + }, + "fleeRate": 0.1, + "evolutionRequirements": { + "amount": 50, + "name": "Grimer candies" + }, + "evolutions": [ + { + "id": 89, + "name": "Muk" + } + ], + "maxCP": 1152, + "maxHP": 1284, + "attacks": { + "fast": [ + { + "name": "Acid", + "type": "Poison", + "damage": 10 + }, + { + "name": "Mud Slap", + "type": "Ground", + "damage": 15 + } + ], + "special": [ + { + "name": "Mud Bomb", + "type": "Ground", + "damage": 30 + }, + { + "name": "Sludge", + "type": "Poison", + "damage": 30 + }, + { + "name": "Sludge Bomb", + "type": "Poison", + "damage": 55 + } + ] + } + }, + { + "id": "089", + "name": "Muk", + "classification": "Sludge Pokémon", + "types": [ + "Poison" + ], + "resistant": [ + "Grass", + "Fighting", + "Poison", + "Bug", + "Fairy" + ], + "weaknesses": [ + "Ground", + "Psychic" + ], + "weight": { + "minimum": "26.25kg", + "maximum": "33.75kg" + }, + "height": { + "minimum": "1.05m", + "maximum": "1.35m" + }, + "fleeRate": 0.06, + "Previous evolution(s)": [ + { + "id": 88, + "name": "Grimer" + } + ], + "maxCP": 2414, + "maxHP": 2602, + "attacks": { + "fast": [ + { + "name": "Acid", + "type": "Poison", + "damage": 10 + }, + { + "name": "Poison Jab", + "type": "Poison", + "damage": 12 + } + ], + "special": [ + { + "name": "Dark Pulse", + "type": "Dark", + "damage": 45 + }, + { + "name": "Gunk Shot", + "type": "Poison", + "damage": 65 + }, + { + "name": "Sludge Wave", + "type": "Poison", + "damage": 70 + } + ] + } + }, + { + "id": "090", + "name": "Shellder", + "classification": "Bivalve Pokémon", + "types": [ + "Water" + ], + "resistant": [ + "Fire", + "Water", + "Ice", + "Steel" + ], + "weaknesses": [ + "Electric", + "Grass" + ], + "weight": { + "minimum": "3.5kg", + "maximum": "4.5kg" + }, + "height": { + "minimum": "0.26m", + "maximum": "0.34m" + }, + "fleeRate": 0.1, + "evolutionRequirements": { + "amount": 50, + "name": "Shellder candies" + }, + "evolutions": [ + { + "id": 91, + "name": "Cloyster" + } + ], + "maxCP": 715, + "maxHP": 822, + "attacks": { + "fast": [ + { + "name": "Ice Shard", + "type": "Ice", + "damage": 15 + }, + { + "name": "Tackle", + "type": "Normal", + "damage": 12 + } + ], + "special": [ + { + "name": "Bubble Beam", + "type": "Water", + "damage": 30 + }, + { + "name": "Icy Wind", + "type": "Ice", + "damage": 25 + }, + { + "name": "Water Pulse", + "type": "Water", + "damage": 35 + } + ] + } + }, + { + "id": "091", + "name": "Cloyster", + "classification": "Bivalve Pokémon", + "types": [ + "Water", + "Ice" + ], + "resistant": [ + "Water", + "Ice" + ], + "weaknesses": [ + "Electric", + "Grass", + "Fighting", + "Rock" + ], + "weight": { + "minimum": "115.94kg", + "maximum": "149.06kg" + }, + "height": { + "minimum": "1.31m", + "maximum": "1.69m" + }, + "fleeRate": 0.06, + "Previous evolution(s)": [ + { + "id": 90, + "name": "Shellder" + } + ], + "maxCP": 1879, + "maxHP": 2052, + "attacks": { + "fast": [ + { + "name": "Frost Breath", + "type": "Ice", + "damage": 9 + }, + { + "name": "Ice Shard", + "type": "Ice", + "damage": 15 + } + ], + "special": [ + { + "name": "Blizzard", + "type": "Ice", + "damage": 100 + }, + { + "name": "Hydro Pump", + "type": "Water", + "damage": 90 + }, + { + "name": "Icy Wind", + "type": "Ice", + "damage": 25 + } + ] + } + }, + { + "id": "092", + "name": "Gastly", + "classification": "Gas Pokémon", + "types": [ + "Ghost", + "Poison" + ], + "resistant": [ + "Normal", + "Grass", + "Fighting", + "Poison", + "Bug", + "Fairy" + ], + "weaknesses": [ + "Ground", + "Psychic", + "Ghost", + "Dark" + ], + "weight": { + "minimum": "0.09kg", + "maximum": "0.11kg" + }, + "height": { + "minimum": "1.14m", + "maximum": "1.46m" + }, + "fleeRate": 0.1, + "evolutionRequirements": { + "amount": 25, + "name": "Gastly candies" + }, + "evolutions": [ + { + "id": 93, + "name": "Haunter" + }, + { + "id": 94, + "name": "Gengar" + } + ], + "maxCP": 696, + "maxHP": 804, + "attacks": { + "fast": [ + { + "name": "Lick", + "type": "Ghost", + "damage": 5 + }, + { + "name": "Sucker Punch", + "type": "Dark", + "damage": 7 + } + ], + "special": [ + { + "name": "Dark Pulse", + "type": "Dark", + "damage": 45 + }, + { + "name": "Ominous Wind", + "type": "Ghost", + "damage": 30 + }, + { + "name": "Sludge Bomb", + "type": "Poison", + "damage": 55 + } + ] + } + }, + { + "id": "093", + "name": "Haunter", + "classification": "Gas Pokémon", + "types": [ + "Ghost", + "Poison" + ], + "resistant": [ + "Normal", + "Grass", + "Fighting", + "Poison", + "Bug", + "Fairy" + ], + "weaknesses": [ + "Ground", + "Psychic", + "Ghost", + "Dark" + ], + "weight": { + "minimum": "0.09kg", + "maximum": "0.11kg" + }, + "height": { + "minimum": "1.4m", + "maximum": "1.8m" + }, + "fleeRate": 0.07, + "Previous evolution(s)": [ + { + "id": 92, + "name": "Gastly" + } + ], + "evolutionRequirements": { + "amount": 100, + "name": "Gastly candies" + }, + "evolutions": [ + { + "id": 94, + "name": "Gengar" + } + ], + "maxCP": 1240, + "maxHP": 1380, + "attacks": { + "fast": [ + { + "name": "Lick", + "type": "Ghost", + "damage": 5 + }, + { + "name": "Shadow Claw", + "type": "Ghost", + "damage": 11 + } + ], + "special": [ + { + "name": "Dark Pulse", + "type": "Dark", + "damage": 45 + }, + { + "name": "Shadow Ball", + "type": "Ghost", + "damage": 45 + }, + { + "name": "Sludge Bomb", + "type": "Poison", + "damage": 55 + } + ] + } + }, + { + "id": "094", + "name": "Gengar", + "classification": "Shadow Pokémon", + "types": [ + "Ghost", + "Poison" + ], + "resistant": [ + "Normal", + "Grass", + "Fighting", + "Poison", + "Bug", + "Fairy" + ], + "weaknesses": [ + "Ground", + "Psychic", + "Ghost", + "Dark" + ], + "weight": { + "minimum": "35.44kg", + "maximum": "45.56kg" + }, + "height": { + "minimum": "1.31m", + "maximum": "1.69m" + }, + "fleeRate": 0.05, + "Previous evolution(s)": [ + { + "id": 92, + "name": "Gastly" + }, + { + "id": 93, + "name": "Haunter" + } + ], + "maxCP": 1907, + "maxHP": 2078, + "attacks": { + "fast": [ + { + "name": "Shadow Claw", + "type": "Ghost", + "damage": 11 + }, + { + "name": "Sucker Punch", + "type": "Dark", + "damage": 7 + } + ], + "special": [ + { + "name": "Dark Pulse", + "type": "Dark", + "damage": 45 + }, + { + "name": "Shadow Ball", + "type": "Ghost", + "damage": 45 + }, + { + "name": "Sludge Wave", + "type": "Poison", + "damage": 70 + } + ] + } + }, + { + "id": "095", + "name": "Onix", + "classification": "Rock Snake Pokémon", + "types": [ + "Rock", + "Ground" + ], + "resistant": [ + "Normal", + "Fire", + "Electric", + "Poison", + "Flying", + "Rock" + ], + "weaknesses": [ + "Water", + "Grass", + "Ice", + "Fighting", + "Ground", + "Steel" + ], + "weight": { + "minimum": "183.75kg", + "maximum": "236.25kg" + }, + "height": { + "minimum": "7.7m", + "maximum": "9.9m" + }, + "fleeRate": 0.09, + "maxCP": 745, + "maxHP": 857, + "attacks": { + "fast": [ + { + "name": "Rock Throw", + "type": "Rock", + "damage": 12 + }, + { + "name": "Tackle", + "type": "Normal", + "damage": 12 + } + ], + "special": [ + { + "name": "Iron Head", + "type": "Steel", + "damage": 30 + }, + { + "name": "Rock Slide", + "type": "Rock", + "damage": 50 + }, + { + "name": "Stone Edge", + "type": "Rock", + "damage": 80 + } + ] + } + }, + { + "id": "096", + "name": "Drowzee", + "classification": "Hypnosis Pokémon", + "types": [ + "Psychic" + ], + "resistant": [ + "Fighting", + "Psychic" + ], + "weaknesses": [ + "Bug", + "Ghost", + "Dark" + ], + "weight": { + "minimum": "28.35kg", + "maximum": "36.45kg" + }, + "height": { + "minimum": "0.88m", + "maximum": "1.13m" + }, + "fleeRate": 0.1, + "evolutionRequirements": { + "amount": 50, + "name": "Drowzee candies" + }, + "evolutions": [ + { + "id": 97, + "name": "Hypno" + } + ], + "maxCP": 955, + "maxHP": 1075, + "attacks": { + "fast": [ + { + "name": "Confusion", + "type": "Psychic", + "damage": 15 + }, + { + "name": "Pound", + "type": "Normal", + "damage": 7 + } + ], + "special": [ + { + "name": "Psybeam", + "type": "Psychic", + "damage": 40 + }, + { + "name": "Psychic", + "type": "Psychic", + "damage": 55 + }, + { + "name": "Psyshock", + "type": "Psychic", + "damage": 40 + } + ] + } + }, + { + "id": "097", + "name": "Hypno", + "classification": "Hypnosis Pokémon", + "types": [ + "Psychic" + ], + "resistant": [ + "Fighting", + "Psychic" + ], + "weaknesses": [ + "Bug", + "Ghost", + "Dark" + ], + "weight": { + "minimum": "66.15kg", + "maximum": "85.05kg" + }, + "height": { + "minimum": "1.4m", + "maximum": "1.8m" + }, + "fleeRate": 0.06, + "Previous evolution(s)": [ + { + "id": 96, + "name": "Drowzee" + } + ], + "maxCP": 2012, + "maxHP": 2184, + "attacks": { + "fast": [ + { + "name": "Confusion", + "type": "Psychic", + "damage": 15 + }, + { + "name": "Zen Headbutt", + "type": "Psychic", + "damage": 12 + } + ], + "special": [ + { + "name": "Psychic", + "type": "Psychic", + "damage": 55 + }, + { + "name": "Psyshock", + "type": "Psychic", + "damage": 40 + }, + { + "name": "Shadow Ball", + "type": "Ghost", + "damage": 45 + } + ] + } + }, + { + "id": "098", + "name": "Krabby", + "classification": "River Crab Pokémon", + "types": [ + "Water" + ], + "resistant": [ + "Fire", + "Water", + "Ice", + "Steel" + ], + "weaknesses": [ + "Electric", + "Grass" + ], + "weight": { + "minimum": "5.69kg", + "maximum": "7.31kg" + }, + "height": { + "minimum": "0.35m", + "maximum": "0.45m" + }, + "fleeRate": 0.15, + "evolutionRequirements": { + "amount": 50, + "name": "Krabby candies" + }, + "evolutions": [ + { + "id": 99, + "name": "Kingler" + } + ], + "maxCP": 686, + "maxHP": 792, + "attacks": { + "fast": [ + { + "name": "Bubble", + "type": "Water", + "damage": 25 + }, + { + "name": "Mud Shot", + "type": "Ground", + "damage": 6 + } + ], + "special": [ + { + "name": "Bubble Beam", + "type": "Water", + "damage": 30 + }, + { + "name": "Vice Grip", + "type": "Normal", + "damage": 25 + }, + { + "name": "Water Pulse", + "type": "Water", + "damage": 35 + } + ] + } + }, + { + "id": "099", + "name": "Kingler", + "classification": "Pincer Pokémon", + "types": [ + "Water" + ], + "resistant": [ + "Fire", + "Water", + "Ice", + "Steel" + ], + "weaknesses": [ + "Electric", + "Grass" + ], + "weight": { + "minimum": "52.5kg", + "maximum": "67.5kg" + }, + "height": { + "minimum": "1.14m", + "maximum": "1.46m" + }, + "fleeRate": 0.07, + "Previous evolution(s)": [ + { + "id": 98, + "name": "Krabby" + } + ], + "maxCP": 1663, + "maxHP": 1823, + "attacks": { + "fast": [ + { + "name": "Metal Claw", + "type": "Steel", + "damage": 8 + }, + { + "name": "Mud Shot", + "type": "Ground", + "damage": 6 + } + ], + "special": [ + { + "name": "Vice Grip", + "type": "Normal", + "damage": 25 + }, + { + "name": "Water Pulse", + "type": "Water", + "damage": 35 + }, + { + "name": "X Scissor", + "type": "Bug", + "damage": 35 + } + ] + } + }, + { + "id": "100", + "name": "Voltorb", + "classification": "Ball Pokémon", + "types": [ + "Electric" + ], + "resistant": [ + "Electric", + "Flying", + "Steel" + ], + "weaknesses": [ + "Ground" + ], + "weight": { + "minimum": "9.1kg", + "maximum": "11.7kg" + }, + "height": { + "minimum": "0.44m", + "maximum": "0.56m" + }, + "fleeRate": 0.1, + "evolutionRequirements": { + "amount": 50, + "name": "Voltorb candies" + }, + "evolutions": [ + { + "id": 101, + "name": "Electrode" + } + ], + "maxCP": 733, + "maxHP": 839, + "attacks": { + "fast": [ + { + "name": "Spark", + "type": "Electric", + "damage": 7 + }, + { + "name": "Tackle", + "type": "Normal", + "damage": 12 + } + ], + "special": [ + { + "name": "Discharge", + "type": "Electric", + "damage": 35 + }, + { + "name": "Signal Beam", + "type": "Bug", + "damage": 45 + }, + { + "name": "Thunderbolt", + "type": "Electric", + "damage": 55 + } + ] + } + }, + { + "id": "101", + "name": "Electrode", + "classification": "Ball Pokémon", + "types": [ + "Electric" + ], + "resistant": [ + "Electric", + "Flying", + "Steel" + ], + "weaknesses": [ + "Ground" + ], + "weight": { + "minimum": "58.27kg", + "maximum": "74.92kg" + }, + "height": { + "minimum": "1.05m", + "maximum": "1.35m" + }, + "fleeRate": 0.06, + "Previous evolution(s)": [ + { + "id": 100, + "name": "Voltorb" + } + ], + "maxCP": 1496, + "maxHP": 1646, + "attacks": { + "fast": [ + { + "name": "Spark", + "type": "Electric", + "damage": 7 + }, + { + "name": "Tackle", + "type": "Normal", + "damage": 12 + } + ], + "special": [ + { + "name": "Discharge", + "type": "Electric", + "damage": 35 + }, + { + "name": "Hyper Beam", + "type": "Normal", + "damage": 120 + }, + { + "name": "Thunderbolt", + "type": "Electric", + "damage": 55 + } + ] + } + }, + { + "id": "102", + "name": "Exeggcute", + "classification": "Egg Pokémon", + "types": [ + "Grass", + "Psychic" + ], + "resistant": [ + "Water", + "Electric", + "Grass", + "Fighting", + "Ground", + "Psychic" + ], + "weaknesses": [ + "Fire", + "Ice", + "Poison", + "Flying", + "Bug", + "Ghost", + "Dark" + ], + "weight": { + "minimum": "2.19kg", + "maximum": "2.81kg" + }, + "height": { + "minimum": "0.35m", + "maximum": "0.45m" + }, + "fleeRate": 0.1, + "evolutionRequirements": { + "amount": 50, + "name": "E" + }, + "evolutions": [ + { + "id": 103, + "name": "Exeggutor" + } + ], + "maxCP": 978, + "maxHP": 1099, + "attacks": { + "fast": [ + { + "name": "Confusion", + "type": "Psychic", + "damage": 15 + } + ], + "special": [ + { + "name": "Ancient Power", + "type": "Rock", + "damage": 35 + }, + { + "name": "Psychic", + "type": "Psychic", + "damage": 55 + }, + { + "name": "Seed Bomb", + "type": "Grass", + "damage": 40 + } + ] + } + }, + { + "id": "103", + "name": "Exeggutor", + "classification": "Coconut Pokémon", + "types": [ + "Grass", + "Psychic" + ], + "resistant": [ + "Water", + "Electric", + "Grass", + "Fighting", + "Ground", + "Psychic" + ], + "weaknesses": [ + "Fire", + "Ice", + "Poison", + "Flying", + "Bug", + "Ghost", + "Dark" + ], + "weight": { + "minimum": "105kg", + "maximum": "135kg" + }, + "height": { + "minimum": "1.75m", + "maximum": "2.25m" + }, + "fleeRate": 0.06, + "Previous evolution(s)": [ + { + "id": 102, + "name": "Exeggcute" + } + ], + "maxCP": 2752, + "maxHP": 2955, + "attacks": { + "fast": [ + { + "name": "Confusion", + "type": "Psychic", + "damage": 15 + }, + { + "name": "Zen Headbutt", + "type": "Psychic", + "damage": 12 + } + ], + "special": [ + { + "name": "Psychic", + "type": "Psychic", + "damage": 55 + }, + { + "name": "Seed Bomb", + "type": "Grass", + "damage": 40 + }, + { + "name": "Solar Beam", + "type": "Grass", + "damage": 120 + } + ] + } + }, + { + "id": "104", + "name": "Cubone", + "classification": "Lonely Pokémon", + "types": [ + "Ground" + ], + "resistant": [ + "Electric", + "Poison", + "Rock" + ], + "weaknesses": [ + "Water", + "Grass", + "Ice" + ], + "weight": { + "minimum": "5.69kg", + "maximum": "7.31kg" + }, + "height": { + "minimum": "0.35m", + "maximum": "0.45m" + }, + "fleeRate": 0.1, + "evolutionRequirements": { + "amount": 50, + "name": "Cubone candies" + }, + "evolutions": [ + { + "id": 105, + "name": "Marowak" + } + ], + "maxCP": 889, + "maxHP": 1006, + "attacks": { + "fast": [ + { + "name": "Mud Slap", + "type": "Ground", + "damage": 15 + }, + { + "name": "Rock Smash", + "type": "Fighting", + "damage": 15 + } + ], + "special": [ + { + "name": "Bulldoze", + "type": "Ground", + "damage": 35 + }, + { + "name": "Dig", + "type": "Ground", + "damage": 70 + }, + { + "name": "Earthquake", + "type": "Ground", + "damage": 100 + } + ] + } + }, + { + "id": "105", + "name": "Marowak", + "classification": "Bone Keeper Pokémon", + "types": [ + "Ground" + ], + "resistant": [ + "Electric", + "Poison", + "Rock" + ], + "weaknesses": [ + "Water", + "Grass", + "Ice" + ], + "weight": { + "minimum": "39.38kg", + "maximum": "50.63kg" + }, + "height": { + "minimum": "0.88m", + "maximum": "1.13m" + }, + "fleeRate": 0.06, + "Previous evolution(s)": [ + { + "id": 104, + "name": "Cubone" + } + ], + "maxCP": 1505, + "maxHP": 1656, + "attacks": { + "fast": [ + { + "name": "Mud Slap", + "type": "Ground", + "damage": 15 + }, + { + "name": "Rock Smash", + "type": "Fighting", + "damage": 15 + } + ], + "special": [ + { + "name": "Bone Club", + "type": "Ground", + "damage": 25 + }, + { + "name": "Dig", + "type": "Ground", + "damage": 70 + }, + { + "name": "Earthquake", + "type": "Ground", + "damage": 100 + } + ] + } + }, + { + "id": "106", + "name": "Hitmonlee", + "classification": "Kicking Pokémon", + "types": [ + "Fighting" + ], + "resistant": [ + "Bug", + "Rock", + "Dark" + ], + "weaknesses": [ + "Flying", + "Psychic", + "Fairy" + ], + "weight": { + "minimum": "43.57kg", + "maximum": "56.02kg" + }, + "height": { + "minimum": "1.31m", + "maximum": "1.69m" + }, + "fleeRate": 0.09, + "maxCP": 1349, + "maxHP": 1492, + "attacks": { + "fast": [ + { + "name": "Low Kick", + "type": "Fighting", + "damage": 5 + }, + { + "name": "Rock Smash", + "type": "Fighting", + "damage": 15 + } + ], + "special": [ + { + "name": "Low Sweep", + "type": "Fighting", + "damage": 30 + }, + { + "name": "Stomp", + "type": "Normal", + "damage": 30 + }, + { + "name": "Stone Edge", + "type": "Rock", + "damage": 80 + } + ] + } + }, + { + "id": "107", + "name": "Hitmonchan", + "classification": "Punching Pokémon", + "types": [ + "Fighting" + ], + "resistant": [ + "Bug", + "Rock", + "Dark" + ], + "weaknesses": [ + "Flying", + "Psychic", + "Fairy" + ], + "weight": { + "minimum": "43.93kg", + "maximum": "56.48kg" + }, + "height": { + "minimum": "1.22m", + "maximum": "1.57m" + }, + "fleeRate": 0.09, + "maxCP": 1370, + "maxHP": 1516, + "attacks": { + "fast": [ + { + "name": "Bullet Punch", + "type": "Steel", + "damage": 10 + }, + { + "name": "Rock Smash", + "type": "Fighting", + "damage": 15 + } + ], + "special": [ + { + "name": "Brick Break", + "type": "Fighting", + "damage": 30 + }, + { + "name": "Fire Punch", + "type": "Fire", + "damage": 40 + }, + { + "name": "Ice Punch", + "type": "Ice", + "damage": 45 + }, + { + "name": "Thunder Punch", + "type": "Electric", + "damage": 40 + } + ] + } + }, + { + "id": "108", + "name": "Lickitung", + "classification": "Licking Pokémon", + "types": [ + "Normal" + ], + "resistant": [ + "Ghost" + ], + "weaknesses": [ + "Fighting" + ], + "weight": { + "minimum": "57.31kg", + "maximum": "73.69kg" + }, + "height": { + "minimum": "1.05m", + "maximum": "1.35m" + }, + "fleeRate": 0.09, + "maxCP": 1477, + "maxHP": 1626, + "attacks": { + "fast": [ + { + "name": "Lick", + "type": "Ghost", + "damage": 5 + }, + { + "name": "Zen Headbutt", + "type": "Psychic", + "damage": 12 + } + ], + "special": [ + { + "name": "Hyper Beam", + "type": "Normal", + "damage": 120 + }, + { + "name": "Power Whip", + "type": "Grass", + "damage": 70 + }, + { + "name": "Stomp", + "type": "Normal", + "damage": 30 + } + ] + } + }, + { + "id": "109", + "name": "Koffing", + "classification": "Poison Gas Pokémon", + "types": [ + "Poison" + ], + "resistant": [ + "Grass", + "Fighting", + "Poison", + "Bug", + "Fairy" + ], + "weaknesses": [ + "Ground", + "Psychic" + ], + "weight": { + "minimum": "0.88kg", + "maximum": "1.13kg" + }, + "height": { + "minimum": "0.53m", + "maximum": "0.68m" + }, + "fleeRate": 0.1, + "evolutionRequirements": { + "amount": 50, + "name": "Koffing candies" + }, + "evolutions": [ + { + "id": 110, + "name": "Weezing" + } + ], + "maxCP": 1025, + "maxHP": 1151, + "attacks": { + "fast": [ + { + "name": "Acid", + "type": "Poison", + "damage": 10 + }, + { + "name": "Tackle", + "type": "Normal", + "damage": 12 + } + ], + "special": [ + { + "name": "Dark Pulse", + "type": "Dark", + "damage": 45 + }, + { + "name": "Sludge", + "type": "Poison", + "damage": 30 + }, + { + "name": "Sludge Bomb", + "type": "Poison", + "damage": 55 + } + ] + } + }, + { + "id": "110", + "name": "Weezing", + "classification": "Poison Gas Pokémon", + "types": [ + "Poison" + ], + "resistant": [ + "Grass", + "Fighting", + "Poison", + "Bug", + "Fairy" + ], + "weaknesses": [ + "Ground", + "Psychic" + ], + "weight": { + "minimum": "8.31kg", + "maximum": "10.69kg" + }, + "height": { + "minimum": "1.05m", + "maximum": "1.35m" + }, + "fleeRate": 0.06, + "Previous evolution(s)": [ + { + "id": 109, + "name": "Koffing" + } + ], + "maxCP": 2073, + "maxHP": 2250, + "attacks": { + "fast": [ + { + "name": "Acid", + "type": "Poison", + "damage": 10 + }, + { + "name": "Tackle", + "type": "Normal", + "damage": 12 + } + ], + "special": [ + { + "name": "Dark Pulse", + "type": "Dark", + "damage": 45 + }, + { + "name": "Shadow Ball", + "type": "Ghost", + "damage": 45 + }, + { + "name": "Sludge Bomb", + "type": "Poison", + "damage": 55 + } + ] + } + }, + { + "id": "111", + "name": "Rhyhorn", + "classification": "Spikes Pokémon", + "types": [ + "Ground", + "Rock" + ], + "resistant": [ + "Normal", + "Fire", + "Electric", + "Poison", + "Flying", + "Rock" + ], + "weaknesses": [ + "Water", + "Grass", + "Ice", + "Fighting", + "Ground", + "Steel" + ], + "weight": { + "minimum": "100.63kg", + "maximum": "129.38kg" + }, + "height": { + "minimum": "0.88m", + "maximum": "1.13m" + }, + "fleeRate": 0.1, + "evolutionRequirements": { + "amount": 50, + "name": "Rhyhorn candies" + }, + "evolutions": [ + { + "id": 112, + "name": "Rhydon" + } + ], + "maxCP": 1055, + "maxHP": 1182, + "attacks": { + "fast": [ + { + "name": "Mud Slap", + "type": "Ground", + "damage": 15 + }, + { + "name": "Rock Smash", + "type": "Fighting", + "damage": 15 + } + ], + "special": [ + { + "name": "Bulldoze", + "type": "Ground", + "damage": 35 + }, + { + "name": "Horn Attack", + "type": "Normal", + "damage": 25 + }, + { + "name": "Stomp", + "type": "Normal", + "damage": 30 + } + ] + } + }, + { + "id": "112", + "name": "Rhydon", + "classification": "Drill Pokémon", + "types": [ + "Ground", + "Rock" + ], + "resistant": [ + "Normal", + "Fire", + "Electric", + "Poison", + "Flying", + "Rock" + ], + "weaknesses": [ + "Water", + "Grass", + "Ice", + "Fighting", + "Ground", + "Steel" + ], + "weight": { + "minimum": "105kg", + "maximum": "135kg" + }, + "height": { + "minimum": "1.66m", + "maximum": "2.14m" + }, + "fleeRate": 0.06, + "Previous evolution(s)": [ + { + "id": 111, + "name": "Rhyhorn" + } + ], + "maxCP": 2068, + "maxHP": 2243, + "attacks": { + "fast": [ + { + "name": "Mud Slap", + "type": "Ground", + "damage": 15 + }, + { + "name": "Rock Smash", + "type": "Fighting", + "damage": 15 + } + ], + "special": [ + { + "name": "Earthquake", + "type": "Ground", + "damage": 100 + }, + { + "name": "Megahorn", + "type": "Bug", + "damage": 80 + }, + { + "name": "Stone Edge", + "type": "Rock", + "damage": 80 + } + ] + } + }, + { + "id": "113", + "name": "Chansey", + "classification": "Egg Pokémon", + "types": [ + "Normal" + ], + "resistant": [ + "Ghost" + ], + "weaknesses": [ + "Fighting" + ], + "weight": { + "minimum": "30.27kg", + "maximum": "38.92kg" + }, + "height": { + "minimum": "0.96m", + "maximum": "1.24m" + }, + "fleeRate": 0.09, + "maxCP": 549, + "maxHP": 675, + "attacks": { + "fast": [ + { + "name": "Pound", + "type": "Normal", + "damage": 7 + }, + { + "name": "Zen Headbutt", + "type": "Psychic", + "damage": 12 + } + ], + "special": [ + { + "name": "Dazzling Gleam", + "type": "Fairy", + "damage": 55 + }, + { + "name": "Psybeam", + "type": "Psychic", + "damage": 40 + }, + { + "name": "Psychic", + "type": "Psychic", + "damage": 55 + } + ] + } + }, + { + "id": "114", + "name": "Tangela", + "classification": "Vine Pokémon", + "types": [ + "Grass" + ], + "resistant": [ + "Water", + "Electric", + "Grass", + "Ground" + ], + "weaknesses": [ + "Fire", + "Ice", + "Poison", + "Flying", + "Bug" + ], + "weight": { + "minimum": "30.63kg", + "maximum": "39.38kg" + }, + "height": { + "minimum": "0.88m", + "maximum": "1.13m" + }, + "fleeRate": 0.09, + "maxCP": 1586, + "maxHP": 1739, + "attacks": { + "fast": [ + { + "name": "Vine Whip", + "type": "Grass", + "damage": 7 + } + ], + "special": [ + { + "name": "Power Whip", + "type": "Grass", + "damage": 70 + }, + { + "name": "Sludge Bomb", + "type": "Poison", + "damage": 55 + }, + { + "name": "Solar Beam", + "type": "Grass", + "damage": 120 + } + ] + } + }, + { + "id": "115", + "name": "Kangaskhan", + "classification": "Parent Pokémon", + "types": [ + "Normal" + ], + "resistant": [ + "Ghost" + ], + "weaknesses": [ + "Fighting" + ], + "weight": { + "minimum": "70kg", + "maximum": "90kg" + }, + "height": { + "minimum": "1.93m", + "maximum": "2.48m" + }, + "fleeRate": 0.09, + "Common Capture Area": "Early reports that this Pokémon is likely to be found in: Australia, New Zealand", + "Australia, New Zealand": "Common Capture Area", + "maxCP": 1875, + "maxHP": 2043, + "attacks": { + "fast": [ + { + "name": "Low Kick", + "type": "Fighting", + "damage": 5 + }, + { + "name": "Mud Slap", + "type": "Ground", + "damage": 15 + } + ], + "special": [ + { + "name": "Brick Break", + "type": "Fighting", + "damage": 30 + }, + { + "name": "Earthquake", + "type": "Ground", + "damage": 100 + }, + { + "name": "Stomp", + "type": "Normal", + "damage": 30 + } + ] + } + }, + { + "id": "116", + "name": "Horsea", + "classification": "Dragon Pokémon", + "types": [ + "Water" + ], + "resistant": [ + "Fire", + "Water", + "Ice", + "Steel" + ], + "weaknesses": [ + "Electric", + "Grass" + ], + "weight": { + "minimum": "7kg", + "maximum": "9kg" + }, + "height": { + "minimum": "0.35m", + "maximum": "0.45m" + }, + "fleeRate": 0.1, + "evolutionRequirements": { + "amount": 50, + "name": "Horsea candies" + }, + "evolutions": [ + { + "id": 117, + "name": "Seadra" + } + ], + "maxCP": 688, + "maxHP": 794, + "attacks": { + "fast": [ + { + "name": "Bubble", + "type": "Water", + "damage": 25 + }, + { + "name": "Water Gun", + "type": "Water", + "damage": 6 + } + ], + "special": [ + { + "name": "Bubble Beam", + "type": "Water", + "damage": 30 + }, + { + "name": "Dragon Pulse", + "type": "Dragon", + "damage": 65 + }, + { + "name": "Flash Cannon", + "type": "Steel", + "damage": 60 + } + ] + } + }, + { + "id": "117", + "name": "Seadra", + "classification": "Dragon Pokémon", + "types": [ + "Water" + ], + "resistant": [ + "Fire", + "Water", + "Ice", + "Steel" + ], + "weaknesses": [ + "Electric", + "Grass" + ], + "weight": { + "minimum": "21.88kg", + "maximum": "28.13kg" + }, + "height": { + "minimum": "1.05m", + "maximum": "1.35m" + }, + "fleeRate": 0.06, + "Previous evolution(s)": [ + { + "id": 116, + "name": "Horsea" + } + ], + "maxCP": 1559, + "maxHP": 1713, + "attacks": { + "fast": [ + { + "name": "Dragon Breath", + "type": "Dragon", + "damage": 6 + }, + { + "name": "Water Gun", + "type": "Water", + "damage": 6 + } + ], + "special": [ + { + "name": "Blizzard", + "type": "Ice", + "damage": 100 + }, + { + "name": "Dragon Pulse", + "type": "Dragon", + "damage": 65 + }, + { + "name": "Hydro Pump", + "type": "Water", + "damage": 90 + } + ] + } + }, + { + "id": "118", + "name": "Goldeen", + "classification": "Goldfish Pokémon", + "types": [ + "Water" + ], + "resistant": [ + "Fire", + "Water", + "Ice", + "Steel" + ], + "weaknesses": [ + "Electric", + "Grass" + ], + "weight": { + "minimum": "13.13kg", + "maximum": "16.88kg" + }, + "height": { + "minimum": "0.53m", + "maximum": "0.68m" + }, + "fleeRate": 0.15, + "evolutionRequirements": { + "amount": 50, + "name": "Goldeen candies" + }, + "evolutions": [ + { + "id": 119, + "name": "Seaking" + } + ], + "maxCP": 851, + "maxHP": 965, + "attacks": { + "fast": [ + { + "name": "Mud Shot", + "type": "Ground", + "damage": 6 + }, + { + "name": "Peck", + "type": "Flying", + "damage": 10 + } + ], + "special": [ + { + "name": "Aqua Tail", + "type": "Water", + "damage": 45 + }, + { + "name": "Horn Attack", + "type": "Normal", + "damage": 25 + }, + { + "name": "Water Pulse", + "type": "Water", + "damage": 35 + } + ] + } + }, + { + "id": "119", + "name": "Seaking", + "classification": "Goldfish Pokémon", + "types": [ + "Water" + ], + "resistant": [ + "Fire", + "Water", + "Ice", + "Steel" + ], + "weaknesses": [ + "Electric", + "Grass" + ], + "weight": { + "minimum": "34.13kg", + "maximum": "43.88kg" + }, + "height": { + "minimum": "1.14m", + "maximum": "1.46m" + }, + "fleeRate": 0.07, + "Previous evolution(s)": [ + { + "id": 118, + "name": "Goldeen" + } + ], + "maxCP": 1877, + "maxHP": 2043, + "attacks": { + "fast": [ + { + "name": "Peck", + "type": "Flying", + "damage": 10 + }, + { + "name": "Poison Jab", + "type": "Poison", + "damage": 12 + } + ], + "special": [ + { + "name": "Drill Run", + "type": "Ground", + "damage": 50 + }, + { + "name": "Icy Wind", + "type": "Ice", + "damage": 25 + }, + { + "name": "Megahorn", + "type": "Bug", + "damage": 80 + } + ] + } + }, + { + "id": "120", + "name": "Staryu", + "classification": "Starshape Pokémon", + "types": [ + "Water" + ], + "resistant": [ + "Fire", + "Water", + "Ice", + "Steel" + ], + "weaknesses": [ + "Electric", + "Grass" + ], + "weight": { + "minimum": "30.19kg", + "maximum": "38.81kg" + }, + "height": { + "minimum": "0.7m", + "maximum": "0.9m" + }, + "fleeRate": 0.15, + "evolutionRequirements": { + "amount": 50, + "name": "Staryu candies" + }, + "evolutions": [ + { + "id": 121, + "name": "Starmie" + } + ], + "maxCP": 821, + "maxHP": 937, + "attacks": { + "fast": [ + { + "name": "Quick Attack", + "type": "Normal", + "damage": 10 + }, + { + "name": "Water Gun", + "type": "Water", + "damage": 6 + } + ], + "special": [ + { + "name": "Bubble Beam", + "type": "Water", + "damage": 30 + }, + { + "name": "Power Gem", + "type": "Rock", + "damage": 40 + }, + { + "name": "Swift", + "type": "Normal", + "damage": 30 + } + ] + } + }, + { + "id": "121", + "name": "Starmie", + "classification": "Mysterious Pokémon", + "types": [ + "Water", + "Psychic" + ], + "resistant": [ + "Fire", + "Water", + "Ice", + "Fighting", + "Psychic", + "Steel" + ], + "weaknesses": [ + "Electric", + "Grass", + "Bug", + "Ghost", + "Dark" + ], + "weight": { + "minimum": "70kg", + "maximum": "90kg" + }, + "height": { + "minimum": "0.96m", + "maximum": "1.24m" + }, + "fleeRate": 0.06, + "Previous evolution(s)": [ + { + "id": 120, + "name": "Staryu" + } + ], + "maxCP": 2007, + "maxHP": 2182, + "attacks": { + "fast": [ + { + "name": "Quick Attack", + "type": "Normal", + "damage": 10 + }, + { + "name": "Water Gun", + "type": "Water", + "damage": 6 + } + ], + "special": [ + { + "name": "Hydro Pump", + "type": "Water", + "damage": 90 + }, + { + "name": "Power Gem", + "type": "Rock", + "damage": 40 + }, + { + "name": "Psybeam", + "type": "Psychic", + "damage": 40 + } + ] + } + }, + { + "id": "122", + "name": "Mr. Mime", + "classification": "Barrier Pokémon", + "types": [ + "Psychic", + "Fairy" + ], + "resistant": [ + "Fighting", + "Psychic", + "Dragon" + ], + "weaknesses": [ + "Poison", + "Ghost", + "Steel" + ], + "weight": { + "minimum": "47.69kg", + "maximum": "61.31kg" + }, + "height": { + "minimum": "1.14m", + "maximum": "1.46m" + }, + "fleeRate": 0.09, + "Common Capture Area": "Early reports that this Pokémon is likely to be found in: Western Europe", + "Western Europe": "Common Capture Area", + "maxCP": 1345, + "maxHP": 1494, + "attacks": { + "fast": [ + { + "name": "Confusion", + "type": "Psychic", + "damage": 15 + }, + { + "name": "Zen Headbutt", + "type": "Psychic", + "damage": 12 + } + ], + "special": [ + { + "name": "Psybeam", + "type": "Psychic", + "damage": 40 + }, + { + "name": "Psychic", + "type": "Psychic", + "damage": 55 + }, + { + "name": "Shadow Ball", + "type": "Ghost", + "damage": 45 + } + ] + } + }, + { + "id": "123", + "name": "Scyther", + "classification": "Mantis Pokémon", + "types": [ + "Bug", + "Flying" + ], + "resistant": [ + "Grass", + "Fighting", + "Ground", + "Bug" + ], + "weaknesses": [ + "Fire", + "Electric", + "Ice", + "Flying", + "Rock" + ], + "weight": { + "minimum": "49kg", + "maximum": "63kg" + }, + "height": { + "minimum": "1.31m", + "maximum": "1.69m" + }, + "fleeRate": 0.09, + "maxCP": 1905, + "maxHP": 2073, + "attacks": { + "fast": [ + { + "name": "Fury Cutter", + "type": "Bug", + "damage": 3 + }, + { + "name": "Steel Wing", + "type": "Steel", + "damage": 15 + } + ], + "special": [ + { + "name": "Bug Buzz", + "type": "Bug", + "damage": 75 + }, + { + "name": "Night Slash", + "type": "Dark", + "damage": 30 + }, + { + "name": "X Scissor", + "type": "Bug", + "damage": 35 + } + ] + } + }, + { + "id": "124", + "name": "Jynx", + "classification": "Humanshape Pokémon", + "types": [ + "Ice", + "Psychic" + ], + "resistant": [ + "Ice", + "Psychic" + ], + "weaknesses": [ + "Fire", + "Bug", + "Rock", + "Ghost", + "Dark", + "Steel" + ], + "weight": { + "minimum": "35.52kg", + "maximum": "45.67kg" + }, + "height": { + "minimum": "1.22m", + "maximum": "1.57m" + }, + "fleeRate": 0.09, + "maxCP": 1563, + "maxHP": 1716, + "attacks": { + "fast": [ + { + "name": "Frost Breath", + "type": "Ice", + "damage": 9 + }, + { + "name": "Pound", + "type": "Normal", + "damage": 7 + } + ], + "special": [ + { + "name": "Draining Kiss", + "type": "Fairy", + "damage": 25 + }, + { + "name": "Ice Punch", + "type": "Ice", + "damage": 45 + }, + { + "name": "Psyshock", + "type": "Psychic", + "damage": 40 + } + ] + } + }, + { + "id": "125", + "name": "Electabuzz", + "classification": "Electric Pokémon", + "types": [ + "Electric" + ], + "resistant": [ + "Electric", + "Flying", + "Steel" + ], + "weaknesses": [ + "Ground" + ], + "weight": { + "minimum": "26.25kg", + "maximum": "33.75kg" + }, + "height": { + "minimum": "0.96m", + "maximum": "1.24m" + }, + "fleeRate": 0.09, + "maxCP": 1947, + "maxHP": 2119, + "attacks": { + "fast": [ + { + "name": "Low Kick", + "type": "Fighting", + "damage": 5 + }, + { + "name": "Thunder Shock", + "type": "Electric", + "damage": 5 + } + ], + "special": [ + { + "name": "Thunder", + "type": "Electric", + "damage": 100 + }, + { + "name": "Thunder Punch", + "type": "Electric", + "damage": 40 + }, + { + "name": "Thunderbolt", + "type": "Electric", + "damage": 55 + } + ] + } + }, + { + "id": "126", + "name": "Magmar", + "classification": "Spitfire Pokémon", + "types": [ + "Fire" + ], + "resistant": [ + "Fire", + "Grass", + "Ice", + "Bug", + "Steel", + "Fairy" + ], + "weaknesses": [ + "Water", + "Ground", + "Rock" + ], + "weight": { + "minimum": "38.94kg", + "maximum": "50.06kg" + }, + "height": { + "minimum": "1.14m", + "maximum": "1.46m" + }, + "fleeRate": 0.09, + "maxCP": 2086, + "maxHP": 2265, + "attacks": { + "fast": [ + { + "name": "Ember", + "type": "Fire", + "damage": 10 + }, + { + "name": "Karate Chop", + "type": "Fighting", + "damage": 6 + } + ], + "special": [ + { + "name": "Fire Blast", + "type": "Fire", + "damage": 100 + }, + { + "name": "Fire Punch", + "type": "Fire", + "damage": 40 + }, + { + "name": "Flamethrower", + "type": "Fire", + "damage": 55 + } + ] + } + }, + { + "id": "127", + "name": "Pinsir", + "classification": "Stagbeetle Pokémon", + "types": [ + "Bug" + ], + "resistant": [ + "Grass", + "Fighting", + "Ground" + ], + "weaknesses": [ + "Fire", + "Flying", + "Rock" + ], + "weight": { + "minimum": "48.13kg", + "maximum": "61.88kg" + }, + "height": { + "minimum": "1.31m", + "maximum": "1.69m" + }, + "fleeRate": 0.09, + "maxCP": 1950, + "maxHP": 2121, + "attacks": { + "fast": [ + { + "name": "Fury Cutter", + "type": "Bug", + "damage": 3 + }, + { + "name": "Rock Smash", + "type": "Fighting", + "damage": 15 + } + ], + "special": [ + { + "name": "Submission", + "type": "Fighting", + "damage": 30 + }, + { + "name": "Vice Grip", + "type": "Normal", + "damage": 25 + }, + { + "name": "X Scissor", + "type": "Bug", + "damage": 35 + } + ] + } + }, + { + "id": "128", + "name": "Tauros", + "classification": "Wild Bull Pokémon", + "types": [ + "Normal" + ], + "resistant": [ + "Ghost" + ], + "weaknesses": [ + "Fighting" + ], + "weight": { + "minimum": "77.35kg", + "maximum": "99.45kg" + }, + "height": { + "minimum": "1.22m", + "maximum": "1.57m" + }, + "fleeRate": 0.09, + "Common Capture Area": "Early reports that this Pokémon is likely to be found in: North America", + "North America": "Common Capture Area", + "maxCP": 1686, + "maxHP": 1844, + "attacks": { + "fast": [ + { + "name": "Tackle", + "type": "Normal", + "damage": 12 + }, + { + "name": "Zen Headbutt", + "type": "Psychic", + "damage": 12 + } + ], + "special": [ + { + "name": "Earthquake", + "type": "Ground", + "damage": 100 + }, + { + "name": "Horn Attack", + "type": "Normal", + "damage": 25 + }, + { + "name": "Iron Head", + "type": "Steel", + "damage": 30 + } + ] + } + }, + { + "id": "129", + "name": "Magikarp", + "classification": "Fish Pokémon", + "types": [ + "Water" + ], + "resistant": [ + "Fire", + "Water", + "Ice", + "Steel" + ], + "weaknesses": [ + "Electric", + "Grass" + ], + "weight": { + "minimum": "8.75kg", + "maximum": "11.25kg" + }, + "height": { + "minimum": "0.79m", + "maximum": "1.01m" + }, + "fleeRate": 0.15, + "evolutionRequirements": { + "amount": 400, + "name": "Magikarp candies" + }, + "evolutions": [ + { + "id": 130, + "name": "Gyarados" + } + ], + "maxCP": 203, + "maxHP": 262, + "attacks": { + "fast": [ + { + "name": "Splash", + "type": "Water", + "damage": 0 + } + ], + "special": [ + { + "name": "Struggle", + "type": "Normal", + "damage": 15 + } + ] + } + }, + { + "id": "130", + "name": "Gyarados", + "classification": "Atrocious Pokémon", + "types": [ + "Water", + "Flying" + ], + "resistant": [ + "Fire", + "Water", + "Fighting", + "Ground", + "Bug", + "Steel" + ], + "weaknesses": [ + "Electric", + "Rock" + ], + "weight": { + "minimum": "205.63kg", + "maximum": "264.38kg" + }, + "height": { + "minimum": "5.69m", + "maximum": "7.31m" + }, + "fleeRate": 0.07, + "Previous evolution(s)": [ + { + "id": 129, + "name": "Magikarp" + } + ], + "maxCP": 2498, + "maxHP": 2688, + "attacks": { + "fast": [ + { + "name": "Bite", + "type": "Dark", + "damage": 6 + }, + { + "name": "Dragon Breath", + "type": "Dragon", + "damage": 6 + } + ], + "special": [ + { + "name": "Dragon Pulse", + "type": "Dragon", + "damage": 65 + }, + { + "name": "Hydro Pump", + "type": "Water", + "damage": 90 + }, + { + "name": "Twister", + "type": "Dragon", + "damage": 25 + } + ] + } + }, + { + "id": "131", + "name": "Lapras", + "classification": "Transport Pokémon", + "types": [ + "Water", + "Ice" + ], + "resistant": [ + "Water", + "Ice" + ], + "weaknesses": [ + "Electric", + "Grass", + "Fighting", + "Rock" + ], + "weight": { + "minimum": "192.5kg", + "maximum": "247.5kg" + }, + "height": { + "minimum": "2.19m", + "maximum": "2.81m" + }, + "fleeRate": 0.09, + "maxCP": 2777, + "maxHP": 2980, + "attacks": { + "fast": [ + { + "name": "Frost Breath", + "type": "Ice", + "damage": 9 + }, + { + "name": "Ice Shard", + "type": "Ice", + "damage": 15 + } + ], + "special": [ + { + "name": "Blizzard", + "type": "Ice", + "damage": 100 + }, + { + "name": "Dragon Pulse", + "type": "Dragon", + "damage": 65 + }, + { + "name": "Ice Beam", + "type": "Ice", + "damage": 65 + } + ] + } + }, + { + "id": "132", + "name": "Ditto", + "classification": "Transform Pokémon", + "types": [ + "Normal" + ], + "resistant": [ + "Ghost" + ], + "weaknesses": [ + "Fighting" + ], + "weight": { + "minimum": "3.5kg", + "maximum": "4.5kg" + }, + "height": { + "minimum": "0.26m", + "maximum": "0.34m" + }, + "fleeRate": 0.1, + "maxCP": 809, + "maxHP": 919, + "attacks": { + "fast": [ + { + "name": "Pound", + "type": "Normal", + "damage": 7 + } + ], + "special": [ + { + "name": "Struggle", + "type": "Normal", + "damage": 15 + } + ] + } + }, + { + "id": "133", + "name": "Eevee", + "classification": "Evolution Pokémon", + "types": [ + "Normal" + ], + "resistant": [ + "Ghost" + ], + "weaknesses": [ + "Fighting" + ], + "weight": { + "minimum": "5.69kg", + "maximum": "7.31kg" + }, + "height": { + "minimum": "0.26m", + "maximum": "0.34m" + }, + "fleeRate": 0.1, + "evolutionRequirements": { + "amount": 25, + "name": "Eevee candies" + }, + "evolutions": [ + { + "id": 134, + "name": "Vaporeon" + }, + { + "id": 135, + "name": "Jolteon" + }, + { + "id": 136, + "name": "Flareon" + } + ], + "maxCP": 957, + "maxHP": 1077, + "attacks": { + "fast": [ + { + "name": "Quick Attack", + "type": "Normal", + "damage": 10 + }, + { + "name": "Tackle", + "type": "Normal", + "damage": 12 + } + ], + "special": [ + { + "name": "Body Slam", + "type": "Normal", + "damage": 40 + }, + { + "name": "Dig", + "type": "Ground", + "damage": 70 + }, + { + "name": "Swift", + "type": "Normal", + "damage": 30 + } + ] + } + }, + { + "id": "134", + "name": "Vaporeon", + "classification": "Bubble Jet Pokémon", + "types": [ + "Water" + ], + "resistant": [ + "Fire", + "Water", + "Ice", + "Steel" + ], + "weaknesses": [ + "Electric", + "Grass" + ], + "weight": { + "minimum": "25.38kg", + "maximum": "32.63kg" + }, + "height": { + "minimum": "0.88m", + "maximum": "1.13m" + }, + "fleeRate": 0.06, + "Previous evolution(s)": [ + { + "id": 133, + "name": "Eevee" + } + ], + "maxCP": 2618, + "maxHP": 2816, + "attacks": { + "fast": [ + { + "name": "Water Gun", + "type": "Water", + "damage": 6 + } + ], + "special": [ + { + "name": "Aqua Tail", + "type": "Water", + "damage": 45 + }, + { + "name": "Hydro Pump", + "type": "Water", + "damage": 90 + }, + { + "name": "Water Pulse", + "type": "Water", + "damage": 35 + } + ] + } + }, + { + "id": "135", + "name": "Jolteon", + "classification": "Lightning Pokémon", + "types": [ + "Electric" + ], + "resistant": [ + "Electric", + "Flying", + "Steel" + ], + "weaknesses": [ + "Ground" + ], + "weight": { + "minimum": "21.44kg", + "maximum": "27.56kg" + }, + "height": { + "minimum": "0.7m", + "maximum": "0.9m" + }, + "fleeRate": 0.06, + "Previous evolution(s)": [ + { + "id": 133, + "name": "Eevee" + } + ], + "maxCP": 1968, + "maxHP": 2140, + "attacks": { + "fast": [ + { + "name": "Thunder Shock", + "type": "Electric", + "damage": 5 + } + ], + "special": [ + { + "name": "Discharge", + "type": "Electric", + "damage": 35 + }, + { + "name": "Thunder", + "type": "Electric", + "damage": 100 + }, + { + "name": "Thunderbolt", + "type": "Electric", + "damage": 55 + } + ] + } + }, + { + "id": "136", + "name": "Flareon", + "classification": "Flame Pokémon", + "types": [ + "Fire" + ], + "resistant": [ + "Fire", + "Grass", + "Ice", + "Bug", + "Steel", + "Fairy" + ], + "weaknesses": [ + "Water", + "Ground", + "Rock" + ], + "weight": { + "minimum": "21.88kg", + "maximum": "28.13kg" + }, + "height": { + "minimum": "0.79m", + "maximum": "1.01m" + }, + "fleeRate": 0.06, + "Previous evolution(s)": [ + { + "id": 133, + "name": "Eevee" + } + ], + "maxCP": 2448, + "maxHP": 2643, + "attacks": { + "fast": [ + { + "name": "Ember", + "type": "Fire", + "damage": 10 + } + ], + "special": [ + { + "name": "Fire Blast", + "type": "Fire", + "damage": 100 + }, + { + "name": "Flamethrower", + "type": "Fire", + "damage": 55 + }, + { + "name": "Heat Wave", + "type": "Fire", + "damage": 80 + } + ] + } + }, + { + "id": "137", + "name": "Porygon", + "classification": "Virtual Pokémon", + "types": [ + "Normal" + ], + "resistant": [ + "Ghost" + ], + "weaknesses": [ + "Fighting" + ], + "weight": { + "minimum": "31.94kg", + "maximum": "41.06kg" + }, + "height": { + "minimum": "0.7m", + "maximum": "0.9m" + }, + "fleeRate": 0.09, + "maxCP": 1540, + "maxHP": 1691, + "attacks": { + "fast": [ + { + "name": "Quick Attack", + "type": "Normal", + "damage": 10 + }, + { + "name": "Tackle", + "type": "Normal", + "damage": 12 + } + ], + "special": [ + { + "name": "Discharge", + "type": "Electric", + "damage": 35 + }, + { + "name": "Psybeam", + "type": "Psychic", + "damage": 40 + }, + { + "name": "Signal Beam", + "type": "Bug", + "damage": 45 + } + ] + } + }, + { + "id": "138", + "name": "Omanyte", + "classification": "Spiral Pokémon", + "types": [ + "Rock", + "Water" + ], + "resistant": [ + "Normal", + "Fire", + "Ice", + "Poison", + "Flying" + ], + "weaknesses": [ + "Electric", + "Grass", + "Fighting", + "Ground" + ], + "weight": { + "minimum": "6.56kg", + "maximum": "8.44kg" + }, + "height": { + "minimum": "0.35m", + "maximum": "0.45m" + }, + "fleeRate": 0.09, + "evolutionRequirements": { + "amount": 50, + "name": "Omanyte candies" + }, + "evolutions": [ + { + "id": 139, + "name": "Omastar" + } + ], + "maxCP": 992, + "maxHP": 1119, + "attacks": { + "fast": [ + { + "name": "Mud Shot", + "type": "Ground", + "damage": 6 + }, + { + "name": "Water Gun", + "type": "Water", + "damage": 6 + } + ], + "special": [ + { + "name": "Ancient Power", + "type": "Rock", + "damage": 35 + }, + { + "name": "Brine", + "type": "Water", + "damage": 25 + }, + { + "name": "Rock Tomb", + "type": "Rock", + "damage": 30 + } + ] + } + }, + { + "id": "139", + "name": "Omastar", + "classification": "Spiral Pokémon", + "types": [ + "Rock", + "Water" + ], + "resistant": [ + "Normal", + "Fire", + "Ice", + "Poison", + "Flying" + ], + "weaknesses": [ + "Electric", + "Grass", + "Fighting", + "Ground" + ], + "weight": { + "minimum": "30.63kg", + "maximum": "39.38kg" + }, + "height": { + "minimum": "0.88m", + "maximum": "1.13m" + }, + "fleeRate": 0.05, + "Previous evolution(s)": [ + { + "id": 138, + "name": "Omanyte" + } + ], + "maxCP": 2058, + "maxHP": 2233, + "attacks": { + "fast": [ + { + "name": "Rock Throw", + "type": "Rock", + "damage": 12 + }, + { + "name": "Water Gun", + "type": "Water", + "damage": 6 + } + ], + "special": [ + { + "name": "Ancient Power", + "type": "Rock", + "damage": 35 + }, + { + "name": "Hydro Pump", + "type": "Water", + "damage": 90 + }, + { + "name": "Rock Slide", + "type": "Rock", + "damage": 50 + } + ] + } + }, + { + "id": "140", + "name": "Kabuto", + "classification": "Shellfish Pokémon", + "types": [ + "Rock", + "Water" + ], + "resistant": [ + "Normal", + "Fire", + "Ice", + "Poison", + "Flying" + ], + "weaknesses": [ + "Electric", + "Grass", + "Fighting", + "Ground" + ], + "weight": { + "minimum": "10.06kg", + "maximum": "12.94kg" + }, + "height": { + "minimum": "0.44m", + "maximum": "0.56m" + }, + "fleeRate": 0.09, + "evolutionRequirements": { + "amount": 50, + "name": "Kabuto candies" + }, + "evolutions": [ + { + "id": 141, + "name": "Kabutops" + } + ], + "maxCP": 975, + "maxHP": 1104, + "attacks": { + "fast": [ + { + "name": "Mud Shot", + "type": "Ground", + "damage": 6 + }, + { + "name": "Scratch", + "type": "Normal", + "damage": 6 + } + ], + "special": [ + { + "name": "Ancient Power", + "type": "Rock", + "damage": 35 + }, + { + "name": "Aqua Jet", + "type": "Water", + "damage": 25 + }, + { + "name": "Rock Tomb", + "type": "Rock", + "damage": 30 + } + ] + } + }, + { + "id": "141", + "name": "Kabutops", + "classification": "Shellfish Pokémon", + "types": [ + "Rock", + "Water" + ], + "resistant": [ + "Normal", + "Fire", + "Ice", + "Poison", + "Flying" + ], + "weaknesses": [ + "Electric", + "Grass", + "Fighting", + "Ground" + ], + "weight": { + "minimum": "35.44kg", + "maximum": "45.56kg" + }, + "height": { + "minimum": "1.14m", + "maximum": "1.46m" + }, + "fleeRate": 0.05, + "Previous evolution(s)": [ + { + "id": 140, + "name": "Kabuto" + } + ], + "maxCP": 1957, + "maxHP": 2130, + "attacks": { + "fast": [ + { + "name": "Fury Cutter", + "type": "Bug", + "damage": 3 + }, + { + "name": "Mud Shot", + "type": "Ground", + "damage": 6 + } + ], + "special": [ + { + "name": "Ancient Power", + "type": "Rock", + "damage": 35 + }, + { + "name": "Stone Edge", + "type": "Rock", + "damage": 80 + }, + { + "name": "Water Pulse", + "type": "Water", + "damage": 35 + } + ] + } + }, + { + "id": "142", + "name": "Aerodactyl", + "classification": "Fossil Pokémon", + "types": [ + "Rock", + "Flying" + ], + "resistant": [ + "Normal", + "Fire", + "Poison", + "Flying", + "Bug" + ], + "weaknesses": [ + "Water", + "Electric", + "Ice", + "Rock", + "Steel" + ], + "weight": { + "minimum": "51.63kg", + "maximum": "66.38kg" + }, + "height": { + "minimum": "1.57m", + "maximum": "2.02m" + }, + "fleeRate": 0.09, + "maxCP": 1994, + "maxHP": 2165, + "attacks": { + "fast": [ + { + "name": "Bite", + "type": "Dark", + "damage": 6 + }, + { + "name": "Steel Wing", + "type": "Steel", + "damage": 15 + } + ], + "special": [ + { + "name": "Ancient Power", + "type": "Rock", + "damage": 35 + }, + { + "name": "Hyper Beam", + "type": "Normal", + "damage": 120 + }, + { + "name": "Iron Head", + "type": "Steel", + "damage": 30 + } + ] + } + }, + { + "id": "143", + "name": "Snorlax", + "classification": "Sleeping Pokémon", + "types": [ + "Normal" + ], + "resistant": [ + "Ghost" + ], + "weaknesses": [ + "Fighting" + ], + "weight": { + "minimum": "402.5kg", + "maximum": "517.5kg" + }, + "height": { + "minimum": "1.84m", + "maximum": "2.36m" + }, + "fleeRate": 0.09, + "maxCP": 2901, + "maxHP": 3112, + "attacks": { + "fast": [ + { + "name": "Lick", + "type": "Ghost", + "damage": 5 + }, + { + "name": "Zen Headbutt", + "type": "Psychic", + "damage": 12 + } + ], + "special": [ + { + "name": "Body Slam", + "type": "Normal", + "damage": 40 + }, + { + "name": "Earthquake", + "type": "Ground", + "damage": 100 + }, + { + "name": "Hyper Beam", + "type": "Normal", + "damage": 120 + } + ] + } + }, + { + "id": "144", + "name": "Articuno", + "classification": "Freeze Pokémon", + "types": [ + "Ice", + "Flying" + ], + "resistant": [ + "Grass", + "Ground", + "Bug" + ], + "weaknesses": [ + "Fire", + "Electric", + "Rock", + "Steel" + ], + "weight": { + "minimum": "48.48kg", + "maximum": "62.33kg" + }, + "height": { + "minimum": "1.49m", + "maximum": "1.91m" + }, + "fleeRate": 0.1, + "Pokémon Class": "This is a LEGENDARY Pokémon.", + "LEGENDARY": "Pokémon Class", + "maxCP": 2776, + "maxHP": 2978, + "attacks": { + "fast": [ + { + "name": "Frost Breath", + "type": "Ice", + "damage": 9 + } + ], + "special": [ + { + "name": "Blizzard", + "type": "Ice", + "damage": 100 + }, + { + "name": "Ice Beam", + "type": "Ice", + "damage": 65 + }, + { + "name": "Icy Wind", + "type": "Ice", + "damage": 25 + } + ] + } + }, + { + "id": "145", + "name": "Zapdos", + "classification": "Electric Pokémon", + "types": [ + "Electric", + "Flying" + ], + "resistant": [ + "Grass", + "Fighting", + "Flying", + "Bug", + "Steel" + ], + "weaknesses": [ + "Ice", + "Rock" + ], + "weight": { + "minimum": "46.02kg", + "maximum": "59.17kg" + }, + "height": { + "minimum": "1.4m", + "maximum": "1.8m" + }, + "fleeRate": 0.1, + "Pokémon Class": "This is a LEGENDARY Pokémon.", + "LEGENDARY": "Pokémon Class", + "maxCP": 2907, + "maxHP": 3114, + "attacks": { + "fast": [ + { + "name": "Thunder Shock", + "type": "Electric", + "damage": 5 + } + ], + "special": [ + { + "name": "Discharge", + "type": "Electric", + "damage": 35 + }, + { + "name": "Thunder", + "type": "Electric", + "damage": 100 + }, + { + "name": "Thunderbolt", + "type": "Electric", + "damage": 55 + } + ] + } + }, + { + "id": "146", + "name": "Moltres", + "classification": "Flame Pokémon", + "types": [ + "Fire", + "Flying" + ], + "resistant": [ + "Fire", + "Grass", + "Fighting", + "Bug", + "Steel", + "Fairy" + ], + "weaknesses": [ + "Water", + "Electric", + "Rock" + ], + "weight": { + "minimum": "52.5kg", + "maximum": "67.5kg" + }, + "height": { + "minimum": "1.75m", + "maximum": "2.25m" + }, + "fleeRate": 0.1, + "Pokémon Class": "This is a LEGENDARY Pokémon.", + "LEGENDARY": "Pokémon Class", + "maxCP": 3028, + "maxHP": 3240, + "attacks": { + "fast": [ + { + "name": "Ember", + "type": "Fire", + "damage": 10 + } + ], + "special": [ + { + "name": "Fire Blast", + "type": "Fire", + "damage": 100 + }, + { + "name": "Flamethrower", + "type": "Fire", + "damage": 55 + }, + { + "name": "Heat Wave", + "type": "Fire", + "damage": 80 + } + ] + } + }, + { + "id": "147", + "name": "Dratini", + "classification": "Dragon Pokémon", + "types": [ + "Dragon" + ], + "resistant": [ + "Fire", + "Water", + "Electric", + "Grass" + ], + "weaknesses": [ + "Ice", + "Dragon", + "Fairy" + ], + "weight": { + "minimum": "2.89kg", + "maximum": "3.71kg" + }, + "height": { + "minimum": "1.57m", + "maximum": "2.02m" + }, + "fleeRate": 0.09, + "evolutionRequirements": { + "amount": 25, + "name": "Dratini candies" + }, + "evolutions": [ + { + "id": 148, + "name": "Dragonair" + } + ], + "maxCP": 867, + "maxHP": 983, + "attacks": { + "fast": [ + { + "name": "Dragon Breath", + "type": "Dragon", + "damage": 6 + } + ], + "special": [ + { + "name": "Aqua Tail", + "type": "Water", + "damage": 45 + }, + { + "name": "Twister", + "type": "Dragon", + "damage": 25 + }, + { + "name": "Wrap", + "type": "Normal", + "damage": 25 + } + ] + } + }, + { + "id": "148", + "name": "Dragonair", + "classification": "Dragon Pokémon", + "types": [ + "Dragon" + ], + "resistant": [ + "Fire", + "Water", + "Electric", + "Grass" + ], + "weaknesses": [ + "Ice", + "Dragon", + "Fairy" + ], + "weight": { + "minimum": "14.44kg", + "maximum": "18.56kg" + }, + "height": { + "minimum": "3.5m", + "maximum": "4.5m" + }, + "fleeRate": 0.06, + "Previous evolution(s)": [ + { + "id": 147, + "name": "Dratini" + } + ], + "evolutionRequirements": { + "amount": 100, + "name": "Dratini candies" + }, + "evolutions": [ + { + "id": 149, + "name": "Dragonite" + } + ], + "maxCP": 1593, + "maxHP": 1747, + "attacks": { + "fast": [ + { + "name": "Dragon Breath", + "type": "Dragon", + "damage": 6 + } + ], + "special": [ + { + "name": "Aqua Tail", + "type": "Water", + "damage": 45 + }, + { + "name": "Dragon Pulse", + "type": "Dragon", + "damage": 65 + }, + { + "name": "Wrap", + "type": "Normal", + "damage": 25 + } + ] + } + }, + { + "id": "149", + "name": "Dragonite", + "classification": "Dragon Pokémon", + "types": [ + "Dragon", + "Flying" + ], + "resistant": [ + "Fire", + "Water", + "Grass", + "Fighting", + "Ground", + "Bug" + ], + "weaknesses": [ + "Ice", + "Rock", + "Dragon", + "Fairy" + ], + "weight": { + "minimum": "183.75kg", + "maximum": "236.25kg" + }, + "height": { + "minimum": "1.93m", + "maximum": "2.48m" + }, + "fleeRate": 0.05, + "Previous evolution(s)": [ + { + "id": 147, + "name": "Dratini" + }, + { + "id": 148, + "name": "Dragonair" + } + ], + "maxCP": 3280, + "maxHP": 3500, + "attacks": { + "fast": [ + { + "name": "Dragon Breath", + "type": "Dragon", + "damage": 6 + }, + { + "name": "Steel Wing", + "type": "Steel", + "damage": 15 + } + ], + "special": [ + { + "name": "Dragon Claw", + "type": "Dragon", + "damage": 35 + }, + { + "name": "Dragon Pulse", + "type": "Dragon", + "damage": 65 + }, + { + "name": "Hyper Beam", + "type": "Normal", + "damage": 120 + } + ] + } + }, + { + "id": "150", + "name": "Mewtwo", + "classification": "Genetic Pokémon", + "types": [ + "Psychic" + ], + "resistant": [ + "Fighting", + "Psychic" + ], + "weaknesses": [ + "Bug", + "Ghost", + "Dark" + ], + "weight": { + "minimum": "106.75kg", + "maximum": "137.25kg" + }, + "height": { + "minimum": "1.75m", + "maximum": "2.25m" + }, + "fleeRate": 0.1, + "Pokémon Class": "This is a LEGENDARY Pokémon.", + "LEGENDARY": "Pokémon Class", + "maxCP": 3904, + "maxHP": 4144, + "attacks": { + "fast": [ + { + "name": "Confusion", + "type": "Psychic", + "damage": 15 + }, + { + "name": "Psycho Cut", + "type": "Psychic", + "damage": 7 + } + ], + "special": [ + { + "name": "Hyper Beam", + "type": "Normal", + "damage": 120 + }, + { + "name": "Psychic", + "type": "Psychic", + "damage": 55 + }, + { + "name": "Shadow Ball", + "type": "Ghost", + "damage": 45 + } + ] + } + }, + { + "id": "151", + "name": "Mew", + "classification": "New Species Pokémon", + "types": [ + "Psychic" + ], + "resistant": [ + "Fighting", + "Psychic" + ], + "weaknesses": [ + "Bug", + "Ghost", + "Dark" + ], + "weight": { + "minimum": "3.5kg", + "maximum": "4.5kg" + }, + "height": { + "minimum": "0.35m", + "maximum": "0.45m" + }, + "fleeRate": 0.1, + "Pokémon Class": "This is a MYTHIC Pokémon.", + "MYTHIC": "Pokémon Class", + "maxCP": 3087, + "maxHP": 3299, + "attacks": { + "fast": [ + { + "name": "Pound", + "type": "Normal", + "damage": 7 + } + ], + "special": [ + { + "name": "Dragon Pulse", + "type": "Dragon", + "damage": 65 + }, + { + "name": "Earthquake", + "type": "Ground", + "damage": 100 + }, + { + "name": "Fire Blast", + "type": "Fire", + "damage": 100 + }, + { + "name": "Hurricane", + "type": "Flying", + "damage": 80 + }, + { + "name": "Hyper Beam", + "type": "Normal", + "damage": 120 + }, + { + "name": "Moonblast", + "type": "Fairy", + "damage": 85 + }, + { + "name": "Psychic", + "type": "Psychic", + "damage": 55 + }, + { + "name": "Solar Beam", + "type": "Grass", + "damage": 120 + }, + { + "name": "Thunder", + "type": "Electric", + "damage": 100 + } + ] + } + } + ] +} diff --git a/dist/src/app/components/card.js b/dist/src/app/components/card.js new file mode 100644 index 0000000..c4a4444 --- /dev/null +++ b/dist/src/app/components/card.js @@ -0,0 +1,16 @@ +"use strict"; +// Templates +const cardTemplate = require('../templates/card.html'); +const card = { + name: 'card', + template: cardTemplate, + data() { + return {}; + }, + methods: { + clicked() { + this.$emit('click'); + }, + }, +}; +module.exports = card; diff --git a/dist/src/app/components/explorer.js b/dist/src/app/components/explorer.js index b240d35..c9b9de7 100644 --- a/dist/src/app/components/explorer.js +++ b/dist/src/app/components/explorer.js @@ -23,6 +23,7 @@ const explorerEmpty = require('./explorerEmpty.ts'); const explorerOnboarding = require('./explorerOnboarding.ts'); const basket = require('./basket.ts'); const modal = require('./modal.ts'); +const newBasketModal = require('./newBasketModal.ts'); const explorer = { name: 'explorer', props: ['pantry'], @@ -33,12 +34,14 @@ const explorer = { explorerOnboarding, basket, modal, + newBasketModal, 'json-edit': jsonEditor, }, data() { return { basket: null, schemaModalVisible: false, + createBasketModalVisible: false, schemaExample: { _schema: { toppings: { type: 'array' }, @@ -78,20 +81,19 @@ const explorer = { this.$emit('refresh'); this.basket = null; }, - createBasket() { + createBasket(basketName, payload) { return __awaiter(this, void 0, void 0, function* () { - const _randomNumber = Math.floor((Math.random() * 100) + 1); - const _defaultName = `newBasket${_randomNumber}`; - const _name = prompt('What is the name of the new basket?', _defaultName); - if (_name) { + if (basketName) { yield axios({ method: 'POST', - data: { - key: 'value', - }, - url: `${API_PATH}/pantry/${this.pantry.id}/basket/${_name}`, + data: payload, + url: `${API_PATH}/pantry/${this.pantry.id}/basket/${basketName}`, }); this.refresh(); + this.toggleCreateBasketModal(); + } + else { + alert('Please enter a basket name'); } }); }, @@ -145,6 +147,9 @@ const explorer = { toggleSchemaModal() { this.schemaModalVisible = !this.schemaModalVisible; }, + toggleCreateBasketModal() { + this.createBasketModalVisible = !this.createBasketModalVisible; + }, }, }; module.exports = explorer; diff --git a/dist/src/app/components/modal.js b/dist/src/app/components/modal.js index 643d6e5..6639b44 100644 --- a/dist/src/app/components/modal.js +++ b/dist/src/app/components/modal.js @@ -4,10 +4,14 @@ const modalTemplate = require('../templates/modal.html'); const modal = { name: 'modal', template: modalTemplate, + props: ['readOnly'], data() { return {}; }, methods: { + clicked() { + this.$emit('clicked'); + }, close() { this.$emit('close'); }, diff --git a/dist/src/app/components/newBasketModal.js b/dist/src/app/components/newBasketModal.js new file mode 100644 index 0000000..bcae6db --- /dev/null +++ b/dist/src/app/components/newBasketModal.js @@ -0,0 +1,98 @@ +"use strict"; +var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } }); +}) : (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + o[k2] = m[k]; +})); +var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { + Object.defineProperty(o, "default", { enumerable: true, value: v }); +}) : function(o, v) { + o["default"] = v; +}); +var __importStar = (this && this.__importStar) || function (mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); + __setModuleDefault(result, mod); + return result; +}; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +// JSON files +const templates_json_1 = __importDefault(require("../assets/templates.json")); +// External Files +const jsonEditor = require('vue-json-editor').default; +// Templates +const newBasketModalTemplate = require('../templates/newBasketModal.html'); +// Components +const modal = require('./modal.ts'); +const card = require('./card.ts'); +const newBasketModal = { + name: 'newBasketModal', + template: newBasketModalTemplate, + props: ['visible'], + components: { + modal, + card, + 'json-edit': jsonEditor, + }, + data() { + return { + templates: templates_json_1.default, + basketName: 'my-new-basket-name', + pathToTemplates: '../assets/templates/', + payload: null, + }; + }, + computed: { + payloadIsNotEmpty() { + return this.payload !== null; + }, + valid() { + return this.payload && this.basketName; + }, + }, + methods: { + close() { + this.$emit('close'); + }, + setTemplate(fileName) { + return __awaiter(this, void 0, void 0, function* () { + const file = yield Promise.resolve().then(() => __importStar(require(`../assets/templates/${fileName}.json`))); + this.payload = file.default; + }); + }, + setBlankTemplate() { + this.payload = {}; + }, + createBasket() { + if (this.valid) { + this.$emit('createBasket', this.basketName, this.payload); + } + else { + alert('Please enter a name & select a starting template'); + } + }, + closeModal() { + this.$emit('close'); + }, + }, + updated() { + if (this.visible) { + document.getElementById('newBasketName').focus(); + } + }, +}; +module.exports = newBasketModal; diff --git a/dist/src/bundle.js b/dist/src/bundle.js index 57833ea..17f1bff 100644 --- a/dist/src/bundle.js +++ b/dist/src/bundle.js @@ -1,4 +1,4 @@ -!function(t){var e={};function l(i){if(e[i])return e[i].exports;var n=e[i]={i:i,l:!1,exports:{}};return t[i].call(n.exports,n,n.exports,l),n.l=!0,n.exports}l.m=t,l.c=e,l.d=function(t,e,i){l.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:i})},l.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},l.t=function(t,e){if(1&e&&(t=l(t)),8&e)return t;if(4&e&&"object"==typeof t&&t&&t.__esModule)return t;var i=Object.create(null);if(l.r(i),Object.defineProperty(i,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var n in t)l.d(i,n,function(e){return t[e]}.bind(null,n));return i},l.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return l.d(e,"a",e),e},l.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},l.p="",l(l.s=24)}([function(t,e,l){"use strict";var i=l(11),n=Object.prototype.toString;function a(t){return"[object Array]"===n.call(t)}function d(t){return void 0===t}function s(t){return null!==t&&"object"==typeof t}function c(t){if("[object Object]"!==n.call(t))return!1;var e=Object.getPrototypeOf(t);return null===e||e===Object.prototype}function o(t){return"[object Function]"===n.call(t)}function b(t,e){if(null!=t)if("object"!=typeof t&&(t=[t]),a(t))for(var l=0,i=t.length;l=0&&r.splice(e,1)}function N(t){var e=document.createElement("style");return void 0===t.attrs.type&&(t.attrs.type="text/css"),y(e,t.attrs),W(t,e),e}function y(t,e){Object.keys(e).forEach((function(l){t.setAttribute(l,e[l])}))}function I(t,e){var l,i,n,a;if(e.transform&&t.css){if(!(a=e.transform(t.css)))return function(){};t.css=a}if(e.singleton){var d=b++;l=o||(o=N(e)),i=u.bind(null,l,d,!1),n=u.bind(null,l,d,!0)}else t.sourceMap&&"function"==typeof URL&&"function"==typeof URL.createObjectURL&&"function"==typeof URL.revokeObjectURL&&"function"==typeof Blob&&"function"==typeof btoa?(l=function(t){var e=document.createElement("link");return void 0===t.attrs.type&&(t.attrs.type="text/css"),t.attrs.rel="stylesheet",y(e,t.attrs),W(t,e),e}(e),i=p.bind(null,l,e),n=function(){h(l),l.href&&URL.revokeObjectURL(l.href)}):(l=N(e),i=V.bind(null,l),n=function(){h(l)});return i(t),function(e){if(e){if(e.css===t.css&&e.media===t.media&&e.sourceMap===t.sourceMap)return;i(t=e)}else n()}}t.exports=function(t,e){if("undefined"!=typeof DEBUG&&DEBUG&&"object"!=typeof document)throw new Error("The style-loader cannot be used in a non-browser environment");(e=e||{}).attrs="object"==typeof e.attrs?e.attrs:{},e.singleton||"boolean"==typeof e.singleton||(e.singleton=d()),e.insertInto||(e.insertInto="head"),e.insertAt||(e.insertAt="bottom");var l=g(t,e);return Z(l,e),function(t){for(var i=[],n=0;n=200&&t<300}};o.headers={common:{Accept:"application/json, text/plain, */*"}},i.forEach(["delete","get","head"],(function(t){o.headers[t]={}})),i.forEach(["post","put","patch"],(function(t){o.headers[t]=i.merge(d)})),t.exports=o}).call(this,l(9))},function(t,e){var l,i,n=t.exports={};function a(){throw new Error("setTimeout has not been defined")}function d(){throw new Error("clearTimeout has not been defined")}function s(t){if(l===setTimeout)return setTimeout(t,0);if((l===a||!l)&&setTimeout)return l=setTimeout,setTimeout(t,0);try{return l(t,0)}catch(e){try{return l.call(null,t,0)}catch(e){return l.call(this,t,0)}}}!function(){try{l="function"==typeof setTimeout?setTimeout:a}catch(t){l=a}try{i="function"==typeof clearTimeout?clearTimeout:d}catch(t){i=d}}();var c,o=[],b=!1,r=-1;function m(){b&&c&&(b=!1,c.length?o=c.concat(o):r=-1,o.length&&Z())}function Z(){if(!b){var t=s(m);b=!0;for(var e=o.length;e;){for(c=o,o=[];++r1)for(var l=1;l({}),methods:{close(){this.$emit("close")}}};t.exports=i},function(t,e,l){"use strict";const i={name:"banner",template:l(72),props:["promo"],data:()=>({visible:!0}),methods:{clickedCTA(){this.$emit("cta-clicked")},hide(){this.visible=!1}}};t.exports=i},function(t,e,l){"use strict";l.r(e);var i=function(){var t=this,e=t.$createElement,l=t._self._c||e;return l("div",[l("div",{staticClass:"jsoneditor-vue"}),t._v(" "),!1!==t.showBtns?l("div",{staticClass:"jsoneditor-btns"},[l("button",{staticClass:"json-save-btn",attrs:{type:"button",disabled:t.error},on:{click:function(e){return t.onSave()}}},[t._v(t._s(t.locale[t.lang].save))])]):t._e()])};i._withStripped=!0;l(56);var n=l(23),a=l.n(n),d={props:{value:[String,Number,Object,Array],showBtns:[Boolean],expandedOnStart:{type:Boolean,default:!1},mode:{type:String,default:"tree"},modes:{type:Array,default:function(){return["tree","code","form","text","view"]}},lang:{type:String,default:"en"}},watch:{value:{immediate:!0,async handler(t){this.internalChange||(await this.setEditor(t),this.error=!1,this.expandAll())},deep:!0}},data(){return{editor:null,error:!1,json:this.value,internalChange:!1,expandedModes:["tree","view","form"],locale:{it:{save:"SALVA"},en:{save:"SAVE"},zh:{save:"保存"}}}},mounted(){let t=this,e={mode:this.mode,modes:this.modes,onChange(){try{let e=t.editor.get();t.json=e,t.error=!1,t.$emit("json-change",e),t.internalChange=!0,t.$emit("input",e),t.$nextTick((function(){t.internalChange=!1}))}catch(e){t.error=!0,t.$emit("has-error",e)}},onModeChange(){t.expandAll()}};this.editor=new a.a(this.$el.querySelector(".jsoneditor-vue"),e,this.json)},methods:{expandAll(){this.expandedOnStart&&this.expandedModes.includes(this.editor.getMode())&&this.editor.expandAll()},onSave(){this.$emit("json-save",this.json)},async setEditor(t){this.editor&&this.editor.set(t)}}};l(58);var s=function(t,e,l,i,n,a,d,s){var c,o="function"==typeof t?t.options:t;if(e&&(o.render=e,o.staticRenderFns=l,o._compiled=!0),i&&(o.functional=!0),a&&(o._scopeId="data-v-"+a),d?(c=function(t){(t=t||this.$vnode&&this.$vnode.ssrContext||this.parent&&this.parent.$vnode&&this.parent.$vnode.ssrContext)||"undefined"==typeof __VUE_SSR_CONTEXT__||(t=__VUE_SSR_CONTEXT__),n&&n.call(this,t),t&&t._registeredComponents&&t._registeredComponents.add(d)},o._ssrRegister=c):n&&(c=s?function(){n.call(this,(o.functional?this.parent:this).$root.$options.shadowRoot)}:n),c)if(o.functional){o._injectStyles=c;var b=o.render;o.render=function(t,e){return c.call(e),b(t,e)}}else{var r=o.beforeCreate;o.beforeCreate=r?[].concat(r,c):[c]}return{exports:t,options:o}}(d,i,[],!1,null,"551a97e0",null);s.options.__file="node_modules/vue-json-editor/vue-json-editor.vue";e.default=s.exports},function(module,exports,__webpack_require__){ +!function(t){var e={};function i(l){if(e[l])return e[l].exports;var a=e[l]={i:l,l:!1,exports:{}};return t[l].call(a.exports,a,a.exports,i),a.l=!0,a.exports}i.m=t,i.c=e,i.d=function(t,e,l){i.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:l})},i.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},i.t=function(t,e){if(1&e&&(t=i(t)),8&e)return t;if(4&e&&"object"==typeof t&&t&&t.__esModule)return t;var l=Object.create(null);if(i.r(l),Object.defineProperty(l,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var a in t)i.d(l,a,function(e){return t[e]}.bind(null,a));return l},i.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return i.d(e,"a",e),e},i.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},i.p="",i(i.s=24)}([function(t,e,i){"use strict";var l=i(13),a=Object.prototype.toString;function n(t){return"[object Array]"===a.call(t)}function s(t){return void 0===t}function d(t){return null!==t&&"object"==typeof t}function c(t){if("[object Object]"!==a.call(t))return!1;var e=Object.getPrototypeOf(t);return null===e||e===Object.prototype}function o(t){return"[object Function]"===a.call(t)}function m(t,e){if(null!=t)if("object"!=typeof t&&(t=[t]),n(t))for(var i=0,l=t.length;i=0&&r.splice(e,1)}function N(t){var e=document.createElement("style");return void 0===t.attrs.type&&(t.attrs.type="text/css"),y(e,t.attrs),h(t,e),e}function y(t,e){Object.keys(e).forEach((function(i){t.setAttribute(i,e[i])}))}function u(t,e){var i,l,a,n;if(e.transform&&t.css){if(!(n=e.transform(t.css)))return function(){};t.css=n}if(e.singleton){var s=m++;i=o||(o=N(e)),l=M.bind(null,i,s,!1),a=M.bind(null,i,s,!0)}else t.sourceMap&&"function"==typeof URL&&"function"==typeof URL.createObjectURL&&"function"==typeof URL.revokeObjectURL&&"function"==typeof Blob&&"function"==typeof btoa?(i=function(t){var e=document.createElement("link");return void 0===t.attrs.type&&(t.attrs.type="text/css"),t.attrs.rel="stylesheet",y(e,t.attrs),h(t,e),e}(e),l=V.bind(null,i,e),a=function(){W(i),i.href&&URL.revokeObjectURL(i.href)}):(i=N(e),l=p.bind(null,i),a=function(){W(i)});return l(t),function(e){if(e){if(e.css===t.css&&e.media===t.media&&e.sourceMap===t.sourceMap)return;l(t=e)}else a()}}t.exports=function(t,e){if("undefined"!=typeof DEBUG&&DEBUG&&"object"!=typeof document)throw new Error("The style-loader cannot be used in a non-browser environment");(e=e||{}).attrs="object"==typeof e.attrs?e.attrs:{},e.singleton||"boolean"==typeof e.singleton||(e.singleton=s()),e.insertInto||(e.insertInto="head"),e.insertAt||(e.insertAt="bottom");var i=Z(t,e);return g(i,e),function(t){for(var l=[],a=0;a=200&&t<300}};o.headers={common:{Accept:"application/json, text/plain, */*"}},l.forEach(["delete","get","head"],(function(t){o.headers[t]={}})),l.forEach(["post","put","patch"],(function(t){o.headers[t]=l.merge(s)})),t.exports=o}).call(this,i(11))},function(t,e,i){"use strict";const l={name:"modal",template:i(69),props:["readOnly"],data:()=>({}),methods:{clicked(){this.$emit("clicked")},close(){this.$emit("close")}}};t.exports=l},function(t,e,i){"use strict";i.r(e);var l=function(){var t=this,e=t.$createElement,i=t._self._c||e;return i("div",[i("div",{staticClass:"jsoneditor-vue"}),t._v(" "),!1!==t.showBtns?i("div",{staticClass:"jsoneditor-btns"},[i("button",{staticClass:"json-save-btn",attrs:{type:"button",disabled:t.error},on:{click:function(e){return t.onSave()}}},[t._v(t._s(t.locale[t.lang].save))])]):t._e()])};l._withStripped=!0;i(56);var a=i(23),n=i.n(a),s={props:{value:[String,Number,Object,Array],showBtns:[Boolean],expandedOnStart:{type:Boolean,default:!1},mode:{type:String,default:"tree"},modes:{type:Array,default:function(){return["tree","code","form","text","view"]}},lang:{type:String,default:"en"}},watch:{value:{immediate:!0,async handler(t){this.internalChange||(await this.setEditor(t),this.error=!1,this.expandAll())},deep:!0}},data(){return{editor:null,error:!1,json:this.value,internalChange:!1,expandedModes:["tree","view","form"],locale:{it:{save:"SALVA"},en:{save:"SAVE"},zh:{save:"保存"}}}},mounted(){let t=this,e={mode:this.mode,modes:this.modes,onChange(){try{let e=t.editor.get();t.json=e,t.error=!1,t.$emit("json-change",e),t.internalChange=!0,t.$emit("input",e),t.$nextTick((function(){t.internalChange=!1}))}catch(e){t.error=!0,t.$emit("has-error",e)}},onModeChange(){t.expandAll()}};this.editor=new n.a(this.$el.querySelector(".jsoneditor-vue"),e,this.json)},methods:{expandAll(){this.expandedOnStart&&this.expandedModes.includes(this.editor.getMode())&&this.editor.expandAll()},onSave(){this.$emit("json-save",this.json)},async setEditor(t){this.editor&&this.editor.set(t)}}};i(58);var d=function(t,e,i,l,a,n,s,d){var c,o="function"==typeof t?t.options:t;if(e&&(o.render=e,o.staticRenderFns=i,o._compiled=!0),l&&(o.functional=!0),n&&(o._scopeId="data-v-"+n),s?(c=function(t){(t=t||this.$vnode&&this.$vnode.ssrContext||this.parent&&this.parent.$vnode&&this.parent.$vnode.ssrContext)||"undefined"==typeof __VUE_SSR_CONTEXT__||(t=__VUE_SSR_CONTEXT__),a&&a.call(this,t),t&&t._registeredComponents&&t._registeredComponents.add(s)},o._ssrRegister=c):a&&(c=d?function(){a.call(this,(o.functional?this.parent:this).$root.$options.shadowRoot)}:a),c)if(o.functional){o._injectStyles=c;var m=o.render;o.render=function(t,e){return c.call(e),m(t,e)}}else{var r=o.beforeCreate;o.beforeCreate=r?[].concat(r,c):[c]}return{exports:t,options:o}}(s,l,[],!1,null,"551a97e0",null);d.options.__file="node_modules/vue-json-editor/vue-json-editor.vue";e.default=d.exports},function(t,e){var i,l,a=t.exports={};function n(){throw new Error("setTimeout has not been defined")}function s(){throw new Error("clearTimeout has not been defined")}function d(t){if(i===setTimeout)return setTimeout(t,0);if((i===n||!i)&&setTimeout)return i=setTimeout,setTimeout(t,0);try{return i(t,0)}catch(e){try{return i.call(null,t,0)}catch(e){return i.call(this,t,0)}}}!function(){try{i="function"==typeof setTimeout?setTimeout:n}catch(t){i=n}try{l="function"==typeof clearTimeout?clearTimeout:s}catch(t){l=s}}();var c,o=[],m=!1,r=-1;function b(){m&&c&&(m=!1,c.length?o=c.concat(o):r=-1,o.length&&g())}function g(){if(!m){var t=d(b);m=!0;for(var e=o.length;e;){for(c=o,o=[];++r1)for(var i=1;i({visible:!0}),methods:{clickedCTA(){this.$emit("cta-clicked")},hide(){this.visible=!1}}};t.exports=l},function(module,exports,__webpack_require__){ /*! * jsoneditor.js * @@ -28,11 +28,11 @@ * @version 5.5.11 * @date 2017-01-06 */ -var factory;factory=function(){return function(t){var e={};function l(i){if(e[i])return e[i].exports;var n=e[i]={exports:{},id:i,loaded:!1};return t[i].call(n.exports,n,n.exports,l),n.loaded=!0,n.exports}return l.m=t,l.c=e,l.p="",l(0)}([function(t,e,l){"use strict";var i;try{i=l(1)}catch(t){}var n=l(51),a=l(62),d=l(54);function s(t,e,l){if(!(this instanceof s))throw new Error('JSONEditor constructor called without "new".');var i=d.getInternetExplorerVersion();if(-1!=i&&i<9)throw new Error("Unsupported browser, IE9 or newer required. Please install the newest version of your browser.");if(e&&(e.error&&(console.warn('Option "error" has been renamed to "onError"'),e.onError=e.error,delete e.error),e.change&&(console.warn('Option "change" has been renamed to "onChange"'),e.onChange=e.change,delete e.change),e.editable&&(console.warn('Option "editable" has been renamed to "onEditable"'),e.onEditable=e.editable,delete e.editable),e)){var n=["ace","theme","ajv","schema","onChange","onEditable","onError","onModeChange","escapeUnicode","history","search","mode","modes","name","indentation","sortObjectKeys"];Object.keys(e).forEach((function(t){-1===n.indexOf(t)&&console.warn('Unknown option "'+t+'". This option will be ignored')}))}arguments.length&&this._create(t,e,l)}s.modes={},s.prototype.DEBOUNCE_INTERVAL=150,s.prototype._create=function(t,e,l){this.container=t,this.options=e||{},this.json=l||{};var i=this.options.mode||"tree";this.setMode(i)},s.prototype.destroy=function(){},s.prototype.set=function(t){this.json=t},s.prototype.get=function(){return this.json},s.prototype.setText=function(t){this.json=d.parse(t)},s.prototype.getText=function(){return JSON.stringify(this.json)},s.prototype.setName=function(t){this.options||(this.options={}),this.options.name=t},s.prototype.getName=function(){return this.options&&this.options.name},s.prototype.setMode=function(t){var e,l,i=this.container,n=d.extend({},this.options),a=n.mode;n.mode=t;var c=s.modes[t];if(!c)throw new Error('Unknown mode "'+n.mode+'"');try{var o="text"==c.data;if(l=this.getName(),e=this[o?"getText":"get"](),this.destroy(),d.clear(this),d.extend(this,c.mixin),this.create(i,n),this.setName(l),this[o?"setText":"set"](e),"function"==typeof c.load)try{c.load.call(this)}catch(t){console.error(t)}if("function"==typeof n.onModeChange&&t!==a)try{n.onModeChange(t,a)}catch(t){console.error(t)}}catch(t){this._onError(t)}},s.prototype.getMode=function(){return this.options.mode},s.prototype._onError=function(t){if(!this.options||"function"!=typeof this.options.onError)throw t;this.options.onError(t)},s.prototype.setSchema=function(t){if(t){var e;try{e=this.options.ajv||i({allErrors:!0,verbose:!0})}catch(t){console.warn("Failed to create an instance of Ajv, JSON Schema validation is not available. Please use a JSONEditor bundle including Ajv, or pass an instance of Ajv as via the configuration option `ajv`.")}e&&(this.validateSchema=e.compile(t),this.options.schema=t,this.validate()),this.refresh()}else this.validateSchema=null,this.options.schema=null,this.validate(),this.refresh()},s.prototype.validate=function(){},s.prototype.refresh=function(){},s.registerMode=function(t){var e,l;if(d.isArray(t))for(e=0;e",'"',"`"," ","\r","\n","\t"]),c=["'"].concat(s),o=["%","/","?",";","#"].concat(c),b=["/","?","#"],r=/^[a-z0-9A-Z_-]{0,63}$/,m=/^([a-z0-9A-Z_-]{0,63})(.*)$/,Z={javascript:!0,"javascript:":!0},g={javascript:!0,"javascript:":!0},W={http:!0,https:!0,ftp:!0,gopher:!0,file:!0,"http:":!0,"https:":!0,"ftp:":!0,"gopher:":!0,"file:":!0},h=l(7);function N(t,e,l){if(t&&I(t)&&t instanceof n)return t;var i=new n;return i.parse(t,e,l),i}function y(t){return"string"==typeof t}function I(t){return"object"==typeof t&&null!==t}function G(t){return null===t}n.prototype.parse=function(t,e,l){if(!y(t))throw new TypeError("Parameter 'url' must be a string, not "+typeof t);var n=t;n=n.trim();var d=a.exec(n);if(d){var s=(d=d[0]).toLowerCase();this.protocol=s,n=n.substr(d.length)}if(l||d||n.match(/^\/\/[^@\/]+@[^@\/]+/)){var N="//"===n.substr(0,2);!N||d&&g[d]||(n=n.substr(2),this.slashes=!0)}if(!g[d]&&(N||d&&!W[d])){for(var I,G,M=-1,u=0;u127?O+="x":O+=B[D];if(!O.match(r)){var T=Y.slice(0,u),X=Y.slice(u+1),z=B.match(m);z&&(T.push(z[1]),X.unshift(z[2])),X.length&&(n="/"+X.join(".")+n),this.hostname=T.join(".");break}}}if(this.hostname.length>255?this.hostname="":this.hostname=this.hostname.toLowerCase(),!p){var F=this.hostname.split("."),v=[];for(u=0;u0)&&l.host.split("@"))&&(l.auth=M.shift(),l.host=l.hostname=M.shift())),l.search=t.search,l.query=t.query,G(l.pathname)&&G(l.search)||(l.path=(l.pathname?l.pathname:"")+(l.search?l.search:"")),l.href=l.format(),l;if(!r.length)return l.pathname=null,l.search?l.path="/"+l.search:l.path=null,l.href=l.format(),l;for(var Z=r.slice(-1)[0],h=(l.host||t.host)&&("."===Z||".."===Z)||""===Z,N=0,I=r.length;I>=0;I--)"."==(Z=r[I])?r.splice(I,1):".."===Z?(r.splice(I,1),N++):N&&(r.splice(I,1),N--);if(!o&&!b)for(;N--;N)r.unshift("..");!o||""===r[0]||r[0]&&"/"===r[0].charAt(0)||r.unshift(""),h&&"/"!==r.join("/").substr(-1)&&r.push("");var M,u=""===r[0]||r[0]&&"/"===r[0].charAt(0);return m&&(l.hostname=l.host=u?"":r.length?r.shift():"",(M=!!(l.host&&l.host.indexOf("@")>0)&&l.host.split("@"))&&(l.auth=M.shift(),l.host=l.hostname=M.shift())),(o=o||l.host&&r.length)&&!u&&r.unshift(""),r.length?l.pathname=r.join("/"):(l.pathname=null,l.path=null),G(l.pathname)&&G(l.search)||(l.path=(l.pathname?l.pathname:"")+(l.search?l.search:"")),l.auth=t.auth||l.auth,l.slashes=l.slashes||t.slashes,l.href=l.format(),l},n.prototype.parseHost=function(){var t=this.host,e=d.exec(t);e&&(":"!==(e=e[0])&&(this.port=e.substr(1)),t=t.substr(0,t.length-e.length)),t&&(this.hostname=t)}},function(t,e,l){var i;(function(t,n){!function(a){"object"==typeof e&&e&&e.nodeType,"object"==typeof t&&t&&t.nodeType;var d="object"==typeof n&&n;d.global!==d&&d.window!==d&&d.self;var s,c=2147483647,o=/^xn--/,b=/[^\x20-\x7E]/,r=/[\x2E\u3002\uFF0E\uFF61]/g,m={overflow:"Overflow: input needs wider integers to process","not-basic":"Illegal input >= 0x80 (not a basic code point)","invalid-input":"Invalid input"},Z=Math.floor,g=String.fromCharCode;function W(t){throw RangeError(m[t])}function h(t,e){for(var l=t.length,i=[];l--;)i[l]=e(t[l]);return i}function N(t,e){var l=t.split("@"),i="";return l.length>1&&(i=l[0]+"@",t=l[1]),i+h((t=t.replace(r,".")).split("."),e).join(".")}function y(t){for(var e,l,i=[],n=0,a=t.length;n=55296&&e<=56319&&n65535&&(e+=g((t-=65536)>>>10&1023|55296),t=56320|1023&t),e+=g(t)})).join("")}function G(t,e){return t+22+75*(t<26)-((0!=e)<<5)}function M(t,e,l){var i=0;for(t=l?Z(t/700):t>>1,t+=Z(t/e);t>455;i+=36)t=Z(t/35);return Z(i+36*t/(t+38))}function u(t){var e,l,i,n,a,d,s,o,b,r,m,g=[],h=t.length,N=0,y=128,G=72;for((l=t.lastIndexOf("-"))<0&&(l=0),i=0;i=128&&W("not-basic"),g.push(t.charCodeAt(i));for(n=l>0?l+1:0;n=h&&W("invalid-input"),((o=(m=t.charCodeAt(n++))-48<10?m-22:m-65<26?m-65:m-97<26?m-97:36)>=36||o>Z((c-N)/d))&&W("overflow"),N+=o*d,!(o<(b=s<=G?1:s>=G+26?26:s-G));s+=36)d>Z(c/(r=36-b))&&W("overflow"),d*=r;G=M(N-a,e=g.length+1,0==a),Z(N/e)>c-y&&W("overflow"),y+=Z(N/e),N%=e,g.splice(N++,0,y)}return I(g)}function V(t){var e,l,i,n,a,d,s,o,b,r,m,h,N,I,u,V=[];for(h=(t=y(t)).length,e=128,l=0,a=72,d=0;d=e&&mZ((c-l)/(N=i+1))&&W("overflow"),l+=(s-e)*N,e=s,d=0;dc&&W("overflow"),m==e){for(o=l,b=36;!(o<(r=b<=a?1:b>=a+26?26:b-a));b+=36)u=o-r,I=36-r,V.push(g(G(r+u%I,0))),o=Z(u/I);V.push(g(G(o,0))),a=M(l,N,i==n),l=0,++i}++l,++e}return V.join("")}s={version:"1.3.2",ucs2:{decode:y,encode:I},decode:u,encode:V,toASCII:function(t){return N(t,(function(t){return b.test(t)?"xn--"+V(t):t}))},toUnicode:function(t){return N(t,(function(t){return o.test(t)?u(t.slice(4).toLowerCase()):t}))}},void 0===(i=function(){return s}.call(e,l,e,t))||(t.exports=i)}()}).call(e,l(6)(t),function(){return this}())},function(t,e){t.exports=function(t){return t.webpackPolyfill||(t.deprecate=function(){},t.paths=[],t.children=[],t.webpackPolyfill=1),t}},function(t,e,l){"use strict";e.decode=e.parse=l(8),e.encode=e.stringify=l(9)},function(t,e){"use strict";function l(t,e){return Object.prototype.hasOwnProperty.call(t,e)}t.exports=function(t,e,i,n){e=e||"&",i=i||"=";var a={};if("string"!=typeof t||0===t.length)return a;var d=/\+/g;t=t.split(e);var s=1e3;n&&"number"==typeof n.maxKeys&&(s=n.maxKeys);var c=t.length;s>0&&c>s&&(c=s);for(var o=0;o=0?(b=g.substr(0,W),r=g.substr(W+1)):(b=g,r=""),m=decodeURIComponent(b),Z=decodeURIComponent(r),l(a,m)?Array.isArray(a[m])?a[m].push(Z):a[m]=[a[m],Z]:a[m]=Z}return a}},function(t,e){"use strict";var l=function(t){switch(typeof t){case"string":return t;case"boolean":return t?"true":"false";case"number":return isFinite(t)?t:"";default:return""}};t.exports=function(t,e,i,n){return e=e||"&",i=i||"=",null===t&&(t=void 0),"object"==typeof t?Object.keys(t).map((function(n){var a=encodeURIComponent(l(n))+i;return Array.isArray(t[n])?t[n].map((function(t){return a+encodeURIComponent(l(t))})).join(e):a+encodeURIComponent(l(t[n]))})).join(e):n?encodeURIComponent(l(n))+i+encodeURIComponent(l(t)):""}},function(t,e){"use strict";t.exports=function t(e,l){if(e===l)return!0;var i,n=Array.isArray(e),a=Array.isArray(l);if(n&&a){if(e.length!=l.length)return!1;for(i=0;i=55296&&e<=56319&&n=e)throw new Error("Cannot access property/index "+n+" levels up, current level is "+e);return l[e-n]}if(n>e)throw new Error("Cannot access data "+n+" levels up, current level is "+e);var d="data"+(e-n||"");if(!a)return d;for(var s=d,o=a.split("/"),b=0;b="0"&&i<="9";)e+=i,c();if("."===i)for(e+=".";c()&&i>="0"&&i<="9";)e+=i;if("e"===i||"E"===i)for(e+=i,c(),"-"!==i&&"+"!==i||(e+=i,c());i>="0"&&i<="9";)e+=i,c();if(t=+e,isFinite(t))return t;s("Bad number")},b=function(){var t,e,l,n="";if('"'===i)for(;c();){if('"'===i)return c(),n;if("\\"===i)if(c(),"u"===i){for(l=0,e=0;e<4&&(t=parseInt(c(),16),isFinite(t));e+=1)l=16*l+t;n+=String.fromCharCode(l)}else{if("string"!=typeof d[i])break;n+=d[i]}else n+=i}s("Bad string")},r=function(){for(;i&&i<=" ";)c()};a=function(){switch(r(),i){case"{":return function(){var t,e={};if("{"===i){if(c("{"),r(),"}"===i)return c("}"),e;for(;i;){if(t=b(),r(),c(":"),Object.hasOwnProperty.call(e,t)&&s('Duplicate key "'+t+'"'),e[t]=a(),r(),"}"===i)return c("}"),e;c(","),r()}}s("Bad object")}();case"[":return function(){var t=[];if("["===i){if(c("["),r(),"]"===i)return c("]"),t;for(;i;){if(t.push(a()),r(),"]"===i)return c("]"),t;c(","),r()}}s("Bad array")}();case'"':return b();case"-":return o();default:return i>="0"&&i<="9"?o():function(){switch(i){case"t":return c("t"),c("r"),c("u"),c("e"),!0;case"f":return c("f"),c("a"),c("l"),c("s"),c("e"),!1;case"n":return c("n"),c("u"),c("l"),c("l"),null}s("Unexpected '"+i+"'")}()}},t.exports=function(t,e){var d;return n=t,l=0,i=" ",d=a(),r(),i&&s("Syntax error"),"function"==typeof e?function t(l,i){var n,a,d=l[i];if(d&&"object"==typeof d)for(n in d)Object.prototype.hasOwnProperty.call(d,n)&&(void 0!==(a=t(d,n))?d[n]=a:delete d[n]);return e.call(l,i,d)}({"":d},""):d}},function(t,e){var l,i,n,a=/[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,d={"\b":"\\b","\t":"\\t","\n":"\\n","\f":"\\f","\r":"\\r",'"':'\\"',"\\":"\\\\"};function s(t){return a.lastIndex=0,a.test(t)?'"'+t.replace(a,(function(t){var e=d[t];return"string"==typeof e?e:"\\u"+("0000"+t.charCodeAt(0).toString(16)).slice(-4)}))+'"':'"'+t+'"'}t.exports=function(t,e,a){var d;if(l="",i="","number"==typeof a)for(d=0;d2&&(e=l.call(arguments,1)),i(e)}))}))}function d(t){return Promise.all(t.map(n,this))}function s(t){for(var e=new t.constructor,l=Object.keys(t),i=[],a=0;a=1&&l<=12&&i>=1&&i<=a[l]}function g(t,e){var l=t.match(d);if(!l)return!1;var i=l[1],n=l[2],a=l[3],s=l[5];return i<=23&&n<=59&&a<=59&&(!e||s)}t.exports=m,m.fast={date:/^\d\d\d\d-[0-1]\d-[0-3]\d$/,time:/^[0-2]\d:[0-5]\d:[0-5]\d(?:\.\d+)?(?:z|[+-]\d\d:\d\d)?$/i,"date-time":/^\d\d\d\d-[0-1]\d-[0-3]\d[t\s][0-2]\d:[0-5]\d:[0-5]\d(?:\.\d+)?(?:z|[+-]\d\d:\d\d)$/i,uri:/^(?:[a-z][a-z0-9+-.]*)?(?:\:|\/)\/?[^\s]*$/i,email:/^[a-z0-9.!#$%&'*+\/=?^_`{|}~-]+@[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\.[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?)*$/i,hostname:s,ipv4:/^(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?)$/,ipv6:/^\s*(?:(?:(?:[0-9a-f]{1,4}:){7}(?:[0-9a-f]{1,4}|:))|(?:(?:[0-9a-f]{1,4}:){6}(?::[0-9a-f]{1,4}|(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(?:(?:[0-9a-f]{1,4}:){5}(?:(?:(?::[0-9a-f]{1,4}){1,2})|:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(?:(?:[0-9a-f]{1,4}:){4}(?:(?:(?::[0-9a-f]{1,4}){1,3})|(?:(?::[0-9a-f]{1,4})?:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){3}(?:(?:(?::[0-9a-f]{1,4}){1,4})|(?:(?::[0-9a-f]{1,4}){0,2}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){2}(?:(?:(?::[0-9a-f]{1,4}){1,5})|(?:(?::[0-9a-f]{1,4}){0,3}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){1}(?:(?:(?::[0-9a-f]{1,4}){1,6})|(?:(?::[0-9a-f]{1,4}){0,4}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?::(?:(?:(?::[0-9a-f]{1,4}){1,7})|(?:(?::[0-9a-f]{1,4}){0,5}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:)))(?:%.+)?\s*$/i,regex:N,uuid:o,"json-pointer":b,"relative-json-pointer":r},m.full={date:Z,time:g,"date-time":function(t){var e=t.split(W);return Z(e[0])&&g(e[1],!0)},uri:function(t){return h.test(t)&&c.test(t)},email:/^[a-z0-9!#$%&'*+\/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&''*+\/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$/i,hostname:function(t){return t.length<=255&&s.test(t)},ipv4:/^(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?)$/,ipv6:/^\s*(?:(?:(?:[0-9a-f]{1,4}:){7}(?:[0-9a-f]{1,4}|:))|(?:(?:[0-9a-f]{1,4}:){6}(?::[0-9a-f]{1,4}|(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(?:(?:[0-9a-f]{1,4}:){5}(?:(?:(?::[0-9a-f]{1,4}){1,2})|:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(?:(?:[0-9a-f]{1,4}:){4}(?:(?:(?::[0-9a-f]{1,4}){1,3})|(?:(?::[0-9a-f]{1,4})?:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){3}(?:(?:(?::[0-9a-f]{1,4}){1,4})|(?:(?::[0-9a-f]{1,4}){0,2}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){2}(?:(?:(?::[0-9a-f]{1,4}){1,5})|(?:(?::[0-9a-f]{1,4}){0,3}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){1}(?:(?:(?::[0-9a-f]{1,4}){1,6})|(?:(?::[0-9a-f]{1,4}){0,4}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?::(?:(?:(?::[0-9a-f]{1,4}){1,7})|(?:(?::[0-9a-f]{1,4}){0,5}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:)))(?:%.+)?\s*$/i,regex:N,uuid:o,"json-pointer":b,"relative-json-pointer":r},m.compare={date:y,time:I,"date-time":function(t,e){if(t&&e){t=t.split(W),e=e.split(W);var l=y(t[0],e[0]);if(void 0!==l)return l||I(t[1],e[1])}}};var W=/t|\s/i,h=/\/|\:/;function N(t){try{return new RegExp(t),!0}catch(t){return!1}}function y(t,e){if(t&&e)return t>e?1:t(e=e[1]+e[2]+e[3]+(e[4]||""))?1:t "+u+") { ";var p=o+"["+u+"]";m.schema=M,m.schemaPath=d+"["+u+"]",m.errSchemaPath=s+"/"+u,m.errorPath=t.util.getPathExpr(t.errorPath,u,t.opts.jsonPointers,!0),m.dataPathArr[g]=u;var Y=t.validate(m);t.util.varOccurences(Y,W)<2?l+=" "+t.util.varReplace(Y,W,p)+" ":l+=" var "+W+" = "+p+"; "+Y+" ",l+=" } ",c&&(l+=" if (valid"+m.level+") { ",Z+="}")}"object"==typeof h&&t.util.schemaHasRules(h,t.RULES.all)&&(m.schema=h,m.schemaPath=t.schemaPath+".additionalItems",m.errSchemaPath=t.errSchemaPath+"/additionalItems",l+=" valid"+m.level+" = true; if ("+o+".length > "+a.length+") { for (var i"+i+" = "+a.length+"; i"+i+" < "+o+".length; i"+i+"++) { ",m.errorPath=t.util.getPathExpr(t.errorPath,"i"+i,t.opts.jsonPointers,!0),p=o+"[i"+i+"]",m.dataPathArr[g]="i"+i,Y=t.validate(m),t.util.varOccurences(Y,W)<2?l+=" "+t.util.varReplace(Y,W,p)+" ":l+=" var "+W+" = "+p+"; "+Y+" ",c&&(l+=" if (!valid"+m.level+") break; "),l+=" } } ",c&&(l+=" if (valid"+m.level+") { ",Z+="}"))}else t.util.schemaHasRules(a,t.RULES.all)&&(m.schema=a,m.schemaPath=d,m.errSchemaPath=s,l+=" for (var i"+i+" = 0; i"+i+" < "+o+".length; i"+i+"++) { ",m.errorPath=t.util.getPathExpr(t.errorPath,"i"+i,t.opts.jsonPointers,!0),p=o+"[i"+i+"]",m.dataPathArr[g]="i"+i,Y=t.validate(m),t.util.varOccurences(Y,W)<2?l+=" "+t.util.varReplace(Y,W,p)+" ":l+=" var "+W+" = "+p+"; "+Y+" ",c&&(l+=" if (!valid"+m.level+") break; "),l+=" } ",c&&(l+=" if (valid"+m.level+") { ",Z+="}"));return c&&(l+=" "+Z+" if ("+r+" == errors) {"),l=t.util.cleanUpCode(l)}},function(t,e){"use strict";t.exports=function(t,e){var l=" ",i=t.level,n=t.dataLevel,a=t.schema[e],d=t.schemaPath+"."+e,s=t.errSchemaPath+"/"+e,c=!t.opts.allErrors,o="data"+(n||""),b=t.opts.v5&&a.$data,r=b?t.util.getData(a.$data,n,t.dataPathArr):a;b&&(l+=" var schema"+i+" = "+r+"; ",r="schema"+i);var m,Z="maximum"==e,g=Z?"exclusiveMaximum":"exclusiveMinimum",W=t.schema[g],h=Z?"<":">",N=Z?">":"<";if(t.opts.v5&&W&&W.$data){var y=t.util.getData(W.$data,n,t.dataPathArr),I="exclusive"+i,G="' + "+(V="op"+i)+" + '";l+=" var schemaExcl"+i+" = "+y+"; ",l+=" var exclusive"+i+"; if (typeof "+(y="schemaExcl"+i)+" != 'boolean' && typeof "+y+" != 'undefined') { ";var M=g;(m=m||[]).push(l),l="",!1!==t.createErrors?(l+=" { keyword: '"+(M||"_exclusiveLimit")+"' , dataPath: (dataPath || '') + "+t.errorPath+' , schemaPath: "'+s+'" , params: {} ',!1!==t.opts.messages&&(l+=" , message: '"+g+" should be boolean' "),t.opts.verbose&&(l+=" , schema: validate.schema"+d+" , parentSchema: validate.schema"+t.schemaPath+" , data: "+o+" "),l+=" } "):l+=" {} ";var u=l;l=m.pop(),!t.compositeRule&&c?t.async?l+=" throw new ValidationError(["+u+"]); ":l+=" validate.errors = ["+u+"]; return false; ":l+=" var err = "+u+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",l+=" } else if( ",b&&(l+=" ("+r+" !== undefined && typeof "+r+" != 'number') || "),l+=" ((exclusive"+i+" = "+y+" === true) ? "+o+" "+N+"= "+r+" : "+o+" "+N+" "+r+")) { var op"+i+" = exclusive"+i+" ? '"+h+"' : '"+h+"=';"}else{G=h,(I=!0===W)||(G+="=");var V="'"+G+"'";l+=" if ( ",b&&(l+=" ("+r+" !== undefined && typeof "+r+" != 'number') || "),l+=" "+o+" "+N,I&&(l+="="),l+=" "+r+") {"}return M=e,(m=m||[]).push(l),l="",!1!==t.createErrors?(l+=" { keyword: '"+(M||"_limit")+"' , dataPath: (dataPath || '') + "+t.errorPath+' , schemaPath: "'+s+'" , params: { comparison: '+V+", limit: "+r+", exclusive: "+I+" } ",!1!==t.opts.messages&&(l+=" , message: 'should be "+G+" ",l+=b?"' + "+r:a+"'"),t.opts.verbose&&(l+=" , schema: ",l+=b?"validate.schema"+d:""+a,l+=" , parentSchema: validate.schema"+t.schemaPath+" , data: "+o+" "),l+=" } "):l+=" {} ",u=l,l=m.pop(),!t.compositeRule&&c?t.async?l+=" throw new ValidationError(["+u+"]); ":l+=" validate.errors = ["+u+"]; return false; ":l+=" var err = "+u+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",l+=" } ",c&&(l+=" else { "),l}},function(t,e){"use strict";t.exports=function(t,e){var l=" ",i=t.level,n=t.dataLevel,a=t.schema[e],d=t.schemaPath+"."+e,s=t.errSchemaPath+"/"+e,c=!t.opts.allErrors,o="data"+(n||""),b=t.opts.v5&&a.$data,r=b?t.util.getData(a.$data,n,t.dataPathArr):a;b&&(l+=" var schema"+i+" = "+r+"; ",r="schema"+i),l+="if ( ",b&&(l+=" ("+r+" !== undefined && typeof "+r+" != 'number') || "),l+=" "+o+".length "+("maxItems"==e?">":"<")+" "+r+") { ";var m=e,Z=Z||[];Z.push(l),l="",!1!==t.createErrors?(l+=" { keyword: '"+(m||"_limitItems")+"' , dataPath: (dataPath || '') + "+t.errorPath+' , schemaPath: "'+s+'" , params: { limit: '+r+" } ",!1!==t.opts.messages&&(l+=" , message: 'should NOT have ",l+="maxItems"==e?"more":"less",l+=" than ",l+=b?"' + "+r+" + '":""+a,l+=" items' "),t.opts.verbose&&(l+=" , schema: ",l+=b?"validate.schema"+d:""+a,l+=" , parentSchema: validate.schema"+t.schemaPath+" , data: "+o+" "),l+=" } "):l+=" {} ";var g=l;return l=Z.pop(),!t.compositeRule&&c?t.async?l+=" throw new ValidationError(["+g+"]); ":l+=" validate.errors = ["+g+"]; return false; ":l+=" var err = "+g+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",l+="} ",c&&(l+=" else { "),l}},function(t,e){"use strict";t.exports=function(t,e){var l=" ",i=t.level,n=t.dataLevel,a=t.schema[e],d=t.schemaPath+"."+e,s=t.errSchemaPath+"/"+e,c=!t.opts.allErrors,o="data"+(n||""),b=t.opts.v5&&a.$data,r=b?t.util.getData(a.$data,n,t.dataPathArr):a;b&&(l+=" var schema"+i+" = "+r+"; ",r="schema"+i);var m="maxLength"==e?">":"<";l+="if ( ",b&&(l+=" ("+r+" !== undefined && typeof "+r+" != 'number') || "),!1===t.opts.unicode?l+=" "+o+".length ":l+=" ucs2length("+o+") ",l+=" "+m+" "+r+") { ";var Z=e,g=g||[];g.push(l),l="",!1!==t.createErrors?(l+=" { keyword: '"+(Z||"_limitLength")+"' , dataPath: (dataPath || '') + "+t.errorPath+' , schemaPath: "'+s+'" , params: { limit: '+r+" } ",!1!==t.opts.messages&&(l+=" , message: 'should NOT be ",l+="maxLength"==e?"longer":"shorter",l+=" than ",l+=b?"' + "+r+" + '":""+a,l+=" characters' "),t.opts.verbose&&(l+=" , schema: ",l+=b?"validate.schema"+d:""+a,l+=" , parentSchema: validate.schema"+t.schemaPath+" , data: "+o+" "),l+=" } "):l+=" {} ";var W=l;return l=g.pop(),!t.compositeRule&&c?t.async?l+=" throw new ValidationError(["+W+"]); ":l+=" validate.errors = ["+W+"]; return false; ":l+=" var err = "+W+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",l+="} ",c&&(l+=" else { "),l}},function(t,e){"use strict";t.exports=function(t,e){var l=" ",i=t.level,n=t.dataLevel,a=t.schema[e],d=t.schemaPath+"."+e,s=t.errSchemaPath+"/"+e,c=!t.opts.allErrors,o="data"+(n||""),b=t.opts.v5&&a.$data,r=b?t.util.getData(a.$data,n,t.dataPathArr):a;b&&(l+=" var schema"+i+" = "+r+"; ",r="schema"+i),l+="if ( ",b&&(l+=" ("+r+" !== undefined && typeof "+r+" != 'number') || "),l+=" Object.keys("+o+").length "+("maxProperties"==e?">":"<")+" "+r+") { ";var m=e,Z=Z||[];Z.push(l),l="",!1!==t.createErrors?(l+=" { keyword: '"+(m||"_limitProperties")+"' , dataPath: (dataPath || '') + "+t.errorPath+' , schemaPath: "'+s+'" , params: { limit: '+r+" } ",!1!==t.opts.messages&&(l+=" , message: 'should NOT have ",l+="maxProperties"==e?"more":"less",l+=" than ",l+=b?"' + "+r+" + '":""+a,l+=" properties' "),t.opts.verbose&&(l+=" , schema: ",l+=b?"validate.schema"+d:""+a,l+=" , parentSchema: validate.schema"+t.schemaPath+" , data: "+o+" "),l+=" } "):l+=" {} ";var g=l;return l=Z.pop(),!t.compositeRule&&c?t.async?l+=" throw new ValidationError(["+g+"]); ":l+=" validate.errors = ["+g+"]; return false; ":l+=" var err = "+g+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",l+="} ",c&&(l+=" else { "),l}},function(t,e){"use strict";t.exports=function(t,e){var l=" ",i=t.level,n=t.dataLevel,a=t.schema[e],d=t.schemaPath+"."+e,s=t.errSchemaPath+"/"+e,c=!t.opts.allErrors,o="data"+(n||""),b=t.opts.v5&&a.$data,r=b?t.util.getData(a.$data,n,t.dataPathArr):a;b&&(l+=" var schema"+i+" = "+r+"; ",r="schema"+i),l+="var division"+i+";if (",b&&(l+=" "+r+" !== undefined && ( typeof "+r+" != 'number' || "),l+=" (division"+i+" = "+o+" / "+r+", ",t.opts.multipleOfPrecision?l+=" Math.abs(Math.round(division"+i+") - division"+i+") > 1e-"+t.opts.multipleOfPrecision+" ":l+=" division"+i+" !== parseInt(division"+i+") ",l+=" ) ",b&&(l+=" ) "),l+=" ) { ";var m=m||[];m.push(l),l="",!1!==t.createErrors?(l+=" { keyword: 'multipleOf' , dataPath: (dataPath || '') + "+t.errorPath+' , schemaPath: "'+s+'" , params: { multipleOf: '+r+" } ",!1!==t.opts.messages&&(l+=" , message: 'should be multiple of ",l+=b?"' + "+r:a+"'"),t.opts.verbose&&(l+=" , schema: ",l+=b?"validate.schema"+d:""+a,l+=" , parentSchema: validate.schema"+t.schemaPath+" , data: "+o+" "),l+=" } "):l+=" {} ";var Z=l;return l=m.pop(),!t.compositeRule&&c?t.async?l+=" throw new ValidationError(["+Z+"]); ":l+=" validate.errors = ["+Z+"]; return false; ":l+=" var err = "+Z+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",l+="} ",c&&(l+=" else { "),l}},function(t,e){"use strict";t.exports=function(t,e){var l=" ",i=t.level,n=t.dataLevel,a=t.schema[e],d=t.schemaPath+"."+e,s=t.errSchemaPath+"/"+e,c=!t.opts.allErrors,o="data"+(n||""),b="errs__"+i,r=t.util.copy(t);if(r.level++,t.util.schemaHasRules(a,t.RULES.all)){r.schema=a,r.schemaPath=d,r.errSchemaPath=s,l+=" var "+b+" = errors; ";var m,Z=t.compositeRule;t.compositeRule=r.compositeRule=!0,r.createErrors=!1,r.opts.allErrors&&(m=r.opts.allErrors,r.opts.allErrors=!1),l+=" "+t.validate(r)+" ",r.createErrors=!0,m&&(r.opts.allErrors=m),t.compositeRule=r.compositeRule=Z,l+=" if (valid"+r.level+") { ";var g=g||[];g.push(l),l="",!1!==t.createErrors?(l+=" { keyword: 'not' , dataPath: (dataPath || '') + "+t.errorPath+' , schemaPath: "'+s+'" , params: {} ',!1!==t.opts.messages&&(l+=" , message: 'should NOT be valid' "),t.opts.verbose&&(l+=" , schema: validate.schema"+d+" , parentSchema: validate.schema"+t.schemaPath+" , data: "+o+" "),l+=" } "):l+=" {} ";var W=l;l=g.pop(),!t.compositeRule&&c?t.async?l+=" throw new ValidationError(["+W+"]); ":l+=" validate.errors = ["+W+"]; return false; ":l+=" var err = "+W+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",l+=" } else { errors = "+b+"; if (vErrors !== null) { if ("+b+") vErrors.length = "+b+"; else vErrors = null; } ",t.opts.allErrors&&(l+=" } ")}else l+=" var err = ",!1!==t.createErrors?(l+=" { keyword: 'not' , dataPath: (dataPath || '') + "+t.errorPath+' , schemaPath: "'+s+'" , params: {} ',!1!==t.opts.messages&&(l+=" , message: 'should NOT be valid' "),t.opts.verbose&&(l+=" , schema: validate.schema"+d+" , parentSchema: validate.schema"+t.schemaPath+" , data: "+o+" "),l+=" } "):l+=" {} ",l+="; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",c&&(l+=" if (false) { ");return l}},function(t,e){"use strict";t.exports=function(t,e){var l=" ",i=t.level,n=t.dataLevel,a=t.schema[e],d=t.schemaPath+"."+e,s=t.errSchemaPath+"/"+e,c=!t.opts.allErrors,o="data"+(n||""),b="valid"+i,r="errs__"+i,m=t.util.copy(t),Z="";m.level++,l+="var "+r+" = errors;var prevValid"+i+" = false;var "+b+" = false; ";var g=t.compositeRule;t.compositeRule=m.compositeRule=!0;var W=a;if(W)for(var h,N=-1,y=W.length-1;N5)l+=" || validate.schema"+d+"[key"+i+"] ";else{var D=h;if(D)for(var U=-1,T=D.length-1;U= "+ot+"; ",s=t.errSchemaPath+"/patternGroups/minimum",l+=" if (!"+b+") { ",(gt=gt||[]).push(l),l="",!1!==t.createErrors?(l+=" { keyword: 'patternGroups' , dataPath: (dataPath || '') + "+t.errorPath+' , schemaPath: "'+s+"\" , params: { reason: '"+mt+"', limit: "+rt+", pattern: '"+t.util.escapeQuotes(at)+"' } ",!1!==t.opts.messages&&(l+=" , message: 'should NOT have "+Zt+" than "+rt+' properties matching pattern "'+t.util.escapeQuotes(at)+"\"' "),t.opts.verbose&&(l+=" , schema: validate.schema"+d+" , parentSchema: validate.schema"+t.schemaPath+" , data: "+o+" "),l+=" } "):l+=" {} ",k=l,l=gt.pop(),!t.compositeRule&&c?t.async?l+=" throw new ValidationError(["+k+"]); ":l+=" validate.errors = ["+k+"]; return false; ":l+=" var err = "+k+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",l+=" } ",void 0!==bt&&(l+=" else ")}var gt;if(void 0!==bt)rt=bt,mt="maximum",Zt="more",l+=" "+b+" = pgPropCount"+i+" <= "+bt+"; ",s=t.errSchemaPath+"/patternGroups/maximum",l+=" if (!"+b+") { ",(gt=gt||[]).push(l),l="",!1!==t.createErrors?(l+=" { keyword: 'patternGroups' , dataPath: (dataPath || '') + "+t.errorPath+' , schemaPath: "'+s+"\" , params: { reason: '"+mt+"', limit: "+rt+", pattern: '"+t.util.escapeQuotes(at)+"' } ",!1!==t.opts.messages&&(l+=" , message: 'should NOT have "+Zt+" than "+rt+' properties matching pattern "'+t.util.escapeQuotes(at)+"\"' "),t.opts.verbose&&(l+=" , schema: validate.schema"+d+" , parentSchema: validate.schema"+t.schemaPath+" , data: "+o+" "),l+=" } "):l+=" {} ",k=l,l=gt.pop(),!t.compositeRule&&c?t.async?l+=" throw new ValidationError(["+k+"]); ":l+=" validate.errors = ["+k+"]; return false; ":l+=" var err = "+k+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",l+=" } ";s=J,c&&(l+=" if ("+b+") { ",Z+="}")}}}}return c&&(l+=" "+Z+" if ("+r+" == errors) {"),l=t.util.cleanUpCode(l)}},function(t,e){"use strict";t.exports=function(t,e){var l=" ",i=t.level,n=t.dataLevel,a=t.schema[e],d=t.schemaPath+"."+e,s=t.errSchemaPath+"/"+e,c=!t.opts.allErrors,o="data"+(n||""),b="valid"+i,r=t.opts.v5&&a.$data,m=r?t.util.getData(a.$data,n,t.dataPathArr):a;if(r&&(l+=" var schema"+i+" = "+m+"; ",m="schema"+i),!r)if(a.length=t.opts.loopRequired;if(c)if(l+=" var missing"+i+"; ",I){r||(l+=" var schema"+i+" = validate.schema"+d+"; ");var G="' + "+(B="schema"+i+"["+(Y="i"+i)+"]")+" + '";t.opts._errorDataPathProperty&&(t.errorPath=t.util.getPathExpr(y,B,t.opts.jsonPointers)),l+=" var "+b+" = true; ",r&&(l+=" if (schema"+i+" === undefined) "+b+" = true; else if (!Array.isArray(schema"+i+")) "+b+" = false; else {"),l+=" for (var "+Y+" = 0; "+Y+" < schema"+i+".length; "+Y+"++) { "+b+" = "+o+"[schema"+i+"["+Y+"]] !== undefined; if (!"+b+") break; } ",r&&(l+=" } "),l+=" if (!"+b+") { ",(u=u||[]).push(l),l="",!1!==t.createErrors?(l+=" { keyword: 'required' , dataPath: (dataPath || '') + "+t.errorPath+' , schemaPath: "'+s+"\" , params: { missingProperty: '"+G+"' } ",!1!==t.opts.messages&&(l+=" , message: '",t.opts._errorDataPathProperty?l+="is a required property":l+="should have required property \\'"+G+"\\'",l+="' "),t.opts.verbose&&(l+=" , schema: validate.schema"+d+" , parentSchema: validate.schema"+t.schemaPath+" , data: "+o+" "),l+=" } "):l+=" {} ";var M=l;l=u.pop(),!t.compositeRule&&c?t.async?l+=" throw new ValidationError(["+M+"]); ":l+=" validate.errors = ["+M+"]; return false; ":l+=" var err = "+M+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",l+=" } else { "}else{l+=" if ( ";var u,V=Z;if(V)for(var p,Y=-1,R=V.length-1;Y 1) { var i = "+o+".length, j; outer: for (;i--;) { for (j = i; j--;) { if (equal("+o+"[i], "+o+"[j])) { "+b+" = false; break outer; } } } } ",r&&(l+=" } "),l+=" if (!"+b+") { ";var Z=Z||[];Z.push(l),l="",!1!==t.createErrors?(l+=" { keyword: 'uniqueItems' , dataPath: (dataPath || '') + "+t.errorPath+' , schemaPath: "'+s+'" , params: { i: i, j: j } ',!1!==t.opts.messages&&(l+=" , message: 'should NOT have duplicate items (items ## ' + j + ' and ' + i + ' are identical)' "),t.opts.verbose&&(l+=" , schema: ",l+=r?"validate.schema"+d:""+a,l+=" , parentSchema: validate.schema"+t.schemaPath+" , data: "+o+" "),l+=" } "):l+=" {} ";var g=l;l=Z.pop(),!t.compositeRule&&c?t.async?l+=" throw new ValidationError(["+g+"]); ":l+=" validate.errors = ["+g+"]; return false; ":l+=" var err = "+g+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",l+=" } ",c&&(l+=" else { ")}else c&&(l+=" if (true) { ");return l}},function(t,e,l){"use strict";var i="https://raw.githubusercontent.com/epoberezkin/ajv/master/lib/refs/json-schema-v5.json";function n(t){return{not:{items:{not:t}}}}t.exports={enable:function(t){var e={switch:l(44),constant:l(45),_formatLimit:l(46),patternRequired:l(47)};if(!1!==t._opts.meta){var a=l(48);t.addMetaSchema(a,i)}function d(l,i,n){var a={inline:n||e[l],statements:!0,errors:"full"};i&&(a.type=i),t.addKeyword(l,a)}d("constant"),t.addKeyword("contains",{type:"array",macro:n}),d("formatMaximum","string",e._formatLimit),d("formatMinimum","string",e._formatLimit),t.addKeyword("exclusiveFormatMaximum"),t.addKeyword("exclusiveFormatMinimum"),t.addKeyword("patternGroups"),d("patternRequired","object"),d("switch")},META_SCHEMA_ID:i}},function(t,e){"use strict";t.exports=function(t,e){var l=" ",i=t.level,n=t.dataLevel,a=t.schema[e],d=t.schemaPath+"."+e,s=t.errSchemaPath+"/"+e,c=!t.opts.allErrors,o="data"+(n||""),b="valid"+i,r="errs__"+i,m=t.util.copy(t),Z="";m.level++;var g,W="ifPassed"+t.level;l+="var "+W+";";var h=a;if(h)for(var N,y=-1,I=h.length-1;y",u="result"+i,V=t.opts.v5&&a.$data,p=V?t.util.getData(a.$data,n,t.dataPathArr):a;if(V&&(l+=" var schema"+i+" = "+p+"; ",p="schema"+i),G){var Y=t.util.getData(I.$data,n,t.dataPathArr),R="exclusive"+i,B="' + op"+i+" + '";l+=" var schemaExcl"+i+" = "+Y+"; ",l+=" if (typeof "+(Y="schemaExcl"+i)+" != 'boolean' && "+Y+" !== undefined) { "+b+" = false; ";var O=y;(h=h||[]).push(l),l="",!1!==t.createErrors?(l+=" { keyword: '"+(O||"_exclusiveFormatLimit")+"' , dataPath: (dataPath || '') + "+t.errorPath+' , schemaPath: "'+s+'" , params: {} ',!1!==t.opts.messages&&(l+=" , message: '"+y+" should be boolean' "),t.opts.verbose&&(l+=" , schema: validate.schema"+d+" , parentSchema: validate.schema"+t.schemaPath+" , data: "+o+" "),l+=" } "):l+=" {} ";var D=l;l=h.pop(),!t.compositeRule&&c?t.async?l+=" throw new ValidationError(["+D+"]); ":l+=" validate.errors = ["+D+"]; return false; ":l+=" var err = "+D+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",l+=" } ",c&&(Z+="}",l+=" else { "),V&&(l+=" if ("+p+" === undefined) "+b+" = true; else if (typeof "+p+" != 'string') "+b+" = false; else { ",Z+="}"),m&&(l+=" if (!"+W+") "+b+" = true; else { ",Z+="}"),l+=" var "+u+" = "+W+"("+o+", ",l+=V?""+p:""+t.util.toQuotedString(a),l+=" ); if ("+u+" === undefined) "+b+" = false; var exclusive"+i+" = "+Y+" === true; if ("+b+" === undefined) { "+b+" = exclusive"+i+" ? "+u+" "+M+" 0 : "+u+" "+M+"= 0; } if (!"+b+") var op"+i+" = exclusive"+i+" ? '"+M+"' : '"+M+"=';"}else B=M,(R=!0===I)||(B+="="),V&&(l+=" if ("+p+" === undefined) "+b+" = true; else if (typeof "+p+" != 'string') "+b+" = false; else { ",Z+="}"),m&&(l+=" if (!"+W+") "+b+" = true; else { ",Z+="}"),l+=" var "+u+" = "+W+"("+o+", ",l+=V?""+p:""+t.util.toQuotedString(a),l+=" ); if ("+u+" === undefined) "+b+" = false; if ("+b+" === undefined) "+b+" = "+u+" "+M,R||(l+="="),l+=" 0;";return l+=Z+"if (!"+b+") { ",O=e,(h=h||[]).push(l),l="",!1!==t.createErrors?(l+=" { keyword: '"+(O||"_formatLimit")+"' , dataPath: (dataPath || '') + "+t.errorPath+' , schemaPath: "'+s+'" , params: { limit: ',l+=V?""+p:""+t.util.toQuotedString(a),l+=" } ",!1!==t.opts.messages&&(l+=" , message: 'should be "+B+' "',l+=V?"' + "+p+" + '":""+t.util.escapeQuotes(a),l+="\"' "),t.opts.verbose&&(l+=" , schema: ",l+=V?"validate.schema"+d:""+t.util.toQuotedString(a),l+=" , parentSchema: validate.schema"+t.schemaPath+" , data: "+o+" "),l+=" } "):l+=" {} ",D=l,l=h.pop(),!t.compositeRule&&c?t.async?l+=" throw new ValidationError(["+D+"]); ":l+=" validate.errors = ["+D+"]; return false; ":l+=" var err = "+D+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",l+="}"}},function(t,e){"use strict";t.exports=function(t,e){var l=" ",i=t.level,n=t.dataLevel,a=t.schema[e],d=t.schemaPath+"."+e,s=t.errSchemaPath+"/"+e,c=!t.opts.allErrors,o="data"+(n||""),b="valid"+i,r="key"+i,m="patternMatched"+i,Z="";l+="var "+b+" = true;";var g=a;if(g)for(var W,h=-1,N=g.length-1;h0?this.autoScrollStep=(i+24-t)/3:t>a-24&&n+l.scrollTop3?(l.scrollTop+=n/3,i.animateCallback=e,i.animateTimeout=setTimeout(s,50)):(e&&e(!0),l.scrollTop=d,delete i.animateTimeout,delete i.animateCallback)};s()}else e&&e(!1)},_createFrame:function(){this.frame=document.createElement("div"),this.frame.className="jsoneditor jsoneditor-mode-"+this.options.mode,this.container.appendChild(this.frame);var t=this;function e(e){t._onEvent&&t._onEvent(e)}this.frame.onclick=function(t){var l=t.target;e(t),"BUTTON"==l.nodeName&&t.preventDefault()},this.frame.oninput=e,this.frame.onchange=e,this.frame.onkeydown=e,this.frame.onkeyup=e,this.frame.oncut=e,this.frame.onpaste=e,this.frame.onmousedown=e,this.frame.onmouseup=e,this.frame.onmouseover=e,this.frame.onmouseout=e,o.addEventListener(this.frame,"focus",e,!0),o.addEventListener(this.frame,"blur",e,!0),this.frame.onfocusin=e,this.frame.onfocusout=e,this.menu=document.createElement("div"),this.menu.className="jsoneditor-menu",this.frame.appendChild(this.menu);var l=document.createElement("button");l.type="button",l.className="jsoneditor-expand-all",l.title="Expand all fields",l.onclick=function(){t.expandAll()},this.menu.appendChild(l);var i=document.createElement("button");if(i.type="button",i.title="Collapse all fields",i.className="jsoneditor-collapse-all",i.onclick=function(){t.collapseAll()},this.menu.appendChild(i),this.history){var n=document.createElement("button");n.type="button",n.className="jsoneditor-undo jsoneditor-separator",n.title="Undo last action (Ctrl+Z)",n.onclick=function(){t._onUndo()},this.menu.appendChild(n),this.dom.undo=n;var d=document.createElement("button");d.type="button",d.className="jsoneditor-redo",d.title="Redo (Ctrl+Shift+Z)",d.onclick=function(){t._onRedo()},this.menu.appendChild(d),this.dom.redo=d,this.history.onChange=function(){n.disabled=!t.history.canUndo(),d.disabled=!t.history.canRedo()},this.history.onChange()}if(this.options&&this.options.modes&&this.options.modes.length){var s=this;this.modeSwitcher=new c(this.menu,this.options.modes,this.options.mode,(function(t){s.modeSwitcher.destroy(),s.setMode(t),s.modeSwitcher.focus()}))}this.options.search&&(this.searchBox=new a(this,this.menu))},_onUndo:function(){this.history&&(this.history.undo(),this._onChange())},_onRedo:function(){this.history&&(this.history.redo(),this._onChange())},_onEvent:function(t){"keydown"==t.type&&this._onKeyDown(t),"focus"==t.type&&(this.focusTarget=t.target),"mousedown"==t.type&&this._startDragDistance(t),"mousemove"!=t.type&&"mouseup"!=t.type&&"click"!=t.type||this._updateDragDistance(t);var e=s.getNodeFromTarget(t.target);if(e&&e.selected){if("click"==t.type){if(t.target==e.dom.menu)return void this.showContextMenu(t.target);t.hasMoved||this.deselect()}"mousedown"==t.type&&s.onDragStart(this.multiselection.nodes,t)}else"mousedown"==t.type&&(this.deselect(),e&&t.target==e.dom.drag?s.onDragStart(e,t):(!e||t.target!=e.dom.field&&t.target!=e.dom.value&&t.target!=e.dom.select)&&this._onMultiSelectStart(t));e&&e.onEvent(t)},_startDragDistance:function(t){this.dragDistanceEvent={initialTarget:t.target,initialPageX:t.pageX,initialPageY:t.pageY,dragDistance:0,hasMoved:!1}},_updateDragDistance:function(t){this.dragDistanceEvent||this._startDragDistance(t);var e=t.pageX-this.dragDistanceEvent.initialPageX,l=t.pageY-this.dragDistanceEvent.initialPageY;return this.dragDistanceEvent.dragDistance=Math.sqrt(e*e+l*l),this.dragDistanceEvent.hasMoved=this.dragDistanceEvent.hasMoved||this.dragDistanceEvent.dragDistance>10,t.dragDistance=this.dragDistanceEvent.dragDistance,t.hasMoved=this.dragDistanceEvent.hasMoved,t.dragDistance},_onMultiSelectStart:function(t){var e=s.getNodeFromTarget(t.target);if("tree"===this.options.mode&&void 0===this.options.onEditable){this.multiselection={start:e||null,end:null,nodes:[]},this._startDragDistance(t);var l=this;this.mousemove||(this.mousemove=o.addEventListener(window,"mousemove",(function(t){l._onMultiSelect(t)}))),this.mouseup||(this.mouseup=o.addEventListener(window,"mouseup",(function(t){l._onMultiSelectEnd(t)})))}},_onMultiSelect:function(t){if(t.preventDefault(),this._updateDragDistance(t),t.hasMoved){var e=s.getNodeFromTarget(t.target);e&&(null==this.multiselection.start&&(this.multiselection.start=e),this.multiselection.end=e),this.deselect();var l=this.multiselection.start,i=this.multiselection.end||this.multiselection.start;l&&i&&(this.multiselection.nodes=this._findTopLevelNodes(l,i),this.select(this.multiselection.nodes))}},_onMultiSelectEnd:function(t){this.multiselection.nodes[0]&&this.multiselection.nodes[0].dom.menu.focus(),this.multiselection.start=null,this.multiselection.end=null,this.mousemove&&(o.removeEventListener(window,"mousemove",this.mousemove),delete this.mousemove),this.mouseup&&(o.removeEventListener(window,"mouseup",this.mouseup),delete this.mouseup)},deselect:function(t){this.multiselection.nodes.forEach((function(t){t.setSelected(!1)})),this.multiselection.nodes=[],t&&(this.multiselection.start=null,this.multiselection.end=null)},select:function(t){if(!Array.isArray(t))return this.select([t]);if(t){this.deselect(),this.multiselection.nodes=t.slice(0);var e=t[0];t.forEach((function(t){t.setSelected(!0,t===e)}))}},_findTopLevelNodes:function(t,e){for(var l=t.getNodePath(),i=e.getNodePath(),n=0;n=0},i.prototype.canRedo=function(){return this.index=0;){var l=e[t];if(" "!==l&&"\n"!==l&&"\r"!==l&&"\t"!==l)return l;t--}return""}function s(){for(l+=2;l=0;s--){var c=d[s];!0===c.specified&&a.removeAttribute(c.name)}e.stripFormatting(a)}},e.setEndOfContentEditable=function(t){var e,l;document.createRange&&((e=document.createRange()).selectNodeContents(t),e.collapse(!1),(l=window.getSelection()).removeAllRanges(),l.addRange(e))},e.selectContentEditable=function(t){var e,l;t&&"DIV"==t.nodeName&&window.getSelection&&document.createRange&&((l=document.createRange()).selectNodeContents(t),(e=window.getSelection()).removeAllRanges(),e.addRange(l))},e.getSelection=function(){if(window.getSelection){var t=window.getSelection();if(t.getRangeAt&&t.rangeCount)return t.getRangeAt(0)}return null},e.setSelection=function(t){if(t&&window.getSelection){var e=window.getSelection();e.removeAllRanges(),e.addRange(t)}},e.getSelectionOffset=function(){var t=e.getSelection();return t&&"startOffset"in t&&"endOffset"in t&&t.startContainer&&t.startContainer==t.endContainer?{startOffset:t.startOffset,endOffset:t.endOffset,container:t.startContainer.parentNode}:null},e.setSelectionOffset=function(t){if(document.createRange&&window.getSelection&&window.getSelection()){var l=document.createRange();t.container.firstChild||t.container.appendChild(document.createTextNode("")),l.setStart(t.container.firstChild,t.startOffset),l.setEnd(t.container.firstChild,t.endOffset),e.setSelection(l)}},e.getInnerText=function(t,l){if(null==l&&(l={text:"",flush:function(){var t=this.text;return this.text="",t},set:function(t){this.text=t}}),t.nodeValue)return l.flush()+t.nodeValue;if(t.hasChildNodes()){for(var i=t.childNodes,n="",a=0,d=i.length;a5){var l=["("+(e.length-5)+" more...)"];(e=e.slice(0,5)).push(l)}t.message="should be equal to one of: "+e.join(", ")}}return"additionalProperties"===t.keyword&&(t.message="should NOT have additional property: "+t.params.additionalProperty),t},e.insideRect=function(t,e,l){var i=void 0!==l?l:0;return e.left-i>=t.left&&e.right+i<=t.right&&e.top-i>=t.top&&e.bottom+i<=t.bottom},e.debounce=function(t,e,l){var i;return function(){var n=this,a=arguments,d=function(){i=null,l||t.apply(n,a)},s=l&&!i;clearTimeout(i),i=setTimeout(d,e),s&&t.apply(n,a)}},e.textDiff=function(t,e){for(var l=e.length,i=0,n=t.length,a=e.length;e.charAt(i)===t.charAt(i)&&ii&&n>0;)a--,n--;return{start:i,end:a}}},function(t,e,l){var i,n,a=(i={trace:function(){},yy:{},symbols_:{error:2,JSONString:3,STRING:4,JSONNumber:5,NUMBER:6,JSONNullLiteral:7,NULL:8,JSONBooleanLiteral:9,TRUE:10,FALSE:11,JSONText:12,JSONValue:13,EOF:14,JSONObject:15,JSONArray:16,"{":17,"}":18,JSONMemberList:19,JSONMember:20,":":21,",":22,"[":23,"]":24,JSONElementList:25,$accept:0,$end:1},terminals_:{2:"error",4:"STRING",6:"NUMBER",8:"NULL",10:"TRUE",11:"FALSE",14:"EOF",17:"{",18:"}",21:":",22:",",23:"[",24:"]"},productions_:[0,[3,1],[5,1],[7,1],[9,1],[9,1],[12,2],[13,1],[13,1],[13,1],[13,1],[13,1],[13,1],[15,2],[15,3],[20,3],[19,1],[19,3],[16,2],[16,3],[25,1],[25,3]],performAction:function(t,e,l,i,n,a,d){var s=a.length-1;switch(n){case 1:this.$=t.replace(/\\(\\|")/g,"$1").replace(/\\n/g,"\n").replace(/\\r/g,"\r").replace(/\\t/g,"\t").replace(/\\v/g,"\v").replace(/\\f/g,"\f").replace(/\\b/g,"\b");break;case 2:this.$=Number(t);break;case 3:this.$=null;break;case 4:this.$=!0;break;case 5:this.$=!1;break;case 6:return this.$=a[s-1];case 13:this.$={};break;case 14:this.$=a[s-1];break;case 15:this.$=[a[s-2],a[s]];break;case 16:this.$={},this.$[a[s][0]]=a[s][1];break;case 17:this.$=a[s-2],a[s-2][a[s][0]]=a[s][1];break;case 18:this.$=[];break;case 19:this.$=a[s-1];break;case 20:this.$=[a[s]];break;case 21:this.$=a[s-2],a[s-2].push(a[s])}},table:[{3:5,4:[1,12],5:6,6:[1,13],7:3,8:[1,9],9:4,10:[1,10],11:[1,11],12:1,13:2,15:7,16:8,17:[1,14],23:[1,15]},{1:[3]},{14:[1,16]},{14:[2,7],18:[2,7],22:[2,7],24:[2,7]},{14:[2,8],18:[2,8],22:[2,8],24:[2,8]},{14:[2,9],18:[2,9],22:[2,9],24:[2,9]},{14:[2,10],18:[2,10],22:[2,10],24:[2,10]},{14:[2,11],18:[2,11],22:[2,11],24:[2,11]},{14:[2,12],18:[2,12],22:[2,12],24:[2,12]},{14:[2,3],18:[2,3],22:[2,3],24:[2,3]},{14:[2,4],18:[2,4],22:[2,4],24:[2,4]},{14:[2,5],18:[2,5],22:[2,5],24:[2,5]},{14:[2,1],18:[2,1],21:[2,1],22:[2,1],24:[2,1]},{14:[2,2],18:[2,2],22:[2,2],24:[2,2]},{3:20,4:[1,12],18:[1,17],19:18,20:19},{3:5,4:[1,12],5:6,6:[1,13],7:3,8:[1,9],9:4,10:[1,10],11:[1,11],13:23,15:7,16:8,17:[1,14],23:[1,15],24:[1,21],25:22},{1:[2,6]},{14:[2,13],18:[2,13],22:[2,13],24:[2,13]},{18:[1,24],22:[1,25]},{18:[2,16],22:[2,16]},{21:[1,26]},{14:[2,18],18:[2,18],22:[2,18],24:[2,18]},{22:[1,28],24:[1,27]},{22:[2,20],24:[2,20]},{14:[2,14],18:[2,14],22:[2,14],24:[2,14]},{3:20,4:[1,12],20:29},{3:5,4:[1,12],5:6,6:[1,13],7:3,8:[1,9],9:4,10:[1,10],11:[1,11],13:30,15:7,16:8,17:[1,14],23:[1,15]},{14:[2,19],18:[2,19],22:[2,19],24:[2,19]},{3:5,4:[1,12],5:6,6:[1,13],7:3,8:[1,9],9:4,10:[1,10],11:[1,11],13:31,15:7,16:8,17:[1,14],23:[1,15]},{18:[2,17],22:[2,17]},{18:[2,15],22:[2,15]},{22:[2,21],24:[2,21]}],defaultActions:{16:[2,6]},parseError:function(t,e){throw new Error(t)},parse:function(t){var e=this,l=[0],i=[null],n=[],a=this.table,d="",s=0,c=0,o=0;this.lexer.setInput(t),this.lexer.yy=this.yy,this.yy.lexer=this.lexer,void 0===this.lexer.yylloc&&(this.lexer.yylloc={});var b=this.lexer.yylloc;function r(){var t;return"number"!=typeof(t=e.lexer.lex()||1)&&(t=e.symbols_[t]||t),t}n.push(b),"function"==typeof this.yy.parseError&&(this.parseError=this.yy.parseError);for(var m,Z,g,W,h,N,y,I,G,M,u={};;){if(g=l[l.length-1],this.defaultActions[g]?W=this.defaultActions[g]:(null==m&&(m=r()),W=a[g]&&a[g][m]),void 0===W||!W.length||!W[0]){if(!o){for(N in G=[],a[g])this.terminals_[N]&&N>2&&G.push("'"+this.terminals_[N]+"'");var V="";V=this.lexer.showPosition?"Parse error on line "+(s+1)+":\n"+this.lexer.showPosition()+"\nExpecting "+G.join(", ")+", got '"+this.terminals_[m]+"'":"Parse error on line "+(s+1)+": Unexpected "+(1==m?"end of input":"'"+(this.terminals_[m]||m)+"'"),this.parseError(V,{text:this.lexer.match,token:this.terminals_[m]||m,line:this.lexer.yylineno,loc:b,expected:G})}if(3==o){if(1==m)throw new Error(V||"Parsing halted.");c=this.lexer.yyleng,d=this.lexer.yytext,s=this.lexer.yylineno,b=this.lexer.yylloc,m=r()}for(;!(2..toString()in a[g]);){if(0==g)throw new Error(V||"Parsing halted.");M=1,l.length=l.length-2*M,i.length=i.length-M,n.length=n.length-M,g=l[l.length-1]}Z=m,m=2,W=a[g=l[l.length-1]]&&a[g][2],o=3}if(W[0]instanceof Array&&W.length>1)throw new Error("Parse Error: multiple actions possible at state: "+g+", token: "+m);switch(W[0]){case 1:l.push(m),i.push(this.lexer.yytext),n.push(this.lexer.yylloc),l.push(W[1]),m=null,Z?(m=Z,Z=null):(c=this.lexer.yyleng,d=this.lexer.yytext,s=this.lexer.yylineno,b=this.lexer.yylloc,o>0&&o--);break;case 2:if(y=this.productions_[W[1]][1],u.$=i[i.length-y],u._$={first_line:n[n.length-(y||1)].first_line,last_line:n[n.length-1].last_line,first_column:n[n.length-(y||1)].first_column,last_column:n[n.length-1].last_column},void 0!==(h=this.performAction.call(u,d,c,s,this.yy,W[1],i,n)))return h;y&&(l=l.slice(0,-1*y*2),i=i.slice(0,-1*y),n=n.slice(0,-1*y)),l.push(this.productions_[W[1]][0]),i.push(u.$),n.push(u._$),I=a[l[l.length-2]][l[l.length-1]],l.push(I);break;case 3:return!0}}return!0}},n=function(){var t={EOF:1,parseError:function(t,e){if(!this.yy.parseError)throw new Error(t);this.yy.parseError(t,e)},setInput:function(t){return this._input=t,this._more=this._less=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this},input:function(){var t=this._input[0];return this.yytext+=t,this.yyleng++,this.match+=t,this.matched+=t,t.match(/\n/)&&this.yylineno++,this._input=this._input.slice(1),t},unput:function(t){return this._input=t+this._input,this},more:function(){return this._more=!0,this},less:function(t){this._input=this.match.slice(t)+this._input},pastInput:function(){var t=this.matched.substr(0,this.matched.length-this.match.length);return(t.length>20?"...":"")+t.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var t=this.match;return t.length<20&&(t+=this._input.substr(0,20-t.length)),(t.substr(0,20)+(t.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var t=this.pastInput(),e=new Array(t.length+1).join("-");return t+this.upcomingInput()+"\n"+e+"^"},next:function(){if(this.done)return this.EOF;var t,e,l,i,n;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var a=this._currentRules(),d=0;de[0].length)||(e=l,i=d,this.options.flex));d++);return e?((n=e[0].match(/\n.*/g))&&(this.yylineno+=n.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:n?n[n.length-1].length-1:this.yylloc.last_column+e[0].length},this.yytext+=e[0],this.match+=e[0],this.yyleng=this.yytext.length,this._more=!1,this._input=this._input.slice(e[0].length),this.matched+=e[0],t=this.performAction.call(this,this.yy,this,a[i],this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),t||void 0):""===this._input?this.EOF:void this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var t=this.next();return void 0!==t?t:this.lex()},begin:function(t){this.conditionStack.push(t)},popState:function(){return this.conditionStack.pop()},_currentRules:function(){return this.conditions[this.conditionStack[this.conditionStack.length-1]].rules},topState:function(){return this.conditionStack[this.conditionStack.length-2]},pushState:function(t){this.begin(t)},options:{},performAction:function(t,e,l,i){switch(l){case 0:break;case 1:return 6;case 2:return e.yytext=e.yytext.substr(1,e.yyleng-2),4;case 3:return 17;case 4:return 18;case 5:return 23;case 6:return 24;case 7:return 22;case 8:return 21;case 9:return 10;case 10:return 11;case 11:return 8;case 12:return 14;case 13:return"INVALID"}},rules:[/^(?:\s+)/,/^(?:(-?([0-9]|[1-9][0-9]+))(\.[0-9]+)?([eE][-+]?[0-9]+)?\b)/,/^(?:"(?:\\[\\"bfnrt/]|\\u[a-fA-F0-9]{4}|[^\\\0-\x09\x0a-\x1f"])*")/,/^(?:\{)/,/^(?:\})/,/^(?:\[)/,/^(?:\])/,/^(?:,)/,/^(?::)/,/^(?:true\b)/,/^(?:false\b)/,/^(?:null\b)/,/^(?:$)/,/^(?:.)/],conditions:{INITIAL:{rules:[0,1,2,3,4,5,6,7,8,9,10,11,12,13],inclusive:!0}}};return t}(),i.lexer=n,i);e.parser=a,e.parse=a.parse.bind(a)},function(t,e){"use strict";function l(t,e){var l=this;this.editor=t,this.timeout=void 0,this.delay=200,this.lastText=void 0,this.dom={},this.dom.container=e;var i=document.createElement("table");this.dom.table=i,i.className="jsoneditor-search",e.appendChild(i);var n=document.createElement("tbody");this.dom.tbody=n,i.appendChild(n);var a=document.createElement("tr");n.appendChild(a);var d=document.createElement("td");a.appendChild(d);var s=document.createElement("div");this.dom.results=s,s.className="jsoneditor-results",d.appendChild(s),d=document.createElement("td"),a.appendChild(d);var c=document.createElement("div");this.dom.input=c,c.className="jsoneditor-frame",c.title="Search fields and values",d.appendChild(c);var o=document.createElement("table");c.appendChild(o);var b=document.createElement("tbody");o.appendChild(b),a=document.createElement("tr"),b.appendChild(a);var r=document.createElement("button");r.type="button",r.className="jsoneditor-refresh",(d=document.createElement("td")).appendChild(r),a.appendChild(d);var m=document.createElement("input");this.dom.search=m,m.oninput=function(t){l._onDelayedSearch(t)},m.onchange=function(t){l._onSearch()},m.onkeydown=function(t){l._onKeyDown(t)},m.onkeyup=function(t){l._onKeyUp(t)},r.onclick=function(t){m.select()},(d=document.createElement("td")).appendChild(m),a.appendChild(d);var Z=document.createElement("button");Z.type="button",Z.title="Next result (Enter)",Z.className="jsoneditor-next",Z.onclick=function(){l.next()},(d=document.createElement("td")).appendChild(Z),a.appendChild(d);var g=document.createElement("button");g.type="button",g.title="Previous result (Shift+Enter)",g.className="jsoneditor-previous",g.onclick=function(){l.previous()},(d=document.createElement("td")).appendChild(g),a.appendChild(d)}l.prototype.next=function(t){if(null!=this.results){var e=null!=this.resultIndex?this.resultIndex+1:0;e>this.results.length-1&&(e=0),this._setActiveResult(e,t)}},l.prototype.previous=function(t){if(null!=this.results){var e=this.results.length-1,l=null!=this.resultIndex?this.resultIndex-1:e;l<0&&(l=e),this._setActiveResult(l,t)}},l.prototype._setActiveResult=function(t,e){if(this.activeResult){var l=this.activeResult.node;"field"==this.activeResult.elem?delete l.searchFieldActive:delete l.searchValueActive,l.updateDom()}if(!this.results||!this.results[t])return this.resultIndex=void 0,void(this.activeResult=void 0);this.resultIndex=t;var i=this.results[this.resultIndex].node,n=this.results[this.resultIndex].elem;"field"==n?i.searchFieldActive=!0:i.searchValueActive=!0,this.activeResult=this.results[this.resultIndex],i.updateDom(),i.scrollTo((function(){e&&i.focus(n)}))},l.prototype._clearDelay=function(){null!=this.timeout&&(clearTimeout(this.timeout),delete this.timeout)},l.prototype._onDelayedSearch=function(t){this._clearDelay();var e=this;this.timeout=setTimeout((function(t){e._onSearch()}),this.delay)},l.prototype._onSearch=function(t){this._clearDelay();var e=this.dom.search.value,l=e.length>0?e:void 0;if(l!=this.lastText||t)if(this.lastText=l,this.results=this.editor.search(l),this._setActiveResult(void 0),null!=l){var i=this.results.length;switch(i){case 0:this.dom.results.innerHTML="no results";break;case 1:this.dom.results.innerHTML="1 result";break;default:this.dom.results.innerHTML=i+" results"}}else this.dom.results.innerHTML=""},l.prototype._onKeyDown=function(t){var e=t.which;27==e?(this.dom.search.value="",this._onSearch(),t.preventDefault(),t.stopPropagation()):13==e&&(t.ctrlKey?this._onSearch(!0):t.shiftKey?this.previous():this.next(),t.preventDefault(),t.stopPropagation())},l.prototype._onKeyUp=function(t){var e=t.keyCode;27!=e&&13!=e&&this._onDelayedSearch(t)},l.prototype.clear=function(){this.dom.search.value="",this._onSearch()},l.prototype.destroy=function(){this.editor=null,this.dom.container.removeChild(this.dom.table),this.dom=null,this.results=null,this.activeResult=null,this._clearDelay()},t.exports=l},function(t,e,l){"use strict";var i=l(54);function n(t,e){this.dom={};var l=this,i=this.dom;this.anchor=void 0,this.items=t,this.eventListeners={},this.selection=void 0,this.onClose=e?e.close:void 0;var n=document.createElement("div");n.className="jsoneditor-contextmenu-root",i.root=n;var a=document.createElement("div");a.className="jsoneditor-contextmenu",i.menu=a,n.appendChild(a);var d=document.createElement("ul");d.className="jsoneditor-menu",a.appendChild(d),i.list=d,i.items=[];var s=document.createElement("button");s.type="button",i.focusButton=s;var c=document.createElement("li");c.style.overflow="hidden",c.style.height="0",c.appendChild(s),d.appendChild(c),function t(e,i,n){n.forEach((function(n){if("separator"==n.type){var a=document.createElement("div");a.className="jsoneditor-separator",(s=document.createElement("li")).appendChild(a),e.appendChild(s)}else{var d={},s=document.createElement("li");e.appendChild(s);var c=document.createElement("button");if(c.type="button",c.className=n.className,d.button=c,n.title&&(c.title=n.title),n.click&&(c.onclick=function(t){t.preventDefault(),l.hide(),n.click()}),s.appendChild(c),n.submenu){var o,b=document.createElement("div");if(b.className="jsoneditor-icon",c.appendChild(b),c.appendChild(document.createTextNode(n.text)),n.click){c.className+=" jsoneditor-default";var r=document.createElement("button");r.type="button",d.buttonExpand=r,r.className="jsoneditor-expand",r.innerHTML='
',s.appendChild(r),n.submenuTitle&&(r.title=n.submenuTitle),o=r}else{var m=document.createElement("div");m.className="jsoneditor-expand",c.appendChild(m),o=c}o.onclick=function(t){t.preventDefault(),l._onExpandItem(d),o.focus()};var Z=[];d.subItems=Z;var g=document.createElement("ul");d.ul=g,g.className="jsoneditor-menu",g.style.height="0",s.appendChild(g),t(g,Z,n.submenu)}else c.innerHTML='
'+n.text;i.push(d)}}))}(d,this.dom.items,t),this.maxHeight=0,t.forEach((function(e){var i=24*(t.length+(e.submenu?e.submenu.length:0));l.maxHeight=Math.max(l.maxHeight,i)}))}n.prototype._getVisibleButtons=function(){var t=[],e=this;return this.dom.items.forEach((function(l){t.push(l.button),l.buttonExpand&&t.push(l.buttonExpand),l.subItems&&l==e.expandedItem&&l.subItems.forEach((function(e){t.push(e.button),e.buttonExpand&&t.push(e.buttonExpand)}))})),t},n.visibleMenu=void 0,n.prototype.show=function(t,e){this.hide();var l=!0;if(e){var a=t.getBoundingClientRect(),d=e.getBoundingClientRect();a.bottom+this.maxHeightd.top&&(l=!1)}if(l){var s=t.offsetHeight;this.dom.menu.style.left="0px",this.dom.menu.style.top=s+"px",this.dom.menu.style.bottom=""}else this.dom.menu.style.left="0px",this.dom.menu.style.top="",this.dom.menu.style.bottom="0px";var c=t.parentNode;c.insertBefore(this.dom.root,c.firstChild);var o=this,b=this.dom.list;this.eventListeners.mousedown=i.addEventListener(window,"mousedown",(function(t){var e=t.target;e==b||o._isChildOf(e,b)||(o.hide(),t.stopPropagation(),t.preventDefault())})),this.eventListeners.keydown=i.addEventListener(window,"keydown",(function(t){o._onKeyDown(t)})),this.selection=i.getSelection(),this.anchor=t,setTimeout((function(){o.dom.focusButton.focus()}),0),n.visibleMenu&&n.visibleMenu.hide(),n.visibleMenu=this},n.prototype.hide=function(){for(var t in this.dom.root.parentNode&&(this.dom.root.parentNode.removeChild(this.dom.root),this.onClose&&this.onClose()),this.eventListeners)if(this.eventListeners.hasOwnProperty(t)){var e=this.eventListeners[t];e&&i.removeEventListener(window,t,e),delete this.eventListeners[t]}n.visibleMenu==this&&(n.visibleMenu=void 0)},n.prototype._onExpandItem=function(t){var e=this,l=t==this.expandedItem,n=this.expandedItem;if(n&&(n.ul.style.height="0",n.ul.style.padding="",setTimeout((function(){e.expandedItem!=n&&(n.ul.style.display="",i.removeClassName(n.ul.parentNode,"jsoneditor-selected"))}),300),this.expandedItem=void 0),!l){var a=t.ul;a.style.display="block",a.clientHeight,setTimeout((function(){e.expandedItem==t&&(a.style.height=24*a.childNodes.length+"px",a.style.padding="5px 10px")}),0),i.addClassName(a.parentNode,"jsoneditor-selected"),this.expandedItem=t}},n.prototype._onKeyDown=function(t){var e,l,n,a,d=t.target,s=t.which,c=!1;27==s?(this.selection&&i.setSelection(this.selection),this.anchor&&this.anchor.focus(),this.hide(),c=!0):9==s?t.shiftKey?0==(l=(e=this._getVisibleButtons()).indexOf(d))&&(e[e.length-1].focus(),c=!0):(l=(e=this._getVisibleButtons()).indexOf(d))==e.length-1&&(e[0].focus(),c=!0):37==s?("jsoneditor-expand"==d.className&&(l=(e=this._getVisibleButtons()).indexOf(d),(n=e[l-1])&&n.focus()),c=!0):38==s?(l=(e=this._getVisibleButtons()).indexOf(d),(n=e[l-1])&&"jsoneditor-expand"==n.className&&(n=e[l-2]),n||(n=e[e.length-1]),n&&n.focus(),c=!0):39==s?(l=(e=this._getVisibleButtons()).indexOf(d),(a=e[l+1])&&"jsoneditor-expand"==a.className&&a.focus(),c=!0):40==s&&(l=(e=this._getVisibleButtons()).indexOf(d),(a=e[l+1])&&"jsoneditor-expand"==a.className&&(a=e[l+2]),a||(a=e[0]),a&&(a.focus(),c=!0),c=!0),c&&(t.stopPropagation(),t.preventDefault())},n.prototype._isChildOf=function(t,e){for(var l=t.parentNode;l;){if(l==e)return!0;l=l.parentNode}return!1},t.exports=n},function(t,e,l){"use strict";var i=l(59),n=l(57),a=l(60),d=l(54);function s(t,e){this.editor=t,this.dom={},this.expanded=!1,e&&e instanceof Object?(this.setField(e.field,e.fieldEditable),this.setValue(e.value,e.type)):(this.setField(""),this.setValue(null)),this._debouncedOnChangeValue=d.debounce(this._onChangeValue.bind(this),s.prototype.DEBOUNCE_INTERVAL),this._debouncedOnChangeField=d.debounce(this._onChangeField.bind(this),s.prototype.DEBOUNCE_INTERVAL)}s.prototype.DEBOUNCE_INTERVAL=150,s.prototype._updateEditability=function(){if(this.editable={field:!0,value:!0},this.editor&&(this.editable.field="tree"===this.editor.options.mode,this.editable.value="view"!==this.editor.options.mode,("tree"===this.editor.options.mode||"form"===this.editor.options.mode)&&"function"==typeof this.editor.options.onEditable)){var t=this.editor.options.onEditable({field:this.field,value:this.value,path:this.getPath()});"boolean"==typeof t?(this.editable.field=t,this.editable.value=t):("boolean"==typeof t.field&&(this.editable.field=t.field),"boolean"==typeof t.value&&(this.editable.value=t.value))}},s.prototype.getPath=function(){for(var t=this,e=[];t;){var l=t.parent?"array"!=t.parent.type?t.field:t.index:void 0;void 0!==l&&e.unshift(l),t=t.parent}return e},s.prototype.findNode=function(t){for(var e=d.parsePath(t),l=this;l&&e.length>0;){var i=e.shift();if("number"==typeof i){if("array"!==l.type)throw new Error("Cannot get child node at index "+i+": node is no array");l=l.childs[i]}else{if("object"!==l.type)throw new Error("Cannot get child node "+i+": node is no object");l=l.childs.filter((function(t){return t.field===i}))[0]}}return l},s.prototype.findParents=function(){for(var t=[],e=this.parent;e;)t.unshift(e),e=e.parent;return t},s.prototype.setError=function(t,e){this.getDom(),this.error=t;var l=this.dom.tdError;if(t){l||(l=document.createElement("td"),this.dom.tdError=l,this.dom.tdValue.parentNode.appendChild(l));var i=document.createElement("div");i.className="jsoneditor-popover jsoneditor-right",i.appendChild(document.createTextNode(t.message));var n=document.createElement("button");for(n.type="button",n.className="jsoneditor-schema-error",n.appendChild(i),n.onmouseover=n.onfocus=function(){for(var t=["right","above","below","left"],e=0;e0&&(t=this.childs.filter((function(t){return-1!==l.indexOf(t.field)})).map((function(t){return{node:t,error:{message:'duplicate key "'+t.field+'"'}}})))}if(this.childs)for(i=0;i0&&(t=t.concat(a))}return t},s.prototype.clearDom=function(){this.dom={}},s.prototype.getDom=function(){var t=this.dom;if(t.tr)return t.tr;if(this._updateEditability(),t.tr=document.createElement("tr"),t.tr.node=this,"tree"===this.editor.options.mode){var e=document.createElement("td");if(this.editable.field&&this.parent){var l=document.createElement("button");l.type="button",t.drag=l,l.className="jsoneditor-dragarea",l.title="Drag to move this field (Alt+Shift+Arrows)",e.appendChild(l)}t.tr.appendChild(e);var i=document.createElement("td"),n=document.createElement("button");n.type="button",t.menu=n,n.className="jsoneditor-contextmenu",n.title="Click to open the actions menu (Ctrl+M)",i.appendChild(t.menu),t.tr.appendChild(i)}var a=document.createElement("td");return t.tr.appendChild(a),t.tree=this._createDomTree(),a.appendChild(t.tree),this.updateDom({updateIndexes:!0}),t.tr},s.onDragStart=function(t,e){if(!Array.isArray(t))return s.onDragStart([t],e);if(0!==t.length){var l=t[0],i=t[t.length-1],n=s.getNodeFromTarget(e.target),a=i._nextSibling(),c=l.editor,o=d.getAbsoluteTop(n.dom.tr)-d.getAbsoluteTop(l.dom.tr);c.mousemove||(c.mousemove=d.addEventListener(window,"mousemove",(function(e){s.onDrag(t,e)}))),c.mouseup||(c.mouseup=d.addEventListener(window,"mouseup",(function(e){s.onDragEnd(t,e)}))),c.highlighter.lock(),c.drag={oldCursor:document.body.style.cursor,oldSelection:c.getSelection(),oldBeforeNode:a,mouseX:e.pageX,offsetY:o,level:l.getLevel()},document.body.style.cursor="move",e.preventDefault()}},s.onDrag=function(t,e){if(!Array.isArray(t))return s.onDrag([t],e);if(0!==t.length){var l,i,n,a,o,b,r,m,Z,g,W,h,N,y,I=t[0].editor,G=e.pageY-I.drag.offsetY,M=e.pageX,u=!1,V=t[0];if(l=V.dom.tr,Z=d.getAbsoluteTop(l),h=l.offsetHeight,G(g=(i=r.dom.tr)?d.getAbsoluteTop(i):0)+h&&(r=void 0),r&&(t.forEach((function(t){r.parent.moveBefore(t,r)})),u=!0)}else{var p=t[t.length-1];if(a=(o=p.expanded&&p.append?p.append.getDom():p.dom.tr)?o.nextSibling:void 0){W=d.getAbsoluteTop(a),n=a;do{m=s.getNodeFromTarget(n),n&&(N=n.nextSibling?d.getAbsoluteTop(n.nextSibling):0,y=n?N-W:0,m.parent.childs.length==t.length&&m.parent.childs[t.length-1]==p&&(Z+=27)),n=n.nextSibling}while(n&&G>Z+y);if(m&&m.parent){var Y=M-I.drag.mouseX,R=Math.round(Y/24/2),B=I.drag.level+R,O=m.getLevel();for(i=m.dom.tr.previousSibling;O0)return l[0].enum}return null},s._findSchema=function(t,e){for(var l=t,i=0;i0?this.editor.multiselection.nodes:[this],G=I[0],M=I[I.length-1];if(13==m){if(Z==this.dom.value)this.editable.value&&!t.ctrlKey||d.isUrl(this.value)&&(window.open(this.value,"_blank"),N=!0);else if(Z==this.dom.expand&&this._hasChilds()){var u=t.ctrlKey;this._onExpand(u),Z.focus(),N=!0}}else if(68==m)g&&y&&(s.onDuplicate(I),N=!0);else if(69==m)g&&(this._onExpand(W),Z.focus(),N=!0);else if(77==m&&y)g&&(this.showContextMenu(Z),N=!0);else if(46==m&&y)g&&(s.onRemove(I),N=!0);else if(45==m&&y)g&&!W?(this._onInsertBefore(),N=!0):g&&W&&(this._onInsertAfter(),N=!0);else if(35==m){if(h){var V=this._lastNode();V&&V.focus(s.focusElement||this._getElementName(Z)),N=!0}}else if(36==m){if(h){var p=this._firstNode();p&&p.focus(s.focusElement||this._getElementName(Z)),N=!0}}else if(37==m){if(h&&!W){var Y=this._previousElement(Z);Y&&this.focus(this._getElementName(Y)),N=!0}else if(h&&W&&y){if(M.expanded){var R=M.getAppend();i=R?R.nextSibling:void 0}else{var B=M.getDom();i=B.nextSibling}i&&(l=s.getNodeFromTarget(i),n=i.nextSibling,U=s.getNodeFromTarget(n),l&&l instanceof c&&1!=M.parent.childs.length&&U&&U.parent&&(a=this.editor.getSelection(),o=M._nextSibling(),I.forEach((function(t){U.parent.moveBefore(t,U)})),this.focus(s.focusElement||this._getElementName(Z)),this.editor._onAction("moveNodes",{nodes:I,oldBeforeNode:o,newBeforeNode:U,oldSelection:a,newSelection:this.editor.getSelection()})))}}else if(38==m)h&&!W?((e=this._previousNode())&&(this.editor.deselect(!0),e.focus(s.focusElement||this._getElementName(Z))),N=!0):!h&&g&&W&&y?((e=this._previousNode())&&((r=this.editor.multiselection).start=r.start||this,r.end=e,b=this.editor._findTopLevelNodes(r.start,r.end),this.editor.select(b),e.focus("field")),N=!0):h&&W&&y&&((e=G._previousNode())&&e.parent&&(a=this.editor.getSelection(),o=M._nextSibling(),I.forEach((function(t){e.parent.moveBefore(t,e)})),this.focus(s.focusElement||this._getElementName(Z)),this.editor._onAction("moveNodes",{nodes:I,oldBeforeNode:o,newBeforeNode:e,oldSelection:a,newSelection:this.editor.getSelection()})),N=!0);else if(39==m){if(h&&!W){var O=this._nextElement(Z);O&&this.focus(this._getElementName(O)),N=!0}else if(h&&W&&y){var D=(B=G.getDom()).previousSibling;D&&(e=s.getNodeFromTarget(D))&&e.parent&&e instanceof c&&!e.isVisible()&&(a=this.editor.getSelection(),o=M._nextSibling(),I.forEach((function(t){e.parent.moveBefore(t,e)})),this.focus(s.focusElement||this._getElementName(Z)),this.editor._onAction("moveNodes",{nodes:I,oldBeforeNode:o,newBeforeNode:e,oldSelection:a,newSelection:this.editor.getSelection()}))}}else if(40==m)if(h&&!W)(l=this._nextNode())&&(this.editor.deselect(!0),l.focus(s.focusElement||this._getElementName(Z))),N=!0;else if(!h&&g&&W&&y)(l=this._nextNode())&&((r=this.editor.multiselection).start=r.start||this,r.end=l,b=this.editor._findTopLevelNodes(r.start,r.end),this.editor.select(b),l.focus("field")),N=!0;else if(h&&W&&y){var U=(l=M.expanded?M.append?M.append._nextNode():void 0:M._nextNode())&&(l._nextNode()||l.parent.append);U&&U.parent&&(a=this.editor.getSelection(),o=M._nextSibling(),I.forEach((function(t){U.parent.moveBefore(t,U)})),this.focus(s.focusElement||this._getElementName(Z)),this.editor._onAction("moveNodes",{nodes:I,oldBeforeNode:o,newBeforeNode:U,oldSelection:a,newSelection:this.editor.getSelection()})),N=!0}N&&(t.preventDefault(),t.stopPropagation())},s.prototype._onExpand=function(t){if(t){var e=this.dom.tr.parentNode,l=e.parentNode,i=l.scrollTop;l.removeChild(e)}this.expanded?this.collapse(t):this.expand(t),t&&(l.appendChild(e),l.scrollTop=i)},s.onRemove=function(t){if(!Array.isArray(t))return s.onRemove([t]);if(t&&t.length>0){var e=t[0],l=e.parent,i=e.editor,n=e.getIndex();i.highlighter.unhighlight();var a=i.getSelection();s.blurNodes(t);var d=i.getSelection();t.forEach((function(t){t.parent._remove(t)})),i._onAction("removeNodes",{nodes:t.slice(0),parent:l,index:n,oldSelection:a,newSelection:d})}},s.onDuplicate=function(t){if(!Array.isArray(t))return s.onDuplicate([t]);if(t&&t.length>0){var e=t[t.length-1],l=e.parent,i=e.editor;i.deselect(i.multiselection.nodes);var n=i.getSelection(),a=e,d=t.map((function(t){var e=t.clone();return l.insertAfter(e,a),a=e,e}));1===t.length?d[0].focus():i.select(d);var c=i.getSelection();i._onAction("duplicateNodes",{afterNode:e,nodes:d,parent:l,oldSelection:n,newSelection:c})}},s.prototype._onInsertBefore=function(t,e,l){var i=this.editor.getSelection(),n=new s(this.editor,{field:null!=t?t:"",value:null!=e?e:"",type:l});n.expand(!0),this.parent.insertBefore(n,this),this.editor.highlighter.unhighlight(),n.focus("field");var a=this.editor.getSelection();this.editor._onAction("insertBeforeNodes",{nodes:[n],beforeNode:this,parent:this.parent,oldSelection:i,newSelection:a})},s.prototype._onInsertAfter=function(t,e,l){var i=this.editor.getSelection(),n=new s(this.editor,{field:null!=t?t:"",value:null!=e?e:"",type:l});n.expand(!0),this.parent.insertAfter(n,this),this.editor.highlighter.unhighlight(),n.focus("field");var a=this.editor.getSelection();this.editor._onAction("insertAfterNodes",{nodes:[n],afterNode:this,parent:this.parent,oldSelection:i,newSelection:a})},s.prototype._onAppend=function(t,e,l){var i=this.editor.getSelection(),n=new s(this.editor,{field:null!=t?t:"",value:null!=e?e:"",type:l});n.expand(!0),this.parent.appendChild(n),this.editor.highlighter.unhighlight(),n.focus("field");var a=this.editor.getSelection();this.editor._onAction("appendNodes",{nodes:[n],parent:this.parent,oldSelection:i,newSelection:a})},s.prototype._onChangeType=function(t){var e=this.type;if(t!=e){var l=this.editor.getSelection();this.changeType(t);var i=this.editor.getSelection();this.editor._onAction("changeType",{node:this,oldType:e,newType:t,oldSelection:l,newSelection:i})}},s.prototype.sort=function(t){if(this._hasChilds()){var e="desc"==t?-1:1,l="array"==this.type?"value":"field";this.hideChilds();var n=this.childs,a=this.sortOrder;this.childs=this.childs.concat(),this.childs.sort((function(t,n){return e*i(t[l],n[l])})),this.sortOrder=1==e?"asc":"desc",this.editor._onAction("sort",{node:this,oldChilds:n,oldSort:a,newChilds:this.childs,newSort:this.sortOrder}),this.showChilds()}},s.prototype.getAppend=function(){return this.append||(this.append=new c(this.editor),this.append.setParent(this)),this.append.getDom()},s.getNodeFromTarget=function(t){for(;t;){if(t.node)return t.node;t=t.parentNode}},s.blurNodes=function(t){if(Array.isArray(t)){var e=t[0],l=e.parent,i=e.getIndex();l.childs[i+t.length]?l.childs[i+t.length].focus():l.childs[i-1]?l.childs[i-1].focus():l.focus()}else s.blurNodes([t])},s.prototype._nextSibling=function(){var t=this.parent.childs.indexOf(this);return this.parent.childs[t+1]||this.parent.append},s.prototype._previousNode=function(){var t=null,e=this.getDom();if(e&&e.parentNode){var l=e;do{l=l.previousSibling,t=s.getNodeFromTarget(l)}while(l&&t instanceof c&&!t.isVisible())}return t},s.prototype._nextNode=function(){var t=null,e=this.getDom();if(e&&e.parentNode){var l=e;do{l=l.nextSibling,t=s.getNodeFromTarget(l)}while(l&&t instanceof c&&!t.isVisible())}return t},s.prototype._firstNode=function(){var t=null,e=this.getDom();if(e&&e.parentNode){var l=e.parentNode.firstChild;t=s.getNodeFromTarget(l)}return t},s.prototype._lastNode=function(){var t=null,e=this.getDom();if(e&&e.parentNode){var l=e.parentNode.lastChild;for(t=s.getNodeFromTarget(l);l&&t instanceof c&&!t.isVisible();)l=l.previousSibling,t=s.getNodeFromTarget(l)}return t},s.prototype._previousElement=function(t){var e=this.dom;switch(t){case e.value:if(this.fieldEditable)return e.field;case e.field:if(this._hasChilds())return e.expand;case e.expand:return e.menu;case e.menu:if(e.drag)return e.drag;default:return null}},s.prototype._nextElement=function(t){var e=this.dom;switch(t){case e.drag:return e.menu;case e.menu:if(this._hasChilds())return e.expand;case e.expand:if(this.fieldEditable)return e.field;case e.field:if(!this._hasChilds())return e.value;default:return null}},s.prototype._getElementName=function(t){var e=this.dom;for(var l in e)if(e.hasOwnProperty(l)&&e[l]==t)return l;return null},s.prototype._hasChilds=function(){return"array"==this.type||"object"==this.type},s.TYPE_TITLES={auto:'Field type "auto". The field type is automatically determined from the value and can be a string, number, boolean, or null.',object:'Field type "object". An object contains an unordered set of key/value pairs.',array:'Field type "array". An array contains an ordered collection of values.',string:'Field type "string". Field type is not determined from the value, but always returned as string.'},s.prototype.showContextMenu=function(t,e){var l=this,i=s.TYPE_TITLES,a=[];if(this.editable.value&&a.push({text:"Type",title:"Change the type of this field",className:"jsoneditor-type-"+this.type,submenu:[{text:"Auto",className:"jsoneditor-type-auto"+("auto"==this.type?" jsoneditor-selected":""),title:i.auto,click:function(){l._onChangeType("auto")}},{text:"Array",className:"jsoneditor-type-array"+("array"==this.type?" jsoneditor-selected":""),title:i.array,click:function(){l._onChangeType("array")}},{text:"Object",className:"jsoneditor-type-object"+("object"==this.type?" jsoneditor-selected":""),title:i.object,click:function(){l._onChangeType("object")}},{text:"String",className:"jsoneditor-type-string"+("string"==this.type?" jsoneditor-selected":""),title:i.string,click:function(){l._onChangeType("string")}}]}),this._hasChilds()){var d="asc"==this.sortOrder?"desc":"asc";a.push({text:"Sort",title:"Sort the childs of this "+this.type,className:"jsoneditor-sort-"+d,click:function(){l.sort(d)},submenu:[{text:"Ascending",className:"jsoneditor-sort-asc",title:"Sort the childs of this "+this.type+" in ascending order",click:function(){l.sort("asc")}},{text:"Descending",className:"jsoneditor-sort-desc",title:"Sort the childs of this "+this.type+" in descending order",click:function(){l.sort("desc")}}]})}if(this.parent&&this.parent._hasChilds()){a.length&&a.push({type:"separator"});var c=l.parent.childs;l==c[c.length-1]&&a.push({text:"Append",title:"Append a new field with type 'auto' after this field (Ctrl+Shift+Ins)",submenuTitle:"Select the type of the field to be appended",className:"jsoneditor-append",click:function(){l._onAppend("","","auto")},submenu:[{text:"Auto",className:"jsoneditor-type-auto",title:i.auto,click:function(){l._onAppend("","","auto")}},{text:"Array",className:"jsoneditor-type-array",title:i.array,click:function(){l._onAppend("",[])}},{text:"Object",className:"jsoneditor-type-object",title:i.object,click:function(){l._onAppend("",{})}},{text:"String",className:"jsoneditor-type-string",title:i.string,click:function(){l._onAppend("","","string")}}]}),a.push({text:"Insert",title:"Insert a new field with type 'auto' before this field (Ctrl+Ins)",submenuTitle:"Select the type of the field to be inserted",className:"jsoneditor-insert",click:function(){l._onInsertBefore("","","auto")},submenu:[{text:"Auto",className:"jsoneditor-type-auto",title:i.auto,click:function(){l._onInsertBefore("","","auto")}},{text:"Array",className:"jsoneditor-type-array",title:i.array,click:function(){l._onInsertBefore("",[])}},{text:"Object",className:"jsoneditor-type-object",title:i.object,click:function(){l._onInsertBefore("",{})}},{text:"String",className:"jsoneditor-type-string",title:i.string,click:function(){l._onInsertBefore("","","string")}}]}),this.editable.field&&(a.push({text:"Duplicate",title:"Duplicate this field (Ctrl+D)",className:"jsoneditor-duplicate",click:function(){s.onDuplicate(l)}}),a.push({text:"Remove",title:"Remove this field (Ctrl+Del)",className:"jsoneditor-remove",click:function(){s.onRemove(l)}}))}new n(a,{close:e}).show(t,this.editor.content)},s.prototype._getType=function(t){return t instanceof Array?"array":t instanceof Object?"object":"string"==typeof t&&"string"!=typeof this._stringCast(t)?"string":"auto"},s.prototype._stringCast=function(t){var e=t.toLowerCase(),l=Number(t),i=parseFloat(t);return""==t?"":"null"==e?null:"true"==e||"false"!=e&&(isNaN(l)||isNaN(i)?t:l)},s.prototype._escapeHTML=function(t){if("string"!=typeof t)return String(t);var e=String(t).replace(/&/g,"&").replace(//g,">").replace(/ /g,"  ").replace(/^ /," ").replace(/ $/," "),l=JSON.stringify(e),i=l.substring(1,l.length-1);return!0===this.editor.options.escapeUnicode&&(i=d.escapeUnicodeChars(i)),i},s.prototype._unescapeHTML=function(t){var e='"'+this._escapeJSON(t)+'"';return d.parse(e).replace(/</g,"<").replace(/>/g,">").replace(/ |\u00A0/g," ").replace(/&/g,"&")},s.prototype._escapeJSON=function(t){for(var e="",l=0;lh)return 1}for(var N=0,y=Math.max(Z.length,g.length);Nn)return 1}return 0}},function(t,e,l){"use strict";var i=l(54),n=l(57);t.exports=function(t){function e(t){this.editor=t,this.dom={}}return e.prototype=new t,e.prototype.getDom=function(){var t=this.dom;if(t.tr)return t.tr;this._updateEditability();var e=document.createElement("tr");if(e.node=this,t.tr=e,"tree"===this.editor.options.mode){t.tdDrag=document.createElement("td");var l=document.createElement("td");t.tdMenu=l;var i=document.createElement("button");i.type="button",i.className="jsoneditor-contextmenu",i.title="Click to open the actions menu (Ctrl+M)",t.menu=i,l.appendChild(t.menu)}var n=document.createElement("td"),a=document.createElement("div");return a.innerHTML="(empty)",a.className="jsoneditor-readonly",n.appendChild(a),t.td=n,t.text=a,this.updateDom(),e},e.prototype.updateDom=function(){var t=this.dom,e=t.td;e&&(e.style.paddingLeft=24*this.getLevel()+26+"px");var l=t.text;l&&(l.innerHTML="(empty "+this.parent.type+")");var i=t.tr;this.isVisible()?t.tr.firstChild||(t.tdDrag&&i.appendChild(t.tdDrag),t.tdMenu&&i.appendChild(t.tdMenu),i.appendChild(e)):t.tr.firstChild&&(t.tdDrag&&i.removeChild(t.tdDrag),t.tdMenu&&i.removeChild(t.tdMenu),i.removeChild(e))},e.prototype.isVisible=function(){return 0==this.parent.childs.length},e.prototype.showContextMenu=function(e,l){var i=this,a=t.TYPE_TITLES,d=[{text:"Append",title:"Append a new field with type 'auto' (Ctrl+Shift+Ins)",submenuTitle:"Select the type of the field to be appended",className:"jsoneditor-insert",click:function(){i._onAppend("","","auto")},submenu:[{text:"Auto",className:"jsoneditor-type-auto",title:a.auto,click:function(){i._onAppend("","","auto")}},{text:"Array",className:"jsoneditor-type-array",title:a.array,click:function(){i._onAppend("",[])}},{text:"Object",className:"jsoneditor-type-object",title:a.object,click:function(){i._onAppend("",{})}},{text:"String",className:"jsoneditor-type-string",title:a.string,click:function(){i._onAppend("","","string")}}]}];new n(d,{close:l}).show(e,this.editor.content)},e.prototype.onEvent=function(t){var e=t.type,l=t.target||t.srcElement,n=this.dom;if(l==n.menu&&("mouseover"==e?this.editor.highlighter.highlight(this.parent):"mouseout"==e&&this.editor.highlighter.unhighlight()),"click"==e&&l==n.menu){var a=this.editor.highlighter;a.highlight(this.parent),a.lock(),i.addClassName(n.menu,"jsoneditor-selected"),this.showContextMenu(n.menu,(function(){i.removeClassName(n.menu,"jsoneditor-selected"),a.unlock(),a.unhighlight()}))}"keydown"==e&&this.onKeyDown(t)},e}},function(t,e,l){"use strict";var i=l(57);function n(t,e,l,n){for(var a={code:{text:"Code",title:"Switch to code highlighter",click:function(){n("code")}},form:{text:"Form",title:"Switch to form editor",click:function(){n("form")}},text:{text:"Text",title:"Switch to plain text editor",click:function(){n("text")}},tree:{text:"Tree",title:"Switch to tree editor",click:function(){n("tree")}},view:{text:"View",title:"Switch to tree view",click:function(){n("view")}}},d=[],s=0;s0){if(l.length>3){l=l.slice(0,3);var i=this.validateSchema.errors.length-3;l.push("("+i+" more errors...)")}var n=document.createElement("div");n.innerHTML=''+l.map((function(t){return''+("string"==typeof t?'":"")+""})).join("")+"
'+t+"
"+t.dataPath+""+t.message+"
",this.dom.validationErrors=n,this.frame.appendChild(n);var d=n.clientHeight;this.content.style.marginBottom=-d+"px",this.content.style.paddingBottom=d+"px"}this.aceEditor&&this.aceEditor.resize(!1)}};t.exports=[{mode:"text",mixin:d,data:"text",load:d.format},{mode:"code",mixin:d,data:"text",load:d.format}]},function(t,e,l){var i=l(64);l(67),l(69),t.exports=i},function(t,e,l){!function(){var t=function(){return this}();t||"undefined"==typeof window||(t=window);var e=function(t,l,i){"string"==typeof t?(2==arguments.length&&(i=l),e.modules[t]||(e.payloads[t]=i,e.modules[t]=null)):e.original?e.original.apply(this,arguments):(console.error("dropping module because define wasn't a string."),console.trace())};e.modules={},e.payloads={};var l,i,n=function(t,e,l){if("string"==typeof e){var i=s(t,e);if(null!=i)return l&&l(),i}else if("[object Array]"===Object.prototype.toString.call(e)){for(var n=[],d=0,c=e.length;d1&&c(i,"")>-1&&(l=RegExp(this.source,n.replace.call(s(this),"g","")),n.replace.call(t.slice(i.index),l,(function(){for(var t=1;ti.index&&this.lastIndex--}return i},d||(RegExp.prototype.test=function(t){var e=n.exec.call(this,t);return e&&this.global&&!e[0].length&&this.lastIndex>e.index&&this.lastIndex--,!!e}))})),ace.define("ace/lib/es5-shim",["require","exports","module"],(function(t,e,l){function i(){}Function.prototype.bind||(Function.prototype.bind=function(t){var e=this;if("function"!=typeof e)throw new TypeError("Function.prototype.bind called on incompatible "+e);var l=m.call(arguments,1),n=function(){if(this instanceof n){var i=e.apply(this,l.concat(m.call(arguments)));return Object(i)===i?i:this}return e.apply(t,l.concat(m.call(arguments)))};return e.prototype&&(i.prototype=e.prototype,n.prototype=new i,i.prototype=null),n});var n,a,d,s,c,o=Function.prototype.call,b=Array.prototype,r=Object.prototype,m=b.slice,Z=o.bind(r.toString),g=o.bind(r.hasOwnProperty);if((c=g(r,"__defineGetter__"))&&(n=o.bind(r.__defineGetter__),a=o.bind(r.__defineSetter__),d=o.bind(r.__lookupGetter__),s=o.bind(r.__lookupSetter__)),2!=[1,2].splice(0).length)if(function(){function t(t){var e=new Array(t+2);return e[0]=e[1]=0,e}var e,l=[];if(l.splice.apply(l,t(20)),l.splice.apply(l,t(26)),e=l.length,l.splice(5,0,"XXX"),l.length,e+1==l.length)return!0}()){var W=Array.prototype.splice;Array.prototype.splice=function(t,e){return arguments.length?W.apply(this,[void 0===t?0:t,void 0===e?this.length-t:e].concat(m.call(arguments,2))):[]}}else Array.prototype.splice=function(t,e){var l=this.length;t>0?t>l&&(t=l):null==t?t=0:t<0&&(t=Math.max(l+t,0)),t+es)for(r=o;r--;)this[c+r]=this[s+r];if(a&&t===b)this.length=b,this.push.apply(this,n);else for(this.length=b+a,r=0;r>>0;if("[object Function]"!=Z(t))throw new TypeError;for(;++n>>0,n=Array(i),a=arguments[1];if("[object Function]"!=Z(t))throw new TypeError(t+" is not a function");for(var d=0;d>>0,a=[],d=arguments[1];if("[object Function]"!=Z(t))throw new TypeError(t+" is not a function");for(var s=0;s>>0,n=arguments[1];if("[object Function]"!=Z(t))throw new TypeError(t+" is not a function");for(var a=0;a>>0,n=arguments[1];if("[object Function]"!=Z(t))throw new TypeError(t+" is not a function");for(var a=0;a>>0;if("[object Function]"!=Z(t))throw new TypeError(t+" is not a function");if(!i&&1==arguments.length)throw new TypeError("reduce of empty array with no initial value");var n,a=0;if(arguments.length>=2)n=arguments[1];else for(;;){if(a in l){n=l[a++];break}if(++a>=i)throw new TypeError("reduce of empty array with no initial value")}for(;a>>0;if("[object Function]"!=Z(t))throw new TypeError(t+" is not a function");if(!i&&1==arguments.length)throw new TypeError("reduceRight of empty array with no initial value");var n,a=i-1;if(arguments.length>=2)n=arguments[1];else for(;;){if(a in l){n=l[a--];break}if(--a<0)throw new TypeError("reduceRight of empty array with no initial value")}do{a in this&&(n=t.call(void 0,n,l[a],a,e))}while(a--);return n}),Array.prototype.indexOf&&-1==[0,1].indexOf(1,2)||(Array.prototype.indexOf=function(t){var e=I&&"[object String]"==Z(this)?this.split(""):X(this),l=e.length>>>0;if(!l)return-1;var i=0;for(arguments.length>1&&(i=T(arguments[1])),i=i>=0?i:Math.max(0,l+i);i>>0;if(!l)return-1;var i=l-1;for(arguments.length>1&&(i=Math.min(i,T(arguments[1]))),i=i>=0?i:l-Math.abs(i);i>=0;i--)if(i in e&&t===e[i])return i;return-1}),Object.getPrototypeOf||(Object.getPrototypeOf=function(t){return t.__proto__||(t.constructor?t.constructor.prototype:r)}),Object.getOwnPropertyDescriptor||(Object.getOwnPropertyDescriptor=function(t,e){if("object"!=typeof t&&"function"!=typeof t||null===t)throw new TypeError("Object.getOwnPropertyDescriptor called on a non-object: "+t);if(g(t,e)){var l;if(l={enumerable:!0,configurable:!0},c){var i=t.__proto__;t.__proto__=r;var n=d(t,e),a=s(t,e);if(t.__proto__=i,n||a)return n&&(l.get=n),a&&(l.set=a),l}return l.value=t[e],l}}),Object.getOwnPropertyNames||(Object.getOwnPropertyNames=function(t){return Object.keys(t)}),Object.create||(h=null===Object.prototype.__proto__?function(){return{__proto__:null}}:function(){var t={};for(var e in t)t[e]=null;return t.constructor=t.hasOwnProperty=t.propertyIsEnumerable=t.isPrototypeOf=t.toLocaleString=t.toString=t.valueOf=t.__proto__=null,t},Object.create=function(t,e){var l;if(null===t)l=h();else{if("object"!=typeof t)throw new TypeError("typeof prototype["+typeof t+"] != 'object'");var i=function(){};i.prototype=t,(l=new i).__proto__=t}return void 0!==e&&Object.defineProperties(l,e),l}),Object.defineProperty){var M=G({}),u="undefined"==typeof document||G(document.createElement("div"));if(!M||!u)var V=Object.defineProperty}Object.defineProperty&&!V||(Object.defineProperty=function(t,e,l){if("object"!=typeof t&&"function"!=typeof t||null===t)throw new TypeError("Object.defineProperty called on non-object: "+t);if("object"!=typeof l&&"function"!=typeof l||null===l)throw new TypeError("Property description must be an object: "+l);if(V)try{return V.call(Object,t,e,l)}catch(t){}if(g(l,"value"))if(c&&(d(t,e)||s(t,e))){var i=t.__proto__;t.__proto__=r,delete t[e],t[e]=l.value,t.__proto__=i}else t[e]=l.value;else{if(!c)throw new TypeError("getters & setters can not be defined on this javascript engine");g(l,"get")&&n(t,e,l.get),g(l,"set")&&a(t,e,l.set)}return t}),Object.defineProperties||(Object.defineProperties=function(t,e){for(var l in e)g(e,l)&&Object.defineProperty(t,l,e[l]);return t}),Object.seal||(Object.seal=function(t){return t}),Object.freeze||(Object.freeze=function(t){return t});try{Object.freeze((function(){}))}catch(t){Object.freeze=(N=Object.freeze,function(t){return"function"==typeof t?t:N(t)})}if(Object.preventExtensions||(Object.preventExtensions=function(t){return t}),Object.isSealed||(Object.isSealed=function(t){return!1}),Object.isFrozen||(Object.isFrozen=function(t){return!1}),Object.isExtensible||(Object.isExtensible=function(t){if(Object(t)===t)throw new TypeError;for(var e="";g(t,e);)e+="?";t[e]=!0;var l=g(t,e);return delete t[e],l}),!Object.keys){var p=!0,Y=["toString","toLocaleString","valueOf","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","constructor"],R=Y.length;for(var B in{toString:null})p=!1;Object.keys=function(t){if("object"!=typeof t&&"function"!=typeof t||null===t)throw new TypeError("Object.keys called on a non-object");var e=[];for(var l in t)g(t,l)&&e.push(l);if(p)for(var i=0,n=R;i0||-1)*Math.floor(Math.abs(t))),t}var X=function(t){if(null==t)throw new TypeError("can't convert "+t+" to object");return Object(t)}})),ace.define("ace/lib/fixoldbrowsers",["require","exports","module","ace/lib/regexp","ace/lib/es5-shim"],(function(t,e,l){"use strict";t("./regexp"),t("./es5-shim")})),ace.define("ace/lib/dom",["require","exports","module"],(function(t,e,l){"use strict";e.getDocumentHead=function(t){return t||(t=document),t.head||t.getElementsByTagName("head")[0]||t.documentElement},e.createElement=function(t,e){return document.createElementNS?document.createElementNS(e||"http://www.w3.org/1999/xhtml",t):document.createElement(t)},e.hasCssClass=function(t,e){return-1!==(t.className||"").split(/\s+/g).indexOf(e)},e.addCssClass=function(t,l){e.hasCssClass(t,l)||(t.className+=" "+l)},e.removeCssClass=function(t,e){for(var l=t.className.split(/\s+/g);;){var i=l.indexOf(e);if(-1==i)break;l.splice(i,1)}t.className=l.join(" ")},e.toggleCssClass=function(t,e){for(var l=t.className.split(/\s+/g),i=!0;;){var n=l.indexOf(e);if(-1==n)break;i=!1,l.splice(n,1)}return i&&l.push(e),t.className=l.join(" "),i},e.setCssClass=function(t,l,i){i?e.addCssClass(t,l):e.removeCssClass(t,l)},e.hasCssString=function(t,e){var l,i=0;if((e=e||document).createStyleSheet&&(l=e.styleSheets)){for(;i=0?parseFloat((n.match(/(?:MSIE |Trident\/[0-9]+[\.0-9]+;.*rv:)([0-9]+[\.0-9]+)/)||[])[1]):parseFloat((n.match(/(?:Trident\/[0-9]+[\.0-9]+;.*rv:)([0-9]+[\.0-9]+)/)||[])[1]),e.isOldIE=e.isIE&&e.isIE<9,e.isGecko=e.isMozilla=(window.Controllers||window.controllers)&&"Gecko"===window.navigator.product,e.isOldGecko=e.isGecko&&parseInt((n.match(/rv\:(\d+)/)||[])[1],10)<4,e.isOpera=window.opera&&"[object Opera]"==Object.prototype.toString.call(window.opera),e.isWebKit=parseFloat(n.split("WebKit/")[1])||void 0,e.isChrome=parseFloat(n.split(" Chrome/")[1])||void 0,e.isAIR=n.indexOf("AdobeAIR")>=0,e.isIPad=n.indexOf("iPad")>=0,e.isTouchPad=n.indexOf("TouchPad")>=0,e.isChromeOS=n.indexOf(" CrOS ")>=0}})),ace.define("ace/lib/event",["require","exports","module","ace/lib/keys","ace/lib/useragent"],(function(t,e,l){"use strict";var i=t("./keys"),n=t("./useragent"),a=null,d=0;e.addListener=function(t,e,l){if(t.addEventListener)return t.addEventListener(e,l,!1);if(t.attachEvent){var i=function(){l.call(t,window.event)};l._wrapper=i,t.attachEvent("on"+e,i)}},e.removeListener=function(t,e,l){if(t.removeEventListener)return t.removeEventListener(e,l,!1);t.detachEvent&&t.detachEvent("on"+e,l._wrapper||l)},e.stopEvent=function(t){return e.stopPropagation(t),e.preventDefault(t),!1},e.stopPropagation=function(t){t.stopPropagation?t.stopPropagation():t.cancelBubble=!0},e.preventDefault=function(t){t.preventDefault?t.preventDefault():t.returnValue=!1},e.getButton=function(t){return"dblclick"==t.type?0:"contextmenu"==t.type||n.isMac&&t.ctrlKey&&!t.altKey&&!t.shiftKey?2:t.preventDefault?t.button:{1:0,2:2,4:1}[t.button]},e.capture=function(t,l,i){function n(t){l&&l(t),i&&i(t),e.removeListener(document,"mousemove",l,!0),e.removeListener(document,"mouseup",n,!0),e.removeListener(document,"dragstart",n,!0)}return e.addListener(document,"mousemove",l,!0),e.addListener(document,"mouseup",n,!0),e.addListener(document,"dragstart",n,!0),n},e.addTouchMoveListener=function(t,l){var i,n;"ontouchmove"in t&&(e.addListener(t,"touchstart",(function(t){var e=t.changedTouches[0];i=e.clientX,n=e.clientY})),e.addListener(t,"touchmove",(function(t){var e=t.changedTouches[0];t.wheelX=-(e.clientX-i)/1,t.wheelY=-(e.clientY-n)/1,i=e.clientX,n=e.clientY,l(t)})))},e.addMouseWheelListener=function(t,l){"onmousewheel"in t?e.addListener(t,"mousewheel",(function(t){void 0!==t.wheelDeltaX?(t.wheelX=-t.wheelDeltaX/8,t.wheelY=-t.wheelDeltaY/8):(t.wheelX=0,t.wheelY=-t.wheelDelta/8),l(t)})):"onwheel"in t?e.addListener(t,"wheel",(function(t){switch(t.deltaMode){case t.DOM_DELTA_PIXEL:t.wheelX=.35*t.deltaX||0,t.wheelY=.35*t.deltaY||0;break;case t.DOM_DELTA_LINE:case t.DOM_DELTA_PAGE:t.wheelX=5*(t.deltaX||0),t.wheelY=5*(t.deltaY||0)}l(t)})):e.addListener(t,"DOMMouseScroll",(function(t){t.axis&&t.axis==t.HORIZONTAL_AXIS?(t.wheelX=5*(t.detail||0),t.wheelY=0):(t.wheelX=0,t.wheelY=5*(t.detail||0)),l(t)}))},e.addMultiMouseDownListener=function(t,l,i,a){var d,s,c,o=0,b={2:"dblclick",3:"tripleclick",4:"quadclick"};function r(t){if(0!==e.getButton(t)?o=0:t.detail>1?++o>4&&(o=1):o=1,n.isIE){var r=Math.abs(t.clientX-d)>5||Math.abs(t.clientY-s)>5;c&&!r||(o=1),c&&clearTimeout(c),c=setTimeout((function(){c=null}),l[o-1]||600),1==o&&(d=t.clientX,s=t.clientY)}if(t._clicks=o,i[a]("mousedown",t),o>4)o=0;else if(o>1)return i[a](b[o],t)}function m(t){o=2,c&&clearTimeout(c),c=setTimeout((function(){c=null}),l[o-1]||600),i[a]("mousedown",t),i[a](b[o],t)}Array.isArray(t)||(t=[t]),t.forEach((function(t){e.addListener(t,"mousedown",r),n.isOldIE&&e.addListener(t,"dblclick",m)}))};var s=n.isMac&&n.isOpera&&!("KeyboardEvent"in window)?function(t){return 0|(t.metaKey?1:0)|(t.altKey?2:0)|(t.shiftKey?4:0)|(t.ctrlKey?8:0)}:function(t){return 0|(t.ctrlKey?1:0)|(t.altKey?2:0)|(t.shiftKey?4:0)|(t.metaKey?8:0)};function c(t,e,l){var c=s(e);if(!n.isMac&&a){if(a.OSKey&&(c|=8),a.altGr){if(3==(3&c))return;a.altGr=0}if(18===l||17===l){var o="location"in e?e.location:e.keyLocation;17===l&&1===o?1==a[l]&&(d=e.timeStamp):18===l&&3===c&&2===o&&e.timeStamp-d<50&&(a.altGr=!0)}}if(l in i.MODIFIER_KEYS&&(l=-1),8&c&&l>=91&&l<=93&&(l=-1),c||13!==l||3!==(o="location"in e?e.location:e.keyLocation)||(t(e,c,-l),!e.defaultPrevented)){if(n.isChromeOS&&8&c){if(t(e,c,l),e.defaultPrevented)return;c&=-9}return!!(c||l in i.FUNCTION_KEYS||l in i.PRINTABLE_KEYS)&&t(e,c,l)}}function o(){(a=Object.create(null)).count=0,a.lastT=0}e.getModifierString=function(t){return i.KEY_MODS[s(t)]},e.addCommandKeyListener=function(t,l){var i=e.addListener;if(n.isOldGecko||n.isOpera&&!("KeyboardEvent"in window)){var d=null;i(t,"keydown",(function(t){d=t.keyCode})),i(t,"keypress",(function(t){return c(l,t,d)}))}else{var s=null;i(t,"keydown",(function(t){var e=t.keyCode;a[e]=(a[e]||0)+1,91==e||92==e?a.OSKey=!0:a.OSKey&&t.timeStamp-a.lastT>200&&1==a.count&&o(),1==a[e]&&a.count++,a.lastT=t.timeStamp;var i=c(l,t,e);return s=t.defaultPrevented,i})),i(t,"keypress",(function(t){s&&(t.ctrlKey||t.altKey||t.shiftKey||t.metaKey)&&(e.stopEvent(t),s=null)})),i(t,"keyup",(function(t){var e=t.keyCode;a[e]?a.count=Math.max(a.count-1,0):o(),91!=e&&92!=e||(a.OSKey=!1),a[e]=null})),a||(o(),i(window,"focus",o))}},"object"==typeof window&&window.postMessage&&!n.isOldIE&&(e.nextTick=function(t,l){l=l||window,e.addListener(l,"message",(function i(n){"zero-timeout-message-1"==n.data&&(e.stopPropagation(n),e.removeListener(l,"message",i),t())})),l.postMessage("zero-timeout-message-1","*")}),e.nextFrame="object"==typeof window&&(window.requestAnimationFrame||window.mozRequestAnimationFrame||window.webkitRequestAnimationFrame||window.msRequestAnimationFrame||window.oRequestAnimationFrame),e.nextFrame?e.nextFrame=e.nextFrame.bind(window):e.nextFrame=function(t){setTimeout(t,17)}})),ace.define("ace/lib/lang",["require","exports","module"],(function(t,e,l){"use strict";e.last=function(t){return t[t.length-1]},e.stringReverse=function(t){return t.split("").reverse().join("")},e.stringRepeat=function(t,e){for(var l="";e>0;)1&e&&(l+=t),(e>>=1)&&(t+=t);return l};var i=/^\s\s*/,n=/\s\s*$/;e.stringTrimLeft=function(t){return t.replace(i,"")},e.stringTrimRight=function(t){return t.replace(n,"")},e.copyObject=function(t){var e={};for(var l in t)e[l]=t[l];return e},e.copyArray=function(t){for(var e=[],l=0,i=t.length;l1),t.preventDefault()):(this.setState("focusWait"),void this.captureMouse(t))},this.startSelect=function(t,e){t=t||this.editor.renderer.screenToTextCoordinates(this.x,this.y);var l=this.editor;l.$blockScrolling++,this.mousedownEvent.getShiftKey()?l.selection.selectToPosition(t):e||l.selection.moveToPosition(t),e||this.select(),l.renderer.scroller.setCapture&&l.renderer.scroller.setCapture(),l.setStyle("ace_selecting"),this.setState("select"),l.$blockScrolling--},this.select=function(){var t,e=this.editor,l=e.renderer.screenToTextCoordinates(this.x,this.y);if(e.$blockScrolling++,this.$clickSelection){var i=this.$clickSelection.comparePoint(l);if(-1==i)t=this.$clickSelection.end;else if(1==i)t=this.$clickSelection.start;else{var a=n(this.$clickSelection,l);l=a.cursor,t=a.anchor}e.selection.setSelectionAnchor(t.row,t.column)}e.selection.selectToPosition(l),e.$blockScrolling--,e.renderer.scrollCursorIntoView()},this.extendSelectionBy=function(t){var e,l=this.editor,i=l.renderer.screenToTextCoordinates(this.x,this.y),a=l.selection[t](i.row,i.column);if(l.$blockScrolling++,this.$clickSelection){var d=this.$clickSelection.comparePoint(a.start),s=this.$clickSelection.comparePoint(a.end);if(-1==d&&s<=0)e=this.$clickSelection.end,a.end.row==i.row&&a.end.column==i.column||(i=a.start);else if(1==s&&d>=0)e=this.$clickSelection.start,a.start.row==i.row&&a.start.column==i.column||(i=a.end);else if(-1==d&&1==s)i=a.end,e=a.start;else{var c=n(this.$clickSelection,i);i=c.cursor,e=c.anchor}l.selection.setSelectionAnchor(e.row,e.column)}l.selection.selectToPosition(i),l.$blockScrolling--,l.renderer.scrollCursorIntoView()},this.selectEnd=this.selectAllEnd=this.selectByWordsEnd=this.selectByLinesEnd=function(){this.$clickSelection=null,this.editor.unsetStyle("ace_selecting"),this.editor.renderer.scroller.releaseCapture&&this.editor.renderer.scroller.releaseCapture()},this.focusWait=function(){var t,e,l,i,n=(t=this.mousedownEvent.x,e=this.mousedownEvent.y,l=this.x,i=this.y,Math.sqrt(Math.pow(l-t,2)+Math.pow(i-e,2))),a=Date.now();(n>0||a-this.mousedownEvent.time>this.$focusTimout)&&this.startSelect(this.mousedownEvent.getDocumentPosition())},this.onDoubleClick=function(t){var e=t.getDocumentPosition(),l=this.editor,i=l.session.getBracketRange(e);i?(i.isEmpty()&&(i.start.column--,i.end.column++),this.setState("select")):(i=l.selection.getWordRange(e.row,e.column),this.setState("selectByWords")),this.$clickSelection=i,this.select()},this.onTripleClick=function(t){var e=t.getDocumentPosition(),l=this.editor;this.setState("selectByLines");var i=l.getSelectionRange();i.isMultiLine()&&i.contains(e.row,e.column)?(this.$clickSelection=l.selection.getLineRange(i.start.row),this.$clickSelection.end=l.selection.getLineRange(i.end.row).end):this.$clickSelection=l.selection.getLineRange(e.row),this.select()},this.onQuadClick=function(t){var e=this.editor;e.selectAll(),this.$clickSelection=e.getSelectionRange(),this.setState("selectAll")},this.onMouseWheel=function(t){if(!t.getAccelKey()){t.getShiftKey()&&t.wheelY&&!t.wheelX&&(t.wheelX=t.wheelY,t.wheelY=0);var e=t.domEvent.timeStamp,l=e-(this.$lastScrollTime||0),i=this.editor;return i.renderer.isScrollableBy(t.wheelX*t.speed,t.wheelY*t.speed)||l<200?(this.$lastScrollTime=e,i.renderer.scrollBy(t.wheelX*t.speed,t.wheelY*t.speed),t.stop()):void 0}},this.onTouchMove=function(t){var e=t.domEvent.timeStamp,l=e-(this.$lastScrollTime||0),i=this.editor;if(i.renderer.isScrollableBy(t.wheelX*t.speed,t.wheelY*t.speed)||l<200)return this.$lastScrollTime=e,i.renderer.scrollBy(t.wheelX*t.speed,t.wheelY*t.speed),t.stop()}}.call(i.prototype),e.DefaultHandlers=i})),ace.define("ace/tooltip",["require","exports","module","ace/lib/oop","ace/lib/dom"],(function(t,e,l){"use strict";t("./lib/oop");var i=t("./lib/dom");function n(t){this.isOpen=!1,this.$element=null,this.$parentNode=t}(function(){this.$init=function(){return this.$element=i.createElement("div"),this.$element.className="ace_tooltip",this.$element.style.display="none",this.$parentNode.appendChild(this.$element),this.$element},this.getElement=function(){return this.$element||this.$init()},this.setText=function(t){i.setInnerText(this.getElement(),t)},this.setHtml=function(t){this.getElement().innerHTML=t},this.setPosition=function(t,e){this.getElement().style.left=t+"px",this.getElement().style.top=e+"px"},this.setClassName=function(t){i.addCssClass(this.getElement(),t)},this.show=function(t,e,l){null!=t&&this.setText(t),null!=e&&null!=l&&this.setPosition(e,l),this.isOpen||(this.getElement().style.display="block",this.isOpen=!0)},this.hide=function(){this.isOpen&&(this.getElement().style.display="none",this.isOpen=!1)},this.getHeight=function(){return this.getElement().offsetHeight},this.getWidth=function(){return this.getElement().offsetWidth}}).call(n.prototype),e.Tooltip=n})),ace.define("ace/mouse/default_gutter_handler",["require","exports","module","ace/lib/dom","ace/lib/oop","ace/lib/event","ace/tooltip"],(function(t,e,l){"use strict";var i=t("../lib/dom"),n=t("../lib/oop"),a=t("../lib/event"),d=t("../tooltip").Tooltip;function s(t){d.call(this,t)}n.inherits(s,d),function(){this.setPosition=function(t,e){var l=window.innerWidth||document.documentElement.clientWidth,i=window.innerHeight||document.documentElement.clientHeight,n=this.getWidth(),a=this.getHeight();(t+=15)+n>l&&(t-=t+n-l),(e+=15)+a>i&&(e-=20+a),d.prototype.setPosition.call(this,t,e)}}.call(s.prototype),e.GutterHandler=function(t){var e,l,n,d=t.editor,c=d.renderer.$gutterLayer,o=new s(d.container);function b(){e&&(e=clearTimeout(e)),n&&(o.hide(),n=null,d.removeEventListener("mousewheel",b))}function r(t){o.setPosition(t.x,t.y)}t.editor.setDefaultHandler("guttermousedown",(function(e){if(d.isFocused()&&0==e.getButton()&&"foldWidgets"!=c.getRegion(e)){var l=e.getDocumentPosition().row,i=d.session.selection;if(e.getShiftKey())i.selectTo(l,0);else{if(2==e.domEvent.detail)return d.selectAll(),e.preventDefault();t.$clickSelection=d.selection.getLineRange(l)}return t.setState("selectByLines"),t.captureMouse(e),e.preventDefault()}})),t.editor.setDefaultHandler("guttermousemove",(function(a){var s=a.domEvent.target||a.domEvent.srcElement;if(i.hasCssClass(s,"ace_fold-widget"))return b();n&&t.$tooltipFollowsMouse&&r(a),l=a,e||(e=setTimeout((function(){e=null,l&&!t.isMousePressed?function(){var e=l.getDocumentPosition().row,i=c.$annotations[e];if(!i)return b();if(e==d.session.getLength()){var a=d.renderer.pixelToScreenCoordinates(0,l.y).row,s=l.$pos;if(a>d.session.documentToScreenRow(s.row,s.column))return b()}if(n!=i)if(n=i.text.join("
"),o.setHtml(n),o.show(),d.on("mousewheel",b),t.$tooltipFollowsMouse)r(l);else{var m=l.domEvent.target.getBoundingClientRect(),Z=o.getElement().style;Z.left=m.right+"px",Z.top=m.bottom+"px"}}():b()}),50))})),a.addListener(d.renderer.$gutter,"mouseout",(function(t){l=null,n&&!e&&(e=setTimeout((function(){e=null,b()}),50))})),d.on("changeSession",b)}})),ace.define("ace/mouse/mouse_event",["require","exports","module","ace/lib/event","ace/lib/useragent"],(function(t,e,l){"use strict";var i=t("../lib/event"),n=t("../lib/useragent"),a=e.MouseEvent=function(t,e){this.domEvent=t,this.editor=e,this.x=this.clientX=t.clientX,this.y=this.clientY=t.clientY,this.$pos=null,this.$inSelection=null,this.propagationStopped=!1,this.defaultPrevented=!1};(function(){this.stopPropagation=function(){i.stopPropagation(this.domEvent),this.propagationStopped=!0},this.preventDefault=function(){i.preventDefault(this.domEvent),this.defaultPrevented=!0},this.stop=function(){this.stopPropagation(),this.preventDefault()},this.getDocumentPosition=function(){return this.$pos||(this.$pos=this.editor.renderer.screenToTextCoordinates(this.clientX,this.clientY)),this.$pos},this.inSelection=function(){if(null!==this.$inSelection)return this.$inSelection;var t=this.editor.getSelectionRange();if(t.isEmpty())this.$inSelection=!1;else{var e=this.getDocumentPosition();this.$inSelection=t.contains(e.row,e.column)}return this.$inSelection},this.getButton=function(){return i.getButton(this.domEvent)},this.getShiftKey=function(){return this.domEvent.shiftKey},this.getAccelKey=n.isMac?function(){return this.domEvent.metaKey}:function(){return this.domEvent.ctrlKey}}).call(a.prototype)})),ace.define("ace/mouse/dragdrop_handler",["require","exports","module","ace/lib/dom","ace/lib/event","ace/lib/useragent"],(function(t,e,l){"use strict";var i=t("../lib/dom"),n=t("../lib/event"),a=t("../lib/useragent");function d(t){var e=t.editor,l=i.createElement("img");l.src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==",a.isOpera&&(l.style.cssText="width:1px;height:1px;position:fixed;top:0;left:0;z-index:2147483647;opacity:0;"),["dragWait","dragWaitEnd","startDrag","dragReadyEnd","onMouseDrag"].forEach((function(e){t[e]=this[e]}),this),e.addEventListener("mousedown",this.onMouseDown.bind(t));var d,c,o,b,r,m,Z,g,W,h,N,y=e.container,I=0;function G(){var t=m;(function(t,l){var i=Date.now(),n=!l||t.row!=l.row,a=!l||t.column!=l.column;!h||n||a?(e.$blockScrolling+=1,e.moveCursorToPosition(t),e.$blockScrolling-=1,h=i,N={x:c,y:o}):s(N.x,N.y,c,o)>5?h=null:i-h>=200&&(e.renderer.scrollCursorIntoView(),h=null)})(m=e.renderer.screenToTextCoordinates(c,o),t),function(t,l){var i=Date.now(),n=e.renderer.layerConfig.lineHeight,a=e.renderer.layerConfig.characterWidth,d=e.renderer.scroller.getBoundingClientRect(),s={x:{left:c-d.left,right:d.right-c},y:{top:o-d.top,bottom:d.bottom-o}},b=Math.min(s.x.left,s.x.right),r=Math.min(s.y.top,s.y.bottom),m={row:t.row,column:t.column};b/a<=2&&(m.column+=s.x.left=200&&e.renderer.scrollCursorIntoView(m):W=i:W=null}(m,t)}function M(){r=e.selection.toOrientedRange(),d=e.session.addMarker(r,"ace_selection",e.getSelectionStyle()),e.clearSelection(),e.isFocused()&&e.renderer.$cursorLayer.setBlinking(!1),clearInterval(b),G(),b=setInterval(G,20),I=0,n.addListener(document,"mousemove",p)}function u(){clearInterval(b),e.session.removeMarker(d),d=null,e.$blockScrolling+=1,e.selection.fromOrientedRange(r),e.$blockScrolling-=1,e.isFocused()&&!g&&e.renderer.$cursorLayer.setBlinking(!e.getReadOnly()),r=null,m=null,I=0,W=null,h=null,n.removeListener(document,"mousemove",p)}this.onDragStart=function(t){if(this.cancelDrag||!y.draggable){var i=this;return setTimeout((function(){i.startSelect(),i.captureMouse(t)}),0),t.preventDefault()}r=e.getSelectionRange();var n=t.dataTransfer;n.effectAllowed=e.getReadOnly()?"copy":"copyMove",a.isOpera&&(e.container.appendChild(l),l.scrollTop=0),n.setDragImage&&n.setDragImage(l,0,0),a.isOpera&&e.container.removeChild(l),n.clearData(),n.setData("Text",e.session.getTextRange()),g=!0,this.setState("drag")},this.onDragEnd=function(t){if(y.draggable=!1,g=!1,this.setState(null),!e.getReadOnly()){var l=t.dataTransfer.dropEffect;Z||"move"!=l||e.session.remove(e.getSelectionRange()),e.renderer.$cursorLayer.setBlinking(!0)}this.editor.unsetStyle("ace_dragging"),this.editor.renderer.setCursorStyle("")},this.onDragEnter=function(t){if(!e.getReadOnly()&&Y(t.dataTransfer))return c=t.clientX,o=t.clientY,d||M(),I++,t.dataTransfer.dropEffect=Z=R(t),n.preventDefault(t)},this.onDragOver=function(t){if(!e.getReadOnly()&&Y(t.dataTransfer))return c=t.clientX,o=t.clientY,d||(M(),I++),null!==V&&(V=null),t.dataTransfer.dropEffect=Z=R(t),n.preventDefault(t)},this.onDragLeave=function(t){if(--I<=0&&d)return u(),Z=null,n.preventDefault(t)},this.onDrop=function(t){if(m){var l=t.dataTransfer;if(g)switch(Z){case"move":r=r.contains(m.row,m.column)?{start:m,end:m}:e.moveText(r,m);break;case"copy":r=e.moveText(r,m,!0)}else{var i=l.getData("Text");r={start:m,end:e.session.insert(m,i)},e.focus(),Z=null}return u(),n.preventDefault(t)}},n.addListener(y,"dragstart",this.onDragStart.bind(t)),n.addListener(y,"dragend",this.onDragEnd.bind(t)),n.addListener(y,"dragenter",this.onDragEnter.bind(t)),n.addListener(y,"dragover",this.onDragOver.bind(t)),n.addListener(y,"dragleave",this.onDragLeave.bind(t)),n.addListener(y,"drop",this.onDrop.bind(t));var V=null;function p(){null==V&&(V=setTimeout((function(){null!=V&&d&&u()}),20))}function Y(t){var e=t.types;return!e||Array.prototype.some.call(e,(function(t){return"text/plain"==t||"Text"==t}))}function R(t){var e=["copy","copymove","all","uninitialized"],l=a.isMac?t.altKey:t.ctrlKey,i="uninitialized";try{i=t.dataTransfer.effectAllowed.toLowerCase()}catch(t){}var n="none";return l&&e.indexOf(i)>=0?n="copy":["move","copymove","linkmove","all","uninitialized"].indexOf(i)>=0?n="move":e.indexOf(i)>=0&&(n="copy"),n}}function s(t,e,l,i){return Math.sqrt(Math.pow(l-t,2)+Math.pow(i-e,2))}(function(){this.dragWait=function(){Date.now()-this.mousedownEvent.time>this.editor.getDragDelay()&&this.startDrag()},this.dragWaitEnd=function(){this.editor.container.draggable=!1,this.startSelect(this.mousedownEvent.getDocumentPosition()),this.selectEnd()},this.dragReadyEnd=function(t){this.editor.renderer.$cursorLayer.setBlinking(!this.editor.getReadOnly()),this.editor.unsetStyle("ace_dragging"),this.editor.renderer.setCursorStyle(""),this.dragWaitEnd()},this.startDrag=function(){this.cancelDrag=!1;var t=this.editor;t.container.draggable=!0,t.renderer.$cursorLayer.setBlinking(!1),t.setStyle("ace_dragging");var e=a.isWin?"default":"move";t.renderer.setCursorStyle(e),this.setState("dragReady")},this.onMouseDrag=function(t){var e=this.editor.container;a.isIE&&"dragReady"==this.state&&s(this.mousedownEvent.x,this.mousedownEvent.y,this.x,this.y)>3&&e.dragDrop(),"dragWait"===this.state&&s(this.mousedownEvent.x,this.mousedownEvent.y,this.x,this.y)>0&&(e.draggable=!1,this.startSelect(this.mousedownEvent.getDocumentPosition()))},this.onMouseDown=function(t){if(this.$dragEnabled){this.mousedownEvent=t;var e=this.editor,l=t.inSelection(),i=t.getButton();if(1===(t.domEvent.detail||1)&&0===i&&l){if(t.editor.inMultiSelectMode&&(t.getAccelKey()||t.getShiftKey()))return;this.mousedownEvent.time=Date.now();var n=t.domEvent.target||t.domEvent.srcElement;"unselectable"in n&&(n.unselectable="on"),e.getDragDelay()?(a.isWebKit&&(this.cancelDrag=!0,e.container.draggable=!0),this.setState("dragWait")):this.startDrag(),this.captureMouse(t,this.onMouseDrag.bind(this)),t.defaultPrevented=!0}}}}).call(d.prototype),e.DragdropHandler=d})),ace.define("ace/lib/net",["require","exports","module","ace/lib/dom"],(function(t,e,l){"use strict";var i=t("./dom");e.get=function(t,e){var l=new XMLHttpRequest;l.open("GET",t,!0),l.onreadystatechange=function(){4===l.readyState&&e(l.responseText)},l.send(null)},e.loadScript=function(t,e){var l=i.getDocumentHead(),n=document.createElement("script");n.src=t,l.appendChild(n),n.onload=n.onreadystatechange=function(t,l){!l&&n.readyState&&"loaded"!=n.readyState&&"complete"!=n.readyState||(n=n.onload=n.onreadystatechange=null,l||e())}},e.qualifyURL=function(t){var e=document.createElement("a");return e.href=t,e.href}})),ace.define("ace/lib/event_emitter",["require","exports","module"],(function(t,e,l){"use strict";var i={},n=function(){this.propagationStopped=!0},a=function(){this.defaultPrevented=!0};i._emit=i._dispatchEvent=function(t,e){this._eventRegistry||(this._eventRegistry={}),this._defaultHandlers||(this._defaultHandlers={});var l=this._eventRegistry[t]||[],i=this._defaultHandlers[t];if(l.length||i){"object"==typeof e&&e||(e={}),e.type||(e.type=t),e.stopPropagation||(e.stopPropagation=n),e.preventDefault||(e.preventDefault=a),l=l.slice();for(var d=0;d1&&(n=l[l.length-2]);var d=c[e+"Path"];return null==d?d=c.basePath:"/"==i&&(e=i=""),d&&"/"!=d.slice(-1)&&(d+="/"),d+e+i+n+this.get("suffix")},e.setModuleUrl=function(t,e){return c.$moduleUrls[t]=e},e.$loading={},e.loadModule=function(l,i){var n,d;Array.isArray(l)&&(d=l[0],l=l[1]);try{n=t(l)}catch(t){}if(n&&!e.$loading[l])return i&&i(n);if(e.$loading[l]||(e.$loading[l]=[]),e.$loading[l].push(i),!(e.$loading[l].length>1)){var s=function(){t([l],(function(t){e._emit("load.module",{name:l,module:t});var i=e.$loading[l];e.$loading[l]=null,i.forEach((function(e){e&&e(t)}))}))};if(!e.get("packaged"))return s();a.loadScript(e.moduleUrl(l,d),s)}},o(!0),e.init=o})),ace.define("ace/mouse/mouse_handler",["require","exports","module","ace/lib/event","ace/lib/useragent","ace/mouse/default_handlers","ace/mouse/default_gutter_handler","ace/mouse/mouse_event","ace/mouse/dragdrop_handler","ace/config"],(function(t,e,l){"use strict";var i=t("../lib/event"),n=t("../lib/useragent"),a=t("./default_handlers").DefaultHandlers,d=t("./default_gutter_handler").GutterHandler,s=t("./mouse_event").MouseEvent,c=t("./dragdrop_handler").DragdropHandler,o=t("../config"),b=function(t){var e=this;this.editor=t,new a(this),new d(this),new c(this);var l=function(e){(!document.hasFocus||!document.hasFocus()||!t.isFocused()&&document.activeElement==(t.textInput&&t.textInput.getElement()))&&window.focus(),t.focus()},s=t.renderer.getMouseEventTarget();i.addListener(s,"click",this.onMouseEvent.bind(this,"click")),i.addListener(s,"mousemove",this.onMouseMove.bind(this,"mousemove")),i.addMultiMouseDownListener([s,t.renderer.scrollBarV&&t.renderer.scrollBarV.inner,t.renderer.scrollBarH&&t.renderer.scrollBarH.inner,t.textInput&&t.textInput.getElement()].filter(Boolean),[400,300,250],this,"onMouseEvent"),i.addMouseWheelListener(t.container,this.onMouseWheel.bind(this,"mousewheel")),i.addTouchMoveListener(t.container,this.onTouchMove.bind(this,"touchmove"));var o=t.renderer.$gutter;i.addListener(o,"mousedown",this.onMouseEvent.bind(this,"guttermousedown")),i.addListener(o,"click",this.onMouseEvent.bind(this,"gutterclick")),i.addListener(o,"dblclick",this.onMouseEvent.bind(this,"gutterdblclick")),i.addListener(o,"mousemove",this.onMouseEvent.bind(this,"guttermousemove")),i.addListener(s,"mousedown",l),i.addListener(o,"mousedown",l),n.isIE&&t.renderer.scrollBarV&&(i.addListener(t.renderer.scrollBarV.element,"mousedown",l),i.addListener(t.renderer.scrollBarH.element,"mousedown",l)),t.on("mousemove",(function(l){if(!e.state&&!e.$dragDelay&&e.$dragEnabled){var i=t.renderer.screenToTextCoordinates(l.x,l.y),n=t.session.selection.getRange(),a=t.renderer;!n.isEmpty()&&n.insideStart(i.row,i.column)?a.setCursorStyle("default"):a.setCursorStyle("")}}))};(function(){this.onMouseEvent=function(t,e){this.editor._emit(t,new s(e,this.editor))},this.onMouseMove=function(t,e){var l=this.editor._eventRegistry&&this.editor._eventRegistry.mousemove;l&&l.length&&this.editor._emit(t,new s(e,this.editor))},this.onMouseWheel=function(t,e){var l=new s(e,this.editor);l.speed=2*this.$scrollSpeed,l.wheelX=e.wheelX,l.wheelY=e.wheelY,this.editor._emit(t,l)},this.onTouchMove=function(t,e){var l=new s(e,this.editor);l.speed=1,l.wheelX=e.wheelX,l.wheelY=e.wheelY,this.editor._emit(t,l)},this.setState=function(t){this.state=t},this.captureMouse=function(t,e){this.x=t.x,this.y=t.y,this.isMousePressed=!0;var l=this.editor.renderer;l.$keepTextAreaAtCursor&&(l.$keepTextAreaAtCursor=null);var a=this,d=function(t){if(t){if(n.isWebKit&&!t.which&&a.releaseMouse)return a.releaseMouse();a.x=t.clientX,a.y=t.clientY,e&&e(t),a.mouseEvent=new s(t,a.editor),a.$mouseMoved=!0}},c=function(t){clearInterval(b),o(),a[a.state+"End"]&&a[a.state+"End"](t),a.state="",null==l.$keepTextAreaAtCursor&&(l.$keepTextAreaAtCursor=!0,l.$moveTextAreaToCursor()),a.isMousePressed=!1,a.$onCaptureMouseMove=a.releaseMouse=null,t&&a.onMouseEvent("mouseup",t)},o=function(){a[a.state]&&a[a.state](),a.$mouseMoved=!1};if(n.isOldIE&&"dblclick"==t.domEvent.type)return setTimeout((function(){c(t)}));a.$onCaptureMouseMove=d,a.releaseMouse=i.capture(this.editor.container,d,c);var b=setInterval(o,20)},this.releaseMouse=null,this.cancelContextMenu=function(){var t=function(e){e&&e.domEvent&&"contextmenu"!=e.domEvent.type||(this.editor.off("nativecontextmenu",t),e&&e.domEvent&&i.stopEvent(e.domEvent))}.bind(this);setTimeout(t,10),this.editor.on("nativecontextmenu",t)}}).call(b.prototype),o.defineOptions(b.prototype,"mouseHandler",{scrollSpeed:{initialValue:2},dragDelay:{initialValue:n.isMac?150:0},dragEnabled:{initialValue:!0},focusTimout:{initialValue:0},tooltipFollowsMouse:{initialValue:!0}}),e.MouseHandler=b})),ace.define("ace/mouse/fold_handler",["require","exports","module"],(function(t,e,l){"use strict";e.FoldHandler=function(t){t.on("click",(function(e){var l=e.getDocumentPosition(),i=t.session,n=i.getFoldAt(l.row,l.column,1);n&&(e.getAccelKey()?i.removeFold(n):i.expandFold(n),e.stop())})),t.on("gutterclick",(function(e){if("foldWidgets"==t.renderer.$gutterLayer.getRegion(e)){var l=e.getDocumentPosition().row,i=t.session;i.foldWidgets&&i.foldWidgets[l]&&t.session.onFoldWidgetClick(l,e),t.isFocused()||t.focus(),e.stop()}})),t.on("gutterdblclick",(function(e){if("foldWidgets"==t.renderer.$gutterLayer.getRegion(e)){var l=e.getDocumentPosition().row,i=t.session,n=i.getParentFoldRangeData(l,!0),a=n.range||n.firstRange;if(a){l=a.start.row;var d=i.getFoldAt(l,i.getLine(l).length,1);d?i.removeFold(d):(i.addFold("...",a),t.renderer.scrollCursorIntoView({row:a.start.row,column:0}))}e.stop()}}))}})),ace.define("ace/keyboard/keybinding",["require","exports","module","ace/lib/keys","ace/lib/event"],(function(t,e,l){"use strict";var i=t("../lib/keys"),n=t("../lib/event"),a=function(t){this.$editor=t,this.$data={editor:t},this.$handlers=[],this.setDefaultHandler(t.commands)};(function(){this.setDefaultHandler=function(t){this.removeKeyboardHandler(this.$defaultHandler),this.$defaultHandler=t,this.addKeyboardHandler(t,0)},this.setKeyboardHandler=function(t){var e=this.$handlers;if(e[e.length-1]!=t){for(;e[e.length-1]&&e[e.length-1]!=this.$defaultHandler;)this.removeKeyboardHandler(e[e.length-1]);this.addKeyboardHandler(t,1)}},this.addKeyboardHandler=function(t,e){if(t){"function"!=typeof t||t.handleKeyboard||(t.handleKeyboard=t);var l=this.$handlers.indexOf(t);-1!=l&&this.$handlers.splice(l,1),null==e?this.$handlers.push(t):this.$handlers.splice(e,0,t),-1==l&&t.attach&&t.attach(this.$editor)}},this.removeKeyboardHandler=function(t){var e=this.$handlers.indexOf(t);return-1!=e&&(this.$handlers.splice(e,1),t.detach&&t.detach(this.$editor),!0)},this.getKeyboardHandler=function(){return this.$handlers[this.$handlers.length-1]},this.getStatusText=function(){var t=this.$data,e=t.editor;return this.$handlers.map((function(l){return l.getStatusText&&l.getStatusText(e,t)||""})).filter(Boolean).join(" ")},this.$callKeyboardHandlers=function(t,e,l,i){for(var a,d=!1,s=this.$editor.commands,c=this.$handlers.length;c--&&!((a=this.$handlers[c].handleKeyboard(this.$data,t,e,l,i))&&a.command&&((d="null"==a.command||s.exec(a.command,this.$editor,a.args,i))&&i&&-1!=t&&1!=a.passEvent&&1!=a.command.passEvent&&n.stopEvent(i),d)););return d||-1!=t||(a={command:"insertstring"},d=s.exec("insertstring",this.$editor,e)),d&&this.$editor._signal("keyboardActivity",a),d},this.onCommandKey=function(t,e,l){var n=i.keyCodeToString(l);this.$callKeyboardHandlers(e,n,l,t)},this.onTextInput=function(t){this.$callKeyboardHandlers(-1,t)}}).call(a.prototype),e.KeyBinding=a})),ace.define("ace/range",["require","exports","module"],(function(t,e,l){"use strict";var i=function(t,e,l,i){this.start={row:t,column:e},this.end={row:l,column:i}};(function(){this.isEqual=function(t){return this.start.row===t.start.row&&this.end.row===t.end.row&&this.start.column===t.start.column&&this.end.column===t.end.column},this.toString=function(){return"Range: ["+this.start.row+"/"+this.start.column+"] -> ["+this.end.row+"/"+this.end.column+"]"},this.contains=function(t,e){return 0==this.compare(t,e)},this.compareRange=function(t){var e,l=t.end,i=t.start;return 1==(e=this.compare(l.row,l.column))?1==(e=this.compare(i.row,i.column))?2:0==e?1:0:-1==e?-2:-1==(e=this.compare(i.row,i.column))?-1:1==e?42:0},this.comparePoint=function(t){return this.compare(t.row,t.column)},this.containsRange=function(t){return 0==this.comparePoint(t.start)&&0==this.comparePoint(t.end)},this.intersects=function(t){var e=this.compareRange(t);return-1==e||0==e||1==e},this.isEnd=function(t,e){return this.end.row==t&&this.end.column==e},this.isStart=function(t,e){return this.start.row==t&&this.start.column==e},this.setStart=function(t,e){"object"==typeof t?(this.start.column=t.column,this.start.row=t.row):(this.start.row=t,this.start.column=e)},this.setEnd=function(t,e){"object"==typeof t?(this.end.column=t.column,this.end.row=t.row):(this.end.row=t,this.end.column=e)},this.inside=function(t,e){return 0==this.compare(t,e)&&!this.isEnd(t,e)&&!this.isStart(t,e)},this.insideStart=function(t,e){return 0==this.compare(t,e)&&!this.isEnd(t,e)},this.insideEnd=function(t,e){return 0==this.compare(t,e)&&!this.isStart(t,e)},this.compare=function(t,e){return this.isMultiLine()||t!==this.start.row?tthis.end.row?1:this.start.row===t?e>=this.start.column?0:-1:this.end.row===t?e<=this.end.column?0:1:0:ethis.end.column?1:0},this.compareStart=function(t,e){return this.start.row==t&&this.start.column==e?-1:this.compare(t,e)},this.compareEnd=function(t,e){return this.end.row==t&&this.end.column==e?1:this.compare(t,e)},this.compareInside=function(t,e){return this.end.row==t&&this.end.column==e?1:this.start.row==t&&this.start.column==e?-1:this.compare(t,e)},this.clipRows=function(t,e){if(this.end.row>e)var l={row:e+1,column:0};else this.end.rowe)var n={row:e+1,column:0};else this.start.rowe.row||t.row==e.row&&t.column>e.column},this.getRange=function(){var t=this.anchor,e=this.lead;return this.isEmpty()?d.fromPoints(e,e):this.isBackwards()?d.fromPoints(e,t):d.fromPoints(t,e)},this.clearSelection=function(){this.$isEmpty||(this.$isEmpty=!0,this._emit("changeSelection"))},this.selectAll=function(){var t=this.doc.getLength()-1;this.setSelectionAnchor(0,0),this.moveCursorTo(t,this.doc.getLine(t).length)},this.setRange=this.setSelectionRange=function(t,e){e?(this.setSelectionAnchor(t.end.row,t.end.column),this.selectTo(t.start.row,t.start.column)):(this.setSelectionAnchor(t.start.row,t.start.column),this.selectTo(t.end.row,t.end.column)),this.getRange().isEmpty()&&(this.$isEmpty=!0),this.$desiredColumn=null},this.$moveSelection=function(t){var e=this.lead;this.$isEmpty&&this.setSelectionAnchor(e.row,e.column),t.call(this)},this.selectTo=function(t,e){this.$moveSelection((function(){this.moveCursorTo(t,e)}))},this.selectToPosition=function(t){this.$moveSelection((function(){this.moveCursorToPosition(t)}))},this.moveTo=function(t,e){this.clearSelection(),this.moveCursorTo(t,e)},this.moveToPosition=function(t){this.clearSelection(),this.moveCursorToPosition(t)},this.selectUp=function(){this.$moveSelection(this.moveCursorUp)},this.selectDown=function(){this.$moveSelection(this.moveCursorDown)},this.selectRight=function(){this.$moveSelection(this.moveCursorRight)},this.selectLeft=function(){this.$moveSelection(this.moveCursorLeft)},this.selectLineStart=function(){this.$moveSelection(this.moveCursorLineStart)},this.selectLineEnd=function(){this.$moveSelection(this.moveCursorLineEnd)},this.selectFileEnd=function(){this.$moveSelection(this.moveCursorFileEnd)},this.selectFileStart=function(){this.$moveSelection(this.moveCursorFileStart)},this.selectWordRight=function(){this.$moveSelection(this.moveCursorWordRight)},this.selectWordLeft=function(){this.$moveSelection(this.moveCursorWordLeft)},this.getWordRange=function(t,e){if(void 0===e){var l=t||this.lead;t=l.row,e=l.column}return this.session.getWordRange(t,e)},this.selectWord=function(){this.setSelectionRange(this.getWordRange())},this.selectAWord=function(){var t=this.getCursor(),e=this.session.getAWordRange(t.row,t.column);this.setSelectionRange(e)},this.getLineRange=function(t,e){var l,i="number"==typeof t?t:this.lead.row,n=this.session.getFoldLine(i);return n?(i=n.start.row,l=n.end.row):l=i,!0===e?new d(i,0,l,this.session.getLine(l).length):new d(i,0,l+1,0)},this.selectLine=function(){this.setSelectionRange(this.getLineRange())},this.moveCursorUp=function(){this.moveCursorBy(-1,0)},this.moveCursorDown=function(){this.moveCursorBy(1,0)},this.moveCursorLeft=function(){var t,e=this.lead.getPosition();if(t=this.session.getFoldAt(e.row,e.column,-1))this.moveCursorTo(t.start.row,t.start.column);else if(0===e.column)e.row>0&&this.moveCursorTo(e.row-1,this.doc.getLine(e.row-1).length);else{var l=this.session.getTabSize();this.session.isTabStop(e)&&this.doc.getLine(e.row).slice(e.column-l,e.column).split(" ").length-1==l?this.moveCursorBy(0,-l):this.moveCursorBy(0,-1)}},this.moveCursorRight=function(){var t,e=this.lead.getPosition();if(t=this.session.getFoldAt(e.row,e.column,1))this.moveCursorTo(t.end.row,t.end.column);else if(this.lead.column==this.doc.getLine(this.lead.row).length)this.lead.row0&&(e.column=i)}}this.moveCursorTo(e.row,e.column)},this.moveCursorFileEnd=function(){var t=this.doc.getLength()-1,e=this.doc.getLine(t).length;this.moveCursorTo(t,e)},this.moveCursorFileStart=function(){this.moveCursorTo(0,0)},this.moveCursorLongWordRight=function(){var t=this.lead.row,e=this.lead.column,l=this.doc.getLine(t),i=l.substring(e);this.session.nonTokenRe.lastIndex=0,this.session.tokenRe.lastIndex=0;var n=this.session.getFoldAt(t,e,1);if(n)this.moveCursorTo(n.end.row,n.end.column);else{if(this.session.nonTokenRe.exec(i)&&(e+=this.session.nonTokenRe.lastIndex,this.session.nonTokenRe.lastIndex=0,i=l.substring(e)),e>=l.length)return this.moveCursorTo(t,l.length),this.moveCursorRight(),void(t0&&this.moveCursorWordLeft());this.session.tokenRe.exec(a)&&(l-=this.session.tokenRe.lastIndex,this.session.tokenRe.lastIndex=0),this.moveCursorTo(e,l)}},this.$shortWordEndIndex=function(t){var e,l=0,i=/\s/,n=this.session.tokenRe;if(n.lastIndex=0,this.session.tokenRe.exec(t))l=this.session.tokenRe.lastIndex;else{for(;(e=t[l])&&i.test(e);)l++;if(l<1)for(n.lastIndex=0;(e=t[l])&&!n.test(e);)if(n.lastIndex=0,l++,i.test(e)){if(l>2){l--;break}for(;(e=t[l])&&i.test(e);)l++;if(l>2)break}}return n.lastIndex=0,l},this.moveCursorShortWordRight=function(){var t=this.lead.row,e=this.lead.column,l=this.doc.getLine(t),i=l.substring(e),n=this.session.getFoldAt(t,e,1);if(n)return this.moveCursorTo(n.end.row,n.end.column);if(e==l.length){var a=this.doc.getLength();do{t++,i=this.doc.getLine(t)}while(t0&&/^\s*$/.test(i));l=i.length,/\s+$/.test(i)||(i="")}var a=n.stringReverse(i),d=this.$shortWordEndIndex(a);return this.moveCursorTo(e,l-d)},this.moveCursorWordRight=function(){this.session.$selectLongWords?this.moveCursorLongWordRight():this.moveCursorShortWordRight()},this.moveCursorWordLeft=function(){this.session.$selectLongWords?this.moveCursorLongWordLeft():this.moveCursorShortWordLeft()},this.moveCursorBy=function(t,e){var l=this.session.documentToScreenPosition(this.lead.row,this.lead.column);0===e&&(this.$desiredColumn?l.column=this.$desiredColumn:this.$desiredColumn=l.column);var i=this.session.screenToDocumentPosition(l.row+t,l.column);0!==t&&0===e&&i.row===this.lead.row&&i.column===this.lead.column&&this.session.lineWidgets&&this.session.lineWidgets[i.row]&&(i.row>0||t>0)&&i.row++,this.moveCursorTo(i.row,i.column+e,0===e)},this.moveCursorToPosition=function(t){this.moveCursorTo(t.row,t.column)},this.moveCursorTo=function(t,e,l){var i=this.session.getFoldAt(t,e,1);i&&(t=i.start.row,e=i.start.column),this.$keepDesiredColumnOnChange=!0,this.lead.setPosition(t,e),this.$keepDesiredColumnOnChange=!1,l||(this.$desiredColumn=null)},this.moveCursorToScreen=function(t,e,l){var i=this.session.screenToDocumentPosition(t,e);this.moveCursorTo(i.row,i.column,l)},this.detach=function(){this.lead.detach(),this.anchor.detach(),this.session=this.doc=null},this.fromOrientedRange=function(t){this.setSelectionRange(t,t.cursor==t.start),this.$desiredColumn=t.desiredColumn||this.$desiredColumn},this.toOrientedRange=function(t){var e=this.getRange();return t?(t.start.column=e.start.column,t.start.row=e.start.row,t.end.column=e.end.column,t.end.row=e.end.row):t=e,t.cursor=this.isBackwards()?t.start:t.end,t.desiredColumn=this.$desiredColumn,t},this.getRangeOfMovements=function(t){var e=this.getCursor();try{t(this);var l=this.getCursor();return d.fromPoints(e,l)}catch(t){return d.fromPoints(e,e)}finally{this.moveCursorToPosition(e)}},this.toJSON=function(){if(this.rangeCount)var t=this.ranges.map((function(t){var e=t.clone();return e.isBackwards=t.cursor==t.start,e}));else(t=this.getRange()).isBackwards=this.isBackwards();return t},this.fromJSON=function(t){if(null==t.start){if(this.rangeList){this.toSingleRange(t[0]);for(var e=t.length;e--;){var l=d.fromPoints(t[e].start,t[e].end);t[e].isBackwards&&(l.cursor=l.start),this.addRange(l,!0)}return}t=t[0]}this.rangeList&&this.toSingleRange(t),this.setSelectionRange(t,t.isBackwards)},this.isEqual=function(t){if((t.length||this.rangeCount)&&t.length!=this.rangeCount)return!1;if(!t.length||!this.ranges)return this.getRange().isEqual(t);for(var e=this.ranges.length;e--;)if(!this.ranges[e].isEqual(t[e]))return!1;return!0}}).call(s.prototype),e.Selection=s})),ace.define("ace/tokenizer",["require","exports","module","ace/config"],(function(t,e,l){"use strict";var i=t("./config"),n=2e3,a=function(t){for(var e in this.states=t,this.regExps={},this.matchMappings={},this.states){for(var l=this.states[e],i=[],n=0,a=this.matchMappings[e]={defaultToken:"text"},d="g",s=[],c=0;c1?this.$applyToken:o.token),r>1&&(/\\\d/.test(o.regex)?b=o.regex.replace(/\\([0-9]+)/g,(function(t,e){return"\\"+(parseInt(e,10)+n+1)})):(r=1,b=this.removeCapturingGroups(o.regex)),o.splitRegex||"string"==typeof o.token||s.push(o)),a[n]=c,n+=r,i.push(b),o.onMatch||(o.onMatch=null)}}i.length||(a[0]=0,i.push("$")),s.forEach((function(t){t.splitRegex=this.createSplitterRegexp(t.regex,d)}),this),this.regExps[e]=new RegExp("("+i.join(")|(")+")|($)",d)}};(function(){this.$setMaxTokenCount=function(t){n=0|t},this.$applyToken=function(t){var e=this.splitRegex.exec(t).slice(1),l=this.token.apply(this,e);if("string"==typeof l)return[{type:l,value:t}];for(var i=[],n=0,a=l.length;nb){var N=t.substring(b,h-W.length);m.type==Z?m.value+=N:(m.type&&o.push(m),m={type:Z,value:N})}for(var y=0;yn){for(r>2*t.length&&this.reportError("infinite loop with in ace tokenizer",{startState:e,line:t});b1&&l[0]!==i&&l.unshift("#tmp",i),{tokens:o,state:l.length?l:i}},this.reportError=i.reportError}).call(a.prototype),e.Tokenizer=a})),ace.define("ace/mode/text_highlight_rules",["require","exports","module","ace/lib/lang"],(function(t,e,l){"use strict";var i=t("../lib/lang"),n=function(){this.$rules={start:[{token:"empty_line",regex:"^$"},{defaultToken:"text"}]}};(function(){this.addRules=function(t,e){if(e)for(var l in t){for(var i=t[l],n=0;n=this.$rowTokens.length;){if(this.$row+=1,t||(t=this.$session.getLength()),this.$row>=t)return this.$row=t-1,null;this.$rowTokens=this.$session.getTokens(this.$row),this.$tokenIndex=0}return this.$rowTokens[this.$tokenIndex]},this.getCurrentToken=function(){return this.$rowTokens[this.$tokenIndex]},this.getCurrentTokenRow=function(){return this.$row},this.getCurrentTokenColumn=function(){var t=this.$rowTokens,e=this.$tokenIndex,l=t[e].start;if(void 0!==l)return l;for(l=0;e>0;)l+=t[e-=1].value.length;return l},this.getCurrentTokenPosition=function(){return{row:this.$row,column:this.getCurrentTokenColumn()}}}).call(i.prototype),e.TokenIterator=i})),ace.define("ace/mode/text",["require","exports","module","ace/tokenizer","ace/mode/text_highlight_rules","ace/mode/behaviour","ace/unicode","ace/lib/lang","ace/token_iterator","ace/range"],(function(t,e,l){"use strict";var i=t("../tokenizer").Tokenizer,n=t("./text_highlight_rules").TextHighlightRules,a=t("./behaviour").Behaviour,d=t("../unicode"),s=t("../lib/lang"),c=t("../token_iterator").TokenIterator,o=t("../range").Range,b=function(){this.HighlightRules=n,this.$behaviour=new a};(function(){this.tokenRe=new RegExp("^["+d.packages.L+d.packages.Mn+d.packages.Mc+d.packages.Nd+d.packages.Pc+"\\$_]+","g"),this.nonTokenRe=new RegExp("^(?:[^"+d.packages.L+d.packages.Mn+d.packages.Mc+d.packages.Nd+d.packages.Pc+"\\$_]|\\s])+","g"),this.getTokenizer=function(){return this.$tokenizer||(this.$highlightRules=this.$highlightRules||new this.HighlightRules,this.$tokenizer=new i(this.$highlightRules.getRules())),this.$tokenizer},this.lineCommentStart="",this.blockComment="",this.toggleCommentLines=function(t,e,l,i){var n=e.doc,a=!0,d=!0,c=1/0,o=e.getTabSize(),b=!1;if(this.lineCommentStart){Array.isArray(this.lineCommentStart)?(W=this.lineCommentStart.map(s.escapeRegExp).join("|"),Z=this.lineCommentStart[0]):(W=s.escapeRegExp(this.lineCommentStart),Z=this.lineCommentStart),W=new RegExp("^(\\s*)(?:"+W+") ?"),b=e.getUseSoftTabs(),y=function(t,e){var l=t.match(W);if(l){var i=l[1].length,a=l[0].length;m(t,i,a)||" "!=l[0][a-1]||a--,n.removeInLine(e,i,a)}};var r=Z+" ",m=(N=function(t,e){a&&!/\S/.test(t)||(m(t,c,c)?n.insertInLine({row:e,column:c},r):n.insertInLine({row:e,column:c},Z))},I=function(t,e){return W.test(t)},function(t,e,l){for(var i=0;e--&&" "==t.charAt(e);)i++;if(i%o!=0)return!1;for(i=0;" "==t.charAt(l++);)i++;return o>2?i%o!=o-1:i%o==0})}else{if(!this.blockComment)return!1;var Z=this.blockComment.start,g=this.blockComment.end,W=new RegExp("^(\\s*)(?:"+s.escapeRegExp(Z)+")"),h=new RegExp("(?:"+s.escapeRegExp(g)+")\\s*$"),N=function(t,e){I(t,e)||a&&!/\S/.test(t)||(n.insertInLine({row:e,column:t.length},g),n.insertInLine({row:e,column:c},Z))},y=function(t,e){var l;(l=t.match(h))&&n.removeInLine(e,t.length-l[0].length,t.length),(l=t.match(W))&&n.removeInLine(e,l[1].length,l[0].length)},I=function(t,l){if(W.test(t))return!0;for(var i=e.getTokens(l),n=0;nt.length&&(M=t.length)})),c==1/0&&(c=M,a=!1,d=!1),b&&c%o!=0&&(c=Math.floor(c/o)*o),G(d?y:N)},this.toggleBlockComment=function(t,e,l,i){var n=this.blockComment;if(n){!n.start&&n[0]&&(n=n[0]);var a,d,s=(W=new c(e,i.row,i.column)).getCurrentToken(),b=(e.selection,e.selection.toOrientedRange());if(s&&/comment/.test(s.type)){for(var r,m;s&&/comment/.test(s.type);){if(-1!=(h=s.value.indexOf(n.start))){var Z=W.getCurrentTokenRow(),g=W.getCurrentTokenColumn()+h;r=new o(Z,g,Z,g+n.start.length);break}s=W.stepBackward()}var W;for(s=(W=new c(e,i.row,i.column)).getCurrentToken();s&&/comment/.test(s.type);){var h;if(-1!=(h=s.value.indexOf(n.end))){Z=W.getCurrentTokenRow(),g=W.getCurrentTokenColumn()+h,m=new o(Z,g,Z,g+n.end.length);break}s=W.stepForward()}m&&e.remove(m),r&&(e.remove(r),a=r.start.row,d=-n.start.length)}else d=n.start.length,a=l.start.row,e.insert(l.end,n.end),e.insert(l.start,n.start);b.start.row==a&&(b.start.column+=d),b.end.row==a&&(b.end.column+=d),e.selection.fromOrientedRange(b)}},this.getNextLineIndent=function(t,e,l){return this.$getIndent(e)},this.checkOutdent=function(t,e,l){return!1},this.autoOutdent=function(t,e,l){},this.$getIndent=function(t){return t.match(/^\s*/)[0]},this.createWorker=function(t){return null},this.createModeDelegates=function(t){for(var e in this.$embeds=[],this.$modes={},t)t[e]&&(this.$embeds.push(e),this.$modes[e]=new t[e]);var l=["toggleBlockComment","toggleCommentLines","getNextLineIndent","checkOutdent","autoOutdent","transformAction","getCompletions"];for(e=0;ethis.row)){var l=function(e,l,i){var n="insert"==e.action,a=(n?1:-1)*(e.end.row-e.start.row),d=(n?1:-1)*(e.end.column-e.start.column),s=e.start,c=n?s:e.end;return t(l,s,i)?{row:l.row,column:l.column}:t(c,l,!i)?{row:l.row+a,column:l.column+(l.row==c.row?d:0)}:{row:s.row,column:s.column}}(e,{row:this.row,column:this.column},this.$insertRight);this.setPosition(l.row,l.column,!0)}},this.setPosition=function(t,e,l){var i;if(i=l?{row:t,column:e}:this.$clipPositionToDocument(t,e),this.row!=i.row||this.column!=i.column){var n={row:this.row,column:this.column};this.row=i.row,this.column=i.column,this._signal("change",{old:n,value:i})}},this.detach=function(){this.document.removeEventListener("change",this.$onChange)},this.attach=function(t){this.document=t||this.document,this.document.on("change",this.$onChange)},this.$clipPositionToDocument=function(t,e){var l={};return t>=this.document.getLength()?(l.row=Math.max(0,this.document.getLength()-1),l.column=this.document.getLine(l.row).length):t<0?(l.row=0,l.column=0):(l.row=t,l.column=Math.min(this.document.getLine(l.row).length,Math.max(0,e))),e<0&&(l.column=0),l}}).call(a.prototype)})),ace.define("ace/document",["require","exports","module","ace/lib/oop","ace/apply_delta","ace/lib/event_emitter","ace/range","ace/anchor"],(function(t,e,l){"use strict";var i=t("./lib/oop"),n=t("./apply_delta").applyDelta,a=t("./lib/event_emitter").EventEmitter,d=t("./range").Range,s=t("./anchor").Anchor,c=function(t){this.$lines=[""],0===t.length?this.$lines=[""]:Array.isArray(t)?this.insertMergedLines({row:0,column:0},t):this.insert({row:0,column:0},t)};(function(){i.implement(this,a),this.setValue=function(t){var e=this.getLength()-1;this.remove(new d(0,0,e,this.getLine(e).length)),this.insert({row:0,column:0},t)},this.getValue=function(){return this.getAllLines().join(this.getNewLineCharacter())},this.createAnchor=function(t,e){return new s(this,t,e)},0==="aaa".split(/a/).length?this.$split=function(t){return t.replace(/\r\n|\r/g,"\n").split("\n")}:this.$split=function(t){return t.split(/\r\n|\r|\n/)},this.$detectNewLine=function(t){var e=t.match(/^.*?(\r\n|\r|\n)/m);this.$autoNewLine=e?e[1]:"\n",this._signal("changeNewLineMode")},this.getNewLineCharacter=function(){switch(this.$newLineMode){case"windows":return"\r\n";case"unix":return"\n";default:return this.$autoNewLine||"\n"}},this.$autoNewLine="",this.$newLineMode="auto",this.setNewLineMode=function(t){this.$newLineMode!==t&&(this.$newLineMode=t,this._signal("changeNewLineMode"))},this.getNewLineMode=function(){return this.$newLineMode},this.isNewLine=function(t){return"\r\n"==t||"\r"==t||"\n"==t},this.getLine=function(t){return this.$lines[t]||""},this.getLines=function(t,e){return this.$lines.slice(t,e+1)},this.getAllLines=function(){return this.getLines(0,this.getLength())},this.getLength=function(){return this.$lines.length},this.getTextRange=function(t){return this.getLinesForRange(t).join(this.getNewLineCharacter())},this.getLinesForRange=function(t){var e;if(t.start.row===t.end.row)e=[this.getLine(t.start.row).substring(t.start.column,t.end.column)];else{(e=this.getLines(t.start.row,t.end.row))[0]=(e[0]||"").substring(t.start.column);var l=e.length-1;t.end.row-t.start.row==l&&(e[l]=e[l].substring(0,t.end.column))}return e},this.insertLines=function(t,e){return console.warn("Use of document.insertLines is deprecated. Use the insertFullLines method instead."),this.insertFullLines(t,e)},this.removeLines=function(t,e){return console.warn("Use of document.removeLines is deprecated. Use the removeFullLines method instead."),this.removeFullLines(t,e)},this.insertNewLine=function(t){return console.warn("Use of document.insertNewLine is deprecated. Use insertMergedLines(position, ['', '']) instead."),this.insertMergedLines(t,["",""])},this.insert=function(t,e){return this.getLength()<=1&&this.$detectNewLine(e),this.insertMergedLines(t,this.$split(e))},this.insertInLine=function(t,e){var l=this.clippedPos(t.row,t.column),i=this.pos(t.row,t.column+e.length);return this.applyDelta({start:l,end:i,action:"insert",lines:[e]},!0),this.clonePos(i)},this.clippedPos=function(t,e){var l=this.getLength();void 0===t?t=l:t<0?t=0:t>=l&&(t=l-1,e=void 0);var i=this.getLine(t);return null==e&&(e=i.length),{row:t,column:e=Math.min(Math.max(e,0),i.length)}},this.clonePos=function(t){return{row:t.row,column:t.column}},this.pos=function(t,e){return{row:t,column:e}},this.$clipPosition=function(t){var e=this.getLength();return t.row>=e?(t.row=Math.max(0,e-1),t.column=this.getLine(e-1).length):(t.row=Math.max(0,t.row),t.column=Math.min(Math.max(t.column,0),this.getLine(t.row).length)),t},this.insertFullLines=function(t,e){var l=0;(t=Math.min(Math.max(t,0),this.getLength()))0,i=e=0&&this.applyDelta({start:this.pos(t,this.getLine(t).length),end:this.pos(t+1,0),action:"remove",lines:["",""]})},this.replace=function(t,e){return t instanceof d||(t=d.fromPoints(t.start,t.end)),0===e.length&&t.isEmpty()?t.start:e==this.getTextRange(t)?t.end:(this.remove(t),e?this.insert(t.start,e):t.start)},this.applyDeltas=function(t){for(var e=0;e=0;e--)this.revertDelta(t[e])},this.applyDelta=function(t,e){var l="insert"==t.action;(l?t.lines.length<=1&&!t.lines[0]:!d.comparePoints(t.start,t.end))||(l&&t.lines.length>2e4&&this.$splitAndapplyLargeDelta(t,2e4),n(this.$lines,t,e),this._signal("change",t))},this.$splitAndapplyLargeDelta=function(t,e){for(var l=t.lines,i=l.length,n=t.start.row,a=t.start.column,d=0,s=0;;){d=s,s+=e-1;var c=l.slice(d,s);if(s>i){t.lines=c,t.start.row=n+d,t.start.column=a;break}c.push(""),this.applyDelta({start:this.pos(n+d,a),end:this.pos(n+s,a=0),action:t.action,lines:c},!0)}},this.revertDelta=function(t){this.applyDelta({start:this.clonePos(t.start),end:this.clonePos(t.end),action:"insert"==t.action?"remove":"insert",lines:t.lines.slice()})},this.indexToPosition=function(t,e){for(var l=this.$lines||this.getAllLines(),i=this.getNewLineCharacter().length,n=e||0,a=l.length;n20){l.running=setTimeout(l.$worker,20);break}}l.currentLine=e,a<=i&&l.fireUpdateEvent(a,i)}}};(function(){i.implement(this,n),this.setTokenizer=function(t){this.tokenizer=t,this.lines=[],this.states=[],this.start(0)},this.setDocument=function(t){this.doc=t,this.lines=[],this.states=[],this.stop()},this.fireUpdateEvent=function(t,e){var l={first:t,last:e};this._signal("update",{data:l})},this.start=function(t){this.currentLine=Math.min(t||0,this.currentLine,this.doc.getLength()),this.lines.splice(this.currentLine,this.lines.length),this.states.splice(this.currentLine,this.states.length),this.stop(),this.running=setTimeout(this.$worker,700)},this.scheduleStart=function(){this.running||(this.running=setTimeout(this.$worker,700))},this.$updateOnChange=function(t){var e=t.start.row,l=t.end.row-e;if(0===l)this.lines[e]=null;else if("remove"==t.action)this.lines.splice(e,l+1,null),this.states.splice(e,l+1,null);else{var i=Array(l+1);i.unshift(e,1),this.lines.splice.apply(this.lines,i),this.states.splice.apply(this.states,i)}this.currentLine=Math.min(e,this.currentLine,this.doc.getLength()),this.stop()},this.stop=function(){this.running&&clearTimeout(this.running),this.running=!1},this.getTokens=function(t){return this.lines[t]||this.$tokenizeRow(t)},this.getState=function(t){return this.currentLine==t&&this.$tokenizeRow(t),this.states[t]||"start"},this.$tokenizeRow=function(t){var e=this.doc.getLine(t),l=this.states[t-1],i=this.tokenizer.getLineTokens(e,l,t);return this.states[t]+""!=i.state+""?(this.states[t]=i.state,this.lines[t+1]=null,this.currentLine>t+1&&(this.currentLine=t+1)):this.currentLine==t&&(this.currentLine=t+1),this.lines[t]=i.tokens}}).call(a.prototype),e.BackgroundTokenizer=a})),ace.define("ace/search_highlight",["require","exports","module","ace/lib/lang","ace/lib/oop","ace/range"],(function(t,e,l){"use strict";var i=t("./lib/lang"),n=(t("./lib/oop"),t("./range").Range),a=function(t,e,l){this.setRegexp(t),this.clazz=e,this.type=l||"text"};(function(){this.MAX_RANGES=500,this.setRegexp=function(t){this.regExp+""!=t+""&&(this.regExp=t,this.cache=[])},this.update=function(t,e,l,a){if(this.regExp)for(var d=a.firstRow,s=a.lastRow,c=d;c<=s;c++){var o=this.cache[c];null==o&&((o=i.getMatchOffsets(l.getLine(c),this.regExp)).length>this.MAX_RANGES&&(o=o.slice(0,this.MAX_RANGES)),o=o.map((function(t){return new n(c,t.offset,c,t.offset+t.length)})),this.cache[c]=o.length?o:"");for(var b=o.length;b--;)e.drawSingleLineMarker(t,o[b].toScreenRange(l),this.clazz,a)}}}).call(a.prototype),e.SearchHighlight=a})),ace.define("ace/edit_session/fold_line",["require","exports","module","ace/range"],(function(t,e,l){"use strict";var i=t("../range").Range;function n(t,e){this.foldData=t,Array.isArray(e)?this.folds=e:e=this.folds=[e];var l=e[e.length-1];this.range=new i(e[0].start.row,e[0].start.column,l.end.row,l.end.column),this.start=this.range.start,this.end=this.range.end,this.folds.forEach((function(t){t.setFoldLine(this)}),this)}(function(){this.shiftRow=function(t){this.start.row+=t,this.end.row+=t,this.folds.forEach((function(e){e.start.row+=t,e.end.row+=t}))},this.addFold=function(t){if(t.sameRow){if(t.start.rowthis.endRow)throw new Error("Can't add a fold to this FoldLine as it has no connection");this.folds.push(t),this.folds.sort((function(t,e){return-t.range.compareEnd(e.start.row,e.start.column)})),this.range.compareEnd(t.start.row,t.start.column)>0?(this.end.row=t.end.row,this.end.column=t.end.column):this.range.compareStart(t.end.row,t.end.column)<0&&(this.start.row=t.start.row,this.start.column=t.start.column)}else if(t.start.row==this.end.row)this.folds.push(t),this.end.row=t.end.row,this.end.column=t.end.column;else{if(t.end.row!=this.start.row)throw new Error("Trying to add fold to FoldRow that doesn't have a matching row");this.folds.unshift(t),this.start.row=t.start.row,this.start.column=t.start.column}t.foldLine=this},this.containsRow=function(t){return t>=this.start.row&&t<=this.end.row},this.walk=function(t,e,l){var i,n,a=0,d=this.folds,s=!0;null==e&&(e=this.end.row,l=this.end.column);for(var c=0;c0)){var c=i(t,d.start);return 0===s?e&&0!==c?-a-2:a:c>0||0===c&&!e?a:-a-1}}return-a-1},this.add=function(t){var e=!t.isEmpty(),l=this.pointIndex(t.start,e);l<0&&(l=-l-1);var i=this.pointIndex(t.end,e,l);return i<0?i=-i-1:i++,this.ranges.splice(l,i-l,t)},this.addList=function(t){for(var e=[],l=t.length;l--;)e.push.apply(e,this.add(t[l]));return e},this.substractPoint=function(t){var e=this.pointIndex(t);if(e>=0)return this.ranges.splice(e,1)},this.merge=function(){for(var t,e=[],l=this.ranges,n=(l=l.sort((function(t,e){return i(t.start,e.start)})))[0],a=1;a=0},this.containsPoint=function(t){return this.pointIndex(t)>=0},this.rangeAtPoint=function(t){var e=this.pointIndex(t);if(e>=0)return this.ranges[e]},this.clipRows=function(t,e){var l=this.ranges;if(l[0].start.row>e||l[l.length-1].start.rowi)break;if(o.start.row==i&&o.start.column>=e.column&&(o.start.column==e.column&&this.$insertRight||(o.start.column+=a,o.start.row+=n)),o.end.row==i&&o.end.column>=e.column){if(o.end.column==e.column&&this.$insertRight)continue;o.end.column==e.column&&a>0&&so.start.column&&o.end.column==d[s+1].start.column&&(o.end.column-=a),o.end.column+=a,o.end.row+=n}}if(0!=n&&s=t)return n;if(n.end.row>t)return null}return null},this.getNextFoldLine=function(t,e){var l=this.$foldData,i=0;for(e&&(i=l.indexOf(e)),-1==i&&(i=0);i=t)return n}return null},this.getFoldedRowCount=function(t,e){for(var l=this.$foldData,i=e-t+1,n=0;n=e){s=t?i-=e-s:i=0);break}d>=t&&(i-=s>=t?d-s:d-t+1)}return i},this.$addFoldLine=function(t){return this.$foldData.push(t),this.$foldData.sort((function(t,e){return t.start.row-e.start.row})),t},this.addFold=function(t,e){var l,i=this.$foldData,d=!1;t instanceof a?l=t:(l=new a(e,t)).collapseChildren=e.collapseChildren,this.$clipRangeToDocument(l.range);var s=l.start.row,c=l.start.column,o=l.end.row,b=l.end.column;if(!(s0&&(this.removeFolds(Z),Z.forEach((function(t){l.addSubFold(t)})));for(var g=0;g0&&this.foldAll(t.start.row+1,t.end.row,t.collapseChildren-1),t.subFolds=[]},this.expandFolds=function(t){t.forEach((function(t){this.expandFold(t)}),this)},this.unfold=function(t,e){var l,n;if(null==t?(l=new i(0,0,this.getLength(),0),e=!0):l="number"==typeof t?new i(t,0,t,this.getLine(t).length):"row"in t?i.fromPoints(t,t):t,n=this.getFoldsInRangeList(l),e)this.removeFolds(n);else for(var a=n;a.length;)this.expandFolds(a),a=this.getFoldsInRangeList(l);if(n.length)return n},this.isRowFolded=function(t,e){return!!this.getFoldLine(t,e)},this.getRowFoldEnd=function(t,e){var l=this.getFoldLine(t,e);return l?l.end.row:t},this.getRowFoldStart=function(t,e){var l=this.getFoldLine(t,e);return l?l.start.row:t},this.getFoldDisplayLine=function(t,e,l,i,n){null==i&&(i=t.start.row),null==n&&(n=0),null==e&&(e=t.end.row),null==l&&(l=this.getLine(e).length);var a=this.doc,d="";return t.walk((function(t,e,l,s){if(!(e=t){n=a.end.row;try{var d=this.addFold("...",a);d&&(d.collapseChildren=l)}catch(t){}}}}},this.$foldStyles={manual:1,markbegin:1,markbeginend:1},this.$foldStyle="markbegin",this.setFoldStyle=function(t){if(!this.$foldStyles[t])throw new Error("invalid fold style: "+t+"["+Object.keys(this.$foldStyles).join(", ")+"]");if(this.$foldStyle!=t){this.$foldStyle=t,"manual"==t&&this.unfold();var e=this.$foldMode;this.$setFolding(null),this.$setFolding(e)}},this.$setFolding=function(t){this.$foldMode!=t&&(this.$foldMode=t,this.off("change",this.$updateFoldWidgets),this.off("tokenizerUpdate",this.$tokenizerUpdateFoldWidgets),this._signal("changeAnnotation"),t&&"manual"!=this.$foldStyle?(this.foldWidgets=[],this.getFoldWidget=t.getFoldWidget.bind(t,this,this.$foldStyle),this.getFoldWidgetRange=t.getFoldWidgetRange.bind(t,this,this.$foldStyle),this.$updateFoldWidgets=this.updateFoldWidgets.bind(this),this.$tokenizerUpdateFoldWidgets=this.tokenizerUpdateFoldWidgets.bind(this),this.on("change",this.$updateFoldWidgets),this.on("tokenizerUpdate",this.$tokenizerUpdateFoldWidgets)):this.foldWidgets=null)},this.getParentFoldRangeData=function(t,e){var l=this.foldWidgets;if(!l||e&&l[t])return{};for(var i,n=t-1;n>=0;){var a=l[n];if(null==a&&(a=l[n]=this.getFoldWidget(n)),"start"==a){var d=this.getFoldWidgetRange(n);if(i||(i=d),d&&d.end.row>=t)break}n--}return{range:-1!==n&&d,firstRange:i}},this.onFoldWidgetClick=function(t,e){var l={children:(e=e.domEvent).shiftKey,all:e.ctrlKey||e.metaKey,siblings:e.altKey};if(!this.$toggleFoldWidget(t,l)){var i=e.target||e.srcElement;i&&/ace_fold-widget/.test(i.className)&&(i.className+=" ace_invalid")}},this.$toggleFoldWidget=function(t,e){if(this.getFoldWidget){var l=this.getFoldWidget(t),i=this.getLine(t),n="end"===l?-1:1,a=this.getFoldAt(t,-1===n?0:i.length,n);if(a)e.children||e.all?this.removeFold(a):this.expandFold(a);else{var d=this.getFoldWidgetRange(t,!0);if(!d||d.isMultiLine()||!(a=this.getFoldAt(d.start.row,d.start.column,1))||!d.isEqual(a.range)){if(e.siblings){var s=this.getParentFoldRangeData(t);if(s.range)var c=s.range.start.row+1,o=s.range.end.row;this.foldAll(c,o,e.all?1e4:0)}else e.children?(o=d?d.end.row:this.getLength(),this.foldAll(t+1,o,e.all?1e4:0)):d&&(e.all&&(d.collapseChildren=1e4),this.addFold("...",d));return d}this.removeFold(a)}}},this.toggleFoldWidget=function(t){var e=this.selection.getCursor().row;e=this.getRowFoldStart(e);var l=this.$toggleFoldWidget(e,{});if(!l){var i=this.getParentFoldRangeData(e,!0);if(l=i.range||i.firstRange){e=l.start.row;var n=this.getFoldAt(e,this.getLine(e).length,1);n?this.removeFold(n):this.addFold("...",l)}}},this.updateFoldWidgets=function(t){var e=t.start.row,l=t.end.row-e;if(0===l)this.foldWidgets[e]=null;else if("remove"==t.action)this.foldWidgets.splice(e,l+1,null);else{var i=Array(l+1);i.unshift(e,1),this.foldWidgets.splice.apply(this.foldWidgets,i)}},this.tokenizerUpdateFoldWidgets=function(t){var e=t.data;e.first!=e.last&&this.foldWidgets.length>e.first&&this.foldWidgets.splice(e.first,this.foldWidgets.length)}}})),ace.define("ace/edit_session/bracket_match",["require","exports","module","ace/token_iterator","ace/range"],(function(t,e,l){"use strict";var i=t("../token_iterator").TokenIterator,n=t("../range").Range;e.BracketMatch=function(){this.findMatchingBracket=function(t,e){if(0==t.column)return null;var l=e||this.getLine(t.row).charAt(t.column-1);if(""==l)return null;var i=l.match(/([\(\[\{])|([\)\]\}])/);return i?i[1]?this.$findClosingBracket(i[1],t):this.$findOpeningBracket(i[2],t):null},this.getBracketRange=function(t){var e,l=this.getLine(t.row),i=!0,a=l.charAt(t.column-1),d=a&&a.match(/([\(\[\{])|([\)\]\}])/);if(d||(a=l.charAt(t.column),t={row:t.row,column:t.column+1},d=a&&a.match(/([\(\[\{])|([\)\]\}])/),i=!1),!d)return null;if(d[1]){if(!(s=this.$findClosingBracket(d[1],t)))return null;e=n.fromPoints(t,s),i||(e.end.column++,e.start.column--),e.cursor=e.end}else{var s;if(!(s=this.$findOpeningBracket(d[2],t)))return null;e=n.fromPoints(s,t),i||(e.start.column++,e.end.column--),e.cursor=e.start}return e},this.$brackets={")":"(","(":")","]":"[","[":"]","{":"}","}":"{"},this.$findOpeningBracket=function(t,e,l){var n=this.$brackets[t],a=1,d=new i(this,e.row,e.column),s=d.getCurrentToken();if(s||(s=d.stepForward()),s){l||(l=new RegExp("(\\.?"+s.type.replace(".","\\.").replace("rparen",".paren").replace(/\b(?:end)\b/,"(?:start|begin|end)")+")+"));for(var c=e.column-d.getCurrentTokenColumn()-2,o=s.value;;){for(;c>=0;){var b=o.charAt(c);if(b==n){if(0==(a-=1))return{row:d.getCurrentTokenRow(),column:c+d.getCurrentTokenColumn()}}else b==t&&(a+=1);c-=1}do{s=d.stepBackward()}while(s&&!l.test(s.type));if(null==s)break;c=(o=s.value).length-1}return null}},this.$findClosingBracket=function(t,e,l){var n=this.$brackets[t],a=1,d=new i(this,e.row,e.column),s=d.getCurrentToken();if(s||(s=d.stepForward()),s){l||(l=new RegExp("(\\.?"+s.type.replace(".","\\.").replace("lparen",".paren").replace(/\b(?:start|begin)\b/,"(?:start|begin|end)")+")+"));for(var c=e.column-d.getCurrentTokenColumn();;){for(var o=s.value,b=o.length;cl&&(this.$docRowCache.splice(l,e),this.$screenRowCache.splice(l,e))},this.$getRowCacheIndex=function(t,e){for(var l=0,i=t.length-1;l<=i;){var n=l+i>>1,a=t[n];if(e>a)l=n+1;else{if(!(e=e);a++);return(l=i[a])?(l.index=a,l.start=n-l.value.length,l):null},this.setUndoManager=function(t){if(this.$undoManager=t,this.$deltas=[],this.$deltasDoc=[],this.$deltasFold=[],this.$informUndoManager&&this.$informUndoManager.cancel(),t){var e=this;this.$syncInformUndoManager=function(){e.$informUndoManager.cancel(),e.$deltasFold.length&&(e.$deltas.push({group:"fold",deltas:e.$deltasFold}),e.$deltasFold=[]),e.$deltasDoc.length&&(e.$deltas.push({group:"doc",deltas:e.$deltasDoc}),e.$deltasDoc=[]),e.$deltas.length>0&&t.execute({action:"aceupdate",args:[e.$deltas,e],merge:e.mergeUndoDeltas}),e.mergeUndoDeltas=!1,e.$deltas=[]},this.$informUndoManager=n.delayedCall(this.$syncInformUndoManager)}},this.markUndoGroup=function(){this.$syncInformUndoManager&&this.$syncInformUndoManager()},this.$defaultUndoManager={undo:function(){},redo:function(){},reset:function(){}},this.getUndoManager=function(){return this.$undoManager||this.$defaultUndoManager},this.getTabString=function(){return this.getUseSoftTabs()?n.stringRepeat(" ",this.getTabSize()):"\t"},this.setUseSoftTabs=function(t){this.setOption("useSoftTabs",t)},this.getUseSoftTabs=function(){return this.$useSoftTabs&&!this.$mode.$indentWithTabs},this.setTabSize=function(t){this.setOption("tabSize",t)},this.getTabSize=function(){return this.$tabSize},this.isTabStop=function(t){return this.$useSoftTabs&&t.column%this.$tabSize==0},this.$overwrite=!1,this.setOverwrite=function(t){this.setOption("overwrite",t)},this.getOverwrite=function(){return this.$overwrite},this.toggleOverwrite=function(){this.setOverwrite(!this.$overwrite)},this.addGutterDecoration=function(t,e){this.$decorations[t]||(this.$decorations[t]=""),this.$decorations[t]+=" "+e,this._signal("changeBreakpoint",{})},this.removeGutterDecoration=function(t,e){this.$decorations[t]=(this.$decorations[t]||"").replace(" "+e,""),this._signal("changeBreakpoint",{})},this.getBreakpoints=function(){return this.$breakpoints},this.setBreakpoints=function(t){this.$breakpoints=[];for(var e=0;e0&&(i=!!l.charAt(e-1).match(this.tokenRe)),i||(i=!!l.charAt(e).match(this.tokenRe)),i)var n=this.tokenRe;else n=/^\s+$/.test(l.slice(e-1,e+1))?/\s/:this.nonTokenRe;var a=e;if(a>0){do{a--}while(a>=0&&l.charAt(a).match(n));a++}for(var d=e;dt&&(t=e.screenWidth)})),this.lineWidgetWidth=t},this.$computeWidth=function(t){if(this.$modified||t){if(this.$modified=!1,this.$useWrapMode)return this.screenWidth=this.$wrapLimit;for(var e=this.doc.getAllLines(),l=this.$rowLengthCache,i=0,n=0,a=this.$foldData[n],d=a?a.start.row:1/0,s=e.length,c=0;cd){if((c=a.end.row+1)>=s)break;d=(a=this.$foldData[n++])?a.start.row:1/0}null==l[c]&&(l[c]=this.$getStringScreenWidth(e[c])[0]),l[c]>i&&(i=l[c])}this.screenWidth=i}},this.getLine=function(t){return this.doc.getLine(t)},this.getLines=function(t,e){return this.doc.getLines(t,e)},this.getLength=function(){return this.doc.getLength()},this.getTextRange=function(t){return this.doc.getTextRange(t||this.selection.getRange())},this.insert=function(t,e){return this.doc.insert(t,e)},this.remove=function(t){return this.doc.remove(t)},this.removeFullLines=function(t,e){return this.doc.removeFullLines(t,e)},this.undoChanges=function(t,e){if(t.length){this.$fromUndo=!0;for(var l=null,i=t.length-1;-1!=i;i--){var n=t[i];"doc"==n.group?(this.doc.revertDeltas(n.deltas),l=this.$getUndoSelection(n.deltas,!0,l)):n.deltas.forEach((function(t){this.addFolds(t.folds)}),this)}return this.$fromUndo=!1,l&&this.$undoSelect&&!e&&this.selection.setSelectionRange(l),l}},this.redoChanges=function(t,e){if(t.length){this.$fromUndo=!0;for(var l=null,i=0;it.end.column&&(a.start.column+=b),a.end.row==t.end.row&&a.end.column>t.end.column&&(a.end.column+=b)),d&&a.start.row>=t.end.row&&(a.start.row+=d,a.end.row+=d)}if(a.end=this.insert(a.start,i),n.length){var s=t.start,c=a.start,b=(d=c.row-s.row,c.column-s.column);this.addFolds(n.map((function(t){return(t=t.clone()).start.row==s.row&&(t.start.column+=b),t.end.row==s.row&&(t.end.column+=b),t.start.row+=d,t.end.row+=d,t})))}return a},this.indentRows=function(t,e,l){l=l.replace(/\t/g,this.getTabString());for(var i=t;i<=e;i++)this.doc.insertInLine({row:i,column:0},l)},this.outdentRows=function(t){for(var e=t.collapseRows(),l=new o(0,0,0,0),i=this.getTabSize(),n=e.start.row;n<=e.end.row;++n){var a=this.getLine(n);l.start.row=n,l.end.row=n;for(var d=0;d0){var n;if((n=this.getRowFoldEnd(e+l))>this.doc.getLength()-1)return 0;i=n-e}else t=this.$clipRowToDocument(t),i=(e=this.$clipRowToDocument(e))-t+1;var a=new o(t,0,e,Number.MAX_VALUE),d=this.getFoldsInRange(a).map((function(t){return(t=t.clone()).start.row+=i,t.end.row+=i,t})),s=0==l?this.doc.getLines(t,e):this.doc.removeFullLines(t,e);return this.doc.insertFullLines(t+i,s),d.length&&this.addFolds(d),i},this.moveLinesUp=function(t,e){return this.$moveLines(t,e,-1)},this.moveLinesDown=function(t,e){return this.$moveLines(t,e,1)},this.duplicateLines=function(t,e){return this.$moveLines(t,e,0)},this.$clipRowToDocument=function(t){return Math.max(0,Math.min(t,this.doc.getLength()-1))},this.$clipColumnToRow=function(t,e){return e<0?0:Math.min(this.doc.getLine(t).length,e)},this.$clipPositionToDocument=function(t,e){if(e=Math.max(0,e),t<0)t=0,e=0;else{var l=this.doc.getLength();t>=l?(t=l-1,e=this.doc.getLine(l-1).length):e=Math.min(this.doc.getLine(t).length,e)}return{row:t,column:e}},this.$clipRangeToDocument=function(t){t.start.row<0?(t.start.row=0,t.start.column=0):t.start.column=this.$clipColumnToRow(t.start.row,t.start.column);var e=this.doc.getLength()-1;return t.end.row>e?(t.end.row=e,t.end.column=this.doc.getLine(e).length):t.end.column=this.$clipColumnToRow(t.end.row,t.end.column),t},this.$wrapLimit=80,this.$useWrapMode=!1,this.$wrapLimitRange={min:null,max:null},this.setUseWrapMode=function(t){if(t!=this.$useWrapMode){if(this.$useWrapMode=t,this.$modified=!0,this.$resetRowCache(0),t){var e=this.getLength();this.$wrapData=Array(e),this.$updateWrapData(0,e-1)}this._signal("changeWrapMode")}},this.getUseWrapMode=function(){return this.$useWrapMode},this.setWrapLimitRange=function(t,e){this.$wrapLimitRange.min===t&&this.$wrapLimitRange.max===e||(this.$wrapLimitRange={min:t,max:e},this.$modified=!0,this.$useWrapMode&&this._signal("changeWrapMode"))},this.adjustWrapLimit=function(t,e){var l=this.$wrapLimitRange;l.max<0&&(l={min:e,max:e});var i=this.$constrainWrapLimit(t,l.min,l.max);return i!=this.$wrapLimit&&i>1&&(this.$wrapLimit=i,this.$modified=!0,this.$useWrapMode&&(this.$updateWrapData(0,this.getLength()-1),this.$resetRowCache(0),this._signal("changeWrapLimit")),!0)},this.$constrainWrapLimit=function(t,e,l){return e&&(t=Math.max(e,t)),l&&(t=Math.min(l,t)),t},this.getWrapLimit=function(){return this.$wrapLimit},this.setWrapLimit=function(t){this.setWrapLimitRange(t,t)},this.getWrapLimitRange=function(){return{min:this.$wrapLimitRange.min,max:this.$wrapLimitRange.max}},this.$updateInternalDataOnChange=function(t){var e=this.$useWrapMode,l=t.action,i=t.start,n=t.end,a=i.row,d=n.row,s=d-a,c=null;if(this.$updating=!0,0!=s)if("remove"===l){this[e?"$wrapData":"$rowLengthCache"].splice(a,s);var o=this.$foldData;c=this.getFoldsInRange(t),this.removeFolds(c);var b=0;if(W=this.getFoldLine(n.row)){W.addRemoveChars(n.row,n.column,i.column-n.column),W.shiftRow(-s);var r=this.getFoldLine(a);r&&r!==W&&(r.merge(W),W=r),b=o.indexOf(W)+1}for(;b=n.row&&W.shiftRow(-s);d=a}else{var m=Array(s);m.unshift(a,0);var Z=e?this.$wrapData:this.$rowLengthCache;if(Z.splice.apply(Z,m),o=this.$foldData,b=0,W=this.getFoldLine(a)){var g=W.range.compareInside(i.row,i.column);0==g?(W=W.split(i.row,i.column))&&(W.shiftRow(s),W.addRemoveChars(d,0,n.column-i.column)):-1==g&&(W.addRemoveChars(a,0,n.column-i.column),W.shiftRow(s)),b=o.indexOf(W)+1}for(;b=a&&W.shiftRow(s)}}else s=Math.abs(t.start.column-t.end.column),"remove"===l&&(c=this.getFoldsInRange(t),this.removeFolds(c),s=-s),(W=this.getFoldLine(a))&&W.addRemoveChars(a,i.column,s);return e&&this.$wrapData.length!=this.doc.getLength()&&console.error("doc.getLength() and $wrapData.length have to be the same!"),this.$updating=!1,e?this.$updateWrapData(a,d):this.$updateRowLengthCache(a,d),c},this.$updateRowLengthCache=function(t,e,l){this.$rowLengthCache[t]=null,this.$rowLengthCache[e]=null},this.$updateWrapData=function(l,i){var n,a,d=this.doc.getAllLines(),s=this.getTabSize(),c=this.$wrapData,o=this.$wrapLimit,b=l;for(i=Math.min(i,d.length-1);b<=i;)(a=this.getFoldLine(b,a))?(n=[],a.walk(function(l,i,a,s){var c;if(null!=l){(c=this.$getDisplayTokens(l,n.length))[0]=t;for(var o=1;o=4352&&t<=4447||t>=4515&&t<=4519||t>=4602&&t<=4607||t>=9001&&t<=9002||t>=11904&&t<=11929||t>=11931&&t<=12019||t>=12032&&t<=12245||t>=12272&&t<=12283||t>=12288&&t<=12350||t>=12353&&t<=12438||t>=12441&&t<=12543||t>=12549&&t<=12589||t>=12593&&t<=12686||t>=12688&&t<=12730||t>=12736&&t<=12771||t>=12784&&t<=12830||t>=12832&&t<=12871||t>=12880&&t<=13054||t>=13056&&t<=19903||t>=19968&&t<=42124||t>=42128&&t<=42182||t>=43360&&t<=43388||t>=44032&&t<=55203||t>=55216&&t<=55238||t>=55243&&t<=55291||t>=63744&&t<=64255||t>=65040&&t<=65049||t>=65072&&t<=65106||t>=65108&&t<=65126||t>=65128&&t<=65131||t>=65281&&t<=65376||t>=65504&&t<=65510)}this.$computeWrapSplits=function(l,i,n){if(0==l.length)return[];var a=[],d=l.length,s=0,c=0,o=this.$wrapAsCode,b=this.$indentedSoftWrap,r=i<=Math.max(2*n,8)||!1===b?0:Math.floor(i/2);function m(t){var e=l.slice(s,t),i=e.length;e.join("").replace(/12/g,(function(){i-=1})).replace(/2/g,(function(){i-=1})),a.length||(Z=function(){var t=0;if(0===r)return t;if(b)for(var e=0;ei-Z;){var g=s+i-Z;if(l[g-1]>=10&&l[g]>=10)m(g);else if(l[g]!=t&&l[g]!=e){for(var W=Math.max(g-(i-(i>>2)),s-1);g>W&&l[g]W&&l[g]W&&9==l[g];)g--}else for(;g>W&&l[g]<10;)g--;g>W?m(++g):(2==l[g=s+i]&&g--,m(g-Z))}else{for(;g!=s-1&&l[g]!=t;g--);if(g>s){m(g);continue}for(g=s+i;g39&&d<48||d>57&&d<64?n.push(9):d>=4352&&l(d)?n.push(1,2):n.push(1)}return n},this.$getStringScreenWidth=function(t,e,i){if(0==e)return[0,0];var n,a;for(null==e&&(e=1/0),i=i||0,a=0;a=4352&&l(n)?i+=2:i+=1,!(i>e));a++);return[i,a]},this.lineWidgets=null,this.getRowLength=function(t){if(this.lineWidgets)var e=this.lineWidgets[t]&&this.lineWidgets[t].rowCount||0;else e=0;return this.$useWrapMode&&this.$wrapData[t]?this.$wrapData[t].length+1+e:1+e},this.getRowLineCount=function(t){return this.$useWrapMode&&this.$wrapData[t]?this.$wrapData[t].length+1:1},this.getRowWrapIndent=function(t){if(this.$useWrapMode){var e=this.screenToDocumentPosition(t,Number.MAX_VALUE),l=this.$wrapData[e.row];return l.length&&l[0]=0){d=c[o],n=this.$docRowCache[o];var r=t>c[b-1]}else r=!b;for(var m=this.getLength()-1,Z=this.getNextFoldLine(n),g=Z?Z.start.row:1/0;d<=t&&!(d+(s=this.getRowLength(n))>t||n>=m);)d+=s,++n>g&&(n=Z.end.row+1,g=(Z=this.getNextFoldLine(n,Z))?Z.start.row:1/0),r&&(this.$docRowCache.push(n),this.$screenRowCache.push(d));if(Z&&Z.start.row<=n)l=this.getFoldDisplayLine(Z),n=Z.start.row;else{if(d+s<=t||n>m)return{row:m,column:this.getLine(m).length};l=this.getLine(n),Z=null}var W=0;if(this.$useWrapMode){var h=this.$wrapData[n];if(h){var N=Math.floor(t-d);i=h[N],N>0&&h.length&&(W=h.indent,a=h[N-1]||h[h.length-1],l=l.substring(a))}}return a+=this.$getStringScreenWidth(l,e-W)[1],this.$useWrapMode&&a>=i&&(a=i-1),Z?Z.idxToPosition(a):{row:n,column:a}},this.documentToScreenPosition=function(t,e){if(void 0===e)var l=this.$clipPositionToDocument(t.row,t.column);else l=this.$clipPositionToDocument(t,e);t=l.row,e=l.column;var i,n=0,a=null;(i=this.getFoldAt(t,e,1))&&(t=i.start.row,e=i.start.column);var d,s=0,c=this.$docRowCache,o=this.$getRowCacheIndex(c,t),b=c.length;if(b&&o>=0){s=c[o],n=this.$screenRowCache[o];var r=t>c[b-1]}else r=!b;for(var m=this.getNextFoldLine(s),Z=m?m.start.row:1/0;s=Z){if((d=m.end.row+1)>t)break;Z=(m=this.getNextFoldLine(d,m))?m.start.row:1/0}else d=s+1;n+=this.getRowLength(s),s=d,r&&(this.$docRowCache.push(s),this.$screenRowCache.push(n))}var g="";m&&s>=Z?(g=this.getFoldDisplayLine(m,t,e),a=m.start.row):(g=this.getLine(t).substring(0,e),a=t);var W=0;if(this.$useWrapMode){var h=this.$wrapData[a];if(h){for(var N=0;g.length>=h[N];)n++,N++;g=g.substring(h[N-1]||0,g.length),W=N>0?h.indent:0}}return{row:n,column:W+this.$getStringScreenWidth(g)[0]}},this.documentToScreenColumn=function(t,e){return this.documentToScreenPosition(t,e).column},this.documentToScreenRow=function(t,e){return this.documentToScreenPosition(t,e).row},this.getScreenLength=function(){var t=0,e=null;if(this.$useWrapMode)for(var l=this.$wrapData.length,i=0,n=(s=0,(e=this.$foldData[s++])?e.start.row:1/0);in&&(i=e.end.row+1,n=(e=this.$foldData[s++])?e.start.row:1/0)}else{t=this.getLength();for(var d=this.$foldData,s=0;sl);a++);return[i,a]})},this.destroy=function(){this.bgTokenizer&&(this.bgTokenizer.setDocument(null),this.bgTokenizer=null),this.$stopWorker()}}).call(Z.prototype),t("./edit_session/folding").Folding.call(Z.prototype),t("./edit_session/bracket_match").BracketMatch.call(Z.prototype),a.defineOptions(Z.prototype,"session",{wrap:{set:function(t){if(t&&"off"!=t?"free"==t?t=!0:"printMargin"==t?t=-1:"string"==typeof t&&(t=parseInt(t,10)||!1):t=!1,this.$wrap!=t)if(this.$wrap=t,t){var e="number"==typeof t?t:null;this.setWrapLimitRange(e,e),this.setUseWrapMode(!0)}else this.setUseWrapMode(!1)},get:function(){return this.getUseWrapMode()?-1==this.$wrap?"printMargin":this.getWrapLimitRange().min?this.$wrap:"free":"off"},handlesSet:!0},wrapMethod:{set:function(t){(t="auto"==t?"text"!=this.$mode.type:"text"!=t)!=this.$wrapAsCode&&(this.$wrapAsCode=t,this.$useWrapMode&&(this.$modified=!0,this.$resetRowCache(0),this.$updateWrapData(0,this.getLength()-1)))},initialValue:"auto"},indentedSoftWrap:{initialValue:!0},firstLineNumber:{set:function(){this._signal("changeBreakpoint")},initialValue:1},useWorker:{set:function(t){this.$useWorker=t,this.$stopWorker(),t&&this.$startWorker()},initialValue:!0},useSoftTabs:{initialValue:!0},tabSize:{set:function(t){isNaN(t)||this.$tabSize===t||(this.$modified=!0,this.$rowLengthCache=[],this.$tabSize=t,this._signal("changeTabSize"))},initialValue:4,handlesSet:!0},overwrite:{set:function(t){this._signal("changeOverwrite")},initialValue:!1},newLineMode:{set:function(t){this.doc.setNewLineMode(t)},get:function(){return this.doc.getNewLineMode()},handlesSet:!0},mode:{set:function(t){this.setMode(t)},get:function(){return this.$modeId}}}),e.EditSession=Z})),ace.define("ace/search",["require","exports","module","ace/lib/lang","ace/lib/oop","ace/range"],(function(t,e,l){"use strict";var i=t("./lib/lang"),n=t("./lib/oop"),a=t("./range").Range,d=function(){this.$options={}};(function(){this.set=function(t){return n.mixin(this.$options,t),this},this.getOptions=function(){return i.copyObject(this.$options)},this.setOptions=function(t){this.$options=t},this.find=function(t){var e=this.$options,l=this.$matchIterator(t,e);if(!l)return!1;var i=null;return l.forEach((function(t,l,n){if(t.start)i=t;else{var d=t.offset+(n||0);if(i=new a(l,d,l,d+t.length),!t.length&&e.start&&e.start.start&&0!=e.skipCurrent&&i.isEqual(e.start))return i=null,!1}return!0})),i},this.findAll=function(t){var e=this.$options;if(!e.needle)return[];this.$assembleRegExp(e);var l=e.range,n=l?t.getLines(l.start.row,l.end.row):t.doc.getAllLines(),d=[],s=e.re;if(e.$isMultiLine){var c,o=s.length,b=n.length-o;t:for(var r=s.offset||0;r<=b;r++){for(var m=0;mW||(d.push(c=new a(r,W,r+o-1,h)),o>2&&(r=r+o-2))}}else for(var N=0;NM&&d[m].end.row==l.end.row;)m--;for(d=d.slice(N,m+1),N=0,m=d.length;N=0;s--)if(l(d[s],e,a))return!0}:function(t,e,a){for(var d=i.getMatchOffsets(t,n),s=0;s=d;i--)if(l(t.getLine(i),i))return;if(0!=e.wrap)for(i=s,d=a.row;i>=d;i--)if(l(t.getLine(i),i))return}}:function(l){var i=a.row;if(!l(t.getLine(i).substr(a.column),i,a.column)){for(i+=1;i<=s;i++)if(l(t.getLine(i),i))return;if(0!=e.wrap)for(i=d,s=a.row;i<=s;i++)if(l(t.getLine(i),i))return}}}}}).call(d.prototype),e.Search=d})),ace.define("ace/keyboard/hash_handler",["require","exports","module","ace/lib/keys","ace/lib/useragent"],(function(t,e,l){"use strict";var i=t("../lib/keys"),n=t("../lib/useragent"),a=i.KEY_MODS;function d(t,e){this.platform=e||(n.isMac?"mac":"win"),this.commands={},this.commandKeyBinding={},this.addCommands(t),this.$singleCommand=!0}function s(t,e){d.call(this,t,e),this.$singleCommand=!1}s.prototype=d.prototype,function(){function t(t){return"object"==typeof t&&t.bindKey&&t.bindKey.position||0}this.addCommand=function(t){this.commands[t.name]&&this.removeCommand(t),this.commands[t.name]=t,t.bindKey&&this._buildKeyHash(t)},this.removeCommand=function(t,e){var l=t&&("string"==typeof t?t:t.name);t=this.commands[l],e||delete this.commands[l];var i=this.commandKeyBinding;for(var n in i){var a=i[n];if(a==t)delete i[n];else if(Array.isArray(a)){var d=a.indexOf(t);-1!=d&&(a.splice(d,1),1==a.length&&(i[n]=a[0]))}}},this.bindKey=function(t,e,l){if("object"==typeof t&&t&&(null==l&&(l=t.position),t=t[this.platform]),t)return"function"==typeof e?this.addCommand({exec:e,bindKey:t,name:e.name||t}):void t.split("|").forEach((function(t){var i="";if(-1!=t.indexOf(" ")){var n=t.split(/\s+/);t=n.pop(),n.forEach((function(t){var e=this.parseKeys(t),l=a[e.hashId]+e.key;i+=(i?" ":"")+l,this._addCommandToBinding(i,"chainKeys")}),this),i+=" "}var d=this.parseKeys(t),s=a[d.hashId]+d.key;this._addCommandToBinding(i+s,e,l)}),this)},this._addCommandToBinding=function(e,l,i){var n,a=this.commandKeyBinding;if(l)if(!a[e]||this.$singleCommand)a[e]=l;else{Array.isArray(a[e])?-1!=(n=a[e].indexOf(l))&&a[e].splice(n,1):a[e]=[a[e]],"number"!=typeof i&&(i=i||l.isDefault?-100:t(l));var d=a[e];for(n=0;ni);n++);d.splice(n,0,l)}else delete a[e]},this.addCommands=function(t){t&&Object.keys(t).forEach((function(e){var l=t[e];if(l){if("string"==typeof l)return this.bindKey(l,e);"function"==typeof l&&(l={exec:l}),"object"==typeof l&&(l.name||(l.name=e),this.addCommand(l))}}),this)},this.removeCommands=function(t){Object.keys(t).forEach((function(e){this.removeCommand(t[e])}),this)},this.bindKeys=function(t){Object.keys(t).forEach((function(e){this.bindKey(e,t[e])}),this)},this._buildKeyHash=function(t){this.bindKey(t.bindKey,t)},this.parseKeys=function(t){var e=t.toLowerCase().split(/[\-\+]([\-\+])?/).filter((function(t){return t})),l=e.pop(),n=i[l];if(i.FUNCTION_KEYS[n])l=i.FUNCTION_KEYS[n].toLowerCase();else{if(!e.length)return{key:l,hashId:-1};if(1==e.length&&"shift"==e[0])return{key:l.toUpperCase(),hashId:-1}}for(var a=0,d=e.length;d--;){var s=i.KEY_MODS[e[d]];if(null==s)return"undefined"!=typeof console&&console.error("invalid modifier "+e[d]+" in "+t),!1;a|=s}return{key:l,hashId:a}},this.findKeyCommand=function(t,e){var l=a[t]+e;return this.commandKeyBinding[l]},this.handleKeyboard=function(t,e,l,i){if(!(i<0)){var n=a[e]+l,d=this.commandKeyBinding[n];return t.$keyChain&&(t.$keyChain+=" "+n,d=this.commandKeyBinding[t.$keyChain]||d),!d||"chainKeys"!=d&&"chainKeys"!=d[d.length-1]?(t.$keyChain&&(e&&4!=e||1!=l.length?(-1==e||i>0)&&(t.$keyChain=""):t.$keyChain=t.$keyChain.slice(0,-n.length-1)),{command:d}):(t.$keyChain=t.$keyChain||n,{command:"null"})}},this.getStatusText=function(t,e){return e.$keyChain||""}}.call(d.prototype),e.HashHandler=d,e.MultiHashHandler=s})),ace.define("ace/commands/command_manager",["require","exports","module","ace/lib/oop","ace/keyboard/hash_handler","ace/lib/event_emitter"],(function(t,e,l){"use strict";var i=t("../lib/oop"),n=t("../keyboard/hash_handler").MultiHashHandler,a=t("../lib/event_emitter").EventEmitter,d=function(t,e){n.call(this,e,t),this.byName=this.commands,this.setDefaultHandler("exec",(function(t){return t.command.exec(t.editor,t.args||{})}))};i.inherits(d,n),function(){i.implement(this,a),this.exec=function(t,e,l){if(Array.isArray(t)){for(var i=t.length;i--;)if(this.exec(t[i],e,l))return!0;return!1}if("string"==typeof t&&(t=this.commands[t]),!t)return!1;if(e&&e.$readOnly&&!t.readOnly)return!1;var n={editor:e,command:t,args:l};return n.returnValue=this._emit("exec",n),this._signal("afterExec",n),!1!==n.returnValue},this.toggleRecording=function(t){if(!this.$inReplay)return t&&t._emit("changeStatus"),this.recording?(this.macro.pop(),this.removeEventListener("exec",this.$addCommandToMacro),this.macro.length||(this.macro=this.oldMacro),this.recording=!1):(this.$addCommandToMacro||(this.$addCommandToMacro=function(t){this.macro.push([t.command,t.args])}.bind(this)),this.oldMacro=this.macro,this.macro=[],this.on("exec",this.$addCommandToMacro),this.recording=!0)},this.replay=function(t){if(!this.$inReplay&&this.macro){if(this.recording)return this.toggleRecording(t);try{this.$inReplay=!0,this.macro.forEach((function(e){"string"==typeof e?this.exec(e,t):this.exec(e[0],t,e[1])}),this)}finally{this.$inReplay=!1}}},this.trimMacro=function(t){return t.map((function(t){return"string"!=typeof t[0]&&(t[0]=t[0].name),t[1]||(t=t[0]),t}))}}.call(d.prototype),e.CommandManager=d})),ace.define("ace/commands/default_commands",["require","exports","module","ace/lib/lang","ace/config","ace/range"],(function(t,e,l){"use strict";var i=t("../lib/lang"),n=t("../config"),a=t("../range").Range;function d(t,e){return{win:t,mac:e}}e.commands=[{name:"showSettingsMenu",bindKey:d("Ctrl-,","Command-,"),exec:function(t){n.loadModule("ace/ext/settings_menu",(function(e){e.init(t),t.showSettingsMenu()}))},readOnly:!0},{name:"goToNextError",bindKey:d("Alt-E","Ctrl-E"),exec:function(t){n.loadModule("ace/ext/error_marker",(function(e){e.showErrorMarker(t,1)}))},scrollIntoView:"animate",readOnly:!0},{name:"goToPreviousError",bindKey:d("Alt-Shift-E","Ctrl-Shift-E"),exec:function(t){n.loadModule("ace/ext/error_marker",(function(e){e.showErrorMarker(t,-1)}))},scrollIntoView:"animate",readOnly:!0},{name:"selectall",bindKey:d("Ctrl-A","Command-A"),exec:function(t){t.selectAll()},readOnly:!0},{name:"centerselection",bindKey:d(null,"Ctrl-L"),exec:function(t){t.centerSelection()},readOnly:!0},{name:"gotoline",bindKey:d("Ctrl-L","Command-L"),exec:function(t){var e=parseInt(prompt("Enter line number:"),10);isNaN(e)||t.gotoLine(e)},readOnly:!0},{name:"fold",bindKey:d("Alt-L|Ctrl-F1","Command-Alt-L|Command-F1"),exec:function(t){t.session.toggleFold(!1)},multiSelectAction:"forEach",scrollIntoView:"center",readOnly:!0},{name:"unfold",bindKey:d("Alt-Shift-L|Ctrl-Shift-F1","Command-Alt-Shift-L|Command-Shift-F1"),exec:function(t){t.session.toggleFold(!0)},multiSelectAction:"forEach",scrollIntoView:"center",readOnly:!0},{name:"toggleFoldWidget",bindKey:d("F2","F2"),exec:function(t){t.session.toggleFoldWidget()},multiSelectAction:"forEach",scrollIntoView:"center",readOnly:!0},{name:"toggleParentFoldWidget",bindKey:d("Alt-F2","Alt-F2"),exec:function(t){t.session.toggleFoldWidget(!0)},multiSelectAction:"forEach",scrollIntoView:"center",readOnly:!0},{name:"foldall",bindKey:d(null,"Ctrl-Command-Option-0"),exec:function(t){t.session.foldAll()},scrollIntoView:"center",readOnly:!0},{name:"foldOther",bindKey:d("Alt-0","Command-Option-0"),exec:function(t){t.session.foldAll(),t.session.unfold(t.selection.getAllRanges())},scrollIntoView:"center",readOnly:!0},{name:"unfoldall",bindKey:d("Alt-Shift-0","Command-Option-Shift-0"),exec:function(t){t.session.unfold()},scrollIntoView:"center",readOnly:!0},{name:"findnext",bindKey:d("Ctrl-K","Command-G"),exec:function(t){t.findNext()},multiSelectAction:"forEach",scrollIntoView:"center",readOnly:!0},{name:"findprevious",bindKey:d("Ctrl-Shift-K","Command-Shift-G"),exec:function(t){t.findPrevious()},multiSelectAction:"forEach",scrollIntoView:"center",readOnly:!0},{name:"selectOrFindNext",bindKey:d("Alt-K","Ctrl-G"),exec:function(t){t.selection.isEmpty()?t.selection.selectWord():t.findNext()},readOnly:!0},{name:"selectOrFindPrevious",bindKey:d("Alt-Shift-K","Ctrl-Shift-G"),exec:function(t){t.selection.isEmpty()?t.selection.selectWord():t.findPrevious()},readOnly:!0},{name:"find",bindKey:d("Ctrl-F","Command-F"),exec:function(t){n.loadModule("ace/ext/searchbox",(function(e){e.Search(t)}))},readOnly:!0},{name:"overwrite",bindKey:"Insert",exec:function(t){t.toggleOverwrite()},readOnly:!0},{name:"selecttostart",bindKey:d("Ctrl-Shift-Home","Command-Shift-Up"),exec:function(t){t.getSelection().selectFileStart()},multiSelectAction:"forEach",readOnly:!0,scrollIntoView:"animate",aceCommandGroup:"fileJump"},{name:"gotostart",bindKey:d("Ctrl-Home","Command-Home|Command-Up"),exec:function(t){t.navigateFileStart()},multiSelectAction:"forEach",readOnly:!0,scrollIntoView:"animate",aceCommandGroup:"fileJump"},{name:"selectup",bindKey:d("Shift-Up","Shift-Up"),exec:function(t){t.getSelection().selectUp()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"golineup",bindKey:d("Up","Up|Ctrl-P"),exec:function(t,e){t.navigateUp(e.times)},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"selecttoend",bindKey:d("Ctrl-Shift-End","Command-Shift-Down"),exec:function(t){t.getSelection().selectFileEnd()},multiSelectAction:"forEach",readOnly:!0,scrollIntoView:"animate",aceCommandGroup:"fileJump"},{name:"gotoend",bindKey:d("Ctrl-End","Command-End|Command-Down"),exec:function(t){t.navigateFileEnd()},multiSelectAction:"forEach",readOnly:!0,scrollIntoView:"animate",aceCommandGroup:"fileJump"},{name:"selectdown",bindKey:d("Shift-Down","Shift-Down"),exec:function(t){t.getSelection().selectDown()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"golinedown",bindKey:d("Down","Down|Ctrl-N"),exec:function(t,e){t.navigateDown(e.times)},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"selectwordleft",bindKey:d("Ctrl-Shift-Left","Option-Shift-Left"),exec:function(t){t.getSelection().selectWordLeft()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"gotowordleft",bindKey:d("Ctrl-Left","Option-Left"),exec:function(t){t.navigateWordLeft()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"selecttolinestart",bindKey:d("Alt-Shift-Left","Command-Shift-Left"),exec:function(t){t.getSelection().selectLineStart()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"gotolinestart",bindKey:d("Alt-Left|Home","Command-Left|Home|Ctrl-A"),exec:function(t){t.navigateLineStart()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"selectleft",bindKey:d("Shift-Left","Shift-Left"),exec:function(t){t.getSelection().selectLeft()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"gotoleft",bindKey:d("Left","Left|Ctrl-B"),exec:function(t,e){t.navigateLeft(e.times)},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"selectwordright",bindKey:d("Ctrl-Shift-Right","Option-Shift-Right"),exec:function(t){t.getSelection().selectWordRight()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"gotowordright",bindKey:d("Ctrl-Right","Option-Right"),exec:function(t){t.navigateWordRight()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"selecttolineend",bindKey:d("Alt-Shift-Right","Command-Shift-Right"),exec:function(t){t.getSelection().selectLineEnd()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"gotolineend",bindKey:d("Alt-Right|End","Command-Right|End|Ctrl-E"),exec:function(t){t.navigateLineEnd()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"selectright",bindKey:d("Shift-Right","Shift-Right"),exec:function(t){t.getSelection().selectRight()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"gotoright",bindKey:d("Right","Right|Ctrl-F"),exec:function(t,e){t.navigateRight(e.times)},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"selectpagedown",bindKey:"Shift-PageDown",exec:function(t){t.selectPageDown()},readOnly:!0},{name:"pagedown",bindKey:d(null,"Option-PageDown"),exec:function(t){t.scrollPageDown()},readOnly:!0},{name:"gotopagedown",bindKey:d("PageDown","PageDown|Ctrl-V"),exec:function(t){t.gotoPageDown()},readOnly:!0},{name:"selectpageup",bindKey:"Shift-PageUp",exec:function(t){t.selectPageUp()},readOnly:!0},{name:"pageup",bindKey:d(null,"Option-PageUp"),exec:function(t){t.scrollPageUp()},readOnly:!0},{name:"gotopageup",bindKey:"PageUp",exec:function(t){t.gotoPageUp()},readOnly:!0},{name:"scrollup",bindKey:d("Ctrl-Up",null),exec:function(t){t.renderer.scrollBy(0,-2*t.renderer.layerConfig.lineHeight)},readOnly:!0},{name:"scrolldown",bindKey:d("Ctrl-Down",null),exec:function(t){t.renderer.scrollBy(0,2*t.renderer.layerConfig.lineHeight)},readOnly:!0},{name:"selectlinestart",bindKey:"Shift-Home",exec:function(t){t.getSelection().selectLineStart()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"selectlineend",bindKey:"Shift-End",exec:function(t){t.getSelection().selectLineEnd()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"togglerecording",bindKey:d("Ctrl-Alt-E","Command-Option-E"),exec:function(t){t.commands.toggleRecording(t)},readOnly:!0},{name:"replaymacro",bindKey:d("Ctrl-Shift-E","Command-Shift-E"),exec:function(t){t.commands.replay(t)},readOnly:!0},{name:"jumptomatching",bindKey:d("Ctrl-P","Ctrl-P"),exec:function(t){t.jumpToMatching()},multiSelectAction:"forEach",scrollIntoView:"animate",readOnly:!0},{name:"selecttomatching",bindKey:d("Ctrl-Shift-P","Ctrl-Shift-P"),exec:function(t){t.jumpToMatching(!0)},multiSelectAction:"forEach",scrollIntoView:"animate",readOnly:!0},{name:"expandToMatching",bindKey:d("Ctrl-Shift-M","Ctrl-Shift-M"),exec:function(t){t.jumpToMatching(!0,!0)},multiSelectAction:"forEach",scrollIntoView:"animate",readOnly:!0},{name:"passKeysToBrowser",bindKey:d(null,null),exec:function(){},passEvent:!0,readOnly:!0},{name:"copy",exec:function(t){},readOnly:!0},{name:"cut",exec:function(t){var e=t.getSelectionRange();t._emit("cut",e),t.selection.isEmpty()||(t.session.remove(e),t.clearSelection())},scrollIntoView:"cursor",multiSelectAction:"forEach"},{name:"paste",exec:function(t,e){t.$handlePaste(e)},scrollIntoView:"cursor"},{name:"removeline",bindKey:d("Ctrl-D","Command-D"),exec:function(t){t.removeLines()},scrollIntoView:"cursor",multiSelectAction:"forEachLine"},{name:"duplicateSelection",bindKey:d("Ctrl-Shift-D","Command-Shift-D"),exec:function(t){t.duplicateSelection()},scrollIntoView:"cursor",multiSelectAction:"forEach"},{name:"sortlines",bindKey:d("Ctrl-Alt-S","Command-Alt-S"),exec:function(t){t.sortLines()},scrollIntoView:"selection",multiSelectAction:"forEachLine"},{name:"togglecomment",bindKey:d("Ctrl-/","Command-/"),exec:function(t){t.toggleCommentLines()},multiSelectAction:"forEachLine",scrollIntoView:"selectionPart"},{name:"toggleBlockComment",bindKey:d("Ctrl-Shift-/","Command-Shift-/"),exec:function(t){t.toggleBlockComment()},multiSelectAction:"forEach",scrollIntoView:"selectionPart"},{name:"modifyNumberUp",bindKey:d("Ctrl-Shift-Up","Alt-Shift-Up"),exec:function(t){t.modifyNumber(1)},scrollIntoView:"cursor",multiSelectAction:"forEach"},{name:"modifyNumberDown",bindKey:d("Ctrl-Shift-Down","Alt-Shift-Down"),exec:function(t){t.modifyNumber(-1)},scrollIntoView:"cursor",multiSelectAction:"forEach"},{name:"replace",bindKey:d("Ctrl-H","Command-Option-F"),exec:function(t){n.loadModule("ace/ext/searchbox",(function(e){e.Search(t,!0)}))}},{name:"undo",bindKey:d("Ctrl-Z","Command-Z"),exec:function(t){t.undo()}},{name:"redo",bindKey:d("Ctrl-Shift-Z|Ctrl-Y","Command-Shift-Z|Command-Y"),exec:function(t){t.redo()}},{name:"copylinesup",bindKey:d("Alt-Shift-Up","Command-Option-Up"),exec:function(t){t.copyLinesUp()},scrollIntoView:"cursor"},{name:"movelinesup",bindKey:d("Alt-Up","Option-Up"),exec:function(t){t.moveLinesUp()},scrollIntoView:"cursor"},{name:"copylinesdown",bindKey:d("Alt-Shift-Down","Command-Option-Down"),exec:function(t){t.copyLinesDown()},scrollIntoView:"cursor"},{name:"movelinesdown",bindKey:d("Alt-Down","Option-Down"),exec:function(t){t.moveLinesDown()},scrollIntoView:"cursor"},{name:"del",bindKey:d("Delete","Delete|Ctrl-D|Shift-Delete"),exec:function(t){t.remove("right")},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"backspace",bindKey:d("Shift-Backspace|Backspace","Ctrl-Backspace|Shift-Backspace|Backspace|Ctrl-H"),exec:function(t){t.remove("left")},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"cut_or_delete",bindKey:d("Shift-Delete",null),exec:function(t){if(!t.selection.isEmpty())return!1;t.remove("left")},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"removetolinestart",bindKey:d("Alt-Backspace","Command-Backspace"),exec:function(t){t.removeToLineStart()},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"removetolineend",bindKey:d("Alt-Delete","Ctrl-K"),exec:function(t){t.removeToLineEnd()},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"removewordleft",bindKey:d("Ctrl-Backspace","Alt-Backspace|Ctrl-Alt-Backspace"),exec:function(t){t.removeWordLeft()},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"removewordright",bindKey:d("Ctrl-Delete","Alt-Delete"),exec:function(t){t.removeWordRight()},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"outdent",bindKey:d("Shift-Tab","Shift-Tab"),exec:function(t){t.blockOutdent()},multiSelectAction:"forEach",scrollIntoView:"selectionPart"},{name:"indent",bindKey:d("Tab","Tab"),exec:function(t){t.indent()},multiSelectAction:"forEach",scrollIntoView:"selectionPart"},{name:"blockoutdent",bindKey:d("Ctrl-[","Ctrl-["),exec:function(t){t.blockOutdent()},multiSelectAction:"forEachLine",scrollIntoView:"selectionPart"},{name:"blockindent",bindKey:d("Ctrl-]","Ctrl-]"),exec:function(t){t.blockIndent()},multiSelectAction:"forEachLine",scrollIntoView:"selectionPart"},{name:"insertstring",exec:function(t,e){t.insert(e)},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"inserttext",exec:function(t,e){t.insert(i.stringRepeat(e.text||"",e.times||1))},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"splitline",bindKey:d(null,"Ctrl-O"),exec:function(t){t.splitLine()},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"transposeletters",bindKey:d("Ctrl-T","Ctrl-T"),exec:function(t){t.transposeLetters()},multiSelectAction:function(t){t.transposeSelections(1)},scrollIntoView:"cursor"},{name:"touppercase",bindKey:d("Ctrl-U","Ctrl-U"),exec:function(t){t.toUpperCase()},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"tolowercase",bindKey:d("Ctrl-Shift-U","Ctrl-Shift-U"),exec:function(t){t.toLowerCase()},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"expandtoline",bindKey:d("Ctrl-Shift-L","Command-Shift-L"),exec:function(t){var e=t.selection.getRange();e.start.column=e.end.column=0,e.end.row++,t.selection.setRange(e,!1)},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"joinlines",bindKey:d(null,null),exec:function(t){for(var e=t.selection.isBackwards(),l=e?t.selection.getSelectionLead():t.selection.getSelectionAnchor(),n=e?t.selection.getSelectionAnchor():t.selection.getSelectionLead(),d=t.session.doc.getLine(l.row).length,s=t.session.doc.getTextRange(t.selection.getRange()).replace(/\n\s*/," ").length,c=t.session.doc.getLine(l.row),o=l.row+1;o<=n.row+1;o++){var b=i.stringTrimLeft(i.stringTrimRight(t.session.doc.getLine(o)));0!==b.length&&(b=" "+b),c+=b}n.row+10?(t.selection.moveCursorTo(l.row,l.column),t.selection.selectTo(l.row,l.column+s)):(d=t.session.doc.getLine(l.row).length>d?d+1:d,t.selection.moveCursorTo(l.row,d))},multiSelectAction:"forEach",readOnly:!0},{name:"invertSelection",bindKey:d(null,null),exec:function(t){var e=t.session.doc.getLength()-1,l=t.session.doc.getLine(e).length,i=t.selection.rangeList.ranges,n=[];i.length<1&&(i=[t.selection.getRange()]);for(var d=0;d0&&this.$blockScrolling--;var l=e&&e.scrollIntoView;if(l){switch(l){case"center-animate":l="animate";case"center":this.renderer.scrollCursorIntoView(null,.5);break;case"animate":case"cursor":this.renderer.scrollCursorIntoView();break;case"selectionPart":var i=this.selection.getRange(),n=this.renderer.layerConfig;(i.start.row>=n.lastRow||i.end.row<=n.firstRow)&&this.renderer.scrollSelectionIntoView(this.selection.anchor,this.selection.lead)}"animate"==l&&this.renderer.animateScrolling(this.curOp.scrollTop)}this.prevOp=this.curOp,this.curOp=null}},this.$mergeableCommands=["backspace","del","insertstring"],this.$historyTracker=function(t){if(this.$mergeUndoDeltas){var e=this.prevOp,l=this.$mergeableCommands,i=e.command&&t.command.name==e.command.name;if("insertstring"==t.command.name){var n=t.args;void 0===this.mergeNextCommand&&(this.mergeNextCommand=!0),i=i&&this.mergeNextCommand&&(!/\s/.test(n)||/\s/.test(e.args)),this.mergeNextCommand=!0}else i=i&&-1!==l.indexOf(t.command.name);"always"!=this.$mergeUndoDeltas&&Date.now()-this.sequenceStartTime>2e3&&(i=!1),i?this.session.mergeUndoDeltas=!0:-1!==l.indexOf(t.command.name)&&(this.sequenceStartTime=Date.now())}},this.setKeyboardHandler=function(t,e){if(t&&"string"==typeof t){this.$keybindingId=t;var l=this;N.loadModule(["keybinding",t],(function(i){l.$keybindingId==t&&l.keyBinding.setKeyboardHandler(i&&i.handler),e&&e()}))}else this.$keybindingId=null,this.keyBinding.setKeyboardHandler(t),e&&e()},this.getKeyboardHandler=function(){return this.keyBinding.getKeyboardHandler()},this.setSession=function(t){if(this.session!=t){this.curOp&&this.endOperation(),this.curOp={};var e=this.session;if(e){this.session.off("change",this.$onDocumentChange),this.session.off("changeMode",this.$onChangeMode),this.session.off("tokenizerUpdate",this.$onTokenizerUpdate),this.session.off("changeTabSize",this.$onChangeTabSize),this.session.off("changeWrapLimit",this.$onChangeWrapLimit),this.session.off("changeWrapMode",this.$onChangeWrapMode),this.session.off("changeFold",this.$onChangeFold),this.session.off("changeFrontMarker",this.$onChangeFrontMarker),this.session.off("changeBackMarker",this.$onChangeBackMarker),this.session.off("changeBreakpoint",this.$onChangeBreakpoint),this.session.off("changeAnnotation",this.$onChangeAnnotation),this.session.off("changeOverwrite",this.$onCursorChange),this.session.off("changeScrollTop",this.$onScrollTopChange),this.session.off("changeScrollLeft",this.$onScrollLeftChange);var l=this.session.getSelection();l.off("changeCursor",this.$onCursorChange),l.off("changeSelection",this.$onSelectionChange)}this.session=t,t?(this.$onDocumentChange=this.onDocumentChange.bind(this),t.on("change",this.$onDocumentChange),this.renderer.setSession(t),this.$onChangeMode=this.onChangeMode.bind(this),t.on("changeMode",this.$onChangeMode),this.$onTokenizerUpdate=this.onTokenizerUpdate.bind(this),t.on("tokenizerUpdate",this.$onTokenizerUpdate),this.$onChangeTabSize=this.renderer.onChangeTabSize.bind(this.renderer),t.on("changeTabSize",this.$onChangeTabSize),this.$onChangeWrapLimit=this.onChangeWrapLimit.bind(this),t.on("changeWrapLimit",this.$onChangeWrapLimit),this.$onChangeWrapMode=this.onChangeWrapMode.bind(this),t.on("changeWrapMode",this.$onChangeWrapMode),this.$onChangeFold=this.onChangeFold.bind(this),t.on("changeFold",this.$onChangeFold),this.$onChangeFrontMarker=this.onChangeFrontMarker.bind(this),this.session.on("changeFrontMarker",this.$onChangeFrontMarker),this.$onChangeBackMarker=this.onChangeBackMarker.bind(this),this.session.on("changeBackMarker",this.$onChangeBackMarker),this.$onChangeBreakpoint=this.onChangeBreakpoint.bind(this),this.session.on("changeBreakpoint",this.$onChangeBreakpoint),this.$onChangeAnnotation=this.onChangeAnnotation.bind(this),this.session.on("changeAnnotation",this.$onChangeAnnotation),this.$onCursorChange=this.onCursorChange.bind(this),this.session.on("changeOverwrite",this.$onCursorChange),this.$onScrollTopChange=this.onScrollTopChange.bind(this),this.session.on("changeScrollTop",this.$onScrollTopChange),this.$onScrollLeftChange=this.onScrollLeftChange.bind(this),this.session.on("changeScrollLeft",this.$onScrollLeftChange),this.selection=t.getSelection(),this.selection.on("changeCursor",this.$onCursorChange),this.$onSelectionChange=this.onSelectionChange.bind(this),this.selection.on("changeSelection",this.$onSelectionChange),this.onChangeMode(),this.$blockScrolling+=1,this.onCursorChange(),this.$blockScrolling-=1,this.onScrollTopChange(),this.onScrollLeftChange(),this.onSelectionChange(),this.onChangeFrontMarker(),this.onChangeBackMarker(),this.onChangeBreakpoint(),this.onChangeAnnotation(),this.session.getUseWrapMode()&&this.renderer.adjustWrapLimit(),this.renderer.updateFull()):(this.selection=null,this.renderer.setSession(t)),this._signal("changeSession",{session:t,oldSession:e}),this.curOp=null,e&&e._signal("changeEditor",{oldEditor:this}),t&&t._signal("changeEditor",{editor:this})}},this.getSession=function(){return this.session},this.setValue=function(t,e){return this.session.doc.setValue(t),e?1==e?this.navigateFileEnd():-1==e&&this.navigateFileStart():this.selectAll(),t},this.getValue=function(){return this.session.getValue()},this.getSelection=function(){return this.selection},this.resize=function(t){this.renderer.onResize(t)},this.setTheme=function(t,e){this.renderer.setTheme(t,e)},this.getTheme=function(){return this.renderer.getTheme()},this.setStyle=function(t){this.renderer.setStyle(t)},this.unsetStyle=function(t){this.renderer.unsetStyle(t)},this.getFontSize=function(){return this.getOption("fontSize")||n.computedStyle(this.container,"fontSize")},this.setFontSize=function(t){this.setOption("fontSize",t)},this.$highlightBrackets=function(){if(this.session.$bracketHighlight&&(this.session.removeMarker(this.session.$bracketHighlight),this.session.$bracketHighlight=null),!this.$highlightPending){var t=this;this.$highlightPending=!0,setTimeout((function(){t.$highlightPending=!1;var e=t.session;if(e&&e.bgTokenizer){var l=e.findMatchingBracket(t.getCursorPosition());if(l)var i=new Z(l.row,l.column,l.row,l.column+1);else e.$mode.getMatching&&(i=e.$mode.getMatching(t.session));i&&(e.$bracketHighlight=e.addMarker(i,"ace_bracket","text"))}}),50)}},this.$highlightTags=function(){if(!this.$highlightTagPending){var t=this;this.$highlightTagPending=!0,setTimeout((function(){t.$highlightTagPending=!1;var e=t.session;if(e&&e.bgTokenizer){var l=t.getCursorPosition(),i=new y(t.session,l.row,l.column),n=i.getCurrentToken();if(!n||!/\b(?:tag-open|tag-name)/.test(n.type))return e.removeMarker(e.$tagHighlight),void(e.$tagHighlight=null);if(-1==n.type.indexOf("tag-open")||(n=i.stepForward())){var a=n.value,d=0,s=i.stepBackward();if("<"==s.value)do{s=n,(n=i.stepForward())&&n.value===a&&-1!==n.type.indexOf("tag-name")&&("<"===s.value?d++:"=0);else{do{n=s,s=i.stepBackward(),n&&n.value===a&&-1!==n.type.indexOf("tag-name")&&("<"===s.value?d++:"1||(t=!1)),e.$highlightLineMarker&&!t)e.removeMarker(e.$highlightLineMarker.id),e.$highlightLineMarker=null;else if(!e.$highlightLineMarker&&t){var l=new Z(t.row,t.column,t.row,1/0);l.id=e.addMarker(l,"ace_active-line","screenLine"),e.$highlightLineMarker=l}else t&&(e.$highlightLineMarker.start.row=t.row,e.$highlightLineMarker.end.row=t.row,e.$highlightLineMarker.start.column=t.column,e._signal("changeBackMarker"))},this.onSelectionChange=function(t){var e=this.session;if(e.$selectionMarker&&e.removeMarker(e.$selectionMarker),e.$selectionMarker=null,this.selection.isEmpty())this.$updateHighlightActiveLine();else{var l=this.selection.getRange(),i=this.getSelectionStyle();e.$selectionMarker=e.addMarker(l,"ace_selection",i)}var n=this.$highlightSelectedWord&&this.$getSelectionHighLightRegexp();this.session.highlight(n),this._signal("changeSelection")},this.$getSelectionHighLightRegexp=function(){var t=this.session,e=this.getSelectionRange();if(!e.isEmpty()&&!e.isMultiLine()){var l=e.start.column-1,i=e.end.column+1,n=t.getLine(e.start.row),a=n.length,d=n.substring(Math.max(l,0),Math.min(i,a));if(!(l>=0&&/^[\w\d]/.test(d)||i<=a&&/[\w\d]$/.test(d))&&(d=n.substring(e.start.column,e.end.column),/^[\w\d]+$/.test(d)))return this.$search.$assembleRegExp({wholeWord:!0,caseSensitive:!0,needle:d})}},this.onChangeFrontMarker=function(){this.renderer.updateFrontMarkers()},this.onChangeBackMarker=function(){this.renderer.updateBackMarkers()},this.onChangeBreakpoint=function(){this.renderer.updateBreakpoints()},this.onChangeAnnotation=function(){this.renderer.setAnnotations(this.session.getAnnotations())},this.onChangeMode=function(t){this.renderer.updateText(),this._emit("changeMode",t)},this.onChangeWrapLimit=function(){this.renderer.updateFull()},this.onChangeWrapMode=function(){this.renderer.onResize(!0)},this.onChangeFold=function(){this.$updateHighlightActiveLine(),this.renderer.updateFull()},this.getSelectedText=function(){return this.session.getTextRange(this.getSelectionRange())},this.getCopyText=function(){var t=this.getSelectedText();return this._signal("copy",t),t},this.onCopy=function(){this.commands.exec("copy",this)},this.onCut=function(){this.commands.exec("cut",this)},this.onPaste=function(t,e){var l={text:t,event:e};this.commands.exec("paste",this,l)},this.$handlePaste=function(t){"string"==typeof t&&(t={text:t}),this._signal("paste",t);var e=t.text;if(!this.inMultiSelectMode||this.inVirtualSelectionMode)this.insert(e);else{var l=e.split(/\r\n|\r|\n/),i=this.selection.rangeList.ranges;if(l.length>i.length||l.length<2||!l[1])return this.commands.exec("insertstring",this,e);for(var n=i.length;n--;){var a=i[n];a.isEmpty()||this.session.remove(a),this.session.insert(a.start,l[n])}}},this.execCommand=function(t,e){return this.commands.exec(t,this,e)},this.insert=function(t,e){var l=this.session,i=l.getMode(),n=this.getCursorPosition();if(this.getBehavioursEnabled()&&!e){var a=i.transformAction(l.getState(n.row),"insertion",this,l,t);a&&(t!==a.text&&(this.session.mergeUndoDeltas=!1,this.$mergeNextCommand=!1),t=a.text)}if("\t"==t&&(t=this.session.getTabString()),this.selection.isEmpty())this.session.getOverwrite()&&((d=new Z.fromPoints(n,n)).end.column+=t.length,this.session.remove(d));else{var d=this.getSelectionRange();n=this.session.remove(d),this.clearSelection()}if("\n"==t||"\r\n"==t){var s=l.getLine(n.row);if(n.column>s.search(/\S|$/)){var c=s.substr(n.column).search(/\S|$/);l.doc.removeInLine(n.row,n.column,n.column+c)}}this.clearSelection();var o=n.column,b=l.getState(n.row),r=(s=l.getLine(n.row),i.checkOutdent(b,s,t));if(l.insert(n,t),a&&a.selection&&(2==a.selection.length?this.selection.setSelectionRange(new Z(n.row,o+a.selection[0],n.row,o+a.selection[1])):this.selection.setSelectionRange(new Z(n.row+a.selection[0],a.selection[1],n.row+a.selection[2],a.selection[3]))),l.getDocument().isNewLine(t)){var m=i.getNextLineIndent(b,s.slice(0,n.column),l.getTabString());l.insert({row:n.row+1,column:0},m)}r&&i.autoOutdent(b,l,n.row)},this.onTextInput=function(t){this.keyBinding.onTextInput(t)},this.onCommandKey=function(t,e,l){this.keyBinding.onCommandKey(t,e,l)},this.setOverwrite=function(t){this.session.setOverwrite(t)},this.getOverwrite=function(){return this.session.getOverwrite()},this.toggleOverwrite=function(){this.session.toggleOverwrite()},this.setScrollSpeed=function(t){this.setOption("scrollSpeed",t)},this.getScrollSpeed=function(){return this.getOption("scrollSpeed")},this.setDragDelay=function(t){this.setOption("dragDelay",t)},this.getDragDelay=function(){return this.getOption("dragDelay")},this.setSelectionStyle=function(t){this.setOption("selectionStyle",t)},this.getSelectionStyle=function(){return this.getOption("selectionStyle")},this.setHighlightActiveLine=function(t){this.setOption("highlightActiveLine",t)},this.getHighlightActiveLine=function(){return this.getOption("highlightActiveLine")},this.setHighlightGutterLine=function(t){this.setOption("highlightGutterLine",t)},this.getHighlightGutterLine=function(){return this.getOption("highlightGutterLine")},this.setHighlightSelectedWord=function(t){this.setOption("highlightSelectedWord",t)},this.getHighlightSelectedWord=function(){return this.$highlightSelectedWord},this.setAnimatedScroll=function(t){this.renderer.setAnimatedScroll(t)},this.getAnimatedScroll=function(){return this.renderer.getAnimatedScroll()},this.setShowInvisibles=function(t){this.renderer.setShowInvisibles(t)},this.getShowInvisibles=function(){return this.renderer.getShowInvisibles()},this.setDisplayIndentGuides=function(t){this.renderer.setDisplayIndentGuides(t)},this.getDisplayIndentGuides=function(){return this.renderer.getDisplayIndentGuides()},this.setShowPrintMargin=function(t){this.renderer.setShowPrintMargin(t)},this.getShowPrintMargin=function(){return this.renderer.getShowPrintMargin()},this.setPrintMarginColumn=function(t){this.renderer.setPrintMarginColumn(t)},this.getPrintMarginColumn=function(){return this.renderer.getPrintMarginColumn()},this.setReadOnly=function(t){this.setOption("readOnly",t)},this.getReadOnly=function(){return this.getOption("readOnly")},this.setBehavioursEnabled=function(t){this.setOption("behavioursEnabled",t)},this.getBehavioursEnabled=function(){return this.getOption("behavioursEnabled")},this.setWrapBehavioursEnabled=function(t){this.setOption("wrapBehavioursEnabled",t)},this.getWrapBehavioursEnabled=function(){return this.getOption("wrapBehavioursEnabled")},this.setShowFoldWidgets=function(t){this.setOption("showFoldWidgets",t)},this.getShowFoldWidgets=function(){return this.getOption("showFoldWidgets")},this.setFadeFoldWidgets=function(t){this.setOption("fadeFoldWidgets",t)},this.getFadeFoldWidgets=function(){return this.getOption("fadeFoldWidgets")},this.remove=function(t){this.selection.isEmpty()&&("left"==t?this.selection.selectLeft():this.selection.selectRight());var e=this.getSelectionRange();if(this.getBehavioursEnabled()){var l=this.session,i=l.getState(e.start.row),n=l.getMode().transformAction(i,"deletion",this,l,e);if(0===e.end.column){var a=l.getTextRange(e);if("\n"==a[a.length-1]){var d=l.getLine(e.end.row);/^\s+$/.test(d)&&(e.end.column=d.length)}}n&&(e=n)}this.session.remove(e),this.clearSelection()},this.removeWordRight=function(){this.selection.isEmpty()&&this.selection.selectWordRight(),this.session.remove(this.getSelectionRange()),this.clearSelection()},this.removeWordLeft=function(){this.selection.isEmpty()&&this.selection.selectWordLeft(),this.session.remove(this.getSelectionRange()),this.clearSelection()},this.removeToLineStart=function(){this.selection.isEmpty()&&this.selection.selectLineStart(),this.session.remove(this.getSelectionRange()),this.clearSelection()},this.removeToLineEnd=function(){this.selection.isEmpty()&&this.selection.selectLineEnd();var t=this.getSelectionRange();t.start.column==t.end.column&&t.start.row==t.end.row&&(t.end.column=0,t.end.row++),this.session.remove(t),this.clearSelection()},this.splitLine=function(){this.selection.isEmpty()||(this.session.remove(this.getSelectionRange()),this.clearSelection());var t=this.getCursorPosition();this.insert("\n"),this.moveCursorToPosition(t)},this.transposeLetters=function(){if(this.selection.isEmpty()){var t=this.getCursorPosition(),e=t.column;if(0!==e){var l,i,n=this.session.getLine(t.row);ee.toLowerCase()?1:0}));for(var i=new Z(0,0,0,0),n=t.first;n<=t.last;n++){var a=e.getLine(n);i.start.row=n,i.end.row=n,i.end.column=a.length,e.replace(i,l[n-t.first])}},this.toggleCommentLines=function(){var t=this.session.getState(this.getCursorPosition().row),e=this.$getSelectedRows();this.session.getMode().toggleCommentLines(t,this.session,e.first,e.last)},this.toggleBlockComment=function(){var t=this.getCursorPosition(),e=this.session.getState(t.row),l=this.getSelectionRange();this.session.getMode().toggleBlockComment(e,this.session,l,t)},this.getNumberAt=function(t,e){var l=/[\-]?[0-9]+(?:\.[0-9]+)?/g;l.lastIndex=0;for(var i=this.session.getLine(t);l.lastIndex=e)return{value:n[0],start:n.index,end:n.index+n[0].length}}return null},this.modifyNumber=function(t){var e=this.selection.getCursor().row,l=this.selection.getCursor().column,i=new Z(e,l-1,e,l),n=this.session.getTextRange(i);if(!isNaN(parseFloat(n))&&isFinite(n)){var a=this.getNumberAt(e,l);if(a){var d=a.value.indexOf(".")>=0?a.start+a.value.indexOf(".")+1:a.end,s=a.start+a.value.length-d,c=parseFloat(a.value);c*=Math.pow(10,s),d!==a.end&&lZ+1)break;Z=g.last}for(b--,s=this.session.$moveLines(m,Z,e?0:t),e&&-1==t&&(r=b+1);r<=b;)d[r].moveBy(s,0),r++;e||(s=0),c+=s}n.fromOrientedRange(n.ranges[0]),n.rangeList.attach(this.session),this.inVirtualSelectionMode=!1}},this.$getSelectedRows=function(t){return t=(t||this.getSelectionRange()).collapseRows(),{first:this.session.getRowFoldStart(t.start.row),last:this.session.getRowFoldEnd(t.end.row)}},this.onCompositionStart=function(t){this.renderer.showComposition(this.getCursorPosition())},this.onCompositionUpdate=function(t){this.renderer.setCompositionText(t)},this.onCompositionEnd=function(){this.renderer.hideComposition()},this.getFirstVisibleRow=function(){return this.renderer.getFirstVisibleRow()},this.getLastVisibleRow=function(){return this.renderer.getLastVisibleRow()},this.isRowVisible=function(t){return t>=this.getFirstVisibleRow()&&t<=this.getLastVisibleRow()},this.isRowFullyVisible=function(t){return t>=this.renderer.getFirstFullyVisibleRow()&&t<=this.renderer.getLastFullyVisibleRow()},this.$getVisibleRowCount=function(){return this.renderer.getScrollBottomRow()-this.renderer.getScrollTopRow()+1},this.$moveByPage=function(t,e){var l=this.renderer,i=this.renderer.layerConfig,n=t*Math.floor(i.height/i.lineHeight);this.$blockScrolling++,!0===e?this.selection.$moveSelection((function(){this.moveCursorBy(n,0)})):!1===e&&(this.selection.moveCursorBy(n,0),this.selection.clearSelection()),this.$blockScrolling--;var a=l.scrollTop;l.scrollBy(0,n*i.lineHeight),null!=e&&l.scrollCursorIntoView(null,.5),l.animateScrolling(a)},this.selectPageDown=function(){this.$moveByPage(1,!0)},this.selectPageUp=function(){this.$moveByPage(-1,!0)},this.gotoPageDown=function(){this.$moveByPage(1,!1)},this.gotoPageUp=function(){this.$moveByPage(-1,!1)},this.scrollPageDown=function(){this.$moveByPage(1)},this.scrollPageUp=function(){this.$moveByPage(-1)},this.scrollToRow=function(t){this.renderer.scrollToRow(t)},this.scrollToLine=function(t,e,l,i){this.renderer.scrollToLine(t,e,l,i)},this.centerSelection=function(){var t=this.getSelectionRange(),e={row:Math.floor(t.start.row+(t.end.row-t.start.row)/2),column:Math.floor(t.start.column+(t.end.column-t.start.column)/2)};this.renderer.alignCursor(e,.5)},this.getCursorPosition=function(){return this.selection.getCursor()},this.getCursorPositionScreen=function(){return this.session.documentToScreenPosition(this.getCursorPosition())},this.getSelectionRange=function(){return this.selection.getRange()},this.selectAll=function(){this.$blockScrolling+=1,this.selection.selectAll(),this.$blockScrolling-=1},this.clearSelection=function(){this.selection.clearSelection()},this.moveCursorTo=function(t,e){this.selection.moveCursorTo(t,e)},this.moveCursorToPosition=function(t){this.selection.moveCursorToPosition(t)},this.jumpToMatching=function(t,e){var l=this.getCursorPosition(),i=new y(this.session,l.row,l.column),n=i.getCurrentToken(),a=n||i.stepForward();if(a){var d,s,c=!1,o={},b=l.column-a.start,r={")":"(","(":"(","]":"[","[":"[","{":"{","}":"{"};do{if(a.value.match(/[{}()\[\]]/g)){for(;b=0;--a)this.$tryReplace(l[a],t)&&i++;return this.selection.setSelectionRange(n),this.$blockScrolling-=1,i},this.$tryReplace=function(t,e){var l=this.session.getTextRange(t);return null!==(e=this.$search.replace(l,e))?(t.end=this.session.replace(t,e),t):null},this.getLastSearchOptions=function(){return this.$search.getOptions()},this.find=function(t,e,l){e||(e={}),"string"==typeof t||t instanceof RegExp?e.needle=t:"object"==typeof t&&i.mixin(e,t);var n=this.selection.getRange();null==e.needle&&((t=this.session.getTextRange(n)||this.$search.$options.needle)||(n=this.session.getWordRange(n.start.row,n.start.column),t=this.session.getTextRange(n)),this.$search.set({needle:t})),this.$search.set(e),e.start||this.$search.set({start:n});var a=this.$search.find(this.session);return e.preventScroll?a:a?(this.revealRange(a,l),a):(e.backwards?n.start=n.end:n.end=n.start,void this.selection.setRange(n))},this.findNext=function(t,e){this.find({skipCurrent:!0,backwards:!1},t,e)},this.findPrevious=function(t,e){this.find(t,{skipCurrent:!0,backwards:!0},e)},this.revealRange=function(t,e){this.$blockScrolling+=1,this.session.unfold(t),this.selection.setSelectionRange(t),this.$blockScrolling-=1;var l=this.renderer.scrollTop;this.renderer.scrollSelectionIntoView(t.start,t.end,.5),!1!==e&&this.renderer.animateScrolling(l)},this.undo=function(){this.$blockScrolling++,this.session.getUndoManager().undo(),this.$blockScrolling--,this.renderer.scrollCursorIntoView(null,.5)},this.redo=function(){this.$blockScrolling++,this.session.getUndoManager().redo(),this.$blockScrolling--,this.renderer.scrollCursorIntoView(null,.5)},this.destroy=function(){this.renderer.destroy(),this._signal("destroy",this),this.session&&this.session.destroy()},this.setAutoScrollEditorIntoView=function(t){if(t){var e,l=this,i=!1;this.$scrollAnchor||(this.$scrollAnchor=document.createElement("div"));var n=this.$scrollAnchor;n.style.cssText="position:absolute",this.container.insertBefore(n,this.container.firstChild);var a=this.on("changeSelection",(function(){i=!0})),d=this.renderer.on("beforeRender",(function(){i&&(e=l.renderer.container.getBoundingClientRect())})),s=this.renderer.on("afterRender",(function(){if(i&&e&&(l.isFocused()||l.searchBox&&l.searchBox.isFocused())){var t=l.renderer,a=t.$cursorLayer.$pixelPos,d=t.layerConfig,s=a.top-d.offset;null!=(i=a.top>=0&&s+e.top<0||!(a.topwindow.innerHeight)&&null)&&(n.style.top=s+"px",n.style.left=a.left+"px",n.style.height=d.lineHeight+"px",n.scrollIntoView(i)),i=e=null}}));this.setAutoScrollEditorIntoView=function(t){t||(delete this.setAutoScrollEditorIntoView,this.off("changeSelection",a),this.renderer.off("afterRender",s),this.renderer.off("beforeRender",d))}}},this.$resetCursorStyle=function(){var t=this.$cursorStyle||"ace",e=this.renderer.$cursorLayer;e&&(e.setSmoothBlinking(/smooth/.test(t)),e.isBlinking=!this.$readOnly&&"wide"!=t,n.setCssClass(e.element,"ace_slim-cursors",/slim/.test(t)))}}).call(I.prototype),N.defineOptions(I.prototype,"editor",{selectionStyle:{set:function(t){this.onSelectionChange(),this._signal("changeSelectionStyle",{data:t})},initialValue:"line"},highlightActiveLine:{set:function(){this.$updateHighlightActiveLine()},initialValue:!0},highlightSelectedWord:{set:function(t){this.$onSelectionChange()},initialValue:!0},readOnly:{set:function(t){this.$resetCursorStyle()},initialValue:!1},cursorStyle:{set:function(t){this.$resetCursorStyle()},values:["ace","slim","smooth","wide"],initialValue:"ace"},mergeUndoDeltas:{values:[!1,!0,"always"],initialValue:!0},behavioursEnabled:{initialValue:!0},wrapBehavioursEnabled:{initialValue:!0},autoScrollEditorIntoView:{set:function(t){this.setAutoScrollEditorIntoView(t)}},keyboardHandler:{set:function(t){this.setKeyboardHandler(t)},get:function(){return this.keybindingId},handlesSet:!0},hScrollBarAlwaysVisible:"renderer",vScrollBarAlwaysVisible:"renderer",highlightGutterLine:"renderer",animatedScroll:"renderer",showInvisibles:"renderer",showPrintMargin:"renderer",printMarginColumn:"renderer",printMargin:"renderer",fadeFoldWidgets:"renderer",showFoldWidgets:"renderer",showLineNumbers:"renderer",showGutter:"renderer",displayIndentGuides:"renderer",fontSize:"renderer",fontFamily:"renderer",maxLines:"renderer",minLines:"renderer",scrollPastEnd:"renderer",fixedWidthGutter:"renderer",theme:"renderer",scrollSpeed:"$mouseHandler",dragDelay:"$mouseHandler",dragEnabled:"$mouseHandler",focusTimout:"$mouseHandler",tooltipFollowsMouse:"$mouseHandler",firstLineNumber:"session",overwrite:"session",newLineMode:"session",useWorker:"session",useSoftTabs:"session",tabSize:"session",wrap:"session",indentedSoftWrap:"session",foldStyle:"session",mode:"session"}),e.Editor=I})),ace.define("ace/undomanager",["require","exports","module"],(function(t,e,l){"use strict";var i=function(){this.reset()};(function(){function t(t){return{action:t.action,start:t.start,end:t.end,lines:1==t.lines.length?null:t.lines,text:1==t.lines.length?t.lines[0]:null}}function e(t){return{action:t.action,start:t.start,end:t.end,lines:t.lines||[t.text]}}function l(t,e){for(var l=new Array(t.length),i=0;i0},this.hasRedo=function(){return this.$redoStack.length>0},this.markClean=function(){this.dirtyCounter=0},this.isClean=function(){return 0===this.dirtyCounter},this.$serializeDeltas=function(e){return l(e,t)},this.$deserializeDeltas=function(t){return l(t,e)}}).call(i.prototype),e.UndoManager=i})),ace.define("ace/layer/gutter",["require","exports","module","ace/lib/dom","ace/lib/oop","ace/lib/lang","ace/lib/event_emitter"],(function(t,e,l){"use strict";var i=t("../lib/dom"),n=t("../lib/oop"),a=t("../lib/lang"),d=t("../lib/event_emitter").EventEmitter,s=function(t){this.element=i.createElement("div"),this.element.className="ace_layer ace_gutter-layer",t.appendChild(this.element),this.setShowFoldWidgets(this.$showFoldWidgets),this.gutterWidth=0,this.$annotations=[],this.$updateAnnotations=this.$updateAnnotations.bind(this),this.$cells=[]};(function(){n.implement(this,d),this.setSession=function(t){this.session&&this.session.removeEventListener("change",this.$updateAnnotations),this.session=t,t&&t.on("change",this.$updateAnnotations)},this.addGutterDecoration=function(t,e){window.console&&console.warn&&console.warn("deprecated use session.addGutterDecoration"),this.session.addGutterDecoration(t,e)},this.removeGutterDecoration=function(t,e){window.console&&console.warn&&console.warn("deprecated use session.removeGutterDecoration"),this.session.removeGutterDecoration(t,e)},this.setAnnotations=function(t){this.$annotations=[];for(var e=0;ed&&(W=a.end.row+1,d=(a=e.getNextFoldLine(W,a))?a.start.row:1/0),W>n){for(;this.$cells.length>g+1;)Z=this.$cells.pop(),this.element.removeChild(Z.element);break}(Z=this.$cells[++g])||((Z={element:null,textNode:null,foldWidget:null}).element=i.createElement("div"),Z.textNode=document.createTextNode(""),Z.element.appendChild(Z.textNode),this.element.appendChild(Z.element),this.$cells[g]=Z);var h="ace_gutter-cell ";if(c[W]&&(h+=c[W]),o[W]&&(h+=o[W]),this.$annotations[W]&&(h+=this.$annotations[W].className),Z.element.className!=h&&(Z.element.className=h),(y=e.getRowLength(W)*t.lineHeight+"px")!=Z.element.style.height&&(Z.element.style.height=y),s){var N=s[W];null==N&&(N=s[W]=e.getFoldWidget(W))}if(N){Z.foldWidget||(Z.foldWidget=i.createElement("span"),Z.element.appendChild(Z.foldWidget)),h="ace_fold-widget ace_"+N,"start"==N&&W==d&&Wl.right-e.right?"foldWidgets":void 0}}).call(s.prototype),e.Gutter=s})),ace.define("ace/layer/marker",["require","exports","module","ace/range","ace/lib/dom"],(function(t,e,l){"use strict";var i=t("../range").Range,n=t("../lib/dom"),a=function(t){this.element=n.createElement("div"),this.element.className="ace_layer ace_marker-layer",t.appendChild(this.element)};(function(){this.$padding=0,this.setPadding=function(t){this.$padding=t},this.setSession=function(t){this.session=t},this.setMarkers=function(t){this.markers=t},this.update=function(t){if(t=t||this.config){this.config=t;var e=[];for(var l in this.markers){var i=this.markers[l];if(i.range){var n=i.range.clipRows(t.firstRow,t.lastRow);if(!n.isEmpty())if(n=n.toScreenRange(this.session),i.renderer){var a=this.$getTop(n.start.row,t),d=this.$padding+n.start.column*t.characterWidth;i.renderer(e,n,d,a,t)}else"fullLine"==i.type?this.drawFullLineMarker(e,n,i.clazz,t):"screenLine"==i.type?this.drawScreenLineMarker(e,n,i.clazz,t):n.isMultiLine()?"text"==i.type?this.drawTextMarker(e,n,i.clazz,t):this.drawMultiLineMarker(e,n,i.clazz,t):this.drawSingleLineMarker(e,n,i.clazz+" ace_start ace_br15",t)}else i.update(e,this,this.session,t)}this.element.innerHTML=e.join("")}},this.$getTop=function(t,e){return(t-e.firstRowScreen)*e.lineHeight},this.drawTextMarker=function(t,e,l,n,a){for(var d=this.session,s=e.start.row,c=e.end.row,o=s,b=0,r=0,m=d.getScreenLastRowColumn(o),Z=new i(o,e.start.column,o,r);o<=c;o++)Z.start.row=Z.end.row=o,Z.start.column=o==s?e.start.column:d.getRowWrapIndent(o),Z.end.column=m,b=r,r=m,m=o+1m?4:0)|(o==c?8:0)),n,o==c?0:1,a)},this.drawMultiLineMarker=function(t,e,l,i,n){var a=this.$padding,d=i.lineHeight,s=this.$getTop(e.start.row,i),c=a+e.start.column*i.characterWidth;n=n||"",t.push("
"),s=this.$getTop(e.end.row,i);var o=e.end.column*i.characterWidth;if(t.push("
"),!((d=(e.end.row-e.start.row-1)*i.lineHeight)<=0)){s=this.$getTop(e.start.row+1,i);var b=(e.start.column?1:0)|(e.end.column?0:8);t.push("
")}},this.drawSingleLineMarker=function(t,e,l,i,n,a){var d=i.lineHeight,s=(e.end.column+(n||0)-e.start.column)*i.characterWidth,c=this.$getTop(e.start.row,i),o=this.$padding+e.start.column*i.characterWidth;t.push("
")},this.drawFullLineMarker=function(t,e,l,i,n){var a=this.$getTop(e.start.row,i),d=i.lineHeight;e.start.row!=e.end.row&&(d+=this.$getTop(e.end.row,i)-a),t.push("
")},this.drawScreenLineMarker=function(t,e,l,i,n){var a=this.$getTop(e.start.row,i),d=i.lineHeight;t.push("
")}}).call(a.prototype),e.Marker=a})),ace.define("ace/layer/text",["require","exports","module","ace/lib/oop","ace/lib/dom","ace/lib/lang","ace/lib/useragent","ace/lib/event_emitter"],(function(t,e,l){"use strict";var i=t("../lib/oop"),n=t("../lib/dom"),a=t("../lib/lang"),d=(t("../lib/useragent"),t("../lib/event_emitter").EventEmitter),s=function(t){this.element=n.createElement("div"),this.element.className="ace_layer ace_text-layer",t.appendChild(this.element),this.$updateEolChar=this.$updateEolChar.bind(this)};(function(){i.implement(this,d),this.EOF_CHAR="¶",this.EOL_CHAR_LF="¬",this.EOL_CHAR_CRLF="¤",this.EOL_CHAR=this.EOL_CHAR_LF,this.TAB_CHAR="—",this.SPACE_CHAR="·",this.$padding=0,this.$updateEolChar=function(){var t="\n"==this.session.doc.getNewLineCharacter()?this.EOL_CHAR_LF:this.EOL_CHAR_CRLF;if(this.EOL_CHAR!=t)return this.EOL_CHAR=t,!0},this.setPadding=function(t){this.$padding=t,this.element.style.padding="0 "+t+"px"},this.getLineHeight=function(){return this.$fontMetrics.$characterSize.height||0},this.getCharacterWidth=function(){return this.$fontMetrics.$characterSize.width||0},this.$setFontMetrics=function(t){this.$fontMetrics=t,this.$fontMetrics.on("changeCharacterSize",function(t){this._signal("changeCharacterSize",t)}.bind(this)),this.$pollSizeChanges()},this.checkForSizeChanges=function(){this.$fontMetrics.checkForSizeChanges()},this.$pollSizeChanges=function(){return this.$pollSizeChangesTimer=this.$fontMetrics.$pollSizeChanges()},this.setSession=function(t){this.session=t,t&&this.$computeTabString()},this.showInvisibles=!1,this.setShowInvisibles=function(t){return this.showInvisibles!=t&&(this.showInvisibles=t,this.$computeTabString(),!0)},this.displayIndentGuides=!0,this.setDisplayIndentGuides=function(t){return this.displayIndentGuides!=t&&(this.displayIndentGuides=t,this.$computeTabString(),!0)},this.$tabStrings=[],this.onChangeTabSize=this.$computeTabString=function(){var t=this.session.getTabSize();this.tabSize=t;for(var e=this.$tabStrings=[0],l=1;l"+a.stringRepeat(this.TAB_CHAR,l)+""):e.push(a.stringRepeat(" ",l));if(this.displayIndentGuides){this.$indentGuideRe=/\s\S| \t|\t |\s$/;var i="ace_indent-guide",n="",d="";if(this.showInvisibles){i+=" ace_invisible",n=" ace_invisible_space",d=" ace_invisible_tab";var s=a.stringRepeat(this.SPACE_CHAR,this.tabSize),c=a.stringRepeat(this.TAB_CHAR,this.tabSize)}else c=s=a.stringRepeat(" ",this.tabSize);this.$tabStrings[" "]=""+s+"",this.$tabStrings["\t"]=""+c+""}},this.updateLines=function(t,e,l){this.config.lastRow==t.lastRow&&this.config.firstRow==t.firstRow||this.scrollLines(t),this.config=t;for(var i=Math.max(e,t.firstRow),n=Math.min(l,t.lastRow),a=this.element.childNodes,d=0,s=t.firstRow;so&&(s=c.end.row+1,o=(c=this.session.getNextFoldLine(s,c))?c.start.row:1/0),!(s>n);){var b=a[d++];if(b){var r=[];this.$renderLine(r,s,!this.$useLineGroups(),s==o&&c),b.style.height=t.lineHeight*this.session.getRowLength(s)+"px",b.innerHTML=r.join("")}s++}},this.scrollLines=function(t){var e=this.config;if(this.config=t,!e||e.lastRow0;i--)l.removeChild(l.firstChild);if(e.lastRow>t.lastRow)for(i=this.session.getFoldedRowCount(t.lastRow+1,e.lastRow);i>0;i--)l.removeChild(l.lastChild);if(t.firstRowe.lastRow&&(n=this.$renderLinesFragment(t,e.lastRow+1,t.lastRow),l.appendChild(n))},this.$renderLinesFragment=function(t,e,l){for(var i=this.element.ownerDocument.createDocumentFragment(),a=e,d=this.session.getNextFoldLine(a),s=d?d.start.row:1/0;a>s&&(a=d.end.row+1,s=(d=this.session.getNextFoldLine(a,d))?d.start.row:1/0),!(a>l);){var c=n.createElement("div"),o=[];if(this.$renderLine(o,a,!1,a==s&&d),c.innerHTML=o.join(""),this.$useLineGroups())c.className="ace_line_group",i.appendChild(c),c.style.height=t.lineHeight*this.session.getRowLength(a)+"px";else for(;c.firstChild;)i.appendChild(c.firstChild);a++}return i},this.update=function(t){this.config=t;for(var e=[],l=t.firstRow,i=t.lastRow,n=l,a=this.session.getNextFoldLine(n),d=a?a.start.row:1/0;n>d&&(n=a.end.row+1,d=(a=this.session.getNextFoldLine(n,a))?a.start.row:1/0),!(n>i);)this.$useLineGroups()&&e.push("
"),this.$renderLine(e,n,!1,n==d&&a),this.$useLineGroups()&&e.push("
"),n++;this.element.innerHTML=e.join("")},this.$textToken={text:!0,rparen:!0,lparen:!0},this.$renderToken=function(t,e,l,i){var n=this,d=i.replace(/\t|&|<|>|( +)|([\x00-\x1f\x80-\xa0\xad\u1680\u180E\u2000-\u200f\u2028\u2029\u202F\u205F\u3000\uFEFF\uFFF9-\uFFFC])|[\u1100-\u115F\u11A3-\u11A7\u11FA-\u11FF\u2329-\u232A\u2E80-\u2E99\u2E9B-\u2EF3\u2F00-\u2FD5\u2FF0-\u2FFB\u3000-\u303E\u3041-\u3096\u3099-\u30FF\u3105-\u312D\u3131-\u318E\u3190-\u31BA\u31C0-\u31E3\u31F0-\u321E\u3220-\u3247\u3250-\u32FE\u3300-\u4DBF\u4E00-\uA48C\uA490-\uA4C6\uA960-\uA97C\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFAFF\uFE10-\uFE19\uFE30-\uFE52\uFE54-\uFE66\uFE68-\uFE6B\uFF01-\uFF60\uFFE0-\uFFE6]/g,(function(t,l,i,d,s){if(l)return n.showInvisibles?""+a.stringRepeat(n.SPACE_CHAR,t.length)+"":t;if("&"==t)return"&";if("<"==t)return"<";if(">"==t)return">";if("\t"==t){var c=n.session.getScreenTabSize(e+d);return e+=c-1,n.$tabStrings[c]}if(" "==t){var o=n.showInvisibles?"ace_cjk ace_invisible ace_invisible_space":"ace_cjk",b=n.showInvisibles?n.SPACE_CHAR:"";return e+=1,""+b+""}return i?""+n.SPACE_CHAR+"":(e+=1,""+t+"")}));if(this.$textToken[l.type])t.push(d);else{var s="ace_"+l.type.replace(/\./g," ace_"),c="";"fold"==l.type&&(c=" style='width:"+l.value.length*this.config.characterWidth+"px;' "),t.push("",d,"")}return e+i.length},this.renderIndentGuide=function(t,e,l){var i=e.search(this.$indentGuideRe);return i<=0||i>=l?e:" "==e[0]?(i-=i%this.tabSize,t.push(a.stringRepeat(this.$tabStrings[" "],i/this.tabSize)),e.substr(i)):"\t"==e[0]?(t.push(a.stringRepeat(this.$tabStrings["\t"],i)),e.substr(i)):e},this.$renderWrappedLine=function(t,e,l,i){for(var n=0,d=0,s=l[0],c=0,o=0;o=s;)c=this.$renderToken(t,c,b,r.substring(0,s-n)),r=r.substring(s-n),n=s,i||t.push("","
"),t.push(a.stringRepeat(" ",l.indent)),c=0,s=l[++d]||Number.MAX_VALUE;0!=r.length&&(n+=r.length,c=this.$renderToken(t,c,b,r))}}},this.$renderSimpleLine=function(t,e){var l=0,i=e[0],n=i.value;this.displayIndentGuides&&(n=this.renderIndentGuide(t,n)),n&&(l=this.$renderToken(t,l,i,n));for(var a=1;a"),n.length){var a=this.session.getRowSplitData(e);a&&a.length?this.$renderWrappedLine(t,n,a,l):this.$renderSimpleLine(t,n)}this.showInvisibles&&(i&&(e=i.end.row),t.push("",e==this.session.getLength()-1?this.EOF_CHAR:this.EOL_CHAR,"")),l||t.push("
")},this.$getFoldLineTokens=function(t,e){var l=this.session,i=[],n=l.getTokens(t);return e.walk((function(t,e,a,d,s){null!=t?i.push({type:"fold",value:t}):(s&&(n=l.getTokens(e)),n.length&&function(t,e,l){for(var n=0,a=0;a+t[n].value.lengthl-e&&(d=d.substring(0,l-e)),i.push({type:t[n].type,value:d}),a=e+d.length,n+=1);al?i.push({type:t[n].type,value:d.substring(0,l-a)}):i.push(t[n]),a+=d.length,n+=1}}(n,d,a))}),e.end.row,this.session.getLine(e.end.row).length),i},this.$useLineGroups=function(){return this.session.getUseWrapMode()},this.destroy=function(){clearInterval(this.$pollSizeChangesTimer),this.$measureNode&&this.$measureNode.parentNode.removeChild(this.$measureNode),delete this.$measureNode}}).call(s.prototype),e.Text=s})),ace.define("ace/layer/cursor",["require","exports","module","ace/lib/dom"],(function(t,e,l){"use strict";var i,n=t("../lib/dom"),a=function(t){this.element=n.createElement("div"),this.element.className="ace_layer ace_cursor-layer",t.appendChild(this.element),void 0===i&&(i=!("opacity"in this.element.style)),this.isVisible=!1,this.isBlinking=!0,this.blinkInterval=1e3,this.smoothBlinking=!1,this.cursors=[],this.cursor=this.addCursor(),n.addCssClass(this.element,"ace_hidden-cursors"),this.$updateCursors=(i?this.$updateVisibility:this.$updateOpacity).bind(this)};(function(){this.$updateVisibility=function(t){for(var e=this.cursors,l=e.length;l--;)e[l].style.visibility=t?"":"hidden"},this.$updateOpacity=function(t){for(var e=this.cursors,l=e.length;l--;)e[l].style.opacity=t?"":"0"},this.$padding=0,this.setPadding=function(t){this.$padding=t},this.setSession=function(t){this.session=t},this.setBlinking=function(t){t!=this.isBlinking&&(this.isBlinking=t,this.restartTimer())},this.setBlinkInterval=function(t){t!=this.blinkInterval&&(this.blinkInterval=t,this.restartTimer())},this.setSmoothBlinking=function(t){t==this.smoothBlinking||i||(this.smoothBlinking=t,n.setCssClass(this.element,"ace_smooth-blinking",t),this.$updateCursors(!0),this.$updateCursors=this.$updateOpacity.bind(this),this.restartTimer())},this.addCursor=function(){var t=n.createElement("div");return t.className="ace_cursor",this.element.appendChild(t),this.cursors.push(t),t},this.removeCursor=function(){if(this.cursors.length>1){var t=this.cursors.pop();return t.parentNode.removeChild(t),t}},this.hideCursor=function(){this.isVisible=!1,n.addCssClass(this.element,"ace_hidden-cursors"),this.restartTimer()},this.showCursor=function(){this.isVisible=!0,n.removeCssClass(this.element,"ace_hidden-cursors"),this.restartTimer()},this.restartTimer=function(){var t=this.$updateCursors;if(clearInterval(this.intervalId),clearTimeout(this.timeoutId),this.smoothBlinking&&n.removeCssClass(this.element,"ace_smooth-blinking"),t(!0),this.isBlinking&&this.blinkInterval&&this.isVisible){this.smoothBlinking&&setTimeout(function(){n.addCssClass(this.element,"ace_smooth-blinking")}.bind(this));var e=function(){this.timeoutId=setTimeout((function(){t(!1)}),.6*this.blinkInterval)}.bind(this);this.intervalId=setInterval((function(){t(!0),e()}),this.blinkInterval),e()}},this.getPixelPosition=function(t,e){if(!this.config||!this.session)return{left:0,top:0};t||(t=this.session.selection.getCursor());var l=this.session.documentToScreenPosition(t);return{left:this.$padding+l.column*this.config.characterWidth,top:(l.row-(e?this.config.firstRowScreen:0))*this.config.lineHeight}},this.update=function(t){this.config=t;var e=this.session.$selectionMarkers,l=0,i=0;void 0!==e&&0!==e.length||(e=[{cursor:null}]),l=0;for(var n=e.length;lt.height+t.offset||a.top<0)&&l>1)){var d=(this.cursors[i++]||this.addCursor()).style;this.drawCursor?this.drawCursor(d,a,t,e[l],this.session):(d.left=a.left+"px",d.top=a.top+"px",d.width=t.characterWidth+"px",d.height=t.lineHeight+"px")}}for(;this.cursors.length>i;)this.removeCursor();var s=this.session.getOverwrite();this.$setOverwrite(s),this.$pixelPos=a,this.restartTimer()},this.drawCursor=null,this.$setOverwrite=function(t){t!=this.overwrite&&(this.overwrite=t,t?n.addCssClass(this.element,"ace_overwrite-cursors"):n.removeCssClass(this.element,"ace_overwrite-cursors"))},this.destroy=function(){clearInterval(this.intervalId),clearTimeout(this.timeoutId)}}).call(a.prototype),e.Cursor=a})),ace.define("ace/scrollbar",["require","exports","module","ace/lib/oop","ace/lib/dom","ace/lib/event","ace/lib/event_emitter"],(function(t,e,l){"use strict";var i=t("./lib/oop"),n=t("./lib/dom"),a=t("./lib/event"),d=t("./lib/event_emitter").EventEmitter,s=function(t){this.element=n.createElement("div"),this.element.className="ace_scrollbar ace_scrollbar"+this.classSuffix,this.inner=n.createElement("div"),this.inner.className="ace_scrollbar-inner",this.element.appendChild(this.inner),t.appendChild(this.element),this.setVisible(!1),this.skipEvent=!1,a.addListener(this.element,"scroll",this.onScroll.bind(this)),a.addListener(this.element,"mousedown",a.preventDefault)};(function(){i.implement(this,d),this.setVisible=function(t){this.element.style.display=t?"":"none",this.isVisible=t}}).call(s.prototype);var c=function(t,e){s.call(this,t),this.scrollTop=0,e.$scrollbarWidth=this.width=n.scrollbarWidth(t.ownerDocument),this.inner.style.width=this.element.style.width=(this.width||15)+5+"px"};i.inherits(c,s),function(){this.classSuffix="-v",this.onScroll=function(){this.skipEvent||(this.scrollTop=this.element.scrollTop,this._emit("scroll",{data:this.scrollTop})),this.skipEvent=!1},this.getWidth=function(){return this.isVisible?this.width:0},this.setHeight=function(t){this.element.style.height=t+"px"},this.setInnerHeight=function(t){this.inner.style.height=t+"px"},this.setScrollHeight=function(t){this.inner.style.height=t+"px"},this.setScrollTop=function(t){this.scrollTop!=t&&(this.skipEvent=!0,this.scrollTop=this.element.scrollTop=t)}}.call(c.prototype);var o=function(t,e){s.call(this,t),this.scrollLeft=0,this.height=e.$scrollbarWidth,this.inner.style.height=this.element.style.height=(this.height||15)+5+"px"};i.inherits(o,s),function(){this.classSuffix="-h",this.onScroll=function(){this.skipEvent||(this.scrollLeft=this.element.scrollLeft,this._emit("scroll",{data:this.scrollLeft})),this.skipEvent=!1},this.getHeight=function(){return this.isVisible?this.height:0},this.setWidth=function(t){this.element.style.width=t+"px"},this.setInnerWidth=function(t){this.inner.style.width=t+"px"},this.setScrollWidth=function(t){this.inner.style.width=t+"px"},this.setScrollLeft=function(t){this.scrollLeft!=t&&(this.skipEvent=!0,this.scrollLeft=this.element.scrollLeft=t)}}.call(o.prototype),e.ScrollBar=c,e.ScrollBarV=c,e.ScrollBarH=o,e.VScrollBar=c,e.HScrollBar=o})),ace.define("ace/renderloop",["require","exports","module","ace/lib/event"],(function(t,e,l){"use strict";var i=t("./lib/event"),n=function(t,e){this.onRender=t,this.pending=!1,this.changes=0,this.window=e||window};(function(){this.schedule=function(t){if(this.changes=this.changes|t,!this.pending&&this.changes){this.pending=!0;var e=this;i.nextFrame((function(){var t;for(e.pending=!1;t=e.changes;)e.changes=0,e.onRender(t)}),this.window)}}}).call(n.prototype),e.RenderLoop=n})),ace.define("ace/layer/font_metrics",["require","exports","module","ace/lib/oop","ace/lib/dom","ace/lib/lang","ace/lib/useragent","ace/lib/event_emitter"],(function(t,e,l){var i=t("../lib/oop"),n=t("../lib/dom"),a=t("../lib/lang"),d=t("../lib/useragent"),s=t("../lib/event_emitter").EventEmitter,c=0,o=e.FontMetrics=function(t){this.el=n.createElement("div"),this.$setMeasureNodeStyles(this.el.style,!0),this.$main=n.createElement("div"),this.$setMeasureNodeStyles(this.$main.style),this.$measureNode=n.createElement("div"),this.$setMeasureNodeStyles(this.$measureNode.style),this.el.appendChild(this.$main),this.el.appendChild(this.$measureNode),t.appendChild(this.el),c||this.$testFractionalRect(),this.$measureNode.innerHTML=a.stringRepeat("X",c),this.$characterSize={width:0,height:0},this.checkForSizeChanges()};(function(){i.implement(this,s),this.$characterSize={width:0,height:0},this.$testFractionalRect=function(){var t=n.createElement("div");this.$setMeasureNodeStyles(t.style),t.style.width="0.2px",document.documentElement.appendChild(t);var e=t.getBoundingClientRect().width;c=e>0&&e<1?50:100,t.parentNode.removeChild(t)},this.$setMeasureNodeStyles=function(t,e){t.width=t.height="auto",t.left=t.top="0px",t.visibility="hidden",t.position="absolute",t.whiteSpace="pre",d.isIE<8?t["font-family"]="inherit":t.font="inherit",t.overflow=e?"hidden":"visible"},this.checkForSizeChanges=function(){var t=this.$measureSizes();if(t&&(this.$characterSize.width!==t.width||this.$characterSize.height!==t.height)){this.$measureNode.style.fontWeight="bold";var e=this.$measureSizes();this.$measureNode.style.fontWeight="",this.$characterSize=t,this.charSizes=Object.create(null),this.allowBoldFonts=e&&e.width===t.width&&e.height===t.height,this._emit("changeCharacterSize",{data:t})}},this.$pollSizeChanges=function(){if(this.$pollSizeChangesTimer)return this.$pollSizeChangesTimer;var t=this;return this.$pollSizeChangesTimer=setInterval((function(){t.checkForSizeChanges()}),500)},this.setPolling=function(t){t?this.$pollSizeChanges():this.$pollSizeChangesTimer&&(clearInterval(this.$pollSizeChangesTimer),this.$pollSizeChangesTimer=0)},this.$measureSizes=function(){if(50===c){var t=null;try{t=this.$measureNode.getBoundingClientRect()}catch(e){t={width:0,height:0}}var e={height:t.height,width:t.width/c}}else e={height:this.$measureNode.clientHeight,width:this.$measureNode.clientWidth/c};return 0===e.width||0===e.height?null:e},this.$measureCharWidth=function(t){return this.$main.innerHTML=a.stringRepeat(t,c),this.$main.getBoundingClientRect().width/c},this.getCharacterWidth=function(t){var e=this.charSizes[t];return void 0===e&&(e=this.charSizes[t]=this.$measureCharWidth(t)/this.$characterSize.width),e},this.destroy=function(){clearInterval(this.$pollSizeChangesTimer),this.el&&this.el.parentNode&&this.el.parentNode.removeChild(this.el)}}).call(o.prototype)})),ace.define("ace/virtual_renderer",["require","exports","module","ace/lib/oop","ace/lib/dom","ace/config","ace/lib/useragent","ace/layer/gutter","ace/layer/marker","ace/layer/text","ace/layer/cursor","ace/scrollbar","ace/scrollbar","ace/renderloop","ace/layer/font_metrics","ace/lib/event_emitter"],(function(t,e,l){"use strict";var i=t("./lib/oop"),n=t("./lib/dom"),a=t("./config"),d=t("./lib/useragent"),s=t("./layer/gutter").Gutter,c=t("./layer/marker").Marker,o=t("./layer/text").Text,b=t("./layer/cursor").Cursor,r=t("./scrollbar").HScrollBar,m=t("./scrollbar").VScrollBar,Z=t("./renderloop").RenderLoop,g=t("./layer/font_metrics").FontMetrics,W=t("./lib/event_emitter").EventEmitter;n.importCssString('.ace_editor {\tposition: relative;\toverflow: hidden;\tfont: 12px/normal \'Monaco\', \'Menlo\', \'Ubuntu Mono\', \'Consolas\', \'source-code-pro\', monospace;\tdirection: ltr;\t}\t.ace_scroller {\tposition: absolute;\toverflow: hidden;\ttop: 0;\tbottom: 0;\tbackground-color: inherit;\t-ms-user-select: none;\t-moz-user-select: none;\t-webkit-user-select: none;\tuser-select: none;\tcursor: text;\t}\t.ace_content {\tposition: absolute;\t-moz-box-sizing: border-box;\t-webkit-box-sizing: border-box;\tbox-sizing: border-box;\tmin-width: 100%;\t}\t.ace_dragging .ace_scroller:before{\tposition: absolute;\ttop: 0;\tleft: 0;\tright: 0;\tbottom: 0;\tcontent: \'\';\tbackground: rgba(250, 250, 250, 0.01);\tz-index: 1000;\t}\t.ace_dragging.ace_dark .ace_scroller:before{\tbackground: rgba(0, 0, 0, 0.01);\t}\t.ace_selecting, .ace_selecting * {\tcursor: text !important;\t}\t.ace_gutter {\tposition: absolute;\toverflow : hidden;\twidth: auto;\ttop: 0;\tbottom: 0;\tleft: 0;\tcursor: default;\tz-index: 4;\t-ms-user-select: none;\t-moz-user-select: none;\t-webkit-user-select: none;\tuser-select: none;\t}\t.ace_gutter-active-line {\tposition: absolute;\tleft: 0;\tright: 0;\t}\t.ace_scroller.ace_scroll-left {\tbox-shadow: 17px 0 16px -16px rgba(0, 0, 0, 0.4) inset;\t}\t.ace_gutter-cell {\tpadding-left: 19px;\tpadding-right: 6px;\tbackground-repeat: no-repeat;\t}\t.ace_gutter-cell.ace_error {\tbackground-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAABOFBMVEX/////////QRswFAb/Ui4wFAYwFAYwFAaWGAfDRymzOSH/PxswFAb/SiUwFAYwFAbUPRvjQiDllog5HhHdRybsTi3/Tyv9Tir+Syj/UC3////XurebMBIwFAb/RSHbPx/gUzfdwL3kzMivKBAwFAbbvbnhPx66NhowFAYwFAaZJg8wFAaxKBDZurf/RB6mMxb/SCMwFAYwFAbxQB3+RB4wFAb/Qhy4Oh+4QifbNRcwFAYwFAYwFAb/QRzdNhgwFAYwFAbav7v/Uy7oaE68MBK5LxLewr/r2NXewLswFAaxJw4wFAbkPRy2PyYwFAaxKhLm1tMwFAazPiQwFAaUGAb/QBrfOx3bvrv/VC/maE4wFAbRPBq6MRO8Qynew8Dp2tjfwb0wFAbx6eju5+by6uns4uH9/f36+vr/GkHjAAAAYnRSTlMAGt+64rnWu/bo8eAA4InH3+DwoN7j4eLi4xP99Nfg4+b+/u9B/eDs1MD1mO7+4PHg2MXa347g7vDizMLN4eG+Pv7i5evs/v79yu7S3/DV7/498Yv24eH+4ufQ3Ozu/v7+y13sRqwAAADLSURBVHjaZc/XDsFgGIBhtDrshlitmk2IrbHFqL2pvXf/+78DPokj7+Fz9qpU/9UXJIlhmPaTaQ6QPaz0mm+5gwkgovcV6GZzd5JtCQwgsxoHOvJO15kleRLAnMgHFIESUEPmawB9ngmelTtipwwfASilxOLyiV5UVUyVAfbG0cCPHig+GBkzAENHS0AstVF6bacZIOzgLmxsHbt2OecNgJC83JERmePUYq8ARGkJx6XtFsdddBQgZE2nPR6CICZhawjA4Fb/chv+399kfR+MMMDGOQAAAABJRU5ErkJggg==");\tbackground-repeat: no-repeat;\tbackground-position: 2px center;\t}\t.ace_gutter-cell.ace_warning {\tbackground-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAmVBMVEX///8AAAD///8AAAAAAABPSzb/5sAAAAB/blH/73z/ulkAAAAAAAD85pkAAAAAAAACAgP/vGz/rkDerGbGrV7/pkQICAf////e0IsAAAD/oED/qTvhrnUAAAD/yHD/njcAAADuv2r/nz//oTj/p064oGf/zHAAAAA9Nir/tFIAAAD/tlTiuWf/tkIAAACynXEAAAAAAAAtIRW7zBpBAAAAM3RSTlMAABR1m7RXO8Ln31Z36zT+neXe5OzooRDfn+TZ4p3h2hTf4t3k3ucyrN1K5+Xaks52Sfs9CXgrAAAAjklEQVR42o3PbQ+CIBQFYEwboPhSYgoYunIqqLn6/z8uYdH8Vmdnu9vz4WwXgN/xTPRD2+sgOcZjsge/whXZgUaYYvT8QnuJaUrjrHUQreGczuEafQCO/SJTufTbroWsPgsllVhq3wJEk2jUSzX3CUEDJC84707djRc5MTAQxoLgupWRwW6UB5fS++NV8AbOZgnsC7BpEAAAAABJRU5ErkJggg==");\tbackground-position: 2px center;\t}\t.ace_gutter-cell.ace_info {\tbackground-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAAAAAA6mKC9AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAAJ0Uk5TAAB2k804AAAAPklEQVQY02NgIB68QuO3tiLznjAwpKTgNyDbMegwisCHZUETUZV0ZqOquBpXj2rtnpSJT1AEnnRmL2OgGgAAIKkRQap2htgAAAAASUVORK5CYII=");\tbackground-position: 2px center;\t}\t.ace_dark .ace_gutter-cell.ace_info {\tbackground-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAJFBMVEUAAAChoaGAgIAqKiq+vr6tra1ZWVmUlJSbm5s8PDxubm56enrdgzg3AAAAAXRSTlMAQObYZgAAAClJREFUeNpjYMAPdsMYHegyJZFQBlsUlMFVCWUYKkAZMxZAGdxlDMQBAG+TBP4B6RyJAAAAAElFTkSuQmCC");\t}\t.ace_scrollbar {\tposition: absolute;\tright: 0;\tbottom: 0;\tz-index: 6;\t}\t.ace_scrollbar-inner {\tposition: absolute;\tcursor: text;\tleft: 0;\ttop: 0;\t}\t.ace_scrollbar-v{\toverflow-x: hidden;\toverflow-y: scroll;\ttop: 0;\t}\t.ace_scrollbar-h {\toverflow-x: scroll;\toverflow-y: hidden;\tleft: 0;\t}\t.ace_print-margin {\tposition: absolute;\theight: 100%;\t}\t.ace_text-input {\tposition: absolute;\tz-index: 0;\twidth: 0.5em;\theight: 1em;\topacity: 0;\tbackground: transparent;\t-moz-appearance: none;\tappearance: none;\tborder: none;\tresize: none;\toutline: none;\toverflow: hidden;\tfont: inherit;\tpadding: 0 1px;\tmargin: 0 -1px;\ttext-indent: -1em;\t-ms-user-select: text;\t-moz-user-select: text;\t-webkit-user-select: text;\tuser-select: text;\twhite-space: pre!important;\t}\t.ace_text-input.ace_composition {\tbackground: inherit;\tcolor: inherit;\tz-index: 1000;\topacity: 1;\ttext-indent: 0;\t}\t.ace_layer {\tz-index: 1;\tposition: absolute;\toverflow: hidden;\tword-wrap: normal;\twhite-space: pre;\theight: 100%;\twidth: 100%;\t-moz-box-sizing: border-box;\t-webkit-box-sizing: border-box;\tbox-sizing: border-box;\tpointer-events: none;\t}\t.ace_gutter-layer {\tposition: relative;\twidth: auto;\ttext-align: right;\tpointer-events: auto;\t}\t.ace_text-layer {\tfont: inherit !important;\t}\t.ace_cjk {\tdisplay: inline-block;\ttext-align: center;\t}\t.ace_cursor-layer {\tz-index: 4;\t}\t.ace_cursor {\tz-index: 4;\tposition: absolute;\t-moz-box-sizing: border-box;\t-webkit-box-sizing: border-box;\tbox-sizing: border-box;\tborder-left: 2px solid;\ttransform: translatez(0);\t}\t.ace_slim-cursors .ace_cursor {\tborder-left-width: 1px;\t}\t.ace_overwrite-cursors .ace_cursor {\tborder-left-width: 0;\tborder-bottom: 1px solid;\t}\t.ace_hidden-cursors .ace_cursor {\topacity: 0.2;\t}\t.ace_smooth-blinking .ace_cursor {\t-webkit-transition: opacity 0.18s;\ttransition: opacity 0.18s;\t}\t.ace_editor.ace_multiselect .ace_cursor {\tborder-left-width: 1px;\t}\t.ace_marker-layer .ace_step, .ace_marker-layer .ace_stack {\tposition: absolute;\tz-index: 3;\t}\t.ace_marker-layer .ace_selection {\tposition: absolute;\tz-index: 5;\t}\t.ace_marker-layer .ace_bracket {\tposition: absolute;\tz-index: 6;\t}\t.ace_marker-layer .ace_active-line {\tposition: absolute;\tz-index: 2;\t}\t.ace_marker-layer .ace_selected-word {\tposition: absolute;\tz-index: 4;\t-moz-box-sizing: border-box;\t-webkit-box-sizing: border-box;\tbox-sizing: border-box;\t}\t.ace_line .ace_fold {\t-moz-box-sizing: border-box;\t-webkit-box-sizing: border-box;\tbox-sizing: border-box;\tdisplay: inline-block;\theight: 11px;\tmargin-top: -2px;\tvertical-align: middle;\tbackground-image:\turl("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAAJCAYAAADU6McMAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAJpJREFUeNpi/P//PwOlgAXGYGRklAVSokD8GmjwY1wasKljQpYACtpCFeADcHVQfQyMQAwzwAZI3wJKvCLkfKBaMSClBlR7BOQikCFGQEErIH0VqkabiGCAqwUadAzZJRxQr/0gwiXIal8zQQPnNVTgJ1TdawL0T5gBIP1MUJNhBv2HKoQHHjqNrA4WO4zY0glyNKLT2KIfIMAAQsdgGiXvgnYAAAAASUVORK5CYII="),\turl("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAA3CAYAAADNNiA5AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACJJREFUeNpi+P//fxgTAwPDBxDxD078RSX+YeEyDFMCIMAAI3INmXiwf2YAAAAASUVORK5CYII=");\tbackground-repeat: no-repeat, repeat-x;\tbackground-position: center center, top left;\tcolor: transparent;\tborder: 1px solid black;\tborder-radius: 2px;\tcursor: pointer;\tpointer-events: auto;\t}\t.ace_dark .ace_fold {\t}\t.ace_fold:hover{\tbackground-image:\turl("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAAJCAYAAADU6McMAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAJpJREFUeNpi/P//PwOlgAXGYGRklAVSokD8GmjwY1wasKljQpYACtpCFeADcHVQfQyMQAwzwAZI3wJKvCLkfKBaMSClBlR7BOQikCFGQEErIH0VqkabiGCAqwUadAzZJRxQr/0gwiXIal8zQQPnNVTgJ1TdawL0T5gBIP1MUJNhBv2HKoQHHjqNrA4WO4zY0glyNKLT2KIfIMAAQsdgGiXvgnYAAAAASUVORK5CYII="),\turl("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAA3CAYAAADNNiA5AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACBJREFUeNpi+P//fz4TAwPDZxDxD5X4i5fLMEwJgAADAEPVDbjNw87ZAAAAAElFTkSuQmCC");\t}\t.ace_tooltip {\tbackground-color: #FFF;\tbackground-image: -webkit-linear-gradient(top, transparent, rgba(0, 0, 0, 0.1));\tbackground-image: linear-gradient(to bottom, transparent, rgba(0, 0, 0, 0.1));\tborder: 1px solid gray;\tborder-radius: 1px;\tbox-shadow: 0 1px 2px rgba(0, 0, 0, 0.3);\tcolor: black;\tmax-width: 100%;\tpadding: 3px 4px;\tposition: fixed;\tz-index: 999999;\t-moz-box-sizing: border-box;\t-webkit-box-sizing: border-box;\tbox-sizing: border-box;\tcursor: default;\twhite-space: pre;\tword-wrap: break-word;\tline-height: normal;\tfont-style: normal;\tfont-weight: normal;\tletter-spacing: normal;\tpointer-events: none;\t}\t.ace_folding-enabled > .ace_gutter-cell {\tpadding-right: 13px;\t}\t.ace_fold-widget {\t-moz-box-sizing: border-box;\t-webkit-box-sizing: border-box;\tbox-sizing: border-box;\tmargin: 0 -12px 0 1px;\tdisplay: none;\twidth: 11px;\tvertical-align: top;\tbackground-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAANElEQVR42mWKsQ0AMAzC8ixLlrzQjzmBiEjp0A6WwBCSPgKAXoLkqSot7nN3yMwR7pZ32NzpKkVoDBUxKAAAAABJRU5ErkJggg==");\tbackground-repeat: no-repeat;\tbackground-position: center;\tborder-radius: 3px;\tborder: 1px solid transparent;\tcursor: pointer;\t}\t.ace_folding-enabled .ace_fold-widget {\tdisplay: inline-block; \t}\t.ace_fold-widget.ace_end {\tbackground-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAANElEQVR42m3HwQkAMAhD0YzsRchFKI7sAikeWkrxwScEB0nh5e7KTPWimZki4tYfVbX+MNl4pyZXejUO1QAAAABJRU5ErkJggg==");\t}\t.ace_fold-widget.ace_closed {\tbackground-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAGCAYAAAAG5SQMAAAAOUlEQVR42jXKwQkAMAgDwKwqKD4EwQ26sSOkVWjgIIHAzPiCgaqiqnJHZnKICBERHN194O5b9vbLuAVRL+l0YWnZAAAAAElFTkSuQmCCXA==");\t}\t.ace_fold-widget:hover {\tborder: 1px solid rgba(0, 0, 0, 0.3);\tbackground-color: rgba(255, 255, 255, 0.2);\tbox-shadow: 0 1px 1px rgba(255, 255, 255, 0.7);\t}\t.ace_fold-widget:active {\tborder: 1px solid rgba(0, 0, 0, 0.4);\tbackground-color: rgba(0, 0, 0, 0.05);\tbox-shadow: 0 1px 1px rgba(255, 255, 255, 0.8);\t}\t.ace_dark .ace_fold-widget {\tbackground-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHklEQVQIW2P4//8/AzoGEQ7oGCaLLAhWiSwB146BAQCSTPYocqT0AAAAAElFTkSuQmCC");\t}\t.ace_dark .ace_fold-widget.ace_end {\tbackground-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAH0lEQVQIW2P4//8/AxQ7wNjIAjDMgC4AxjCVKBirIAAF0kz2rlhxpAAAAABJRU5ErkJggg==");\t}\t.ace_dark .ace_fold-widget.ace_closed {\tbackground-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAFCAYAAACAcVaiAAAAHElEQVQIW2P4//+/AxAzgDADlOOAznHAKgPWAwARji8UIDTfQQAAAABJRU5ErkJggg==");\t}\t.ace_dark .ace_fold-widget:hover {\tbox-shadow: 0 1px 1px rgba(255, 255, 255, 0.2);\tbackground-color: rgba(255, 255, 255, 0.1);\t}\t.ace_dark .ace_fold-widget:active {\tbox-shadow: 0 1px 1px rgba(255, 255, 255, 0.2);\t}\t.ace_fold-widget.ace_invalid {\tbackground-color: #FFB4B4;\tborder-color: #DE5555;\t}\t.ace_fade-fold-widgets .ace_fold-widget {\t-webkit-transition: opacity 0.4s ease 0.05s;\ttransition: opacity 0.4s ease 0.05s;\topacity: 0;\t}\t.ace_fade-fold-widgets:hover .ace_fold-widget {\t-webkit-transition: opacity 0.05s ease 0.05s;\ttransition: opacity 0.05s ease 0.05s;\topacity:1;\t}\t.ace_underline {\ttext-decoration: underline;\t}\t.ace_bold {\tfont-weight: bold;\t}\t.ace_nobold .ace_bold {\tfont-weight: normal;\t}\t.ace_italic {\tfont-style: italic;\t}\t.ace_error-marker {\tbackground-color: rgba(255, 0, 0,0.2);\tposition: absolute;\tz-index: 9;\t}\t.ace_highlight-marker {\tbackground-color: rgba(255, 255, 0,0.2);\tposition: absolute;\tz-index: 8;\t}\t.ace_br1 {border-top-left-radius : 3px;}\t.ace_br2 {border-top-right-radius : 3px;}\t.ace_br3 {border-top-left-radius : 3px; border-top-right-radius: 3px;}\t.ace_br4 {border-bottom-right-radius: 3px;}\t.ace_br5 {border-top-left-radius : 3px; border-bottom-right-radius: 3px;}\t.ace_br6 {border-top-right-radius : 3px; border-bottom-right-radius: 3px;}\t.ace_br7 {border-top-left-radius : 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px;}\t.ace_br8 {border-bottom-left-radius : 3px;}\t.ace_br9 {border-top-left-radius : 3px; border-bottom-left-radius: 3px;}\t.ace_br10{border-top-right-radius : 3px; border-bottom-left-radius: 3px;}\t.ace_br11{border-top-left-radius : 3px; border-top-right-radius: 3px; border-bottom-left-radius: 3px;}\t.ace_br12{border-bottom-right-radius: 3px; border-bottom-left-radius: 3px;}\t.ace_br13{border-top-left-radius : 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px;}\t.ace_br14{border-top-right-radius : 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px;}\t.ace_br15{border-top-left-radius : 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px;}\t',"ace_editor.css");var h=function(t,e){var l=this;this.container=t||n.createElement("div"),this.$keepTextAreaAtCursor=!d.isOldIE,n.addCssClass(this.container,"ace_editor"),this.setTheme(e),this.$gutter=n.createElement("div"),this.$gutter.className="ace_gutter",this.container.appendChild(this.$gutter),this.scroller=n.createElement("div"),this.scroller.className="ace_scroller",this.container.appendChild(this.scroller),this.content=n.createElement("div"),this.content.className="ace_content",this.scroller.appendChild(this.content),this.$gutterLayer=new s(this.$gutter),this.$gutterLayer.on("changeGutterWidth",this.onGutterResize.bind(this)),this.$markerBack=new c(this.content);var i=this.$textLayer=new o(this.content);this.canvas=i.element,this.$markerFront=new c(this.content),this.$cursorLayer=new b(this.content),this.$horizScroll=!1,this.$vScroll=!1,this.scrollBar=this.scrollBarV=new m(this.container,this),this.scrollBarH=new r(this.container,this),this.scrollBarV.addEventListener("scroll",(function(t){l.$scrollAnimation||l.session.setScrollTop(t.data-l.scrollMargin.top)})),this.scrollBarH.addEventListener("scroll",(function(t){l.$scrollAnimation||l.session.setScrollLeft(t.data-l.scrollMargin.left)})),this.scrollTop=0,this.scrollLeft=0,this.cursorPos={row:0,column:0},this.$fontMetrics=new g(this.container),this.$textLayer.$setFontMetrics(this.$fontMetrics),this.$textLayer.addEventListener("changeCharacterSize",(function(t){l.updateCharacterSize(),l.onResize(!0,l.gutterWidth,l.$size.width,l.$size.height),l._signal("changeCharacterSize",t)})),this.$size={width:0,height:0,scrollerHeight:0,scrollerWidth:0,$dirty:!0},this.layerConfig={width:1,padding:0,firstRow:0,firstRowScreen:0,lastRow:0,lineHeight:0,characterWidth:0,minHeight:1,maxHeight:1,offset:0,height:1,gutterOffset:1},this.scrollMargin={left:0,right:0,top:0,bottom:0,v:0,h:0},this.$loop=new Z(this.$renderChanges.bind(this),this.container.ownerDocument.defaultView),this.$loop.schedule(this.CHANGE_FULL),this.updateCharacterSize(),this.setPadding(4),a.resetOptions(this),a._emit("renderer",this)};(function(){this.CHANGE_CURSOR=1,this.CHANGE_MARKER=2,this.CHANGE_GUTTER=4,this.CHANGE_SCROLL=8,this.CHANGE_LINES=16,this.CHANGE_TEXT=32,this.CHANGE_SIZE=64,this.CHANGE_MARKER_BACK=128,this.CHANGE_MARKER_FRONT=256,this.CHANGE_FULL=512,this.CHANGE_H_SCROLL=1024,i.implement(this,W),this.updateCharacterSize=function(){this.$textLayer.allowBoldFonts!=this.$allowBoldFonts&&(this.$allowBoldFonts=this.$textLayer.allowBoldFonts,this.setStyle("ace_nobold",!this.$allowBoldFonts)),this.layerConfig.characterWidth=this.characterWidth=this.$textLayer.getCharacterWidth(),this.layerConfig.lineHeight=this.lineHeight=this.$textLayer.getLineHeight(),this.$updatePrintMargin()},this.setSession=function(t){this.session&&this.session.doc.off("changeNewLineMode",this.onChangeNewLineMode),this.session=t,t&&this.scrollMargin.top&&t.getScrollTop()<=0&&t.setScrollTop(-this.scrollMargin.top),this.$cursorLayer.setSession(t),this.$markerBack.setSession(t),this.$markerFront.setSession(t),this.$gutterLayer.setSession(t),this.$textLayer.setSession(t),t&&(this.$loop.schedule(this.CHANGE_FULL),this.session.$setFontMetrics(this.$fontMetrics),this.onChangeNewLineMode=this.onChangeNewLineMode.bind(this),this.onChangeNewLineMode(),this.session.doc.on("changeNewLineMode",this.onChangeNewLineMode))},this.updateLines=function(t,e,l){if(void 0===e&&(e=1/0),this.$changedLines?(this.$changedLines.firstRow>t&&(this.$changedLines.firstRow=t),this.$changedLines.lastRowthis.layerConfig.lastRow||this.$loop.schedule(this.CHANGE_LINES)},this.onChangeNewLineMode=function(){this.$loop.schedule(this.CHANGE_TEXT),this.$textLayer.$updateEolChar()},this.onChangeTabSize=function(){this.$loop.schedule(this.CHANGE_TEXT|this.CHANGE_MARKER),this.$textLayer.onChangeTabSize()},this.updateText=function(){this.$loop.schedule(this.CHANGE_TEXT)},this.updateFull=function(t){t?this.$renderChanges(this.CHANGE_FULL,!0):this.$loop.schedule(this.CHANGE_FULL)},this.updateFontSize=function(){this.$textLayer.checkForSizeChanges()},this.$changes=0,this.$updateSizeAsync=function(){this.$loop.pending?this.$size.$dirty=!0:this.onResize()},this.onResize=function(t,e,l,i){if(!(this.resizing>2)){this.resizing>0?this.resizing++:this.resizing=t?1:0;var n=this.container;i||(i=n.clientHeight||n.scrollHeight),l||(l=n.clientWidth||n.scrollWidth);var a=this.$updateCachedSize(t,e,l,i);if(!this.$size.scrollerHeight||!l&&!i)return this.resizing=0;t&&(this.$gutterLayer.$padding=null),t?this.$renderChanges(a|this.$changes,!0):this.$loop.schedule(a|this.$changes),this.resizing&&(this.resizing=0),this.scrollBarV.scrollLeft=this.scrollBarV.scrollTop=null}},this.$updateCachedSize=function(t,e,l,i){i-=this.$extraHeight||0;var n=0,a=this.$size,d={width:a.width,height:a.height,scrollerHeight:a.scrollerHeight,scrollerWidth:a.scrollerWidth};return i&&(t||a.height!=i)&&(a.height=i,n|=this.CHANGE_SIZE,a.scrollerHeight=a.height,this.$horizScroll&&(a.scrollerHeight-=this.scrollBarH.getHeight()),this.scrollBarV.element.style.bottom=this.scrollBarH.getHeight()+"px",n|=this.CHANGE_SCROLL),l&&(t||a.width!=l)&&(n|=this.CHANGE_SIZE,a.width=l,null==e&&(e=this.$showGutter?this.$gutter.offsetWidth:0),this.gutterWidth=e,this.scrollBarH.element.style.left=this.scroller.style.left=e+"px",a.scrollerWidth=Math.max(0,l-e-this.scrollBarV.getWidth()),this.scrollBarH.element.style.right=this.scroller.style.right=this.scrollBarV.getWidth()+"px",this.scroller.style.bottom=this.scrollBarH.getHeight()+"px",(this.session&&this.session.getUseWrapMode()&&this.adjustWrapLimit()||t)&&(n|=this.CHANGE_FULL)),a.$dirty=!l||!i,n&&this._signal("resize",d),n},this.onGutterResize=function(){var t=this.$showGutter?this.$gutter.offsetWidth:0;t!=this.gutterWidth&&(this.$changes|=this.$updateCachedSize(!0,t,this.$size.width,this.$size.height)),this.session.getUseWrapMode()&&this.adjustWrapLimit()||this.$size.$dirty?this.$loop.schedule(this.CHANGE_FULL):(this.$computeLayerConfig(),this.$loop.schedule(this.CHANGE_MARKER))},this.adjustWrapLimit=function(){var t=this.$size.scrollerWidth-2*this.$padding,e=Math.floor(t/this.characterWidth);return this.session.adjustWrapLimit(e,this.$showPrintMargin&&this.$printMarginColumn)},this.setAnimatedScroll=function(t){this.setOption("animatedScroll",t)},this.getAnimatedScroll=function(){return this.$animatedScroll},this.setShowInvisibles=function(t){this.setOption("showInvisibles",t)},this.getShowInvisibles=function(){return this.getOption("showInvisibles")},this.getDisplayIndentGuides=function(){return this.getOption("displayIndentGuides")},this.setDisplayIndentGuides=function(t){this.setOption("displayIndentGuides",t)},this.setShowPrintMargin=function(t){this.setOption("showPrintMargin",t)},this.getShowPrintMargin=function(){return this.getOption("showPrintMargin")},this.setPrintMarginColumn=function(t){this.setOption("printMarginColumn",t)},this.getPrintMarginColumn=function(){return this.getOption("printMarginColumn")},this.getShowGutter=function(){return this.getOption("showGutter")},this.setShowGutter=function(t){return this.setOption("showGutter",t)},this.getFadeFoldWidgets=function(){return this.getOption("fadeFoldWidgets")},this.setFadeFoldWidgets=function(t){this.setOption("fadeFoldWidgets",t)},this.setHighlightGutterLine=function(t){this.setOption("highlightGutterLine",t)},this.getHighlightGutterLine=function(){return this.getOption("highlightGutterLine")},this.$updateGutterLineHighlight=function(){var t=this.$cursorLayer.$pixelPos,e=this.layerConfig.lineHeight;if(this.session.getUseWrapMode()){var l=this.session.selection.getCursor();l.column=0,t=this.$cursorLayer.getPixelPosition(l,!0),e*=this.session.getRowLength(l.row)}this.$gutterLineHighlight.style.top=t.top-this.layerConfig.offset+"px",this.$gutterLineHighlight.style.height=e+"px"},this.$updatePrintMargin=function(){if(this.$showPrintMargin||this.$printMarginEl){if(!this.$printMarginEl){var t=n.createElement("div");t.className="ace_layer ace_print-margin-layer",this.$printMarginEl=n.createElement("div"),this.$printMarginEl.className="ace_print-margin",t.appendChild(this.$printMarginEl),this.content.insertBefore(t,this.content.firstChild)}var e=this.$printMarginEl.style;e.left=this.characterWidth*this.$printMarginColumn+this.$padding+"px",e.visibility=this.$showPrintMargin?"visible":"hidden",this.session&&-1==this.session.$wrap&&this.adjustWrapLimit()}},this.getContainerElement=function(){return this.container},this.getMouseEventTarget=function(){return this.scroller},this.getTextAreaContainer=function(){return this.container},this.$moveTextAreaToCursor=function(){if(this.$keepTextAreaAtCursor){var t=this.layerConfig,e=this.$cursorLayer.$pixelPos.top,l=this.$cursorLayer.$pixelPos.left;e-=t.offset;var i=this.textarea.style,n=this.lineHeight;if(e<0||e>t.height-n)i.top=i.left="0";else{var a=this.characterWidth;if(this.$composition){var d=this.textarea.value.replace(/^\x01+/,"");a*=this.session.$getStringScreenWidth(d)[0]+2,n+=2}(l-=this.scrollLeft)>this.$size.scrollerWidth-a&&(l=this.$size.scrollerWidth-a),l+=this.gutterWidth,i.height=n+"px",i.width=a+"px",i.left=Math.min(l,this.$size.scrollerWidth-a)+"px",i.top=Math.min(e,this.$size.height-n)+"px"}}},this.getFirstVisibleRow=function(){return this.layerConfig.firstRow},this.getFirstFullyVisibleRow=function(){return this.layerConfig.firstRow+(0===this.layerConfig.offset?0:1)},this.getLastFullyVisibleRow=function(){var t=this.layerConfig,e=t.lastRow;return this.session.documentToScreenRow(e,0)*t.lineHeight-this.session.getScrollTop()>t.height-t.lineHeight?e-1:e},this.getLastVisibleRow=function(){return this.layerConfig.lastRow},this.$padding=null,this.setPadding=function(t){this.$padding=t,this.$textLayer.setPadding(t),this.$cursorLayer.setPadding(t),this.$markerFront.setPadding(t),this.$markerBack.setPadding(t),this.$loop.schedule(this.CHANGE_FULL),this.$updatePrintMargin()},this.setScrollMargin=function(t,e,l,i){var n=this.scrollMargin;n.top=0|t,n.bottom=0|e,n.right=0|i,n.left=0|l,n.v=n.top+n.bottom,n.h=n.left+n.right,n.top&&this.scrollTop<=0&&this.session&&this.session.setScrollTop(-n.top),this.updateFull()},this.getHScrollBarAlwaysVisible=function(){return this.$hScrollBarAlwaysVisible},this.setHScrollBarAlwaysVisible=function(t){this.setOption("hScrollBarAlwaysVisible",t)},this.getVScrollBarAlwaysVisible=function(){return this.$vScrollBarAlwaysVisible},this.setVScrollBarAlwaysVisible=function(t){this.setOption("vScrollBarAlwaysVisible",t)},this.$updateScrollBarV=function(){var t=this.layerConfig.maxHeight,e=this.$size.scrollerHeight;!this.$maxLines&&this.$scrollPastEnd&&(t-=(e-this.lineHeight)*this.$scrollPastEnd,this.scrollTop>t-e&&(t=this.scrollTop+e,this.scrollBarV.scrollTop=null)),this.scrollBarV.setScrollHeight(t+this.scrollMargin.v),this.scrollBarV.setScrollTop(this.scrollTop+this.scrollMargin.top)},this.$updateScrollBarH=function(){this.scrollBarH.setScrollWidth(this.layerConfig.width+2*this.$padding+this.scrollMargin.h),this.scrollBarH.setScrollLeft(this.scrollLeft+this.scrollMargin.left)},this.$frozen=!1,this.freeze=function(){this.$frozen=!0},this.unfreeze=function(){this.$frozen=!1},this.$renderChanges=function(t,e){if(this.$changes&&(t|=this.$changes,this.$changes=0),this.session&&this.container.offsetWidth&&!this.$frozen&&(t||e)){if(this.$size.$dirty)return this.$changes|=t,this.onResize(!0);this.lineHeight||this.$textLayer.checkForSizeChanges(),this._signal("beforeRender");var l=this.layerConfig;if(t&this.CHANGE_FULL||t&this.CHANGE_SIZE||t&this.CHANGE_TEXT||t&this.CHANGE_LINES||t&this.CHANGE_SCROLL||t&this.CHANGE_H_SCROLL){if(t|=this.$computeLayerConfig(),l.firstRow!=this.layerConfig.firstRow&&l.firstRowScreen==this.layerConfig.firstRowScreen){var i=this.scrollTop+(l.firstRow-this.layerConfig.firstRow)*this.lineHeight;i>0&&(this.scrollTop=i,t|=this.CHANGE_SCROLL,t|=this.$computeLayerConfig())}l=this.layerConfig,this.$updateScrollBarV(),t&this.CHANGE_H_SCROLL&&this.$updateScrollBarH(),this.$gutterLayer.element.style.marginTop=-l.offset+"px",this.content.style.marginTop=-l.offset+"px",this.content.style.width=l.width+2*this.$padding+"px",this.content.style.height=l.minHeight+"px"}if(t&this.CHANGE_H_SCROLL&&(this.content.style.marginLeft=-this.scrollLeft+"px",this.scroller.className=this.scrollLeft<=0?"ace_scroller":"ace_scroller ace_scroll-left"),t&this.CHANGE_FULL)return this.$textLayer.update(l),this.$showGutter&&this.$gutterLayer.update(l),this.$markerBack.update(l),this.$markerFront.update(l),this.$cursorLayer.update(l),this.$moveTextAreaToCursor(),this.$highlightGutterLine&&this.$updateGutterLineHighlight(),void this._signal("afterRender");if(t&this.CHANGE_SCROLL)return t&this.CHANGE_TEXT||t&this.CHANGE_LINES?this.$textLayer.update(l):this.$textLayer.scrollLines(l),this.$showGutter&&this.$gutterLayer.update(l),this.$markerBack.update(l),this.$markerFront.update(l),this.$cursorLayer.update(l),this.$highlightGutterLine&&this.$updateGutterLineHighlight(),this.$moveTextAreaToCursor(),void this._signal("afterRender");t&this.CHANGE_TEXT?(this.$textLayer.update(l),this.$showGutter&&this.$gutterLayer.update(l)):t&this.CHANGE_LINES?(this.$updateLines()||t&this.CHANGE_GUTTER&&this.$showGutter)&&this.$gutterLayer.update(l):(t&this.CHANGE_TEXT||t&this.CHANGE_GUTTER)&&this.$showGutter&&this.$gutterLayer.update(l),t&this.CHANGE_CURSOR&&(this.$cursorLayer.update(l),this.$moveTextAreaToCursor(),this.$highlightGutterLine&&this.$updateGutterLineHighlight()),t&(this.CHANGE_MARKER|this.CHANGE_MARKER_FRONT)&&this.$markerFront.update(l),t&(this.CHANGE_MARKER|this.CHANGE_MARKER_BACK)&&this.$markerBack.update(l),this._signal("afterRender")}else this.$changes|=t},this.$autosize=function(){var t=this.session.getScreenLength()*this.lineHeight,e=this.$maxLines*this.lineHeight,l=Math.max((this.$minLines||1)*this.lineHeight,Math.min(e,t))+this.scrollMargin.v+(this.$extraHeight||0);this.$horizScroll&&(l+=this.scrollBarH.getHeight());var i=t>e;if(l!=this.desiredHeight||this.$size.height!=this.desiredHeight||i!=this.$vScroll){i!=this.$vScroll&&(this.$vScroll=i,this.scrollBarV.setVisible(i));var n=this.container.clientWidth;this.container.style.height=l+"px",this.$updateCachedSize(!0,this.$gutterWidth,n,l),this.desiredHeight=l,this._signal("autosize")}},this.$computeLayerConfig=function(){var t=this.session,e=this.$size,l=e.height<=2*this.lineHeight,i=this.session.getScreenLength()*this.lineHeight,n=this.$getLongestLine(),a=!l&&(this.$hScrollBarAlwaysVisible||e.scrollerWidth-n-2*this.$padding<0),d=this.$horizScroll!==a;d&&(this.$horizScroll=a,this.scrollBarH.setVisible(a));var s=this.$vScroll;this.$maxLines&&this.lineHeight>1&&this.$autosize();var c=this.scrollTop%this.lineHeight,o=e.scrollerHeight+this.lineHeight,b=!this.$maxLines&&this.$scrollPastEnd?(e.scrollerHeight-this.lineHeight)*this.$scrollPastEnd:0;i+=b;var r=this.scrollMargin;this.session.setScrollTop(Math.max(-r.top,Math.min(this.scrollTop,i-e.scrollerHeight+r.bottom))),this.session.setScrollLeft(Math.max(-r.left,Math.min(this.scrollLeft,n+2*this.$padding-e.scrollerWidth+r.right)));var m=!l&&(this.$vScrollBarAlwaysVisible||e.scrollerHeight-i+b<0||this.scrollTop>r.top),Z=s!==m;Z&&(this.$vScroll=m,this.scrollBarV.setVisible(m));var g,W,h=Math.ceil(o/this.lineHeight)-1,N=Math.max(0,Math.round((this.scrollTop-c)/this.lineHeight)),y=N+h,I=this.lineHeight;N=t.screenToDocumentRow(N,0);var G=t.getFoldLine(N);G&&(N=G.start.row),g=t.documentToScreenRow(N,0),W=t.getRowLength(N)*I,y=Math.min(t.screenToDocumentRow(y,0),t.getLength()-1),o=e.scrollerHeight+t.getRowLength(y)*I+W,c=this.scrollTop-g*I;var M=0;return this.layerConfig.width!=n&&(M=this.CHANGE_H_SCROLL),(d||Z)&&(M=this.$updateCachedSize(!0,this.gutterWidth,e.width,e.height),this._signal("scrollbarVisibilityChanged"),Z&&(n=this.$getLongestLine())),this.layerConfig={width:n,padding:this.$padding,firstRow:N,firstRowScreen:g,lastRow:y,lineHeight:I,characterWidth:this.characterWidth,minHeight:o,maxHeight:i,offset:c,gutterOffset:Math.max(0,Math.ceil((c+e.height-e.scrollerHeight)/I)),height:this.$size.scrollerHeight},M},this.$updateLines=function(){var t=this.$changedLines.firstRow,e=this.$changedLines.lastRow;this.$changedLines=null;var l=this.layerConfig;if(!(t>l.lastRow+1||ea?(e&&c+d>a+this.lineHeight&&(a-=e*this.$size.scrollerHeight),0===a&&(a=-this.scrollMargin.top),this.session.setScrollTop(a)):c+this.$size.scrollerHeight-sn?(n=1-this.scrollMargin.top||e>0&&this.session.getScrollTop()+this.$size.scrollerHeight-this.layerConfig.maxHeight<-1+this.scrollMargin.bottom||t<0&&this.session.getScrollLeft()>=1-this.scrollMargin.left||t>0&&this.session.getScrollLeft()+this.$size.scrollerWidth-this.layerConfig.width<-1+this.scrollMargin.right||void 0},this.pixelToScreenCoordinates=function(t,e){var l=this.scroller.getBoundingClientRect(),i=(t+this.scrollLeft-l.left-this.$padding)/this.characterWidth,n=Math.floor((e+this.scrollTop-l.top)/this.lineHeight),a=Math.round(i);return{row:n,column:a,side:i-a>0?1:-1}},this.screenToTextCoordinates=function(t,e){var l=this.scroller.getBoundingClientRect(),i=Math.round((t+this.scrollLeft-l.left-this.$padding)/this.characterWidth),n=(e+this.scrollTop-l.top)/this.lineHeight;return this.session.screenToDocumentPosition(n,Math.max(i,0))},this.textToScreenCoordinates=function(t,e){var l=this.scroller.getBoundingClientRect(),i=this.session.documentToScreenPosition(t,e),n=this.$padding+Math.round(i.column*this.characterWidth),a=i.row*this.lineHeight;return{pageX:l.left+n-this.scrollLeft,pageY:l.top+a-this.scrollTop}},this.visualizeFocus=function(){n.addCssClass(this.container,"ace_focus")},this.visualizeBlur=function(){n.removeCssClass(this.container,"ace_focus")},this.showComposition=function(t){this.$composition||(this.$composition={keepTextAreaAtCursor:this.$keepTextAreaAtCursor,cssText:this.textarea.style.cssText}),this.$keepTextAreaAtCursor=!0,n.addCssClass(this.textarea,"ace_composition"),this.textarea.style.cssText="",this.$moveTextAreaToCursor()},this.setCompositionText=function(t){this.$moveTextAreaToCursor()},this.hideComposition=function(){this.$composition&&(n.removeCssClass(this.textarea,"ace_composition"),this.$keepTextAreaAtCursor=this.$composition.keepTextAreaAtCursor,this.textarea.style.cssText=this.$composition.cssText,this.$composition=null)},this.setTheme=function(t,e){var l=this;if(this.$themeId=t,l._dispatchEvent("themeChange",{theme:t}),t&&"string"!=typeof t)d(t);else{var i=t||this.$options.theme.initialValue;a.loadModule(["theme",i],d)}function d(i){if(l.$themeId!=t)return e&&e();if(i.cssClass){n.importCssString(i.cssText,i.cssClass,l.container.ownerDocument),l.theme&&n.removeCssClass(l.container,l.theme.cssClass);var a="padding"in i?i.padding:"padding"in(l.theme||{})?4:l.$padding;l.$padding&&a!=l.$padding&&l.setPadding(a),l.$theme=i.cssClass,l.theme=i,n.addCssClass(l.container,i.cssClass),n.setCssClass(l.container,"ace_dark",i.isDark),l.$size&&(l.$size.width=0,l.$updateSizeAsync()),l._dispatchEvent("themeLoaded",{theme:i}),e&&e()}}},this.getTheme=function(){return this.$themeId},this.setStyle=function(t,e){n.setCssClass(this.container,t,!1!==e)},this.unsetStyle=function(t){n.removeCssClass(this.container,t)},this.setCursorStyle=function(t){this.scroller.style.cursor!=t&&(this.scroller.style.cursor=t)},this.setMouseCursor=function(t){this.scroller.style.cursor=t},this.destroy=function(){this.$textLayer.destroy(),this.$cursorLayer.destroy()}}).call(h.prototype),a.defineOptions(h.prototype,"renderer",{animatedScroll:{initialValue:!1},showInvisibles:{set:function(t){this.$textLayer.setShowInvisibles(t)&&this.$loop.schedule(this.CHANGE_TEXT)},initialValue:!1},showPrintMargin:{set:function(){this.$updatePrintMargin()},initialValue:!0},printMarginColumn:{set:function(){this.$updatePrintMargin()},initialValue:80},printMargin:{set:function(t){"number"==typeof t&&(this.$printMarginColumn=t),this.$showPrintMargin=!!t,this.$updatePrintMargin()},get:function(){return this.$showPrintMargin&&this.$printMarginColumn}},showGutter:{set:function(t){this.$gutter.style.display=t?"block":"none",this.$loop.schedule(this.CHANGE_FULL),this.onGutterResize()},initialValue:!0},fadeFoldWidgets:{set:function(t){n.setCssClass(this.$gutter,"ace_fade-fold-widgets",t)},initialValue:!1},showFoldWidgets:{set:function(t){this.$gutterLayer.setShowFoldWidgets(t)},initialValue:!0},showLineNumbers:{set:function(t){this.$gutterLayer.setShowLineNumbers(t),this.$loop.schedule(this.CHANGE_GUTTER)},initialValue:!0},displayIndentGuides:{set:function(t){this.$textLayer.setDisplayIndentGuides(t)&&this.$loop.schedule(this.CHANGE_TEXT)},initialValue:!0},highlightGutterLine:{set:function(t){if(!this.$gutterLineHighlight)return this.$gutterLineHighlight=n.createElement("div"),this.$gutterLineHighlight.className="ace_gutter-active-line",void this.$gutter.appendChild(this.$gutterLineHighlight);this.$gutterLineHighlight.style.display=t?"":"none",this.$cursorLayer.$pixelPos&&this.$updateGutterLineHighlight()},initialValue:!1,value:!0},hScrollBarAlwaysVisible:{set:function(t){this.$hScrollBarAlwaysVisible&&this.$horizScroll||this.$loop.schedule(this.CHANGE_SCROLL)},initialValue:!1},vScrollBarAlwaysVisible:{set:function(t){this.$vScrollBarAlwaysVisible&&this.$vScroll||this.$loop.schedule(this.CHANGE_SCROLL)},initialValue:!1},fontSize:{set:function(t){"number"==typeof t&&(t+="px"),this.container.style.fontSize=t,this.updateFontSize()},initialValue:12},fontFamily:{set:function(t){this.container.style.fontFamily=t,this.updateFontSize()}},maxLines:{set:function(t){this.updateFull()}},minLines:{set:function(t){this.updateFull()}},scrollPastEnd:{set:function(t){t=+t||0,this.$scrollPastEnd!=t&&(this.$scrollPastEnd=t,this.$loop.schedule(this.CHANGE_SCROLL))},initialValue:0,handlesSet:!0},fixedWidthGutter:{set:function(t){this.$gutterLayer.$fixedWidth=!!t,this.$loop.schedule(this.CHANGE_GUTTER)}},theme:{set:function(t){this.setTheme(t)},get:function(){return this.$themeId||this.theme},initialValue:"./theme/textmate",handlesSet:!0}}),e.VirtualRenderer=h})),ace.define("ace/worker/worker_client",["require","exports","module","ace/lib/oop","ace/lib/net","ace/lib/event_emitter","ace/config"],(function(t,e,i){"use strict";var n=t("../lib/oop"),a=t("../lib/net"),d=t("../lib/event_emitter").EventEmitter,s=t("../config"),c=function(e,i,n,a){if(this.$sendDeltaQueue=this.$sendDeltaQueue.bind(this),this.changeListener=this.changeListener.bind(this),this.onMessage=this.onMessage.bind(this),t.nameToUrl&&!t.toUrl&&(t.toUrl=t.nameToUrl),s.get("packaged")||!t.toUrl)a=a||s.moduleUrl(i.id,"worker");else{var d=this.$normalizePath;a=a||d(t.toUrl("ace/worker/worker.js",null,"_"));var c={};e.forEach((function(e){c[e]=d(t.toUrl(e,null,"_").replace(/(\.js)?(\?.*)?$/,""))}))}try{var o=i.src,b=new(l(66))([o],{type:"application/javascript"}),r=(window.URL||window.webkitURL).createObjectURL(b);this.$worker=new Worker(r)}catch(t){if(!(t instanceof window.DOMException))throw t;b=this.$workerBlob(a);var m=window.URL||window.webkitURL,Z=m.createObjectURL(b);this.$worker=new Worker(Z),m.revokeObjectURL(Z)}this.$worker.postMessage({init:!0,tlns:c,module:i.id,classname:n}),this.callbackId=1,this.callbacks={},this.$worker.onmessage=this.onMessage};(function(){n.implement(this,d),this.onMessage=function(t){var e=t.data;switch(e.type){case"event":this._signal(e.name,{data:e.data});break;case"call":var l=this.callbacks[e.id];l&&(l(e.data),delete this.callbacks[e.id]);break;case"error":this.reportError(e.data);break;case"log":window.console&&console.log&&console.log.apply(console,e.data)}},this.reportError=function(t){window.console&&console.error&&console.error(t)},this.$normalizePath=function(t){return a.qualifyURL(t)},this.terminate=function(){this._signal("terminate",{}),this.deltaQueue=null,this.$worker.terminate(),this.$worker=null,this.$doc&&this.$doc.off("change",this.changeListener),this.$doc=null},this.send=function(t,e){this.$worker.postMessage({command:t,args:e})},this.call=function(t,e,l){if(l){var i=this.callbackId++;this.callbacks[i]=l,e.push(i)}this.send(t,e)},this.emit=function(t,e){try{this.$worker.postMessage({event:t,data:{data:e.data}})}catch(t){console.error(t.stack)}},this.attachToDocument=function(t){this.$doc&&this.terminate(),this.$doc=t,this.call("setValue",[t.getValue()]),t.on("change",this.changeListener)},this.changeListener=function(t){this.deltaQueue||(this.deltaQueue=[],setTimeout(this.$sendDeltaQueue,0)),"insert"==t.action?this.deltaQueue.push(t.start,t.lines):this.deltaQueue.push(t.start,t.end)},this.$sendDeltaQueue=function(){var t=this.deltaQueue;t&&(this.deltaQueue=null,t.length>50&&t.length>this.$doc.getLength()>>1?this.call("setValue",[this.$doc.getValue()]):this.emit("change",{data:t}))},this.$workerBlob=function(t){var e="importScripts('"+a.qualifyURL(t)+"');";try{return new Blob([e],{type:"application/javascript"})}catch(t){var l=new(window.BlobBuilder||window.WebKitBlobBuilder||window.MozBlobBuilder);return l.append(e),l.getBlob("application/javascript")}}}).call(c.prototype);var o=function(t,e,l){this.$sendDeltaQueue=this.$sendDeltaQueue.bind(this),this.changeListener=this.changeListener.bind(this),this.callbackId=1,this.callbacks={},this.messageBuffer=[];var i=null,n=!1,a=Object.create(d),c=this;this.$worker={},this.$worker.terminate=function(){},this.$worker.postMessage=function(t){c.messageBuffer.push(t),i&&(n?setTimeout(o):o())},this.setEmitSync=function(t){n=t};var o=function(){var t=c.messageBuffer.shift();t.command?i[t.command].apply(i,t.args):t.event&&a._signal(t.event,t.data)};a.postMessage=function(t){c.onMessage({data:t})},a.callback=function(t,e){this.postMessage({type:"call",id:e,data:t})},a.emit=function(t,e){this.postMessage({type:"event",name:t,data:e})},s.loadModule(["worker",e],(function(t){for(i=new t[l](a);c.messageBuffer.length;)o()}))};o.prototype=c.prototype,e.UIWorkerClient=o,e.WorkerClient=c})),ace.define("ace/placeholder",["require","exports","module","ace/range","ace/lib/event_emitter","ace/lib/oop"],(function(t,e,l){"use strict";var i=t("./range").Range,n=t("./lib/event_emitter").EventEmitter,a=t("./lib/oop"),d=function(t,e,l,i,n,a){var d=this;this.length=e,this.session=t,this.doc=t.getDocument(),this.mainClass=n,this.othersClass=a,this.$onUpdate=this.onUpdate.bind(this),this.doc.on("change",this.$onUpdate),this.$others=i,this.$onCursorChange=function(){setTimeout((function(){d.onCursorChange()}))},this.$pos=l;var s=t.getUndoManager().$undoStack||t.getUndoManager().$undostack||{length:-1};this.$undoStackDepth=s.length,this.setup(),t.selection.on("changeCursor",this.$onCursorChange)};(function(){a.implement(this,n),this.setup=function(){var t=this,e=this.doc,l=this.session;this.selectionBefore=l.selection.toJSON(),l.selection.inMultiSelectMode&&l.selection.toSingleRange(),this.pos=e.createAnchor(this.$pos.row,this.$pos.column);var n=this.pos;n.$insertRight=!0,n.detach(),n.markerId=l.addMarker(new i(n.row,n.column,n.row,n.column+this.length),this.mainClass,null,!1),this.others=[],this.$others.forEach((function(l){var i=e.createAnchor(l.row,l.column);i.$insertRight=!0,i.detach(),t.others.push(i)})),l.setUndoSelect(!1)},this.showOtherMarkers=function(){if(!this.othersActive){var t=this.session,e=this;this.othersActive=!0,this.others.forEach((function(l){l.markerId=t.addMarker(new i(l.row,l.column,l.row,l.column+e.length),e.othersClass,null,!1)}))}},this.hideOtherMarkers=function(){if(this.othersActive){this.othersActive=!1;for(var t=0;t=this.pos.column&&e.start.column<=this.pos.column+this.length+1,a=e.start.column-this.pos.column;if(this.updateAnchors(t),n&&(this.length+=l),n&&!this.session.$fromUndo)if("insert"===t.action)for(var d=this.others.length-1;d>=0;d--){var s={row:(c=this.others[d]).row,column:c.column+a};this.doc.insertMergedLines(s,t.lines)}else if("remove"===t.action)for(d=this.others.length-1;d>=0;d--){var c;s={row:(c=this.others[d]).row,column:c.column+a},this.doc.remove(new i(s.row,s.column,s.row,s.column-l))}this.$updating=!1,this.updateMarkers()}},this.updateAnchors=function(t){this.pos.onChange(t);for(var e=this.others.length;e--;)this.others[e].onChange(t);this.updateMarkers()},this.updateMarkers=function(){if(!this.$updating){var t=this,e=this.session,l=function(l,n){e.removeMarker(l.markerId),l.markerId=e.addMarker(new i(l.row,l.column,l.row,l.column+t.length),n,null,!1)};l(this.pos,this.mainClass);for(var n=this.others.length;n--;)l(this.others[n],this.othersClass)}},this.onCursorChange=function(t){if(!this.$updating&&this.session){var e=this.session.selection.getCursor();e.row===this.pos.row&&e.column>=this.pos.column&&e.column<=this.pos.column+this.length?(this.showOtherMarkers(),this._emit("cursorEnter",t)):(this.hideOtherMarkers(),this._emit("cursorLeave",t))}},this.detach=function(){this.session.removeMarker(this.pos&&this.pos.markerId),this.hideOtherMarkers(),this.doc.removeEventListener("change",this.$onUpdate),this.session.selection.removeEventListener("changeCursor",this.$onCursorChange),this.session.setUndoSelect(!0),this.session=null},this.cancel=function(){if(-1!==this.$undoStackDepth){for(var t=this.session.getUndoManager(),e=(t.$undoStack||t.$undostack).length-this.$undoStackDepth,l=0;l1&&!this.inMultiSelectMode&&(this._signal("multiSelect"),this.inMultiSelectMode=!0,this.session.$undoSelect=!1,this.rangeList.attach(this.session)),e||this.fromOrientedRange(t)}},this.toSingleRange=function(t){t=t||this.ranges[0];var e=this.rangeList.removeAll();e.length&&this.$onRemoveRange(e),t&&this.fromOrientedRange(t)},this.substractPoint=function(t){var e=this.rangeList.substractPoint(t);if(e)return this.$onRemoveRange(e),e[0]},this.mergeOverlappingRanges=function(){var t=this.rangeList.merge();t.length?this.$onRemoveRange(t):this.ranges[0]&&this.fromOrientedRange(this.ranges[0])},this.$onAddRange=function(t){this.rangeCount=this.rangeList.ranges.length,this.ranges.unshift(t),this._signal("addRange",{range:t})},this.$onRemoveRange=function(t){if(this.rangeCount=this.rangeList.ranges.length,1==this.rangeCount&&this.inMultiSelectMode){var e=this.rangeList.ranges.pop();t.push(e),this.rangeCount=0}for(var l=t.length;l--;){var i=this.ranges.indexOf(t[l]);this.ranges.splice(i,1)}this._signal("removeRange",{ranges:t}),0===this.rangeCount&&this.inMultiSelectMode&&(this.inMultiSelectMode=!1,this._signal("singleSelect"),this.session.$undoSelect=!0,this.rangeList.detach(this.session)),(e=e||this.ranges[0])&&!e.isEqual(this.getRange())&&this.fromOrientedRange(e)},this.$initRangeList=function(){this.rangeList||(this.rangeList=new i,this.ranges=[],this.rangeCount=0)},this.getAllRanges=function(){return this.rangeCount?this.rangeList.ranges.concat():[this.getRange()]},this.splitIntoLines=function(){if(this.rangeCount>1){var t=this.rangeList.ranges,e=t[t.length-1],l=n.fromPoints(t[0].start,e.end);this.toSingleRange(),this.setSelectionRange(l,e.cursor==e.start)}else{l=this.getRange();var i=this.isBackwards(),a=l.start.row,d=l.end.row;if(a==d){if(i)var s=l.end,c=l.start;else s=l.start,c=l.end;return this.addRange(n.fromPoints(c,c)),void this.addRange(n.fromPoints(s,s))}var o=[],b=this.getLineRange(a,!0);b.start.column=l.start.column,o.push(b);for(var r=a+1;r1){var t=this.rangeList.ranges,e=t[t.length-1],l=n.fromPoints(t[0].start,e.end);this.toSingleRange(),this.setSelectionRange(l,e.cursor==e.start)}else{var i=this.session.documentToScreenPosition(this.selectionLead),a=this.session.documentToScreenPosition(this.selectionAnchor);this.rectangularRangeBlock(i,a).forEach(this.addRange,this)}},this.rectangularRangeBlock=function(t,e,l){var i=[],a=t.column0;)h--;if(h>0)for(var N=0;i[N].isEmpty();)N++;for(var y=h;y>=N;y--)i[y].isEmpty()&&i.splice(y,1)}return i}}.call(a.prototype);var m=t("./editor").Editor;function Z(t){t.$multiselectOnSessionChange||(t.$onAddRange=t.$onAddRange.bind(t),t.$onRemoveRange=t.$onRemoveRange.bind(t),t.$onMultiSelect=t.$onMultiSelect.bind(t),t.$onSingleSelect=t.$onSingleSelect.bind(t),t.$multiselectOnSessionChange=e.onSessionChange.bind(t),t.$checkMultiselectChange=t.$checkMultiselectChange.bind(t),t.$multiselectOnSessionChange(t),t.on("changeSession",t.$multiselectOnSessionChange),t.on("mousedown",d),t.commands.addCommands(o.defaultCommands),function(t){var e=t.textInput.getElement(),l=!1;function i(e){l&&(t.renderer.setMouseCursor(""),l=!1)}s.addListener(e,"keydown",(function(e){var n=18==e.keyCode&&!(e.ctrlKey||e.shiftKey||e.metaKey);t.$blockSelectEnabled&&n?l||(t.renderer.setMouseCursor("crosshair"),l=!0):l&&i()})),s.addListener(e,"keyup",i),s.addListener(e,"blur",i)}(t))}(function(){this.updateSelectionMarkers=function(){this.renderer.updateCursor(),this.renderer.updateBackMarkers()},this.addSelectionMarker=function(t){t.cursor||(t.cursor=t.end);var e=this.getSelectionStyle();return t.marker=this.session.addMarker(t,"ace_selection",e),this.session.$selectionMarkers.push(t),this.session.selectionMarkerCount=this.session.$selectionMarkers.length,t},this.removeSelectionMarker=function(t){if(t.marker){this.session.removeMarker(t.marker);var e=this.session.$selectionMarkers.indexOf(t);-1!=e&&this.session.$selectionMarkers.splice(e,1),this.session.selectionMarkerCount=this.session.$selectionMarkers.length}},this.removeSelectionMarkers=function(t){for(var e=this.session.$selectionMarkers,l=t.length;l--;){var i=t[l];if(i.marker){this.session.removeMarker(i.marker);var n=e.indexOf(i);-1!=n&&e.splice(n,1)}}this.session.selectionMarkerCount=e.length},this.$onAddRange=function(t){this.addSelectionMarker(t.range),this.renderer.updateCursor(),this.renderer.updateBackMarkers()},this.$onRemoveRange=function(t){this.removeSelectionMarkers(t.ranges),this.renderer.updateCursor(),this.renderer.updateBackMarkers()},this.$onMultiSelect=function(t){this.inMultiSelectMode||(this.inMultiSelectMode=!0,this.setStyle("ace_multiselect"),this.keyBinding.addKeyboardHandler(o.keyboardHandler),this.commands.setDefaultHandler("exec",this.$onMultiSelectExec),this.renderer.updateCursor(),this.renderer.updateBackMarkers())},this.$onSingleSelect=function(t){this.session.multiSelect.inVirtualMode||(this.inMultiSelectMode=!1,this.unsetStyle("ace_multiselect"),this.keyBinding.removeKeyboardHandler(o.keyboardHandler),this.commands.removeDefaultHandler("exec",this.$onMultiSelectExec),this.renderer.updateCursor(),this.renderer.updateBackMarkers(),this._emit("changeSelection"))},this.$onMultiSelectExec=function(t){var e=t.command,l=t.editor;if(l.multiSelect){if(e.multiSelectAction)"forEach"==e.multiSelectAction?i=l.forEachSelection(e,t.args):"forEachLine"==e.multiSelectAction?i=l.forEachSelection(e,t.args,!0):"single"==e.multiSelectAction?(l.exitMultiSelectMode(),i=e.exec(l,t.args||{})):i=e.multiSelectAction(l,t.args||{});else{var i=e.exec(l,t.args||{});l.multiSelect.addRange(l.multiSelect.toOrientedRange()),l.multiSelect.mergeOverlappingRanges()}return i}},this.forEachSelection=function(t,e,l){if(!this.inVirtualSelectionMode){var i,n=l&&l.keepOrder,d=1==l||l&&l.$byLines,s=this.session,c=this.selection,o=c.rangeList,b=(n?c:o).ranges;if(!b.length)return t.exec?t.exec(this,e||{}):t(this,e||{});var r=c._eventRegistry;c._eventRegistry={};var m=new a(s);this.inVirtualSelectionMode=!0;for(var Z=b.length;Z--;){if(d)for(;Z>0&&b[Z].start.row==b[Z-1].end.row;)Z--;m.fromOrientedRange(b[Z]),m.index=Z,this.selection=s.selection=m;var g=t.exec?t.exec(this,e||{}):t(this,e||{});i||void 0===g||(i=g),m.toOrientedRange(b[Z])}m.detach(),this.selection=s.selection=c,this.inVirtualSelectionMode=!1,c._eventRegistry=r,c.mergeOverlappingRanges();var W=this.renderer.$scrollAnimation;return this.onCursorChange(),this.onSelectionChange(),W&&W.from==W.to&&this.renderer.animateScrolling(W.from),i}},this.exitMultiSelectMode=function(){this.inMultiSelectMode&&!this.inVirtualSelectionMode&&this.multiSelect.toSingleRange()},this.getSelectedText=function(){var t="";if(this.inMultiSelectMode&&!this.inVirtualSelectionMode){for(var e=this.multiSelect.rangeList.ranges,l=[],i=0;id&&(d=l.column),ib?t.insert(i,c.stringRepeat(" ",a-b)):t.remove(new n(i.row,i.column,i.row,i.column-a+b)),e.start.column=e.end.column=d,e.start.row=e.end.row=i.row,e.cursor=e.end})),e.fromOrientedRange(l[0]),this.renderer.updateCursor(),this.renderer.updateBackMarkers()}else{var b=this.selection.getRange(),r=b.start.row,m=b.end.row,Z=r==m;if(Z){var g,W=this.session.getLength();do{g=this.session.getLine(m)}while(/[=:]/.test(g)&&++m0);r<0&&(r=0),m>=W&&(m=W-1)}var h=this.session.removeFullLines(r,m);h=this.$reAlignText(h,Z),this.session.insert({row:r,column:0},h.join("\n")+"\n"),Z||(b.start.column=0,b.end.column=h[h.length-1].length),this.selection.setRange(b)}},this.$reAlignText=function(t,e){var l,i,n,a=!0,d=!0;return t.map((function(t){var e=t.match(/(\s*)(.*?)(\s*)([=:].*)/);return e?null==l?(l=e[1].length,i=e[2].length,n=e[3].length,e):(l+i+n!=e[1].length+e[2].length+e[3].length&&(d=!1),l!=e[1].length&&(a=!1),l>e[1].length&&(l=e[1].length),ie[3].length&&(n=e[3].length),e):[t]})).map(e?o:a?d?function(t){return t[2]?s(l+i-t[2].length)+t[2]+s(n)+t[4].replace(/^([=:])\s+/,"$1 "):t[0]}:o:function(t){return t[2]?s(l)+t[2]+s(n)+t[4].replace(/^([=:])\s+/,"$1 "):t[0]});function s(t){return c.stringRepeat(" ",t)}function o(t){return t[2]?s(l)+t[2]+s(i-t[2].length+n)+t[4].replace(/^([=:])\s+/,"$1 "):t[0]}}}).call(m.prototype),e.onSessionChange=function(t){var e=t.session;e&&!e.multiSelect&&(e.$selectionMarkers=[],e.selection.$initRangeList(),e.multiSelect=e.selection),this.multiSelect=e&&e.multiSelect;var l=t.oldSession;l&&(l.multiSelect.off("addRange",this.$onAddRange),l.multiSelect.off("removeRange",this.$onRemoveRange),l.multiSelect.off("multiSelect",this.$onMultiSelect),l.multiSelect.off("singleSelect",this.$onSingleSelect),l.multiSelect.lead.off("change",this.$checkMultiselectChange),l.multiSelect.anchor.off("change",this.$checkMultiselectChange)),e&&(e.multiSelect.on("addRange",this.$onAddRange),e.multiSelect.on("removeRange",this.$onRemoveRange),e.multiSelect.on("multiSelect",this.$onMultiSelect),e.multiSelect.on("singleSelect",this.$onSingleSelect),e.multiSelect.lead.on("change",this.$checkMultiselectChange),e.multiSelect.anchor.on("change",this.$checkMultiselectChange)),e&&this.inMultiSelectMode!=e.selection.inMultiSelectMode&&(e.selection.inMultiSelectMode?this.$onMultiSelect():this.$onSingleSelect())},e.MultiSelect=Z,t("./config").defineOptions(m.prototype,"editor",{enableMultiselect:{set:function(t){Z(this),t?(this.on("changeSession",this.$multiselectOnSessionChange),this.on("mousedown",d)):(this.off("changeSession",this.$multiselectOnSessionChange),this.off("mousedown",d))},value:!0},enableBlockSelect:{set:function(t){this.$blockSelectEnabled=t},value:!0}})})),ace.define("ace/mode/folding/fold_mode",["require","exports","module","ace/range"],(function(t,e,l){"use strict";var i=t("../../range").Range,n=e.FoldMode=function(){};(function(){this.foldingStartMarker=null,this.foldingStopMarker=null,this.getFoldWidget=function(t,e,l){var i=t.getLine(l);return this.foldingStartMarker.test(i)?"start":"markbeginend"==e&&this.foldingStopMarker&&this.foldingStopMarker.test(i)?"end":""},this.getFoldWidgetRange=function(t,e,l){return null},this.indentationBlock=function(t,e,l){var n=/\S/,a=t.getLine(e),d=a.search(n);if(-1!=d){for(var s=l||a.length,c=t.getLength(),o=e,b=e;++eo){var m=t.getLine(b).length;return new i(o,s,b,m)}}},this.openingBracketBlock=function(t,e,l,n,a){var d={row:l,column:n+1},s=t.$findClosingBracket(e,d,a);if(s){var c=t.foldWidgets[s.row];return null==c&&(c=t.getFoldWidget(s.row)),"start"==c&&s.row>d.row&&(s.row--,s.column=t.getLine(s.row).length),i.fromPoints(d,s)}},this.closingBracketBlock=function(t,e,l,n,a){var d={row:l,column:n},s=t.$findOpeningBracket(e,d);if(s)return s.column++,d.column--,i.fromPoints(s,d)}}).call(n.prototype)})),ace.define("ace/theme/textmate",["require","exports","module","ace/lib/dom"],(function(t,e,l){"use strict";e.isDark=!1,e.cssClass="ace-tm",e.cssText='.ace-tm .ace_gutter {\tbackground: #f0f0f0;\tcolor: #333;\t}\t.ace-tm .ace_print-margin {\twidth: 1px;\tbackground: #e8e8e8;\t}\t.ace-tm .ace_fold {\tbackground-color: #6B72E6;\t}\t.ace-tm {\tbackground-color: #FFFFFF;\tcolor: black;\t}\t.ace-tm .ace_cursor {\tcolor: black;\t}\t.ace-tm .ace_invisible {\tcolor: rgb(191, 191, 191);\t}\t.ace-tm .ace_storage,\t.ace-tm .ace_keyword {\tcolor: blue;\t}\t.ace-tm .ace_constant {\tcolor: rgb(197, 6, 11);\t}\t.ace-tm .ace_constant.ace_buildin {\tcolor: rgb(88, 72, 246);\t}\t.ace-tm .ace_constant.ace_language {\tcolor: rgb(88, 92, 246);\t}\t.ace-tm .ace_constant.ace_library {\tcolor: rgb(6, 150, 14);\t}\t.ace-tm .ace_invalid {\tbackground-color: rgba(255, 0, 0, 0.1);\tcolor: red;\t}\t.ace-tm .ace_support.ace_function {\tcolor: rgb(60, 76, 114);\t}\t.ace-tm .ace_support.ace_constant {\tcolor: rgb(6, 150, 14);\t}\t.ace-tm .ace_support.ace_type,\t.ace-tm .ace_support.ace_class {\tcolor: rgb(109, 121, 222);\t}\t.ace-tm .ace_keyword.ace_operator {\tcolor: rgb(104, 118, 135);\t}\t.ace-tm .ace_string {\tcolor: rgb(3, 106, 7);\t}\t.ace-tm .ace_comment {\tcolor: rgb(76, 136, 107);\t}\t.ace-tm .ace_comment.ace_doc {\tcolor: rgb(0, 102, 255);\t}\t.ace-tm .ace_comment.ace_doc.ace_tag {\tcolor: rgb(128, 159, 191);\t}\t.ace-tm .ace_constant.ace_numeric {\tcolor: rgb(0, 0, 205);\t}\t.ace-tm .ace_variable {\tcolor: rgb(49, 132, 149);\t}\t.ace-tm .ace_xml-pe {\tcolor: rgb(104, 104, 91);\t}\t.ace-tm .ace_entity.ace_name.ace_function {\tcolor: #0000A2;\t}\t.ace-tm .ace_heading {\tcolor: rgb(12, 7, 255);\t}\t.ace-tm .ace_list {\tcolor:rgb(185, 6, 144);\t}\t.ace-tm .ace_meta.ace_tag {\tcolor:rgb(0, 22, 142);\t}\t.ace-tm .ace_string.ace_regex {\tcolor: rgb(255, 0, 0)\t}\t.ace-tm .ace_marker-layer .ace_selection {\tbackground: rgb(181, 213, 255);\t}\t.ace-tm.ace_multiselect .ace_selection.ace_start {\tbox-shadow: 0 0 3px 0px white;\t}\t.ace-tm .ace_marker-layer .ace_step {\tbackground: rgb(252, 255, 0);\t}\t.ace-tm .ace_marker-layer .ace_stack {\tbackground: rgb(164, 229, 101);\t}\t.ace-tm .ace_marker-layer .ace_bracket {\tmargin: -1px 0 0 -1px;\tborder: 1px solid rgb(192, 192, 192);\t}\t.ace-tm .ace_marker-layer .ace_active-line {\tbackground: rgba(0, 0, 0, 0.07);\t}\t.ace-tm .ace_gutter-active-line {\tbackground-color : #dcdcdc;\t}\t.ace-tm .ace_marker-layer .ace_selected-word {\tbackground: rgb(250, 250, 255);\tborder: 1px solid rgb(200, 200, 250);\t}\t.ace-tm .ace_indent-guide {\tbackground: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAE0lEQVQImWP4////f4bLly//BwAmVgd1/w11/gAAAABJRU5ErkJggg==") right repeat-y;\t}\t',t("../lib/dom").importCssString(e.cssText,e.cssClass)})),ace.define("ace/line_widgets",["require","exports","module","ace/lib/oop","ace/lib/dom","ace/range"],(function(t,e,l){"use strict";t("./lib/oop");var i=t("./lib/dom");function n(t){this.session=t,this.session.widgetManager=this,this.session.getRowLength=this.getRowLength,this.session.$getWidgetScreenLength=this.$getWidgetScreenLength,this.updateOnChange=this.updateOnChange.bind(this),this.renderWidgets=this.renderWidgets.bind(this),this.measureWidgets=this.measureWidgets.bind(this),this.session._changedWidgets=[],this.$onChangeEditor=this.$onChangeEditor.bind(this),this.session.on("change",this.updateOnChange),this.session.on("changeFold",this.updateOnFold),this.session.on("changeEditor",this.$onChangeEditor)}t("./range").Range,function(){this.getRowLength=function(t){var e;return e=this.lineWidgets&&this.lineWidgets[t]&&this.lineWidgets[t].rowCount||0,this.$useWrapMode&&this.$wrapData[t]?this.$wrapData[t].length+1+e:1+e},this.$getWidgetScreenLength=function(){var t=0;return this.lineWidgets.forEach((function(e){e&&e.rowCount&&!e.hidden&&(t+=e.rowCount)})),t},this.$onChangeEditor=function(t){this.attach(t.editor)},this.attach=function(t){t&&t.widgetManager&&t.widgetManager!=this&&t.widgetManager.detach(),this.editor!=t&&(this.detach(),this.editor=t,t&&(t.widgetManager=this,t.renderer.on("beforeRender",this.measureWidgets),t.renderer.on("afterRender",this.renderWidgets)))},this.detach=function(t){var e=this.editor;if(e){this.editor=null,e.widgetManager=null,e.renderer.off("beforeRender",this.measureWidgets),e.renderer.off("afterRender",this.renderWidgets);var l=this.session.lineWidgets;l&&l.forEach((function(t){t&&t.el&&t.el.parentNode&&(t._inDocument=!1,t.el.parentNode.removeChild(t.el))}))}},this.updateOnFold=function(t,e){var l=e.lineWidgets;if(l&&t.action){for(var i=t.data,n=i.start.row,a=i.end.row,d="add"==t.action,s=n+1;s0&&!i[n];)n--;this.firstRow=l.firstRow,this.lastRow=l.lastRow,e.$cursorLayer.config=l;for(var d=n;d<=a;d++){var s=i[d];if(s&&s.el)if(s.hidden)s.el.style.top=-100-(s.pixelHeight||0)+"px";else{s._inDocument||(s._inDocument=!0,e.container.appendChild(s.el));var c=e.$cursorLayer.getPixelPosition({row:d,column:0},!0).top;s.coverLine||(c+=l.lineHeight*this.session.getRowLineCount(s.row)),s.el.style.top=c-l.offset+"px";var o=s.coverGutter?0:e.gutterWidth;s.fixedWidth||(o-=e.scrollLeft),s.el.style.left=o+"px",s.fullWidth&&s.screenWidth&&(s.el.style.minWidth=l.width+2*l.padding+"px"),s.fixedWidth?s.el.style.right=e.scrollBar.getWidth()+"px":s.el.style.right=""}}}}}.call(n.prototype),e.LineWidgets=n})),ace.define("ace/ext/error_marker",["require","exports","module","ace/line_widgets","ace/lib/dom","ace/range"],(function(t,e,l){"use strict";var i=t("../line_widgets").LineWidgets,n=t("../lib/dom"),a=t("../range").Range;e.showErrorMarker=function(t,e){var l=t.session;l.widgetManager||(l.widgetManager=new i(l),l.widgetManager.attach(t));var d=t.getCursorPosition(),s=d.row,c=l.widgetManager.getWidgetsAtRow(s).filter((function(t){return"errorMarker"==t.type}))[0];c?c.destroy():s-=e;var o,b=function(t,e,l){var i=t.getAnnotations().sort(a.comparePoints);if(i.length){var n=function(t,e,l){for(var i=0,n=t.length-1;i<=n;){var a=i+n>>1,d=l(e,t[a]);if(d>0)i=a+1;else{if(!(d<0))return a;n=a-1}}return-(i+1)}(i,{row:e,column:-1},a.comparePoints);n<0&&(n=-n-1),n>=i.length?n=l>0?0:i.length-1:0===n&&l<0&&(n=i.length-1);var d=i[n];if(d&&l){if(d.row===e){do{d=i[n+=l]}while(d&&d.row===e);if(!d)return i.slice()}var s=[];e=d.row;do{s[l<0?"unshift":"push"](d),d=i[n+=l]}while(d&&d.row==e);return s.length&&s}}}(l,s,e);if(b){var r=b[0];d.column=(r.pos&&"number"!=typeof r.column?r.pos.sc:r.column)||0,d.row=r.row,o=t.renderer.$gutterLayer.$annotations[d.row]}else{if(c)return;o={text:["Looks good!"],className:"ace_ok"}}t.session.unfold(d.row),t.selection.moveToPosition(d);var m={row:d.row,fixedWidth:!0,coverGutter:!0,el:n.createElement("div"),type:"errorMarker"},Z=m.el.appendChild(n.createElement("div")),g=m.el.appendChild(n.createElement("div"));g.className="error_widget_arrow "+o.className;var W=t.renderer.$cursorLayer.getPixelPosition(d).left;g.style.left=W+t.renderer.gutterWidth-5+"px",m.el.className="error_widget_wrapper",Z.className="error_widget "+o.className,Z.innerHTML=o.text.join("
"),Z.appendChild(n.createElement("div"));var h=function(t,e,l){if(0===e&&("esc"===l||"return"===l))return m.destroy(),{command:"null"}};m.destroy=function(){t.$mouseHandler.isMousePressed||(t.keyBinding.removeKeyboardHandler(h),l.widgetManager.removeLineWidget(m),t.off("changeSelection",m.destroy),t.off("changeSession",m.destroy),t.off("mouseup",m.destroy),t.off("change",m.destroy))},t.keyBinding.addKeyboardHandler(h),t.on("changeSelection",m.destroy),t.on("changeSession",m.destroy),t.on("mouseup",m.destroy),t.on("change",m.destroy),t.session.widgetManager.addLineWidget(m),m.el.onmousedown=t.focus.bind(t),t.renderer.scrollCursorIntoView(null,.5,{bottom:m.el.offsetHeight})},n.importCssString("\t .error_widget_wrapper {\t background: inherit;\t color: inherit;\t border:none\t }\t .error_widget {\t border-top: solid 2px;\t border-bottom: solid 2px;\t margin: 5px 0;\t padding: 10px 40px;\t white-space: pre-wrap;\t }\t .error_widget.ace_error, .error_widget_arrow.ace_error{\t border-color: #ff5a5a\t }\t .error_widget.ace_warning, .error_widget_arrow.ace_warning{\t border-color: #F1D817\t }\t .error_widget.ace_info, .error_widget_arrow.ace_info{\t border-color: #5a5a5a\t }\t .error_widget.ace_ok, .error_widget_arrow.ace_ok{\t border-color: #5aaa5a\t }\t .error_widget_arrow {\t position: absolute;\t border: solid 5px;\t border-top-color: transparent!important;\t border-right-color: transparent!important;\t border-left-color: transparent!important;\t top: -5px;\t }\t","")})),ace.define("ace/ace",["require","exports","module","ace/lib/fixoldbrowsers","ace/lib/dom","ace/lib/event","ace/editor","ace/edit_session","ace/undomanager","ace/virtual_renderer","ace/worker/worker_client","ace/keyboard/hash_handler","ace/placeholder","ace/multi_select","ace/mode/folding/fold_mode","ace/theme/textmate","ace/ext/error_marker","ace/config"],(function(t,e,l){"use strict";t("./lib/fixoldbrowsers");var i=t("./lib/dom"),n=t("./lib/event"),a=t("./editor").Editor,d=t("./edit_session").EditSession,s=t("./undomanager").UndoManager,c=t("./virtual_renderer").VirtualRenderer;t("./worker/worker_client"),t("./keyboard/hash_handler"),t("./placeholder"),t("./multi_select"),t("./mode/folding/fold_mode"),t("./theme/textmate"),t("./ext/error_marker"),e.config=t("./config"),e.acequire=t,e.edit=function(t){if("string"==typeof t){var l=t;if(!(t=document.getElementById(l)))throw new Error("ace.edit can't find div #"+l)}if(t&&t.env&&t.env.editor instanceof a)return t.env.editor;var d="";if(t&&/input|textarea/i.test(t.tagName)){var s=t;d=s.value,t=i.createElement("pre"),s.parentNode.replaceChild(t,s)}else t&&(d=i.getInnerText(t),t.innerHTML="");var o=e.createEditSession(d),b=new a(new c(t));b.setSession(o);var r={document:o,editor:b,onResize:b.resize.bind(b,null)};return s&&(r.textarea=s),n.addListener(window,"resize",r.onResize),b.on("destroy",(function(){n.removeListener(window,"resize",r.onResize),r.editor.container.env=null})),b.container.env=b.env=r,b},e.createEditSession=function(t,e){var l=new d(t,e);return l.setUndoManager(new s),l},e.EditSession=d,e.UndoManager=s,e.version="1.2.3"})),ace.acequire(["ace/ace"],(function(t){for(var e in t&&t.config.init(!0),window.ace||(window.ace=t),t)t.hasOwnProperty(e)&&(window.ace[e]=t[e])})),t.exports=window.ace.acequire("ace/ace")},function(t,e){t.exports=function(){throw new Error("define cannot be used indirect")}},function(t,e){(function(e){t.exports=function(){if(e.Blob)try{return new Blob(["asdf"],{type:"text/plain"}),Blob}catch(t){}var t=e.WebKitBlobBuilder||e.MozBlobBuilder||e.MSBlobBuilder;return function(e,l){var i=new t,n=l.endings,a=l.type;if(n)for(var d=0,s=e.length;d-1},Z.recordAutoInsert=function(t,e,l){var n=t.getCursorPosition(),a=e.doc.getLine(n.row);this.isAutoInsertedClosing(n,a,i.autoInsertedLineEnd[0])||(i.autoInsertedBrackets=0),i.autoInsertedRow=n.row,i.autoInsertedLineEnd=l+a.substr(n.column),i.autoInsertedBrackets++},Z.recordMaybeInsert=function(t,e,l){var n=t.getCursorPosition(),a=e.doc.getLine(n.row);this.isMaybeInsertedClosing(n,a)||(i.maybeInsertedBrackets=0),i.maybeInsertedRow=n.row,i.maybeInsertedLineStart=a.substr(0,n.column)+l,i.maybeInsertedLineEnd=a.substr(n.column),i.maybeInsertedBrackets++},Z.isAutoInsertedClosing=function(t,e,l){return i.autoInsertedBrackets>0&&t.row===i.autoInsertedRow&&l===i.autoInsertedLineEnd[0]&&e.substr(t.column)===i.autoInsertedLineEnd},Z.isMaybeInsertedClosing=function(t,e){return i.maybeInsertedBrackets>0&&t.row===i.maybeInsertedRow&&e.substr(t.column)===i.maybeInsertedLineEnd&&e.substr(0,t.column)==i.maybeInsertedLineStart},Z.popAutoInsertedClosing=function(){i.autoInsertedLineEnd=i.autoInsertedLineEnd.substr(1),i.autoInsertedBrackets--},Z.clearMaybeInsertedClosing=function(){i&&(i.maybeInsertedBrackets=0,i.maybeInsertedRow=-1)},n.inherits(Z,a),e.CstyleBehaviour=Z})),ace.define("ace/mode/folding/cstyle",["require","exports","module","ace/lib/oop","ace/range","ace/mode/folding/fold_mode"],(function(t,e,l){"use strict";var i=t("../../lib/oop"),n=t("../../range").Range,a=t("./fold_mode").FoldMode,d=e.FoldMode=function(t){t&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\|[^|]*?$/,"|"+t.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\|[^|]*?$/,"|"+t.end)))};i.inherits(d,a),function(){this.foldingStartMarker=/(\{|\[)[^\}\]]*$|^\s*(\/\*)/,this.foldingStopMarker=/^[^\[\{]*(\}|\])|^[\s\*]*(\*\/)/,this.singleLineBlockCommentRe=/^\s*(\/\*).*\*\/\s*$/,this.tripleStarBlockCommentRe=/^\s*(\/\*\*\*).*\*\/\s*$/,this.startRegionRe=/^\s*(\/\*|\/\/)#?region\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(t,e,l){var i=t.getLine(l);if(this.singleLineBlockCommentRe.test(i)&&!this.startRegionRe.test(i)&&!this.tripleStarBlockCommentRe.test(i))return"";var n=this._getFoldWidgetBase(t,e,l);return!n&&this.startRegionRe.test(i)?"start":n},this.getFoldWidgetRange=function(t,e,l,i){var n,a=t.getLine(l);if(this.startRegionRe.test(a))return this.getCommentRegionBlock(t,a,l);if(n=a.match(this.foldingStartMarker)){var d=n.index;if(n[1])return this.openingBracketBlock(t,n[1],l,d);var s=t.getCommentFoldRange(l,d+n[0].length,1);return s&&!s.isMultiLine()&&(i?s=this.getSectionRange(t,l):"all"!=e&&(s=null)),s}return"markbegin"!==e&&(n=a.match(this.foldingStopMarker))?(d=n.index+n[0].length,n[1]?this.closingBracketBlock(t,n[1],l,d):t.getCommentFoldRange(l,d,-1)):void 0},this.getSectionRange=function(t,e){for(var l=t.getLine(e),i=l.search(/\S/),a=e,d=l.length,s=e+=1,c=t.getLength();++eo)break;var b=this.getFoldWidgetRange(t,"all",e);if(b){if(b.start.row<=a)break;if(b.isMultiLine())e=b.end.row;else if(i==o)break}s=e}}return new n(a,d,s,t.getLine(s).length)},this.getCommentRegionBlock=function(t,e,l){for(var i=e.search(/\s*$/),a=t.getLength(),d=l,s=/^\s*(?:\/\*|\/\/|--)#?(end)?region\b/,c=1;++ld)return new n(d,i,l,e.length)}}.call(d.prototype)})),ace.define("ace/mode/json",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/json_highlight_rules","ace/mode/matching_brace_outdent","ace/mode/behaviour/cstyle","ace/mode/folding/cstyle","ace/worker/worker_client"],(function(t,e,i){"use strict";var n=t("../lib/oop"),a=t("./text").Mode,d=t("./json_highlight_rules").JsonHighlightRules,s=t("./matching_brace_outdent").MatchingBraceOutdent,c=t("./behaviour/cstyle").CstyleBehaviour,o=t("./folding/cstyle").FoldMode,b=t("../worker/worker_client").WorkerClient,r=function(){this.HighlightRules=d,this.$outdent=new s,this.$behaviour=new c,this.foldingRules=new o};n.inherits(r,a),function(){this.getNextLineIndent=function(t,e,l){var i=this.$getIndent(e);return"start"==t&&e.match(/^.*[\{\(\[]\s*$/)&&(i+=l),i},this.checkOutdent=function(t,e,l){return this.$outdent.checkOutdent(e,l)},this.autoOutdent=function(t,e,l){this.$outdent.autoOutdent(e,l)},this.createWorker=function(t){var e=new b(["ace"],l(68),"JsonWorker");return e.attachToDocument(t.getDocument()),e.on("annotate",(function(e){t.setAnnotations(e.data)})),e.on("terminate",(function(){t.clearAnnotations()})),e},this.$id="ace/mode/json"}.call(r.prototype),e.Mode=r}))},function(t,e){t.exports.id="ace/mode/json_worker",t.exports.src='"no use strict";(function(window){function resolveModuleId(id,paths){for(var testPath=id,tail="";testPath;){var alias=paths[testPath];if("string"==typeof alias)return alias+tail;if(alias)return alias.location.replace(/\\/*$/,"/")+(tail||alias.main||alias.name);if(alias===!1)return"";var i=testPath.lastIndexOf("/");if(-1===i)break;tail=testPath.substr(i)+tail,testPath=testPath.slice(0,i)}return id}if(!(void 0!==window.window&&window.document||window.acequire&&window.define)){window.console||(window.console=function(){var msgs=Array.prototype.slice.call(arguments,0);postMessage({type:"log",data:msgs})},window.console.error=window.console.warn=window.console.log=window.console.trace=window.console),window.window=window,window.ace=window,window.onerror=function(message,file,line,col,err){postMessage({type:"error",data:{message:message,data:err.data,file:file,line:line,col:col,stack:err.stack}})},window.normalizeModule=function(parentId,moduleName){if(-1!==moduleName.indexOf("!")){var chunks=moduleName.split("!");return window.normalizeModule(parentId,chunks[0])+"!"+window.normalizeModule(parentId,chunks[1])}if("."==moduleName.charAt(0)){var base=parentId.split("/").slice(0,-1).join("/");for(moduleName=(base?base+"/":"")+moduleName;-1!==moduleName.indexOf(".")&&previous!=moduleName;){var previous=moduleName;moduleName=moduleName.replace(/^\\.\\//,"").replace(/\\/\\.\\//,"/").replace(/[^\\/]+\\/\\.\\.\\//,"")}}return moduleName},window.acequire=function acequire(parentId,id){if(id||(id=parentId,parentId=null),!id.charAt)throw Error("worker.js acequire() accepts only (parentId, id) as arguments");id=window.normalizeModule(parentId,id);var module=window.acequire.modules[id];if(module)return module.initialized||(module.initialized=!0,module.exports=module.factory().exports),module.exports;if(!window.acequire.tlns)return console.log("unable to load "+id);var path=resolveModuleId(id,window.acequire.tlns);return".js"!=path.slice(-3)&&(path+=".js"),window.acequire.id=id,window.acequire.modules[id]={},importScripts(path),window.acequire(parentId,id)},window.acequire.modules={},window.acequire.tlns={},window.define=function(id,deps,factory){if(2==arguments.length?(factory=deps,"string"!=typeof id&&(deps=id,id=window.acequire.id)):1==arguments.length&&(factory=id,deps=[],id=window.acequire.id),"function"!=typeof factory)return window.acequire.modules[id]={exports:factory,initialized:!0},void 0;deps.length||(deps=["require","exports","module"]);var req=function(childId){return window.acequire(id,childId)};window.acequire.modules[id]={exports:{},factory:function(){var module=this,returnExports=factory.apply(this,deps.map(function(dep){switch(dep){case"require":return req;case"exports":return module.exports;case"module":return module;default:return req(dep)}}));return returnExports&&(module.exports=returnExports),module}}},window.define.amd={},acequire.tlns={},window.initBaseUrls=function(topLevelNamespaces){for(var i in topLevelNamespaces)acequire.tlns[i]=topLevelNamespaces[i]},window.initSender=function(){var EventEmitter=window.acequire("ace/lib/event_emitter").EventEmitter,oop=window.acequire("ace/lib/oop"),Sender=function(){};return function(){oop.implement(this,EventEmitter),this.callback=function(data,callbackId){postMessage({type:"call",id:callbackId,data:data})},this.emit=function(name,data){postMessage({type:"event",name:name,data:data})}}.call(Sender.prototype),new Sender};var main=window.main=null,sender=window.sender=null;window.onmessage=function(e){var msg=e.data;if(msg.event&&sender)sender._signal(msg.event,msg.data);else if(msg.command)if(main[msg.command])main[msg.command].apply(main,msg.args);else{if(!window[msg.command])throw Error("Unknown command:"+msg.command);window[msg.command].apply(window,msg.args)}else if(msg.init){window.initBaseUrls(msg.tlns),acequire("ace/lib/es5-shim"),sender=window.sender=window.initSender();var clazz=acequire(msg.module)[msg.classname];main=window.main=new clazz(sender)}}}})(this),ace.define("ace/lib/oop",["require","exports","module"],function(acequire,exports){"use strict";exports.inherits=function(ctor,superCtor){ctor.super_=superCtor,ctor.prototype=Object.create(superCtor.prototype,{constructor:{value:ctor,enumerable:!1,writable:!0,configurable:!0}})},exports.mixin=function(obj,mixin){for(var key in mixin)obj[key]=mixin[key];return obj},exports.implement=function(proto,mixin){exports.mixin(proto,mixin)}}),ace.define("ace/range",["require","exports","module"],function(acequire,exports){"use strict";var comparePoints=function(p1,p2){return p1.row-p2.row||p1.column-p2.column},Range=function(startRow,startColumn,endRow,endColumn){this.start={row:startRow,column:startColumn},this.end={row:endRow,column:endColumn}};(function(){this.isEqual=function(range){return this.start.row===range.start.row&&this.end.row===range.end.row&&this.start.column===range.start.column&&this.end.column===range.end.column},this.toString=function(){return"Range: ["+this.start.row+"/"+this.start.column+"] -> ["+this.end.row+"/"+this.end.column+"]"},this.contains=function(row,column){return 0==this.compare(row,column)},this.compareRange=function(range){var cmp,end=range.end,start=range.start;return cmp=this.compare(end.row,end.column),1==cmp?(cmp=this.compare(start.row,start.column),1==cmp?2:0==cmp?1:0):-1==cmp?-2:(cmp=this.compare(start.row,start.column),-1==cmp?-1:1==cmp?42:0)},this.comparePoint=function(p){return this.compare(p.row,p.column)},this.containsRange=function(range){return 0==this.comparePoint(range.start)&&0==this.comparePoint(range.end)},this.intersects=function(range){var cmp=this.compareRange(range);return-1==cmp||0==cmp||1==cmp},this.isEnd=function(row,column){return this.end.row==row&&this.end.column==column},this.isStart=function(row,column){return this.start.row==row&&this.start.column==column},this.setStart=function(row,column){"object"==typeof row?(this.start.column=row.column,this.start.row=row.row):(this.start.row=row,this.start.column=column)},this.setEnd=function(row,column){"object"==typeof row?(this.end.column=row.column,this.end.row=row.row):(this.end.row=row,this.end.column=column)},this.inside=function(row,column){return 0==this.compare(row,column)?this.isEnd(row,column)||this.isStart(row,column)?!1:!0:!1},this.insideStart=function(row,column){return 0==this.compare(row,column)?this.isEnd(row,column)?!1:!0:!1},this.insideEnd=function(row,column){return 0==this.compare(row,column)?this.isStart(row,column)?!1:!0:!1},this.compare=function(row,column){return this.isMultiLine()||row!==this.start.row?this.start.row>row?-1:row>this.end.row?1:this.start.row===row?column>=this.start.column?0:-1:this.end.row===row?this.end.column>=column?0:1:0:this.start.column>column?-1:column>this.end.column?1:0},this.compareStart=function(row,column){return this.start.row==row&&this.start.column==column?-1:this.compare(row,column)},this.compareEnd=function(row,column){return this.end.row==row&&this.end.column==column?1:this.compare(row,column)},this.compareInside=function(row,column){return this.end.row==row&&this.end.column==column?1:this.start.row==row&&this.start.column==column?-1:this.compare(row,column)},this.clipRows=function(firstRow,lastRow){if(this.end.row>lastRow)var end={row:lastRow+1,column:0};else if(firstRow>this.end.row)var end={row:firstRow,column:0};if(this.start.row>lastRow)var start={row:lastRow+1,column:0};else if(firstRow>this.start.row)var start={row:firstRow,column:0};return Range.fromPoints(start||this.start,end||this.end)},this.extend=function(row,column){var cmp=this.compare(row,column);if(0==cmp)return this;if(-1==cmp)var start={row:row,column:column};else var end={row:row,column:column};return Range.fromPoints(start||this.start,end||this.end)},this.isEmpty=function(){return this.start.row===this.end.row&&this.start.column===this.end.column},this.isMultiLine=function(){return this.start.row!==this.end.row},this.clone=function(){return Range.fromPoints(this.start,this.end)},this.collapseRows=function(){return 0==this.end.column?new Range(this.start.row,0,Math.max(this.start.row,this.end.row-1),0):new Range(this.start.row,0,this.end.row,0)},this.toScreenRange=function(session){var screenPosStart=session.documentToScreenPosition(this.start),screenPosEnd=session.documentToScreenPosition(this.end);return new Range(screenPosStart.row,screenPosStart.column,screenPosEnd.row,screenPosEnd.column)},this.moveBy=function(row,column){this.start.row+=row,this.start.column+=column,this.end.row+=row,this.end.column+=column}}).call(Range.prototype),Range.fromPoints=function(start,end){return new Range(start.row,start.column,end.row,end.column)},Range.comparePoints=comparePoints,Range.comparePoints=function(p1,p2){return p1.row-p2.row||p1.column-p2.column},exports.Range=Range}),ace.define("ace/apply_delta",["require","exports","module"],function(acequire,exports){"use strict";exports.applyDelta=function(docLines,delta){var row=delta.start.row,startColumn=delta.start.column,line=docLines[row]||"";switch(delta.action){case"insert":var lines=delta.lines;if(1===lines.length)docLines[row]=line.substring(0,startColumn)+delta.lines[0]+line.substring(startColumn);else{var args=[row,1].concat(delta.lines);docLines.splice.apply(docLines,args),docLines[row]=line.substring(0,startColumn)+docLines[row],docLines[row+delta.lines.length-1]+=line.substring(startColumn)}break;case"remove":var endColumn=delta.end.column,endRow=delta.end.row;row===endRow?docLines[row]=line.substring(0,startColumn)+line.substring(endColumn):docLines.splice(row,endRow-row+1,line.substring(0,startColumn)+docLines[endRow].substring(endColumn))}}}),ace.define("ace/lib/event_emitter",["require","exports","module"],function(acequire,exports){"use strict";var EventEmitter={},stopPropagation=function(){this.propagationStopped=!0},preventDefault=function(){this.defaultPrevented=!0};EventEmitter._emit=EventEmitter._dispatchEvent=function(eventName,e){this._eventRegistry||(this._eventRegistry={}),this._defaultHandlers||(this._defaultHandlers={});var listeners=this._eventRegistry[eventName]||[],defaultHandler=this._defaultHandlers[eventName];if(listeners.length||defaultHandler){"object"==typeof e&&e||(e={}),e.type||(e.type=eventName),e.stopPropagation||(e.stopPropagation=stopPropagation),e.preventDefault||(e.preventDefault=preventDefault),listeners=listeners.slice();for(var i=0;listeners.length>i&&(listeners[i](e,this),!e.propagationStopped);i++);return defaultHandler&&!e.defaultPrevented?defaultHandler(e,this):void 0}},EventEmitter._signal=function(eventName,e){var listeners=(this._eventRegistry||{})[eventName];if(listeners){listeners=listeners.slice();for(var i=0;listeners.length>i;i++)listeners[i](e,this)}},EventEmitter.once=function(eventName,callback){var _self=this;callback&&this.addEventListener(eventName,function newCallback(){_self.removeEventListener(eventName,newCallback),callback.apply(null,arguments)})},EventEmitter.setDefaultHandler=function(eventName,callback){var handlers=this._defaultHandlers;if(handlers||(handlers=this._defaultHandlers={_disabled_:{}}),handlers[eventName]){var old=handlers[eventName],disabled=handlers._disabled_[eventName];disabled||(handlers._disabled_[eventName]=disabled=[]),disabled.push(old);var i=disabled.indexOf(callback);-1!=i&&disabled.splice(i,1)}handlers[eventName]=callback},EventEmitter.removeDefaultHandler=function(eventName,callback){var handlers=this._defaultHandlers;if(handlers){var disabled=handlers._disabled_[eventName];if(handlers[eventName]==callback)handlers[eventName],disabled&&this.setDefaultHandler(eventName,disabled.pop());else if(disabled){var i=disabled.indexOf(callback);-1!=i&&disabled.splice(i,1)}}},EventEmitter.on=EventEmitter.addEventListener=function(eventName,callback,capturing){this._eventRegistry=this._eventRegistry||{};var listeners=this._eventRegistry[eventName];return listeners||(listeners=this._eventRegistry[eventName]=[]),-1==listeners.indexOf(callback)&&listeners[capturing?"unshift":"push"](callback),callback},EventEmitter.off=EventEmitter.removeListener=EventEmitter.removeEventListener=function(eventName,callback){this._eventRegistry=this._eventRegistry||{};var listeners=this._eventRegistry[eventName];if(listeners){var index=listeners.indexOf(callback);-1!==index&&listeners.splice(index,1)}},EventEmitter.removeAllListeners=function(eventName){this._eventRegistry&&(this._eventRegistry[eventName]=[])},exports.EventEmitter=EventEmitter}),ace.define("ace/anchor",["require","exports","module","ace/lib/oop","ace/lib/event_emitter"],function(acequire,exports){"use strict";var oop=acequire("./lib/oop"),EventEmitter=acequire("./lib/event_emitter").EventEmitter,Anchor=exports.Anchor=function(doc,row,column){this.$onChange=this.onChange.bind(this),this.attach(doc),column===void 0?this.setPosition(row.row,row.column):this.setPosition(row,column)};(function(){function $pointsInOrder(point1,point2,equalPointsInOrder){var bColIsAfter=equalPointsInOrder?point1.column<=point2.column:point1.columnthis.row)){var point=$getTransformedPoint(delta,{row:this.row,column:this.column},this.$insertRight);this.setPosition(point.row,point.column,!0)}},this.setPosition=function(row,column,noClip){var pos;if(pos=noClip?{row:row,column:column}:this.$clipPositionToDocument(row,column),this.row!=pos.row||this.column!=pos.column){var old={row:this.row,column:this.column};this.row=pos.row,this.column=pos.column,this._signal("change",{old:old,value:pos})}},this.detach=function(){this.document.removeEventListener("change",this.$onChange)},this.attach=function(doc){this.document=doc||this.document,this.document.on("change",this.$onChange)},this.$clipPositionToDocument=function(row,column){var pos={};return row>=this.document.getLength()?(pos.row=Math.max(0,this.document.getLength()-1),pos.column=this.document.getLine(pos.row).length):0>row?(pos.row=0,pos.column=0):(pos.row=row,pos.column=Math.min(this.document.getLine(pos.row).length,Math.max(0,column))),0>column&&(pos.column=0),pos}}).call(Anchor.prototype)}),ace.define("ace/document",["require","exports","module","ace/lib/oop","ace/apply_delta","ace/lib/event_emitter","ace/range","ace/anchor"],function(acequire,exports){"use strict";var oop=acequire("./lib/oop"),applyDelta=acequire("./apply_delta").applyDelta,EventEmitter=acequire("./lib/event_emitter").EventEmitter,Range=acequire("./range").Range,Anchor=acequire("./anchor").Anchor,Document=function(textOrLines){this.$lines=[""],0===textOrLines.length?this.$lines=[""]:Array.isArray(textOrLines)?this.insertMergedLines({row:0,column:0},textOrLines):this.insert({row:0,column:0},textOrLines)};(function(){oop.implement(this,EventEmitter),this.setValue=function(text){var len=this.getLength()-1;this.remove(new Range(0,0,len,this.getLine(len).length)),this.insert({row:0,column:0},text)},this.getValue=function(){return this.getAllLines().join(this.getNewLineCharacter())},this.createAnchor=function(row,column){return new Anchor(this,row,column)},this.$split=0==="aaa".split(/a/).length?function(text){return text.replace(/\\r\\n|\\r/g,"\\n").split("\\n")}:function(text){return text.split(/\\r\\n|\\r|\\n/)},this.$detectNewLine=function(text){var match=text.match(/^.*?(\\r\\n|\\r|\\n)/m);this.$autoNewLine=match?match[1]:"\\n",this._signal("changeNewLineMode")},this.getNewLineCharacter=function(){switch(this.$newLineMode){case"windows":return"\\r\\n";case"unix":return"\\n";default:return this.$autoNewLine||"\\n"}},this.$autoNewLine="",this.$newLineMode="auto",this.setNewLineMode=function(newLineMode){this.$newLineMode!==newLineMode&&(this.$newLineMode=newLineMode,this._signal("changeNewLineMode"))},this.getNewLineMode=function(){return this.$newLineMode},this.isNewLine=function(text){return"\\r\\n"==text||"\\r"==text||"\\n"==text},this.getLine=function(row){return this.$lines[row]||""},this.getLines=function(firstRow,lastRow){return this.$lines.slice(firstRow,lastRow+1)},this.getAllLines=function(){return this.getLines(0,this.getLength())},this.getLength=function(){return this.$lines.length},this.getTextRange=function(range){return this.getLinesForRange(range).join(this.getNewLineCharacter())},this.getLinesForRange=function(range){var lines;if(range.start.row===range.end.row)lines=[this.getLine(range.start.row).substring(range.start.column,range.end.column)];else{lines=this.getLines(range.start.row,range.end.row),lines[0]=(lines[0]||"").substring(range.start.column);var l=lines.length-1;range.end.row-range.start.row==l&&(lines[l]=lines[l].substring(0,range.end.column))}return lines},this.insertLines=function(row,lines){return console.warn("Use of document.insertLines is deprecated. Use the insertFullLines method instead."),this.insertFullLines(row,lines)},this.removeLines=function(firstRow,lastRow){return console.warn("Use of document.removeLines is deprecated. Use the removeFullLines method instead."),this.removeFullLines(firstRow,lastRow)},this.insertNewLine=function(position){return console.warn("Use of document.insertNewLine is deprecated. Use insertMergedLines(position, [\'\', \'\']) instead."),this.insertMergedLines(position,["",""])},this.insert=function(position,text){return 1>=this.getLength()&&this.$detectNewLine(text),this.insertMergedLines(position,this.$split(text))},this.insertInLine=function(position,text){var start=this.clippedPos(position.row,position.column),end=this.pos(position.row,position.column+text.length);return this.applyDelta({start:start,end:end,action:"insert",lines:[text]},!0),this.clonePos(end)},this.clippedPos=function(row,column){var length=this.getLength();void 0===row?row=length:0>row?row=0:row>=length&&(row=length-1,column=void 0);var line=this.getLine(row);return void 0==column&&(column=line.length),column=Math.min(Math.max(column,0),line.length),{row:row,column:column}},this.clonePos=function(pos){return{row:pos.row,column:pos.column}},this.pos=function(row,column){return{row:row,column:column}},this.$clipPosition=function(position){var length=this.getLength();return position.row>=length?(position.row=Math.max(0,length-1),position.column=this.getLine(length-1).length):(position.row=Math.max(0,position.row),position.column=Math.min(Math.max(position.column,0),this.getLine(position.row).length)),position},this.insertFullLines=function(row,lines){row=Math.min(Math.max(row,0),this.getLength());var column=0;this.getLength()>row?(lines=lines.concat([""]),column=0):(lines=[""].concat(lines),row--,column=this.$lines[row].length),this.insertMergedLines({row:row,column:column},lines)},this.insertMergedLines=function(position,lines){var start=this.clippedPos(position.row,position.column),end={row:start.row+lines.length-1,column:(1==lines.length?start.column:0)+lines[lines.length-1].length};return this.applyDelta({start:start,end:end,action:"insert",lines:lines}),this.clonePos(end)},this.remove=function(range){var start=this.clippedPos(range.start.row,range.start.column),end=this.clippedPos(range.end.row,range.end.column);return this.applyDelta({start:start,end:end,action:"remove",lines:this.getLinesForRange({start:start,end:end})}),this.clonePos(start)},this.removeInLine=function(row,startColumn,endColumn){var start=this.clippedPos(row,startColumn),end=this.clippedPos(row,endColumn);return this.applyDelta({start:start,end:end,action:"remove",lines:this.getLinesForRange({start:start,end:end})},!0),this.clonePos(start)},this.removeFullLines=function(firstRow,lastRow){firstRow=Math.min(Math.max(0,firstRow),this.getLength()-1),lastRow=Math.min(Math.max(0,lastRow),this.getLength()-1);var deleteFirstNewLine=lastRow==this.getLength()-1&&firstRow>0,deleteLastNewLine=this.getLength()-1>lastRow,startRow=deleteFirstNewLine?firstRow-1:firstRow,startCol=deleteFirstNewLine?this.getLine(startRow).length:0,endRow=deleteLastNewLine?lastRow+1:lastRow,endCol=deleteLastNewLine?0:this.getLine(endRow).length,range=new Range(startRow,startCol,endRow,endCol),deletedLines=this.$lines.slice(firstRow,lastRow+1);return this.applyDelta({start:range.start,end:range.end,action:"remove",lines:this.getLinesForRange(range)}),deletedLines},this.removeNewLine=function(row){this.getLength()-1>row&&row>=0&&this.applyDelta({start:this.pos(row,this.getLine(row).length),end:this.pos(row+1,0),action:"remove",lines:["",""]})},this.replace=function(range,text){if(range instanceof Range||(range=Range.fromPoints(range.start,range.end)),0===text.length&&range.isEmpty())return range.start;if(text==this.getTextRange(range))return range.end;this.remove(range);var end;return end=text?this.insert(range.start,text):range.start},this.applyDeltas=function(deltas){for(var i=0;deltas.length>i;i++)this.applyDelta(deltas[i])},this.revertDeltas=function(deltas){for(var i=deltas.length-1;i>=0;i--)this.revertDelta(deltas[i])},this.applyDelta=function(delta,doNotValidate){var isInsert="insert"==delta.action;(isInsert?1>=delta.lines.length&&!delta.lines[0]:!Range.comparePoints(delta.start,delta.end))||(isInsert&&delta.lines.length>2e4&&this.$splitAndapplyLargeDelta(delta,2e4),applyDelta(this.$lines,delta,doNotValidate),this._signal("change",delta))},this.$splitAndapplyLargeDelta=function(delta,MAX){for(var lines=delta.lines,l=lines.length,row=delta.start.row,column=delta.start.column,from=0,to=0;;){from=to,to+=MAX-1;var chunk=lines.slice(from,to);if(to>l){delta.lines=chunk,delta.start.row=row+from,delta.start.column=column;break}chunk.push(""),this.applyDelta({start:this.pos(row+from,column),end:this.pos(row+to,column=0),action:delta.action,lines:chunk},!0)}},this.revertDelta=function(delta){this.applyDelta({start:this.clonePos(delta.start),end:this.clonePos(delta.end),action:"insert"==delta.action?"remove":"insert",lines:delta.lines.slice()})},this.indexToPosition=function(index,startRow){for(var lines=this.$lines||this.getAllLines(),newlineLength=this.getNewLineCharacter().length,i=startRow||0,l=lines.length;l>i;i++)if(index-=lines[i].length+newlineLength,0>index)return{row:i,column:index+lines[i].length+newlineLength};return{row:l-1,column:lines[l-1].length}},this.positionToIndex=function(pos,startRow){for(var lines=this.$lines||this.getAllLines(),newlineLength=this.getNewLineCharacter().length,index=0,row=Math.min(pos.row,lines.length),i=startRow||0;row>i;++i)index+=lines[i].length+newlineLength;return index+pos.column}}).call(Document.prototype),exports.Document=Document}),ace.define("ace/lib/lang",["require","exports","module"],function(acequire,exports){"use strict";exports.last=function(a){return a[a.length-1]},exports.stringReverse=function(string){return string.split("").reverse().join("")},exports.stringRepeat=function(string,count){for(var result="";count>0;)1&count&&(result+=string),(count>>=1)&&(string+=string);return result};var trimBeginRegexp=/^\\s\\s*/,trimEndRegexp=/\\s\\s*$/;exports.stringTrimLeft=function(string){return string.replace(trimBeginRegexp,"")},exports.stringTrimRight=function(string){return string.replace(trimEndRegexp,"")},exports.copyObject=function(obj){var copy={};for(var key in obj)copy[key]=obj[key];return copy},exports.copyArray=function(array){for(var copy=[],i=0,l=array.length;l>i;i++)copy[i]=array[i]&&"object"==typeof array[i]?this.copyObject(array[i]):array[i];return copy},exports.deepCopy=function deepCopy(obj){if("object"!=typeof obj||!obj)return obj;var copy;if(Array.isArray(obj)){copy=[];for(var key=0;obj.length>key;key++)copy[key]=deepCopy(obj[key]);return copy}var cons=obj.constructor;if(cons===RegExp)return obj;copy=cons();for(var key in obj)copy[key]=deepCopy(obj[key]);return copy},exports.arrayToMap=function(arr){for(var map={},i=0;arr.length>i;i++)map[arr[i]]=1;return map},exports.createMap=function(props){var map=Object.create(null);for(var i in props)map[i]=props[i];return map},exports.arrayRemove=function(array,value){for(var i=0;array.length>=i;i++)value===array[i]&&array.splice(i,1)},exports.escapeRegExp=function(str){return str.replace(/([.*+?^${}()|[\\]\\/\\\\])/g,"\\\\$1")},exports.escapeHTML=function(str){return str.replace(/&/g,"&").replace(/"/g,""").replace(/\'/g,"'").replace(/i;i+=2){if(Array.isArray(data[i+1]))var d={action:"insert",start:data[i],lines:data[i+1]};else var d={action:"remove",start:data[i],end:data[i+1]};doc.applyDelta(d,!0)}return _self.$timeout?deferredUpdate.schedule(_self.$timeout):(_self.onUpdate(),void 0)})};(function(){this.$timeout=500,this.setTimeout=function(timeout){this.$timeout=timeout},this.setValue=function(value){this.doc.setValue(value),this.deferredUpdate.schedule(this.$timeout)},this.getValue=function(callbackId){this.sender.callback(this.doc.getValue(),callbackId)},this.onUpdate=function(){},this.isPending=function(){return this.deferredUpdate.isPending()}}).call(Mirror.prototype)}),ace.define("ace/mode/json/json_parse",["require","exports","module"],function(){"use strict";var at,ch,text,value,escapee={\'"\':\'"\',"\\\\":"\\\\","/":"/",b:"\\b",f:"\\f",n:"\\n",r:"\\r",t:"\t"},error=function(m){throw{name:"SyntaxError",message:m,at:at,text:text}},next=function(c){return c&&c!==ch&&error("Expected \'"+c+"\' instead of \'"+ch+"\'"),ch=text.charAt(at),at+=1,ch},number=function(){var number,string="";for("-"===ch&&(string="-",next("-"));ch>="0"&&"9">=ch;)string+=ch,next();if("."===ch)for(string+=".";next()&&ch>="0"&&"9">=ch;)string+=ch;if("e"===ch||"E"===ch)for(string+=ch,next(),("-"===ch||"+"===ch)&&(string+=ch,next());ch>="0"&&"9">=ch;)string+=ch,next();return number=+string,isNaN(number)?(error("Bad number"),void 0):number},string=function(){var hex,i,uffff,string="";if(\'"\'===ch)for(;next();){if(\'"\'===ch)return next(),string;if("\\\\"===ch)if(next(),"u"===ch){for(uffff=0,i=0;4>i&&(hex=parseInt(next(),16),isFinite(hex));i+=1)uffff=16*uffff+hex;string+=String.fromCharCode(uffff)}else{if("string"!=typeof escapee[ch])break;string+=escapee[ch]}else string+=ch}error("Bad string")},white=function(){for(;ch&&" ">=ch;)next()},word=function(){switch(ch){case"t":return next("t"),next("r"),next("u"),next("e"),!0;case"f":return next("f"),next("a"),next("l"),next("s"),next("e"),!1;case"n":return next("n"),next("u"),next("l"),next("l"),null}error("Unexpected \'"+ch+"\'")},array=function(){var array=[];if("["===ch){if(next("["),white(),"]"===ch)return next("]"),array;for(;ch;){if(array.push(value()),white(),"]"===ch)return next("]"),array;next(","),white()}}error("Bad array")},object=function(){var key,object={};if("{"===ch){if(next("{"),white(),"}"===ch)return next("}"),object;for(;ch;){if(key=string(),white(),next(":"),Object.hasOwnProperty.call(object,key)&&error(\'Duplicate key "\'+key+\'"\'),object[key]=value(),white(),"}"===ch)return next("}"),object;next(","),white()}}error("Bad object")};return value=function(){switch(white(),ch){case"{":return object();case"[":return array();case\'"\':return string();case"-":return number();default:return ch>="0"&&"9">=ch?number():word()}},function(source,reviver){var result;return text=source,at=0,ch=" ",result=value(),white(),ch&&error("Syntax error"),"function"==typeof reviver?function walk(holder,key){var k,v,value=holder[key];if(value&&"object"==typeof value)for(k in value)Object.hasOwnProperty.call(value,k)&&(v=walk(value,k),void 0!==v?value[k]=v:delete value[k]);return reviver.call(holder,key,value)}({"":result},""):result}}),ace.define("ace/mode/json_worker",["require","exports","module","ace/lib/oop","ace/worker/mirror","ace/mode/json/json_parse"],function(acequire,exports){"use strict";var oop=acequire("../lib/oop"),Mirror=acequire("../worker/mirror").Mirror,parse=acequire("./json/json_parse"),JsonWorker=exports.JsonWorker=function(sender){Mirror.call(this,sender),this.setTimeout(200)};oop.inherits(JsonWorker,Mirror),function(){this.onUpdate=function(){var value=this.doc.getValue(),errors=[];try{value&&parse(value)}catch(e){var pos=this.doc.indexToPosition(e.at-1);errors.push({row:pos.row,column:pos.column,text:e.message,type:"error"})}this.sender.emit("annotate",errors)}}.call(JsonWorker.prototype)}),ace.define("ace/lib/es5-shim",["require","exports","module"],function(){function Empty(){}function doesDefinePropertyWork(object){try{return Object.defineProperty(object,"sentinel",{}),"sentinel"in object}catch(exception){}}function toInteger(n){return n=+n,n!==n?n=0:0!==n&&n!==1/0&&n!==-(1/0)&&(n=(n>0||-1)*Math.floor(Math.abs(n))),n}Function.prototype.bind||(Function.prototype.bind=function(that){var target=this;if("function"!=typeof target)throw new TypeError("Function.prototype.bind called on incompatible "+target);var args=slice.call(arguments,1),bound=function(){if(this instanceof bound){var result=target.apply(this,args.concat(slice.call(arguments)));return Object(result)===result?result:this}return target.apply(that,args.concat(slice.call(arguments)))};return target.prototype&&(Empty.prototype=target.prototype,bound.prototype=new Empty,Empty.prototype=null),bound});var defineGetter,defineSetter,lookupGetter,lookupSetter,supportsAccessors,call=Function.prototype.call,prototypeOfArray=Array.prototype,prototypeOfObject=Object.prototype,slice=prototypeOfArray.slice,_toString=call.bind(prototypeOfObject.toString),owns=call.bind(prototypeOfObject.hasOwnProperty);if((supportsAccessors=owns(prototypeOfObject,"__defineGetter__"))&&(defineGetter=call.bind(prototypeOfObject.__defineGetter__),defineSetter=call.bind(prototypeOfObject.__defineSetter__),lookupGetter=call.bind(prototypeOfObject.__lookupGetter__),lookupSetter=call.bind(prototypeOfObject.__lookupSetter__)),2!=[1,2].splice(0).length)if(function(){function makeArray(l){var a=Array(l+2);return a[0]=a[1]=0,a}var lengthBefore,array=[];return array.splice.apply(array,makeArray(20)),array.splice.apply(array,makeArray(26)),lengthBefore=array.length,array.splice(5,0,"XXX"),lengthBefore+1==array.length,lengthBefore+1==array.length?!0:void 0\n}()){var array_splice=Array.prototype.splice;Array.prototype.splice=function(start,deleteCount){return arguments.length?array_splice.apply(this,[void 0===start?0:start,void 0===deleteCount?this.length-start:deleteCount].concat(slice.call(arguments,2))):[]}}else Array.prototype.splice=function(pos,removeCount){var length=this.length;pos>0?pos>length&&(pos=length):void 0==pos?pos=0:0>pos&&(pos=Math.max(length+pos,0)),length>pos+removeCount||(removeCount=length-pos);var removed=this.slice(pos,pos+removeCount),insert=slice.call(arguments,2),add=insert.length;if(pos===length)add&&this.push.apply(this,insert);else{var remove=Math.min(removeCount,length-pos),tailOldPos=pos+remove,tailNewPos=tailOldPos+add-remove,tailCount=length-tailOldPos,lengthAfterRemove=length-remove;if(tailOldPos>tailNewPos)for(var i=0;tailCount>i;++i)this[tailNewPos+i]=this[tailOldPos+i];else if(tailNewPos>tailOldPos)for(i=tailCount;i--;)this[tailNewPos+i]=this[tailOldPos+i];if(add&&pos===lengthAfterRemove)this.length=lengthAfterRemove,this.push.apply(this,insert);else for(this.length=lengthAfterRemove+add,i=0;add>i;++i)this[pos+i]=insert[i]}return removed};Array.isArray||(Array.isArray=function(obj){return"[object Array]"==_toString(obj)});var boxedString=Object("a"),splitString="a"!=boxedString[0]||!(0 in boxedString);if(Array.prototype.forEach||(Array.prototype.forEach=function(fun){var object=toObject(this),self=splitString&&"[object String]"==_toString(this)?this.split(""):object,thisp=arguments[1],i=-1,length=self.length>>>0;if("[object Function]"!=_toString(fun))throw new TypeError;for(;length>++i;)i in self&&fun.call(thisp,self[i],i,object)}),Array.prototype.map||(Array.prototype.map=function(fun){var object=toObject(this),self=splitString&&"[object String]"==_toString(this)?this.split(""):object,length=self.length>>>0,result=Array(length),thisp=arguments[1];if("[object Function]"!=_toString(fun))throw new TypeError(fun+" is not a function");for(var i=0;length>i;i++)i in self&&(result[i]=fun.call(thisp,self[i],i,object));return result}),Array.prototype.filter||(Array.prototype.filter=function(fun){var value,object=toObject(this),self=splitString&&"[object String]"==_toString(this)?this.split(""):object,length=self.length>>>0,result=[],thisp=arguments[1];if("[object Function]"!=_toString(fun))throw new TypeError(fun+" is not a function");for(var i=0;length>i;i++)i in self&&(value=self[i],fun.call(thisp,value,i,object)&&result.push(value));return result}),Array.prototype.every||(Array.prototype.every=function(fun){var object=toObject(this),self=splitString&&"[object String]"==_toString(this)?this.split(""):object,length=self.length>>>0,thisp=arguments[1];if("[object Function]"!=_toString(fun))throw new TypeError(fun+" is not a function");for(var i=0;length>i;i++)if(i in self&&!fun.call(thisp,self[i],i,object))return!1;return!0}),Array.prototype.some||(Array.prototype.some=function(fun){var object=toObject(this),self=splitString&&"[object String]"==_toString(this)?this.split(""):object,length=self.length>>>0,thisp=arguments[1];if("[object Function]"!=_toString(fun))throw new TypeError(fun+" is not a function");for(var i=0;length>i;i++)if(i in self&&fun.call(thisp,self[i],i,object))return!0;return!1}),Array.prototype.reduce||(Array.prototype.reduce=function(fun){var object=toObject(this),self=splitString&&"[object String]"==_toString(this)?this.split(""):object,length=self.length>>>0;if("[object Function]"!=_toString(fun))throw new TypeError(fun+" is not a function");if(!length&&1==arguments.length)throw new TypeError("reduce of empty array with no initial value");var result,i=0;if(arguments.length>=2)result=arguments[1];else for(;;){if(i in self){result=self[i++];break}if(++i>=length)throw new TypeError("reduce of empty array with no initial value")}for(;length>i;i++)i in self&&(result=fun.call(void 0,result,self[i],i,object));return result}),Array.prototype.reduceRight||(Array.prototype.reduceRight=function(fun){var object=toObject(this),self=splitString&&"[object String]"==_toString(this)?this.split(""):object,length=self.length>>>0;if("[object Function]"!=_toString(fun))throw new TypeError(fun+" is not a function");if(!length&&1==arguments.length)throw new TypeError("reduceRight of empty array with no initial value");var result,i=length-1;if(arguments.length>=2)result=arguments[1];else for(;;){if(i in self){result=self[i--];break}if(0>--i)throw new TypeError("reduceRight of empty array with no initial value")}do i in this&&(result=fun.call(void 0,result,self[i],i,object));while(i--);return result}),Array.prototype.indexOf&&-1==[0,1].indexOf(1,2)||(Array.prototype.indexOf=function(sought){var self=splitString&&"[object String]"==_toString(this)?this.split(""):toObject(this),length=self.length>>>0;if(!length)return-1;var i=0;for(arguments.length>1&&(i=toInteger(arguments[1])),i=i>=0?i:Math.max(0,length+i);length>i;i++)if(i in self&&self[i]===sought)return i;return-1}),Array.prototype.lastIndexOf&&-1==[0,1].lastIndexOf(0,-3)||(Array.prototype.lastIndexOf=function(sought){var self=splitString&&"[object String]"==_toString(this)?this.split(""):toObject(this),length=self.length>>>0;if(!length)return-1;var i=length-1;for(arguments.length>1&&(i=Math.min(i,toInteger(arguments[1]))),i=i>=0?i:length-Math.abs(i);i>=0;i--)if(i in self&&sought===self[i])return i;return-1}),Object.getPrototypeOf||(Object.getPrototypeOf=function(object){return object.__proto__||(object.constructor?object.constructor.prototype:prototypeOfObject)}),!Object.getOwnPropertyDescriptor){var ERR_NON_OBJECT="Object.getOwnPropertyDescriptor called on a non-object: ";Object.getOwnPropertyDescriptor=function(object,property){if("object"!=typeof object&&"function"!=typeof object||null===object)throw new TypeError(ERR_NON_OBJECT+object);if(owns(object,property)){var descriptor,getter,setter;if(descriptor={enumerable:!0,configurable:!0},supportsAccessors){var prototype=object.__proto__;object.__proto__=prototypeOfObject;var getter=lookupGetter(object,property),setter=lookupSetter(object,property);if(object.__proto__=prototype,getter||setter)return getter&&(descriptor.get=getter),setter&&(descriptor.set=setter),descriptor}return descriptor.value=object[property],descriptor}}}if(Object.getOwnPropertyNames||(Object.getOwnPropertyNames=function(object){return Object.keys(object)}),!Object.create){var createEmpty;createEmpty=null===Object.prototype.__proto__?function(){return{__proto__:null}}:function(){var empty={};for(var i in empty)empty[i]=null;return empty.constructor=empty.hasOwnProperty=empty.propertyIsEnumerable=empty.isPrototypeOf=empty.toLocaleString=empty.toString=empty.valueOf=empty.__proto__=null,empty},Object.create=function(prototype,properties){var object;if(null===prototype)object=createEmpty();else{if("object"!=typeof prototype)throw new TypeError("typeof prototype["+typeof prototype+"] != \'object\'");var Type=function(){};Type.prototype=prototype,object=new Type,object.__proto__=prototype}return void 0!==properties&&Object.defineProperties(object,properties),object}}if(Object.defineProperty){var definePropertyWorksOnObject=doesDefinePropertyWork({}),definePropertyWorksOnDom="undefined"==typeof document||doesDefinePropertyWork(document.createElement("div"));if(!definePropertyWorksOnObject||!definePropertyWorksOnDom)var definePropertyFallback=Object.defineProperty}if(!Object.defineProperty||definePropertyFallback){var ERR_NON_OBJECT_DESCRIPTOR="Property description must be an object: ",ERR_NON_OBJECT_TARGET="Object.defineProperty called on non-object: ",ERR_ACCESSORS_NOT_SUPPORTED="getters & setters can not be defined on this javascript engine";Object.defineProperty=function(object,property,descriptor){if("object"!=typeof object&&"function"!=typeof object||null===object)throw new TypeError(ERR_NON_OBJECT_TARGET+object);if("object"!=typeof descriptor&&"function"!=typeof descriptor||null===descriptor)throw new TypeError(ERR_NON_OBJECT_DESCRIPTOR+descriptor);if(definePropertyFallback)try{return definePropertyFallback.call(Object,object,property,descriptor)}catch(exception){}if(owns(descriptor,"value"))if(supportsAccessors&&(lookupGetter(object,property)||lookupSetter(object,property))){var prototype=object.__proto__;object.__proto__=prototypeOfObject,delete object[property],object[property]=descriptor.value,object.__proto__=prototype}else object[property]=descriptor.value;else{if(!supportsAccessors)throw new TypeError(ERR_ACCESSORS_NOT_SUPPORTED);owns(descriptor,"get")&&defineGetter(object,property,descriptor.get),owns(descriptor,"set")&&defineSetter(object,property,descriptor.set)}return object}}Object.defineProperties||(Object.defineProperties=function(object,properties){for(var property in properties)owns(properties,property)&&Object.defineProperty(object,property,properties[property]);return object}),Object.seal||(Object.seal=function(object){return object}),Object.freeze||(Object.freeze=function(object){return object});try{Object.freeze(function(){})}catch(exception){Object.freeze=function(freezeObject){return function(object){return"function"==typeof object?object:freezeObject(object)}}(Object.freeze)}if(Object.preventExtensions||(Object.preventExtensions=function(object){return object}),Object.isSealed||(Object.isSealed=function(){return!1}),Object.isFrozen||(Object.isFrozen=function(){return!1}),Object.isExtensible||(Object.isExtensible=function(object){if(Object(object)===object)throw new TypeError;for(var name="";owns(object,name);)name+="?";object[name]=!0;var returnValue=owns(object,name);return delete object[name],returnValue}),!Object.keys){var hasDontEnumBug=!0,dontEnums=["toString","toLocaleString","valueOf","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","constructor"],dontEnumsLength=dontEnums.length;for(var key in{toString:null})hasDontEnumBug=!1;Object.keys=function(object){if("object"!=typeof object&&"function"!=typeof object||null===object)throw new TypeError("Object.keys called on a non-object");var keys=[];for(var name in object)owns(object,name)&&keys.push(name);if(hasDontEnumBug)for(var i=0,ii=dontEnumsLength;ii>i;i++){var dontEnum=dontEnums[i];owns(object,dontEnum)&&keys.push(dontEnum)}return keys}}Date.now||(Date.now=function(){return(new Date).getTime()});var ws="\t\\n\v\\f\\r   ᠎              \\u2028\\u2029\ufeff";if(!String.prototype.trim||ws.trim()){ws="["+ws+"]";var trimBeginRegexp=RegExp("^"+ws+ws+"*"),trimEndRegexp=RegExp(ws+ws+"*$");String.prototype.trim=function(){return(this+"").replace(trimBeginRegexp,"").replace(trimEndRegexp,"")}}var toObject=function(o){if(null==o)throw new TypeError("can\'t convert "+o+" to object");return Object(o)}});'},function(t,e){ace.define("ace/ext/searchbox",["require","exports","module","ace/lib/dom","ace/lib/lang","ace/lib/event","ace/keyboard/hash_handler","ace/lib/keys"],(function(t,e,l){"use strict";var i=t("../lib/dom"),n=t("../lib/lang"),a=t("../lib/event"),d=t("../keyboard/hash_handler").HashHandler,s=t("../lib/keys");i.importCssString("\t.ace_search {\tbackground-color: #ddd;\tborder: 1px solid #cbcbcb;\tborder-top: 0 none;\tmax-width: 325px;\toverflow: hidden;\tmargin: 0;\tpadding: 4px;\tpadding-right: 6px;\tpadding-bottom: 0;\tposition: absolute;\ttop: 0px;\tz-index: 99;\twhite-space: normal;\t}\t.ace_search.left {\tborder-left: 0 none;\tborder-radius: 0px 0px 5px 0px;\tleft: 0;\t}\t.ace_search.right {\tborder-radius: 0px 0px 0px 5px;\tborder-right: 0 none;\tright: 0;\t}\t.ace_search_form, .ace_replace_form {\tborder-radius: 3px;\tborder: 1px solid #cbcbcb;\tfloat: left;\tmargin-bottom: 4px;\toverflow: hidden;\t}\t.ace_search_form.ace_nomatch {\toutline: 1px solid red;\t}\t.ace_search_field {\tbackground-color: white;\tborder-right: 1px solid #cbcbcb;\tborder: 0 none;\t-webkit-box-sizing: border-box;\t-moz-box-sizing: border-box;\tbox-sizing: border-box;\tfloat: left;\theight: 22px;\toutline: 0;\tpadding: 0 7px;\twidth: 214px;\tmargin: 0;\t}\t.ace_searchbtn,\t.ace_replacebtn {\tbackground: #fff;\tborder: 0 none;\tborder-left: 1px solid #dcdcdc;\tcursor: pointer;\tfloat: left;\theight: 22px;\tmargin: 0;\tposition: relative;\t}\t.ace_searchbtn:last-child,\t.ace_replacebtn:last-child {\tborder-top-right-radius: 3px;\tborder-bottom-right-radius: 3px;\t}\t.ace_searchbtn:disabled {\tbackground: none;\tcursor: default;\t}\t.ace_searchbtn {\tbackground-position: 50% 50%;\tbackground-repeat: no-repeat;\twidth: 27px;\t}\t.ace_searchbtn.prev {\tbackground-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAFCAYAAAB4ka1VAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAADFJREFUeNpiSU1NZUAC/6E0I0yACYskCpsJiySKIiY0SUZk40FyTEgCjGgKwTRAgAEAQJUIPCE+qfkAAAAASUVORK5CYII=); \t}\t.ace_searchbtn.next {\tbackground-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAFCAYAAAB4ka1VAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAADRJREFUeNpiTE1NZQCC/0DMyIAKwGJMUAYDEo3M/s+EpvM/mkKwCQxYjIeLMaELoLMBAgwAU7UJObTKsvAAAAAASUVORK5CYII=); \t}\t.ace_searchbtn_close {\tbackground: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAcCAYAAABRVo5BAAAAZ0lEQVR42u2SUQrAMAhDvazn8OjZBilCkYVVxiis8H4CT0VrAJb4WHT3C5xU2a2IQZXJjiQIRMdkEoJ5Q2yMqpfDIo+XY4k6h+YXOyKqTIj5REaxloNAd0xiKmAtsTHqW8sR2W5f7gCu5nWFUpVjZwAAAABJRU5ErkJggg==) no-repeat 50% 0;\tborder-radius: 50%;\tborder: 0 none;\tcolor: #656565;\tcursor: pointer;\tfloat: right;\tfont: 16px/16px Arial;\theight: 14px;\tmargin: 5px 1px 9px 5px;\tpadding: 0;\ttext-align: center;\twidth: 14px;\t}\t.ace_searchbtn_close:hover {\tbackground-color: #656565;\tbackground-position: 50% 100%;\tcolor: white;\t}\t.ace_replacebtn.prev {\twidth: 54px\t}\t.ace_replacebtn.next {\twidth: 27px\t}\t.ace_button {\tmargin-left: 2px;\tcursor: pointer;\t-webkit-user-select: none;\t-moz-user-select: none;\t-o-user-select: none;\t-ms-user-select: none;\tuser-select: none;\toverflow: hidden;\topacity: 0.7;\tborder: 1px solid rgba(100,100,100,0.23);\tpadding: 1px;\t-moz-box-sizing: border-box;\tbox-sizing: border-box;\tcolor: black;\t}\t.ace_button:hover {\tbackground-color: #eee;\topacity:1;\t}\t.ace_button:active {\tbackground-color: #ddd;\t}\t.ace_button.checked {\tborder-color: #3399ff;\topacity:1;\t}\t.ace_search_options{\tmargin-bottom: 3px;\ttext-align: right;\t-webkit-user-select: none;\t-moz-user-select: none;\t-o-user-select: none;\t-ms-user-select: none;\tuser-select: none;\t}","ace_searchbox");var c=''.replace(/>\s+/g,">"),o=function(t,e,l){var n=i.createElement("div");n.innerHTML=c,this.element=n.firstChild,this.$init(),this.setEditor(t)};(function(){this.setEditor=function(t){t.searchBox=this,t.container.appendChild(this.element),this.editor=t},this.$initElements=function(t){this.searchBox=t.querySelector(".ace_search_form"),this.replaceBox=t.querySelector(".ace_replace_form"),this.searchOptions=t.querySelector(".ace_search_options"),this.regExpOption=t.querySelector("[action=toggleRegexpMode]"),this.caseSensitiveOption=t.querySelector("[action=toggleCaseSensitive]"),this.wholeWordOption=t.querySelector("[action=toggleWholeWords]"),this.searchInput=this.searchBox.querySelector(".ace_search_field"),this.replaceInput=this.replaceBox.querySelector(".ace_search_field")},this.$init=function(){var t=this.element;this.$initElements(t);var e=this;a.addListener(t,"mousedown",(function(t){setTimeout((function(){e.activeInput.focus()}),0),a.stopPropagation(t)})),a.addListener(t,"click",(function(t){var l=(t.target||t.srcElement).getAttribute("action");l&&e[l]?e[l]():e.$searchBarKb.commands[l]&&e.$searchBarKb.commands[l].exec(e),a.stopPropagation(t)})),a.addCommandKeyListener(t,(function(t,l,i){var n=s.keyCodeToString(i),d=e.$searchBarKb.findKeyCommand(l,n);d&&d.exec&&(d.exec(e),a.stopEvent(t))})),this.$onChange=n.delayedCall((function(){e.find(!1,!1)})),a.addListener(this.searchInput,"input",(function(){e.$onChange.schedule(20)})),a.addListener(this.searchInput,"focus",(function(){e.activeInput=e.searchInput,e.searchInput.value&&e.highlight()})),a.addListener(this.replaceInput,"focus",(function(){e.activeInput=e.replaceInput,e.searchInput.value&&e.highlight()}))},this.$closeSearchBarKb=new d([{bindKey:"Esc",name:"closeSearchBar",exec:function(t){t.searchBox.hide()}}]),this.$searchBarKb=new d,this.$searchBarKb.bindKeys({"Ctrl-f|Command-f":function(t){var e=t.isReplace=!t.isReplace;t.replaceBox.style.display=e?"":"none",t.searchInput.focus()},"Ctrl-H|Command-Option-F":function(t){t.replaceBox.style.display="",t.replaceInput.focus()},"Ctrl-G|Command-G":function(t){t.findNext()},"Ctrl-Shift-G|Command-Shift-G":function(t){t.findPrev()},esc:function(t){setTimeout((function(){t.hide()}))},Return:function(t){t.activeInput==t.replaceInput&&t.replace(),t.findNext()},"Shift-Return":function(t){t.activeInput==t.replaceInput&&t.replace(),t.findPrev()},"Alt-Return":function(t){t.activeInput==t.replaceInput&&t.replaceAll(),t.findAll()},Tab:function(t){(t.activeInput==t.replaceInput?t.searchInput:t.replaceInput).focus()}}),this.$searchBarKb.addCommands([{name:"toggleRegexpMode",bindKey:{win:"Alt-R|Alt-/",mac:"Ctrl-Alt-R|Ctrl-Alt-/"},exec:function(t){t.regExpOption.checked=!t.regExpOption.checked,t.$syncOptions()}},{name:"toggleCaseSensitive",bindKey:{win:"Alt-C|Alt-I",mac:"Ctrl-Alt-R|Ctrl-Alt-I"},exec:function(t){t.caseSensitiveOption.checked=!t.caseSensitiveOption.checked,t.$syncOptions()}},{name:"toggleWholeWords",bindKey:{win:"Alt-B|Alt-W",mac:"Ctrl-Alt-B|Ctrl-Alt-W"},exec:function(t){t.wholeWordOption.checked=!t.wholeWordOption.checked,t.$syncOptions()}}]),this.$syncOptions=function(){i.setCssClass(this.regExpOption,"checked",this.regExpOption.checked),i.setCssClass(this.wholeWordOption,"checked",this.wholeWordOption.checked),i.setCssClass(this.caseSensitiveOption,"checked",this.caseSensitiveOption.checked),this.find(!1,!1)},this.highlight=function(t){this.editor.session.highlight(t||this.editor.$search.$options.re),this.editor.renderer.updateBackMarkers()},this.find=function(t,e,l){var n=!this.editor.find(this.searchInput.value,{skipCurrent:t,backwards:e,wrap:!0,regExp:this.regExpOption.checked,caseSensitive:this.caseSensitiveOption.checked,wholeWord:this.wholeWordOption.checked,preventScroll:l})&&this.searchInput.value;i.setCssClass(this.searchBox,"ace_nomatch",n),this.editor._emit("findSearchBox",{match:!n}),this.highlight()},this.findNext=function(){this.find(!0,!1)},this.findPrev=function(){this.find(!0,!0)},this.findAll=function(){var t=!this.editor.findAll(this.searchInput.value,{regExp:this.regExpOption.checked,caseSensitive:this.caseSensitiveOption.checked,wholeWord:this.wholeWordOption.checked})&&this.searchInput.value;i.setCssClass(this.searchBox,"ace_nomatch",t),this.editor._emit("findSearchBox",{match:!t}),this.highlight(),this.hide()},this.replace=function(){this.editor.getReadOnly()||this.editor.replace(this.replaceInput.value)},this.replaceAndFindNext=function(){this.editor.getReadOnly()||(this.editor.replace(this.replaceInput.value),this.findNext())},this.replaceAll=function(){this.editor.getReadOnly()||this.editor.replaceAll(this.replaceInput.value)},this.hide=function(){this.element.style.display="none",this.editor.keyBinding.removeKeyboardHandler(this.$closeSearchBarKb),this.editor.focus()},this.show=function(t,e){this.element.style.display="",this.replaceBox.style.display=e?"":"none",this.isReplace=e,t&&(this.searchInput.value=t),this.find(!1,!1,!0),this.searchInput.focus(),this.searchInput.select(),this.editor.keyBinding.addKeyboardHandler(this.$closeSearchBarKb)},this.isFocused=function(){var t=document.activeElement;return t==this.searchInput||t==this.replaceInput}}).call(o.prototype),e.SearchBox=o,e.Search=function(t,e){(t.searchBox||new o(t)).show(t.session.getTextRange(),e)}})),ace.acequire(["ace/ext/searchbox"],(function(){}))},function(t,e){ace.define("ace/theme/jsoneditor",["require","exports","module","ace/lib/dom"],(function(t,e,l){e.isDark=!1,e.cssClass="ace-jsoneditor",e.cssText='.ace-jsoneditor .ace_gutter {\tbackground: #ebebeb;\tcolor: #333\t}\t\t.ace-jsoneditor.ace_editor {\tfont-family: droid sans mono, consolas, monospace, courier new, courier, sans-serif;\tline-height: 1.3;\t}\t.ace-jsoneditor .ace_print-margin {\twidth: 1px;\tbackground: #e8e8e8\t}\t.ace-jsoneditor .ace_scroller {\tbackground-color: #FFFFFF\t}\t.ace-jsoneditor .ace_text-layer {\tcolor: gray\t}\t.ace-jsoneditor .ace_variable {\tcolor: #1a1a1a\t}\t.ace-jsoneditor .ace_cursor {\tborder-left: 2px solid #000000\t}\t.ace-jsoneditor .ace_overwrite-cursors .ace_cursor {\tborder-left: 0px;\tborder-bottom: 1px solid #000000\t}\t.ace-jsoneditor .ace_marker-layer .ace_selection {\tbackground: lightgray\t}\t.ace-jsoneditor.ace_multiselect .ace_selection.ace_start {\tbox-shadow: 0 0 3px 0px #FFFFFF;\tborder-radius: 2px\t}\t.ace-jsoneditor .ace_marker-layer .ace_step {\tbackground: rgb(255, 255, 0)\t}\t.ace-jsoneditor .ace_marker-layer .ace_bracket {\tmargin: -1px 0 0 -1px;\tborder: 1px solid #BFBFBF\t}\t.ace-jsoneditor .ace_marker-layer .ace_active-line {\tbackground: #FFFBD1\t}\t.ace-jsoneditor .ace_gutter-active-line {\tbackground-color : #dcdcdc\t}\t.ace-jsoneditor .ace_marker-layer .ace_selected-word {\tborder: 1px solid lightgray\t}\t.ace-jsoneditor .ace_invisible {\tcolor: #BFBFBF\t}\t.ace-jsoneditor .ace_keyword,\t.ace-jsoneditor .ace_meta,\t.ace-jsoneditor .ace_support.ace_constant.ace_property-value {\tcolor: #AF956F\t}\t.ace-jsoneditor .ace_keyword.ace_operator {\tcolor: #484848\t}\t.ace-jsoneditor .ace_keyword.ace_other.ace_unit {\tcolor: #96DC5F\t}\t.ace-jsoneditor .ace_constant.ace_language {\tcolor: darkorange\t}\t.ace-jsoneditor .ace_constant.ace_numeric {\tcolor: red\t}\t.ace-jsoneditor .ace_constant.ace_character.ace_entity {\tcolor: #BF78CC\t}\t.ace-jsoneditor .ace_invalid {\tcolor: #FFFFFF;\tbackground-color: #FF002A;\t}\t.ace-jsoneditor .ace_fold {\tbackground-color: #AF956F;\tborder-color: #000000\t}\t.ace-jsoneditor .ace_storage,\t.ace-jsoneditor .ace_support.ace_class,\t.ace-jsoneditor .ace_support.ace_function,\t.ace-jsoneditor .ace_support.ace_other,\t.ace-jsoneditor .ace_support.ace_type {\tcolor: #C52727\t}\t.ace-jsoneditor .ace_string {\tcolor: green\t}\t.ace-jsoneditor .ace_comment {\tcolor: #BCC8BA\t}\t.ace-jsoneditor .ace_entity.ace_name.ace_tag,\t.ace-jsoneditor .ace_entity.ace_other.ace_attribute-name {\tcolor: #606060\t}\t.ace-jsoneditor .ace_markup.ace_underline {\ttext-decoration: underline\t}\t.ace-jsoneditor .ace_indent-guide {\tbackground: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAE0lEQVQImWP4////f4bLly//BwAmVgd1/w11/gAAAABJRU5ErkJggg==") right repeat-y\t}',t("../lib/dom").importCssString(e.cssText,e.cssClass)}))}])},module.exports=factory()},function(t,e,l){"use strict";const i=l(25);l(28);const{IView:n}=l(2),a=new i({el:".app",components:{mainContent:l(33),topbar:l(95),bottomBar:l(99)},data:()=>({view:n.home}),methods:{changeView(t){this.view=n[t]},checkIfInView(){if(window.location.search){const t=decodeURIComponent(window.location.search.match(/(\?|&)show\=([^&]*)/)[2]);n[t]&&(this.view=n[t])}}},created(){this.checkIfInView()}});t.exports=a},function(t,e,l){(function(e,l){ +var factory;factory=function(){return function(t){var e={};function i(l){if(e[l])return e[l].exports;var a=e[l]={exports:{},id:l,loaded:!1};return t[l].call(a.exports,a,a.exports,i),a.loaded=!0,a.exports}return i.m=t,i.c=e,i.p="",i(0)}([function(t,e,i){"use strict";var l;try{l=i(1)}catch(t){}var a=i(51),n=i(62),s=i(54);function d(t,e,i){if(!(this instanceof d))throw new Error('JSONEditor constructor called without "new".');var l=s.getInternetExplorerVersion();if(-1!=l&&l<9)throw new Error("Unsupported browser, IE9 or newer required. Please install the newest version of your browser.");if(e&&(e.error&&(console.warn('Option "error" has been renamed to "onError"'),e.onError=e.error,delete e.error),e.change&&(console.warn('Option "change" has been renamed to "onChange"'),e.onChange=e.change,delete e.change),e.editable&&(console.warn('Option "editable" has been renamed to "onEditable"'),e.onEditable=e.editable,delete e.editable),e)){var a=["ace","theme","ajv","schema","onChange","onEditable","onError","onModeChange","escapeUnicode","history","search","mode","modes","name","indentation","sortObjectKeys"];Object.keys(e).forEach((function(t){-1===a.indexOf(t)&&console.warn('Unknown option "'+t+'". This option will be ignored')}))}arguments.length&&this._create(t,e,i)}d.modes={},d.prototype.DEBOUNCE_INTERVAL=150,d.prototype._create=function(t,e,i){this.container=t,this.options=e||{},this.json=i||{};var l=this.options.mode||"tree";this.setMode(l)},d.prototype.destroy=function(){},d.prototype.set=function(t){this.json=t},d.prototype.get=function(){return this.json},d.prototype.setText=function(t){this.json=s.parse(t)},d.prototype.getText=function(){return JSON.stringify(this.json)},d.prototype.setName=function(t){this.options||(this.options={}),this.options.name=t},d.prototype.getName=function(){return this.options&&this.options.name},d.prototype.setMode=function(t){var e,i,l=this.container,a=s.extend({},this.options),n=a.mode;a.mode=t;var c=d.modes[t];if(!c)throw new Error('Unknown mode "'+a.mode+'"');try{var o="text"==c.data;if(i=this.getName(),e=this[o?"getText":"get"](),this.destroy(),s.clear(this),s.extend(this,c.mixin),this.create(l,a),this.setName(i),this[o?"setText":"set"](e),"function"==typeof c.load)try{c.load.call(this)}catch(t){console.error(t)}if("function"==typeof a.onModeChange&&t!==n)try{a.onModeChange(t,n)}catch(t){console.error(t)}}catch(t){this._onError(t)}},d.prototype.getMode=function(){return this.options.mode},d.prototype._onError=function(t){if(!this.options||"function"!=typeof this.options.onError)throw t;this.options.onError(t)},d.prototype.setSchema=function(t){if(t){var e;try{e=this.options.ajv||l({allErrors:!0,verbose:!0})}catch(t){console.warn("Failed to create an instance of Ajv, JSON Schema validation is not available. Please use a JSONEditor bundle including Ajv, or pass an instance of Ajv as via the configuration option `ajv`.")}e&&(this.validateSchema=e.compile(t),this.options.schema=t,this.validate()),this.refresh()}else this.validateSchema=null,this.options.schema=null,this.validate(),this.refresh()},d.prototype.validate=function(){},d.prototype.refresh=function(){},d.registerMode=function(t){var e,i;if(s.isArray(t))for(e=0;e",'"',"`"," ","\r","\n","\t"]),c=["'"].concat(d),o=["%","/","?",";","#"].concat(c),m=["/","?","#"],r=/^[a-z0-9A-Z_-]{0,63}$/,b=/^([a-z0-9A-Z_-]{0,63})(.*)$/,g={javascript:!0,"javascript:":!0},Z={javascript:!0,"javascript:":!0},h={http:!0,https:!0,ftp:!0,gopher:!0,file:!0,"http:":!0,"https:":!0,"ftp:":!0,"gopher:":!0,"file:":!0},W=i(7);function N(t,e,i){if(t&&u(t)&&t instanceof a)return t;var l=new a;return l.parse(t,e,i),l}function y(t){return"string"==typeof t}function u(t){return"object"==typeof t&&null!==t}function I(t){return null===t}a.prototype.parse=function(t,e,i){if(!y(t))throw new TypeError("Parameter 'url' must be a string, not "+typeof t);var a=t;a=a.trim();var s=n.exec(a);if(s){var d=(s=s[0]).toLowerCase();this.protocol=d,a=a.substr(s.length)}if(i||s||a.match(/^\/\/[^@\/]+@[^@\/]+/)){var N="//"===a.substr(0,2);!N||s&&Z[s]||(a=a.substr(2),this.slashes=!0)}if(!Z[s]&&(N||s&&!h[s])){for(var u,I,G=-1,M=0;M127?D+="x":D+=B[O];if(!D.match(r)){var U=Y.slice(0,M),X=Y.slice(M+1),z=B.match(b);z&&(U.push(z[1]),X.unshift(z[2])),X.length&&(a="/"+X.join(".")+a),this.hostname=U.join(".");break}}}if(this.hostname.length>255?this.hostname="":this.hostname=this.hostname.toLowerCase(),!V){var F=this.hostname.split("."),v=[];for(M=0;M0)&&i.host.split("@"))&&(i.auth=G.shift(),i.host=i.hostname=G.shift())),i.search=t.search,i.query=t.query,I(i.pathname)&&I(i.search)||(i.path=(i.pathname?i.pathname:"")+(i.search?i.search:"")),i.href=i.format(),i;if(!r.length)return i.pathname=null,i.search?i.path="/"+i.search:i.path=null,i.href=i.format(),i;for(var g=r.slice(-1)[0],W=(i.host||t.host)&&("."===g||".."===g)||""===g,N=0,u=r.length;u>=0;u--)"."==(g=r[u])?r.splice(u,1):".."===g?(r.splice(u,1),N++):N&&(r.splice(u,1),N--);if(!o&&!m)for(;N--;N)r.unshift("..");!o||""===r[0]||r[0]&&"/"===r[0].charAt(0)||r.unshift(""),W&&"/"!==r.join("/").substr(-1)&&r.push("");var G,M=""===r[0]||r[0]&&"/"===r[0].charAt(0);return b&&(i.hostname=i.host=M?"":r.length?r.shift():"",(G=!!(i.host&&i.host.indexOf("@")>0)&&i.host.split("@"))&&(i.auth=G.shift(),i.host=i.hostname=G.shift())),(o=o||i.host&&r.length)&&!M&&r.unshift(""),r.length?i.pathname=r.join("/"):(i.pathname=null,i.path=null),I(i.pathname)&&I(i.search)||(i.path=(i.pathname?i.pathname:"")+(i.search?i.search:"")),i.auth=t.auth||i.auth,i.slashes=i.slashes||t.slashes,i.href=i.format(),i},a.prototype.parseHost=function(){var t=this.host,e=s.exec(t);e&&(":"!==(e=e[0])&&(this.port=e.substr(1)),t=t.substr(0,t.length-e.length)),t&&(this.hostname=t)}},function(t,e,i){var l;(function(t,a){!function(n){"object"==typeof e&&e&&e.nodeType,"object"==typeof t&&t&&t.nodeType;var s="object"==typeof a&&a;s.global!==s&&s.window!==s&&s.self;var d,c=2147483647,o=/^xn--/,m=/[^\x20-\x7E]/,r=/[\x2E\u3002\uFF0E\uFF61]/g,b={overflow:"Overflow: input needs wider integers to process","not-basic":"Illegal input >= 0x80 (not a basic code point)","invalid-input":"Invalid input"},g=Math.floor,Z=String.fromCharCode;function h(t){throw RangeError(b[t])}function W(t,e){for(var i=t.length,l=[];i--;)l[i]=e(t[i]);return l}function N(t,e){var i=t.split("@"),l="";return i.length>1&&(l=i[0]+"@",t=i[1]),l+W((t=t.replace(r,".")).split("."),e).join(".")}function y(t){for(var e,i,l=[],a=0,n=t.length;a=55296&&e<=56319&&a65535&&(e+=Z((t-=65536)>>>10&1023|55296),t=56320|1023&t),e+=Z(t)})).join("")}function I(t,e){return t+22+75*(t<26)-((0!=e)<<5)}function G(t,e,i){var l=0;for(t=i?g(t/700):t>>1,t+=g(t/e);t>455;l+=36)t=g(t/35);return g(l+36*t/(t+38))}function M(t){var e,i,l,a,n,s,d,o,m,r,b,Z=[],W=t.length,N=0,y=128,I=72;for((i=t.lastIndexOf("-"))<0&&(i=0),l=0;l=128&&h("not-basic"),Z.push(t.charCodeAt(l));for(a=i>0?i+1:0;a=W&&h("invalid-input"),((o=(b=t.charCodeAt(a++))-48<10?b-22:b-65<26?b-65:b-97<26?b-97:36)>=36||o>g((c-N)/s))&&h("overflow"),N+=o*s,!(o<(m=d<=I?1:d>=I+26?26:d-I));d+=36)s>g(c/(r=36-m))&&h("overflow"),s*=r;I=G(N-n,e=Z.length+1,0==n),g(N/e)>c-y&&h("overflow"),y+=g(N/e),N%=e,Z.splice(N++,0,y)}return u(Z)}function p(t){var e,i,l,a,n,s,d,o,m,r,b,W,N,u,M,p=[];for(W=(t=y(t)).length,e=128,i=0,n=72,s=0;s=e&&bg((c-i)/(N=l+1))&&h("overflow"),i+=(d-e)*N,e=d,s=0;sc&&h("overflow"),b==e){for(o=i,m=36;!(o<(r=m<=n?1:m>=n+26?26:m-n));m+=36)M=o-r,u=36-r,p.push(Z(I(r+M%u,0))),o=g(M/u);p.push(Z(I(o,0))),n=G(i,N,l==a),i=0,++l}++i,++e}return p.join("")}d={version:"1.3.2",ucs2:{decode:y,encode:u},decode:M,encode:p,toASCII:function(t){return N(t,(function(t){return m.test(t)?"xn--"+p(t):t}))},toUnicode:function(t){return N(t,(function(t){return o.test(t)?M(t.slice(4).toLowerCase()):t}))}},void 0===(l=function(){return d}.call(e,i,e,t))||(t.exports=l)}()}).call(e,i(6)(t),function(){return this}())},function(t,e){t.exports=function(t){return t.webpackPolyfill||(t.deprecate=function(){},t.paths=[],t.children=[],t.webpackPolyfill=1),t}},function(t,e,i){"use strict";e.decode=e.parse=i(8),e.encode=e.stringify=i(9)},function(t,e){"use strict";function i(t,e){return Object.prototype.hasOwnProperty.call(t,e)}t.exports=function(t,e,l,a){e=e||"&",l=l||"=";var n={};if("string"!=typeof t||0===t.length)return n;var s=/\+/g;t=t.split(e);var d=1e3;a&&"number"==typeof a.maxKeys&&(d=a.maxKeys);var c=t.length;d>0&&c>d&&(c=d);for(var o=0;o=0?(m=Z.substr(0,h),r=Z.substr(h+1)):(m=Z,r=""),b=decodeURIComponent(m),g=decodeURIComponent(r),i(n,b)?Array.isArray(n[b])?n[b].push(g):n[b]=[n[b],g]:n[b]=g}return n}},function(t,e){"use strict";var i=function(t){switch(typeof t){case"string":return t;case"boolean":return t?"true":"false";case"number":return isFinite(t)?t:"";default:return""}};t.exports=function(t,e,l,a){return e=e||"&",l=l||"=",null===t&&(t=void 0),"object"==typeof t?Object.keys(t).map((function(a){var n=encodeURIComponent(i(a))+l;return Array.isArray(t[a])?t[a].map((function(t){return n+encodeURIComponent(i(t))})).join(e):n+encodeURIComponent(i(t[a]))})).join(e):a?encodeURIComponent(i(a))+l+encodeURIComponent(i(t)):""}},function(t,e){"use strict";t.exports=function t(e,i){if(e===i)return!0;var l,a=Array.isArray(e),n=Array.isArray(i);if(a&&n){if(e.length!=i.length)return!1;for(l=0;l=55296&&e<=56319&&a=e)throw new Error("Cannot access property/index "+a+" levels up, current level is "+e);return i[e-a]}if(a>e)throw new Error("Cannot access data "+a+" levels up, current level is "+e);var s="data"+(e-a||"");if(!n)return s;for(var d=s,o=n.split("/"),m=0;m="0"&&l<="9";)e+=l,c();if("."===l)for(e+=".";c()&&l>="0"&&l<="9";)e+=l;if("e"===l||"E"===l)for(e+=l,c(),"-"!==l&&"+"!==l||(e+=l,c());l>="0"&&l<="9";)e+=l,c();if(t=+e,isFinite(t))return t;d("Bad number")},m=function(){var t,e,i,a="";if('"'===l)for(;c();){if('"'===l)return c(),a;if("\\"===l)if(c(),"u"===l){for(i=0,e=0;e<4&&(t=parseInt(c(),16),isFinite(t));e+=1)i=16*i+t;a+=String.fromCharCode(i)}else{if("string"!=typeof s[l])break;a+=s[l]}else a+=l}d("Bad string")},r=function(){for(;l&&l<=" ";)c()};n=function(){switch(r(),l){case"{":return function(){var t,e={};if("{"===l){if(c("{"),r(),"}"===l)return c("}"),e;for(;l;){if(t=m(),r(),c(":"),Object.hasOwnProperty.call(e,t)&&d('Duplicate key "'+t+'"'),e[t]=n(),r(),"}"===l)return c("}"),e;c(","),r()}}d("Bad object")}();case"[":return function(){var t=[];if("["===l){if(c("["),r(),"]"===l)return c("]"),t;for(;l;){if(t.push(n()),r(),"]"===l)return c("]"),t;c(","),r()}}d("Bad array")}();case'"':return m();case"-":return o();default:return l>="0"&&l<="9"?o():function(){switch(l){case"t":return c("t"),c("r"),c("u"),c("e"),!0;case"f":return c("f"),c("a"),c("l"),c("s"),c("e"),!1;case"n":return c("n"),c("u"),c("l"),c("l"),null}d("Unexpected '"+l+"'")}()}},t.exports=function(t,e){var s;return a=t,i=0,l=" ",s=n(),r(),l&&d("Syntax error"),"function"==typeof e?function t(i,l){var a,n,s=i[l];if(s&&"object"==typeof s)for(a in s)Object.prototype.hasOwnProperty.call(s,a)&&(void 0!==(n=t(s,a))?s[a]=n:delete s[a]);return e.call(i,l,s)}({"":s},""):s}},function(t,e){var i,l,a,n=/[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,s={"\b":"\\b","\t":"\\t","\n":"\\n","\f":"\\f","\r":"\\r",'"':'\\"',"\\":"\\\\"};function d(t){return n.lastIndex=0,n.test(t)?'"'+t.replace(n,(function(t){var e=s[t];return"string"==typeof e?e:"\\u"+("0000"+t.charCodeAt(0).toString(16)).slice(-4)}))+'"':'"'+t+'"'}t.exports=function(t,e,n){var s;if(i="",l="","number"==typeof n)for(s=0;s2&&(e=i.call(arguments,1)),l(e)}))}))}function s(t){return Promise.all(t.map(a,this))}function d(t){for(var e=new t.constructor,i=Object.keys(t),l=[],n=0;n=1&&i<=12&&l>=1&&l<=n[i]}function Z(t,e){var i=t.match(s);if(!i)return!1;var l=i[1],a=i[2],n=i[3],d=i[5];return l<=23&&a<=59&&n<=59&&(!e||d)}t.exports=b,b.fast={date:/^\d\d\d\d-[0-1]\d-[0-3]\d$/,time:/^[0-2]\d:[0-5]\d:[0-5]\d(?:\.\d+)?(?:z|[+-]\d\d:\d\d)?$/i,"date-time":/^\d\d\d\d-[0-1]\d-[0-3]\d[t\s][0-2]\d:[0-5]\d:[0-5]\d(?:\.\d+)?(?:z|[+-]\d\d:\d\d)$/i,uri:/^(?:[a-z][a-z0-9+-.]*)?(?:\:|\/)\/?[^\s]*$/i,email:/^[a-z0-9.!#$%&'*+\/=?^_`{|}~-]+@[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\.[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?)*$/i,hostname:d,ipv4:/^(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?)$/,ipv6:/^\s*(?:(?:(?:[0-9a-f]{1,4}:){7}(?:[0-9a-f]{1,4}|:))|(?:(?:[0-9a-f]{1,4}:){6}(?::[0-9a-f]{1,4}|(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(?:(?:[0-9a-f]{1,4}:){5}(?:(?:(?::[0-9a-f]{1,4}){1,2})|:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(?:(?:[0-9a-f]{1,4}:){4}(?:(?:(?::[0-9a-f]{1,4}){1,3})|(?:(?::[0-9a-f]{1,4})?:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){3}(?:(?:(?::[0-9a-f]{1,4}){1,4})|(?:(?::[0-9a-f]{1,4}){0,2}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){2}(?:(?:(?::[0-9a-f]{1,4}){1,5})|(?:(?::[0-9a-f]{1,4}){0,3}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){1}(?:(?:(?::[0-9a-f]{1,4}){1,6})|(?:(?::[0-9a-f]{1,4}){0,4}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?::(?:(?:(?::[0-9a-f]{1,4}){1,7})|(?:(?::[0-9a-f]{1,4}){0,5}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:)))(?:%.+)?\s*$/i,regex:N,uuid:o,"json-pointer":m,"relative-json-pointer":r},b.full={date:g,time:Z,"date-time":function(t){var e=t.split(h);return g(e[0])&&Z(e[1],!0)},uri:function(t){return W.test(t)&&c.test(t)},email:/^[a-z0-9!#$%&'*+\/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&''*+\/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$/i,hostname:function(t){return t.length<=255&&d.test(t)},ipv4:/^(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?)$/,ipv6:/^\s*(?:(?:(?:[0-9a-f]{1,4}:){7}(?:[0-9a-f]{1,4}|:))|(?:(?:[0-9a-f]{1,4}:){6}(?::[0-9a-f]{1,4}|(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(?:(?:[0-9a-f]{1,4}:){5}(?:(?:(?::[0-9a-f]{1,4}){1,2})|:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(?:(?:[0-9a-f]{1,4}:){4}(?:(?:(?::[0-9a-f]{1,4}){1,3})|(?:(?::[0-9a-f]{1,4})?:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){3}(?:(?:(?::[0-9a-f]{1,4}){1,4})|(?:(?::[0-9a-f]{1,4}){0,2}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){2}(?:(?:(?::[0-9a-f]{1,4}){1,5})|(?:(?::[0-9a-f]{1,4}){0,3}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){1}(?:(?:(?::[0-9a-f]{1,4}){1,6})|(?:(?::[0-9a-f]{1,4}){0,4}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?::(?:(?:(?::[0-9a-f]{1,4}){1,7})|(?:(?::[0-9a-f]{1,4}){0,5}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:)))(?:%.+)?\s*$/i,regex:N,uuid:o,"json-pointer":m,"relative-json-pointer":r},b.compare={date:y,time:u,"date-time":function(t,e){if(t&&e){t=t.split(h),e=e.split(h);var i=y(t[0],e[0]);if(void 0!==i)return i||u(t[1],e[1])}}};var h=/t|\s/i,W=/\/|\:/;function N(t){try{return new RegExp(t),!0}catch(t){return!1}}function y(t,e){if(t&&e)return t>e?1:t(e=e[1]+e[2]+e[3]+(e[4]||""))?1:t "+M+") { ";var V=o+"["+M+"]";b.schema=G,b.schemaPath=s+"["+M+"]",b.errSchemaPath=d+"/"+M,b.errorPath=t.util.getPathExpr(t.errorPath,M,t.opts.jsonPointers,!0),b.dataPathArr[Z]=M;var Y=t.validate(b);t.util.varOccurences(Y,h)<2?i+=" "+t.util.varReplace(Y,h,V)+" ":i+=" var "+h+" = "+V+"; "+Y+" ",i+=" } ",c&&(i+=" if (valid"+b.level+") { ",g+="}")}"object"==typeof W&&t.util.schemaHasRules(W,t.RULES.all)&&(b.schema=W,b.schemaPath=t.schemaPath+".additionalItems",b.errSchemaPath=t.errSchemaPath+"/additionalItems",i+=" valid"+b.level+" = true; if ("+o+".length > "+n.length+") { for (var i"+l+" = "+n.length+"; i"+l+" < "+o+".length; i"+l+"++) { ",b.errorPath=t.util.getPathExpr(t.errorPath,"i"+l,t.opts.jsonPointers,!0),V=o+"[i"+l+"]",b.dataPathArr[Z]="i"+l,Y=t.validate(b),t.util.varOccurences(Y,h)<2?i+=" "+t.util.varReplace(Y,h,V)+" ":i+=" var "+h+" = "+V+"; "+Y+" ",c&&(i+=" if (!valid"+b.level+") break; "),i+=" } } ",c&&(i+=" if (valid"+b.level+") { ",g+="}"))}else t.util.schemaHasRules(n,t.RULES.all)&&(b.schema=n,b.schemaPath=s,b.errSchemaPath=d,i+=" for (var i"+l+" = 0; i"+l+" < "+o+".length; i"+l+"++) { ",b.errorPath=t.util.getPathExpr(t.errorPath,"i"+l,t.opts.jsonPointers,!0),V=o+"[i"+l+"]",b.dataPathArr[Z]="i"+l,Y=t.validate(b),t.util.varOccurences(Y,h)<2?i+=" "+t.util.varReplace(Y,h,V)+" ":i+=" var "+h+" = "+V+"; "+Y+" ",c&&(i+=" if (!valid"+b.level+") break; "),i+=" } ",c&&(i+=" if (valid"+b.level+") { ",g+="}"));return c&&(i+=" "+g+" if ("+r+" == errors) {"),i=t.util.cleanUpCode(i)}},function(t,e){"use strict";t.exports=function(t,e){var i=" ",l=t.level,a=t.dataLevel,n=t.schema[e],s=t.schemaPath+"."+e,d=t.errSchemaPath+"/"+e,c=!t.opts.allErrors,o="data"+(a||""),m=t.opts.v5&&n.$data,r=m?t.util.getData(n.$data,a,t.dataPathArr):n;m&&(i+=" var schema"+l+" = "+r+"; ",r="schema"+l);var b,g="maximum"==e,Z=g?"exclusiveMaximum":"exclusiveMinimum",h=t.schema[Z],W=g?"<":">",N=g?">":"<";if(t.opts.v5&&h&&h.$data){var y=t.util.getData(h.$data,a,t.dataPathArr),u="exclusive"+l,I="' + "+(p="op"+l)+" + '";i+=" var schemaExcl"+l+" = "+y+"; ",i+=" var exclusive"+l+"; if (typeof "+(y="schemaExcl"+l)+" != 'boolean' && typeof "+y+" != 'undefined') { ";var G=Z;(b=b||[]).push(i),i="",!1!==t.createErrors?(i+=" { keyword: '"+(G||"_exclusiveLimit")+"' , dataPath: (dataPath || '') + "+t.errorPath+' , schemaPath: "'+d+'" , params: {} ',!1!==t.opts.messages&&(i+=" , message: '"+Z+" should be boolean' "),t.opts.verbose&&(i+=" , schema: validate.schema"+s+" , parentSchema: validate.schema"+t.schemaPath+" , data: "+o+" "),i+=" } "):i+=" {} ";var M=i;i=b.pop(),!t.compositeRule&&c?t.async?i+=" throw new ValidationError(["+M+"]); ":i+=" validate.errors = ["+M+"]; return false; ":i+=" var err = "+M+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",i+=" } else if( ",m&&(i+=" ("+r+" !== undefined && typeof "+r+" != 'number') || "),i+=" ((exclusive"+l+" = "+y+" === true) ? "+o+" "+N+"= "+r+" : "+o+" "+N+" "+r+")) { var op"+l+" = exclusive"+l+" ? '"+W+"' : '"+W+"=';"}else{I=W,(u=!0===h)||(I+="=");var p="'"+I+"'";i+=" if ( ",m&&(i+=" ("+r+" !== undefined && typeof "+r+" != 'number') || "),i+=" "+o+" "+N,u&&(i+="="),i+=" "+r+") {"}return G=e,(b=b||[]).push(i),i="",!1!==t.createErrors?(i+=" { keyword: '"+(G||"_limit")+"' , dataPath: (dataPath || '') + "+t.errorPath+' , schemaPath: "'+d+'" , params: { comparison: '+p+", limit: "+r+", exclusive: "+u+" } ",!1!==t.opts.messages&&(i+=" , message: 'should be "+I+" ",i+=m?"' + "+r:n+"'"),t.opts.verbose&&(i+=" , schema: ",i+=m?"validate.schema"+s:""+n,i+=" , parentSchema: validate.schema"+t.schemaPath+" , data: "+o+" "),i+=" } "):i+=" {} ",M=i,i=b.pop(),!t.compositeRule&&c?t.async?i+=" throw new ValidationError(["+M+"]); ":i+=" validate.errors = ["+M+"]; return false; ":i+=" var err = "+M+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",i+=" } ",c&&(i+=" else { "),i}},function(t,e){"use strict";t.exports=function(t,e){var i=" ",l=t.level,a=t.dataLevel,n=t.schema[e],s=t.schemaPath+"."+e,d=t.errSchemaPath+"/"+e,c=!t.opts.allErrors,o="data"+(a||""),m=t.opts.v5&&n.$data,r=m?t.util.getData(n.$data,a,t.dataPathArr):n;m&&(i+=" var schema"+l+" = "+r+"; ",r="schema"+l),i+="if ( ",m&&(i+=" ("+r+" !== undefined && typeof "+r+" != 'number') || "),i+=" "+o+".length "+("maxItems"==e?">":"<")+" "+r+") { ";var b=e,g=g||[];g.push(i),i="",!1!==t.createErrors?(i+=" { keyword: '"+(b||"_limitItems")+"' , dataPath: (dataPath || '') + "+t.errorPath+' , schemaPath: "'+d+'" , params: { limit: '+r+" } ",!1!==t.opts.messages&&(i+=" , message: 'should NOT have ",i+="maxItems"==e?"more":"less",i+=" than ",i+=m?"' + "+r+" + '":""+n,i+=" items' "),t.opts.verbose&&(i+=" , schema: ",i+=m?"validate.schema"+s:""+n,i+=" , parentSchema: validate.schema"+t.schemaPath+" , data: "+o+" "),i+=" } "):i+=" {} ";var Z=i;return i=g.pop(),!t.compositeRule&&c?t.async?i+=" throw new ValidationError(["+Z+"]); ":i+=" validate.errors = ["+Z+"]; return false; ":i+=" var err = "+Z+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",i+="} ",c&&(i+=" else { "),i}},function(t,e){"use strict";t.exports=function(t,e){var i=" ",l=t.level,a=t.dataLevel,n=t.schema[e],s=t.schemaPath+"."+e,d=t.errSchemaPath+"/"+e,c=!t.opts.allErrors,o="data"+(a||""),m=t.opts.v5&&n.$data,r=m?t.util.getData(n.$data,a,t.dataPathArr):n;m&&(i+=" var schema"+l+" = "+r+"; ",r="schema"+l);var b="maxLength"==e?">":"<";i+="if ( ",m&&(i+=" ("+r+" !== undefined && typeof "+r+" != 'number') || "),!1===t.opts.unicode?i+=" "+o+".length ":i+=" ucs2length("+o+") ",i+=" "+b+" "+r+") { ";var g=e,Z=Z||[];Z.push(i),i="",!1!==t.createErrors?(i+=" { keyword: '"+(g||"_limitLength")+"' , dataPath: (dataPath || '') + "+t.errorPath+' , schemaPath: "'+d+'" , params: { limit: '+r+" } ",!1!==t.opts.messages&&(i+=" , message: 'should NOT be ",i+="maxLength"==e?"longer":"shorter",i+=" than ",i+=m?"' + "+r+" + '":""+n,i+=" characters' "),t.opts.verbose&&(i+=" , schema: ",i+=m?"validate.schema"+s:""+n,i+=" , parentSchema: validate.schema"+t.schemaPath+" , data: "+o+" "),i+=" } "):i+=" {} ";var h=i;return i=Z.pop(),!t.compositeRule&&c?t.async?i+=" throw new ValidationError(["+h+"]); ":i+=" validate.errors = ["+h+"]; return false; ":i+=" var err = "+h+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",i+="} ",c&&(i+=" else { "),i}},function(t,e){"use strict";t.exports=function(t,e){var i=" ",l=t.level,a=t.dataLevel,n=t.schema[e],s=t.schemaPath+"."+e,d=t.errSchemaPath+"/"+e,c=!t.opts.allErrors,o="data"+(a||""),m=t.opts.v5&&n.$data,r=m?t.util.getData(n.$data,a,t.dataPathArr):n;m&&(i+=" var schema"+l+" = "+r+"; ",r="schema"+l),i+="if ( ",m&&(i+=" ("+r+" !== undefined && typeof "+r+" != 'number') || "),i+=" Object.keys("+o+").length "+("maxProperties"==e?">":"<")+" "+r+") { ";var b=e,g=g||[];g.push(i),i="",!1!==t.createErrors?(i+=" { keyword: '"+(b||"_limitProperties")+"' , dataPath: (dataPath || '') + "+t.errorPath+' , schemaPath: "'+d+'" , params: { limit: '+r+" } ",!1!==t.opts.messages&&(i+=" , message: 'should NOT have ",i+="maxProperties"==e?"more":"less",i+=" than ",i+=m?"' + "+r+" + '":""+n,i+=" properties' "),t.opts.verbose&&(i+=" , schema: ",i+=m?"validate.schema"+s:""+n,i+=" , parentSchema: validate.schema"+t.schemaPath+" , data: "+o+" "),i+=" } "):i+=" {} ";var Z=i;return i=g.pop(),!t.compositeRule&&c?t.async?i+=" throw new ValidationError(["+Z+"]); ":i+=" validate.errors = ["+Z+"]; return false; ":i+=" var err = "+Z+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",i+="} ",c&&(i+=" else { "),i}},function(t,e){"use strict";t.exports=function(t,e){var i=" ",l=t.level,a=t.dataLevel,n=t.schema[e],s=t.schemaPath+"."+e,d=t.errSchemaPath+"/"+e,c=!t.opts.allErrors,o="data"+(a||""),m=t.opts.v5&&n.$data,r=m?t.util.getData(n.$data,a,t.dataPathArr):n;m&&(i+=" var schema"+l+" = "+r+"; ",r="schema"+l),i+="var division"+l+";if (",m&&(i+=" "+r+" !== undefined && ( typeof "+r+" != 'number' || "),i+=" (division"+l+" = "+o+" / "+r+", ",t.opts.multipleOfPrecision?i+=" Math.abs(Math.round(division"+l+") - division"+l+") > 1e-"+t.opts.multipleOfPrecision+" ":i+=" division"+l+" !== parseInt(division"+l+") ",i+=" ) ",m&&(i+=" ) "),i+=" ) { ";var b=b||[];b.push(i),i="",!1!==t.createErrors?(i+=" { keyword: 'multipleOf' , dataPath: (dataPath || '') + "+t.errorPath+' , schemaPath: "'+d+'" , params: { multipleOf: '+r+" } ",!1!==t.opts.messages&&(i+=" , message: 'should be multiple of ",i+=m?"' + "+r:n+"'"),t.opts.verbose&&(i+=" , schema: ",i+=m?"validate.schema"+s:""+n,i+=" , parentSchema: validate.schema"+t.schemaPath+" , data: "+o+" "),i+=" } "):i+=" {} ";var g=i;return i=b.pop(),!t.compositeRule&&c?t.async?i+=" throw new ValidationError(["+g+"]); ":i+=" validate.errors = ["+g+"]; return false; ":i+=" var err = "+g+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",i+="} ",c&&(i+=" else { "),i}},function(t,e){"use strict";t.exports=function(t,e){var i=" ",l=t.level,a=t.dataLevel,n=t.schema[e],s=t.schemaPath+"."+e,d=t.errSchemaPath+"/"+e,c=!t.opts.allErrors,o="data"+(a||""),m="errs__"+l,r=t.util.copy(t);if(r.level++,t.util.schemaHasRules(n,t.RULES.all)){r.schema=n,r.schemaPath=s,r.errSchemaPath=d,i+=" var "+m+" = errors; ";var b,g=t.compositeRule;t.compositeRule=r.compositeRule=!0,r.createErrors=!1,r.opts.allErrors&&(b=r.opts.allErrors,r.opts.allErrors=!1),i+=" "+t.validate(r)+" ",r.createErrors=!0,b&&(r.opts.allErrors=b),t.compositeRule=r.compositeRule=g,i+=" if (valid"+r.level+") { ";var Z=Z||[];Z.push(i),i="",!1!==t.createErrors?(i+=" { keyword: 'not' , dataPath: (dataPath || '') + "+t.errorPath+' , schemaPath: "'+d+'" , params: {} ',!1!==t.opts.messages&&(i+=" , message: 'should NOT be valid' "),t.opts.verbose&&(i+=" , schema: validate.schema"+s+" , parentSchema: validate.schema"+t.schemaPath+" , data: "+o+" "),i+=" } "):i+=" {} ";var h=i;i=Z.pop(),!t.compositeRule&&c?t.async?i+=" throw new ValidationError(["+h+"]); ":i+=" validate.errors = ["+h+"]; return false; ":i+=" var err = "+h+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",i+=" } else { errors = "+m+"; if (vErrors !== null) { if ("+m+") vErrors.length = "+m+"; else vErrors = null; } ",t.opts.allErrors&&(i+=" } ")}else i+=" var err = ",!1!==t.createErrors?(i+=" { keyword: 'not' , dataPath: (dataPath || '') + "+t.errorPath+' , schemaPath: "'+d+'" , params: {} ',!1!==t.opts.messages&&(i+=" , message: 'should NOT be valid' "),t.opts.verbose&&(i+=" , schema: validate.schema"+s+" , parentSchema: validate.schema"+t.schemaPath+" , data: "+o+" "),i+=" } "):i+=" {} ",i+="; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",c&&(i+=" if (false) { ");return i}},function(t,e){"use strict";t.exports=function(t,e){var i=" ",l=t.level,a=t.dataLevel,n=t.schema[e],s=t.schemaPath+"."+e,d=t.errSchemaPath+"/"+e,c=!t.opts.allErrors,o="data"+(a||""),m="valid"+l,r="errs__"+l,b=t.util.copy(t),g="";b.level++,i+="var "+r+" = errors;var prevValid"+l+" = false;var "+m+" = false; ";var Z=t.compositeRule;t.compositeRule=b.compositeRule=!0;var h=n;if(h)for(var W,N=-1,y=h.length-1;N5)i+=" || validate.schema"+s+"[key"+l+"] ";else{var O=W;if(O)for(var T=-1,U=O.length-1;T= "+ot+"; ",d=t.errSchemaPath+"/patternGroups/minimum",i+=" if (!"+m+") { ",(Zt=Zt||[]).push(i),i="",!1!==t.createErrors?(i+=" { keyword: 'patternGroups' , dataPath: (dataPath || '') + "+t.errorPath+' , schemaPath: "'+d+"\" , params: { reason: '"+bt+"', limit: "+rt+", pattern: '"+t.util.escapeQuotes(nt)+"' } ",!1!==t.opts.messages&&(i+=" , message: 'should NOT have "+gt+" than "+rt+' properties matching pattern "'+t.util.escapeQuotes(nt)+"\"' "),t.opts.verbose&&(i+=" , schema: validate.schema"+s+" , parentSchema: validate.schema"+t.schemaPath+" , data: "+o+" "),i+=" } "):i+=" {} ",J=i,i=Zt.pop(),!t.compositeRule&&c?t.async?i+=" throw new ValidationError(["+J+"]); ":i+=" validate.errors = ["+J+"]; return false; ":i+=" var err = "+J+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",i+=" } ",void 0!==mt&&(i+=" else ")}var Zt;if(void 0!==mt)rt=mt,bt="maximum",gt="more",i+=" "+m+" = pgPropCount"+l+" <= "+mt+"; ",d=t.errSchemaPath+"/patternGroups/maximum",i+=" if (!"+m+") { ",(Zt=Zt||[]).push(i),i="",!1!==t.createErrors?(i+=" { keyword: 'patternGroups' , dataPath: (dataPath || '') + "+t.errorPath+' , schemaPath: "'+d+"\" , params: { reason: '"+bt+"', limit: "+rt+", pattern: '"+t.util.escapeQuotes(nt)+"' } ",!1!==t.opts.messages&&(i+=" , message: 'should NOT have "+gt+" than "+rt+' properties matching pattern "'+t.util.escapeQuotes(nt)+"\"' "),t.opts.verbose&&(i+=" , schema: validate.schema"+s+" , parentSchema: validate.schema"+t.schemaPath+" , data: "+o+" "),i+=" } "):i+=" {} ",J=i,i=Zt.pop(),!t.compositeRule&&c?t.async?i+=" throw new ValidationError(["+J+"]); ":i+=" validate.errors = ["+J+"]; return false; ":i+=" var err = "+J+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",i+=" } ";d=k,c&&(i+=" if ("+m+") { ",g+="}")}}}}return c&&(i+=" "+g+" if ("+r+" == errors) {"),i=t.util.cleanUpCode(i)}},function(t,e){"use strict";t.exports=function(t,e){var i=" ",l=t.level,a=t.dataLevel,n=t.schema[e],s=t.schemaPath+"."+e,d=t.errSchemaPath+"/"+e,c=!t.opts.allErrors,o="data"+(a||""),m="valid"+l,r=t.opts.v5&&n.$data,b=r?t.util.getData(n.$data,a,t.dataPathArr):n;if(r&&(i+=" var schema"+l+" = "+b+"; ",b="schema"+l),!r)if(n.length=t.opts.loopRequired;if(c)if(i+=" var missing"+l+"; ",u){r||(i+=" var schema"+l+" = validate.schema"+s+"; ");var I="' + "+(B="schema"+l+"["+(Y="i"+l)+"]")+" + '";t.opts._errorDataPathProperty&&(t.errorPath=t.util.getPathExpr(y,B,t.opts.jsonPointers)),i+=" var "+m+" = true; ",r&&(i+=" if (schema"+l+" === undefined) "+m+" = true; else if (!Array.isArray(schema"+l+")) "+m+" = false; else {"),i+=" for (var "+Y+" = 0; "+Y+" < schema"+l+".length; "+Y+"++) { "+m+" = "+o+"[schema"+l+"["+Y+"]] !== undefined; if (!"+m+") break; } ",r&&(i+=" } "),i+=" if (!"+m+") { ",(M=M||[]).push(i),i="",!1!==t.createErrors?(i+=" { keyword: 'required' , dataPath: (dataPath || '') + "+t.errorPath+' , schemaPath: "'+d+"\" , params: { missingProperty: '"+I+"' } ",!1!==t.opts.messages&&(i+=" , message: '",t.opts._errorDataPathProperty?i+="is a required property":i+="should have required property \\'"+I+"\\'",i+="' "),t.opts.verbose&&(i+=" , schema: validate.schema"+s+" , parentSchema: validate.schema"+t.schemaPath+" , data: "+o+" "),i+=" } "):i+=" {} ";var G=i;i=M.pop(),!t.compositeRule&&c?t.async?i+=" throw new ValidationError(["+G+"]); ":i+=" validate.errors = ["+G+"]; return false; ":i+=" var err = "+G+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",i+=" } else { "}else{i+=" if ( ";var M,p=g;if(p)for(var V,Y=-1,R=p.length-1;Y 1) { var i = "+o+".length, j; outer: for (;i--;) { for (j = i; j--;) { if (equal("+o+"[i], "+o+"[j])) { "+m+" = false; break outer; } } } } ",r&&(i+=" } "),i+=" if (!"+m+") { ";var g=g||[];g.push(i),i="",!1!==t.createErrors?(i+=" { keyword: 'uniqueItems' , dataPath: (dataPath || '') + "+t.errorPath+' , schemaPath: "'+d+'" , params: { i: i, j: j } ',!1!==t.opts.messages&&(i+=" , message: 'should NOT have duplicate items (items ## ' + j + ' and ' + i + ' are identical)' "),t.opts.verbose&&(i+=" , schema: ",i+=r?"validate.schema"+s:""+n,i+=" , parentSchema: validate.schema"+t.schemaPath+" , data: "+o+" "),i+=" } "):i+=" {} ";var Z=i;i=g.pop(),!t.compositeRule&&c?t.async?i+=" throw new ValidationError(["+Z+"]); ":i+=" validate.errors = ["+Z+"]; return false; ":i+=" var err = "+Z+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",i+=" } ",c&&(i+=" else { ")}else c&&(i+=" if (true) { ");return i}},function(t,e,i){"use strict";var l="https://raw.githubusercontent.com/epoberezkin/ajv/master/lib/refs/json-schema-v5.json";function a(t){return{not:{items:{not:t}}}}t.exports={enable:function(t){var e={switch:i(44),constant:i(45),_formatLimit:i(46),patternRequired:i(47)};if(!1!==t._opts.meta){var n=i(48);t.addMetaSchema(n,l)}function s(i,l,a){var n={inline:a||e[i],statements:!0,errors:"full"};l&&(n.type=l),t.addKeyword(i,n)}s("constant"),t.addKeyword("contains",{type:"array",macro:a}),s("formatMaximum","string",e._formatLimit),s("formatMinimum","string",e._formatLimit),t.addKeyword("exclusiveFormatMaximum"),t.addKeyword("exclusiveFormatMinimum"),t.addKeyword("patternGroups"),s("patternRequired","object"),s("switch")},META_SCHEMA_ID:l}},function(t,e){"use strict";t.exports=function(t,e){var i=" ",l=t.level,a=t.dataLevel,n=t.schema[e],s=t.schemaPath+"."+e,d=t.errSchemaPath+"/"+e,c=!t.opts.allErrors,o="data"+(a||""),m="valid"+l,r="errs__"+l,b=t.util.copy(t),g="";b.level++;var Z,h="ifPassed"+t.level;i+="var "+h+";";var W=n;if(W)for(var N,y=-1,u=W.length-1;y",M="result"+l,p=t.opts.v5&&n.$data,V=p?t.util.getData(n.$data,a,t.dataPathArr):n;if(p&&(i+=" var schema"+l+" = "+V+"; ",V="schema"+l),I){var Y=t.util.getData(u.$data,a,t.dataPathArr),R="exclusive"+l,B="' + op"+l+" + '";i+=" var schemaExcl"+l+" = "+Y+"; ",i+=" if (typeof "+(Y="schemaExcl"+l)+" != 'boolean' && "+Y+" !== undefined) { "+m+" = false; ";var D=y;(W=W||[]).push(i),i="",!1!==t.createErrors?(i+=" { keyword: '"+(D||"_exclusiveFormatLimit")+"' , dataPath: (dataPath || '') + "+t.errorPath+' , schemaPath: "'+d+'" , params: {} ',!1!==t.opts.messages&&(i+=" , message: '"+y+" should be boolean' "),t.opts.verbose&&(i+=" , schema: validate.schema"+s+" , parentSchema: validate.schema"+t.schemaPath+" , data: "+o+" "),i+=" } "):i+=" {} ";var O=i;i=W.pop(),!t.compositeRule&&c?t.async?i+=" throw new ValidationError(["+O+"]); ":i+=" validate.errors = ["+O+"]; return false; ":i+=" var err = "+O+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",i+=" } ",c&&(g+="}",i+=" else { "),p&&(i+=" if ("+V+" === undefined) "+m+" = true; else if (typeof "+V+" != 'string') "+m+" = false; else { ",g+="}"),b&&(i+=" if (!"+h+") "+m+" = true; else { ",g+="}"),i+=" var "+M+" = "+h+"("+o+", ",i+=p?""+V:""+t.util.toQuotedString(n),i+=" ); if ("+M+" === undefined) "+m+" = false; var exclusive"+l+" = "+Y+" === true; if ("+m+" === undefined) { "+m+" = exclusive"+l+" ? "+M+" "+G+" 0 : "+M+" "+G+"= 0; } if (!"+m+") var op"+l+" = exclusive"+l+" ? '"+G+"' : '"+G+"=';"}else B=G,(R=!0===u)||(B+="="),p&&(i+=" if ("+V+" === undefined) "+m+" = true; else if (typeof "+V+" != 'string') "+m+" = false; else { ",g+="}"),b&&(i+=" if (!"+h+") "+m+" = true; else { ",g+="}"),i+=" var "+M+" = "+h+"("+o+", ",i+=p?""+V:""+t.util.toQuotedString(n),i+=" ); if ("+M+" === undefined) "+m+" = false; if ("+m+" === undefined) "+m+" = "+M+" "+G,R||(i+="="),i+=" 0;";return i+=g+"if (!"+m+") { ",D=e,(W=W||[]).push(i),i="",!1!==t.createErrors?(i+=" { keyword: '"+(D||"_formatLimit")+"' , dataPath: (dataPath || '') + "+t.errorPath+' , schemaPath: "'+d+'" , params: { limit: ',i+=p?""+V:""+t.util.toQuotedString(n),i+=" } ",!1!==t.opts.messages&&(i+=" , message: 'should be "+B+' "',i+=p?"' + "+V+" + '":""+t.util.escapeQuotes(n),i+="\"' "),t.opts.verbose&&(i+=" , schema: ",i+=p?"validate.schema"+s:""+t.util.toQuotedString(n),i+=" , parentSchema: validate.schema"+t.schemaPath+" , data: "+o+" "),i+=" } "):i+=" {} ",O=i,i=W.pop(),!t.compositeRule&&c?t.async?i+=" throw new ValidationError(["+O+"]); ":i+=" validate.errors = ["+O+"]; return false; ":i+=" var err = "+O+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",i+="}"}},function(t,e){"use strict";t.exports=function(t,e){var i=" ",l=t.level,a=t.dataLevel,n=t.schema[e],s=t.schemaPath+"."+e,d=t.errSchemaPath+"/"+e,c=!t.opts.allErrors,o="data"+(a||""),m="valid"+l,r="key"+l,b="patternMatched"+l,g="";i+="var "+m+" = true;";var Z=n;if(Z)for(var h,W=-1,N=Z.length-1;W0?this.autoScrollStep=(l+24-t)/3:t>n-24&&a+i.scrollTop3?(i.scrollTop+=a/3,l.animateCallback=e,l.animateTimeout=setTimeout(d,50)):(e&&e(!0),i.scrollTop=s,delete l.animateTimeout,delete l.animateCallback)};d()}else e&&e(!1)},_createFrame:function(){this.frame=document.createElement("div"),this.frame.className="jsoneditor jsoneditor-mode-"+this.options.mode,this.container.appendChild(this.frame);var t=this;function e(e){t._onEvent&&t._onEvent(e)}this.frame.onclick=function(t){var i=t.target;e(t),"BUTTON"==i.nodeName&&t.preventDefault()},this.frame.oninput=e,this.frame.onchange=e,this.frame.onkeydown=e,this.frame.onkeyup=e,this.frame.oncut=e,this.frame.onpaste=e,this.frame.onmousedown=e,this.frame.onmouseup=e,this.frame.onmouseover=e,this.frame.onmouseout=e,o.addEventListener(this.frame,"focus",e,!0),o.addEventListener(this.frame,"blur",e,!0),this.frame.onfocusin=e,this.frame.onfocusout=e,this.menu=document.createElement("div"),this.menu.className="jsoneditor-menu",this.frame.appendChild(this.menu);var i=document.createElement("button");i.type="button",i.className="jsoneditor-expand-all",i.title="Expand all fields",i.onclick=function(){t.expandAll()},this.menu.appendChild(i);var l=document.createElement("button");if(l.type="button",l.title="Collapse all fields",l.className="jsoneditor-collapse-all",l.onclick=function(){t.collapseAll()},this.menu.appendChild(l),this.history){var a=document.createElement("button");a.type="button",a.className="jsoneditor-undo jsoneditor-separator",a.title="Undo last action (Ctrl+Z)",a.onclick=function(){t._onUndo()},this.menu.appendChild(a),this.dom.undo=a;var s=document.createElement("button");s.type="button",s.className="jsoneditor-redo",s.title="Redo (Ctrl+Shift+Z)",s.onclick=function(){t._onRedo()},this.menu.appendChild(s),this.dom.redo=s,this.history.onChange=function(){a.disabled=!t.history.canUndo(),s.disabled=!t.history.canRedo()},this.history.onChange()}if(this.options&&this.options.modes&&this.options.modes.length){var d=this;this.modeSwitcher=new c(this.menu,this.options.modes,this.options.mode,(function(t){d.modeSwitcher.destroy(),d.setMode(t),d.modeSwitcher.focus()}))}this.options.search&&(this.searchBox=new n(this,this.menu))},_onUndo:function(){this.history&&(this.history.undo(),this._onChange())},_onRedo:function(){this.history&&(this.history.redo(),this._onChange())},_onEvent:function(t){"keydown"==t.type&&this._onKeyDown(t),"focus"==t.type&&(this.focusTarget=t.target),"mousedown"==t.type&&this._startDragDistance(t),"mousemove"!=t.type&&"mouseup"!=t.type&&"click"!=t.type||this._updateDragDistance(t);var e=d.getNodeFromTarget(t.target);if(e&&e.selected){if("click"==t.type){if(t.target==e.dom.menu)return void this.showContextMenu(t.target);t.hasMoved||this.deselect()}"mousedown"==t.type&&d.onDragStart(this.multiselection.nodes,t)}else"mousedown"==t.type&&(this.deselect(),e&&t.target==e.dom.drag?d.onDragStart(e,t):(!e||t.target!=e.dom.field&&t.target!=e.dom.value&&t.target!=e.dom.select)&&this._onMultiSelectStart(t));e&&e.onEvent(t)},_startDragDistance:function(t){this.dragDistanceEvent={initialTarget:t.target,initialPageX:t.pageX,initialPageY:t.pageY,dragDistance:0,hasMoved:!1}},_updateDragDistance:function(t){this.dragDistanceEvent||this._startDragDistance(t);var e=t.pageX-this.dragDistanceEvent.initialPageX,i=t.pageY-this.dragDistanceEvent.initialPageY;return this.dragDistanceEvent.dragDistance=Math.sqrt(e*e+i*i),this.dragDistanceEvent.hasMoved=this.dragDistanceEvent.hasMoved||this.dragDistanceEvent.dragDistance>10,t.dragDistance=this.dragDistanceEvent.dragDistance,t.hasMoved=this.dragDistanceEvent.hasMoved,t.dragDistance},_onMultiSelectStart:function(t){var e=d.getNodeFromTarget(t.target);if("tree"===this.options.mode&&void 0===this.options.onEditable){this.multiselection={start:e||null,end:null,nodes:[]},this._startDragDistance(t);var i=this;this.mousemove||(this.mousemove=o.addEventListener(window,"mousemove",(function(t){i._onMultiSelect(t)}))),this.mouseup||(this.mouseup=o.addEventListener(window,"mouseup",(function(t){i._onMultiSelectEnd(t)})))}},_onMultiSelect:function(t){if(t.preventDefault(),this._updateDragDistance(t),t.hasMoved){var e=d.getNodeFromTarget(t.target);e&&(null==this.multiselection.start&&(this.multiselection.start=e),this.multiselection.end=e),this.deselect();var i=this.multiselection.start,l=this.multiselection.end||this.multiselection.start;i&&l&&(this.multiselection.nodes=this._findTopLevelNodes(i,l),this.select(this.multiselection.nodes))}},_onMultiSelectEnd:function(t){this.multiselection.nodes[0]&&this.multiselection.nodes[0].dom.menu.focus(),this.multiselection.start=null,this.multiselection.end=null,this.mousemove&&(o.removeEventListener(window,"mousemove",this.mousemove),delete this.mousemove),this.mouseup&&(o.removeEventListener(window,"mouseup",this.mouseup),delete this.mouseup)},deselect:function(t){this.multiselection.nodes.forEach((function(t){t.setSelected(!1)})),this.multiselection.nodes=[],t&&(this.multiselection.start=null,this.multiselection.end=null)},select:function(t){if(!Array.isArray(t))return this.select([t]);if(t){this.deselect(),this.multiselection.nodes=t.slice(0);var e=t[0];t.forEach((function(t){t.setSelected(!0,t===e)}))}},_findTopLevelNodes:function(t,e){for(var i=t.getNodePath(),l=e.getNodePath(),a=0;a=0},l.prototype.canRedo=function(){return this.index=0;){var i=e[t];if(" "!==i&&"\n"!==i&&"\r"!==i&&"\t"!==i)return i;t--}return""}function d(){for(i+=2;i=0;d--){var c=s[d];!0===c.specified&&n.removeAttribute(c.name)}e.stripFormatting(n)}},e.setEndOfContentEditable=function(t){var e,i;document.createRange&&((e=document.createRange()).selectNodeContents(t),e.collapse(!1),(i=window.getSelection()).removeAllRanges(),i.addRange(e))},e.selectContentEditable=function(t){var e,i;t&&"DIV"==t.nodeName&&window.getSelection&&document.createRange&&((i=document.createRange()).selectNodeContents(t),(e=window.getSelection()).removeAllRanges(),e.addRange(i))},e.getSelection=function(){if(window.getSelection){var t=window.getSelection();if(t.getRangeAt&&t.rangeCount)return t.getRangeAt(0)}return null},e.setSelection=function(t){if(t&&window.getSelection){var e=window.getSelection();e.removeAllRanges(),e.addRange(t)}},e.getSelectionOffset=function(){var t=e.getSelection();return t&&"startOffset"in t&&"endOffset"in t&&t.startContainer&&t.startContainer==t.endContainer?{startOffset:t.startOffset,endOffset:t.endOffset,container:t.startContainer.parentNode}:null},e.setSelectionOffset=function(t){if(document.createRange&&window.getSelection&&window.getSelection()){var i=document.createRange();t.container.firstChild||t.container.appendChild(document.createTextNode("")),i.setStart(t.container.firstChild,t.startOffset),i.setEnd(t.container.firstChild,t.endOffset),e.setSelection(i)}},e.getInnerText=function(t,i){if(null==i&&(i={text:"",flush:function(){var t=this.text;return this.text="",t},set:function(t){this.text=t}}),t.nodeValue)return i.flush()+t.nodeValue;if(t.hasChildNodes()){for(var l=t.childNodes,a="",n=0,s=l.length;n5){var i=["("+(e.length-5)+" more...)"];(e=e.slice(0,5)).push(i)}t.message="should be equal to one of: "+e.join(", ")}}return"additionalProperties"===t.keyword&&(t.message="should NOT have additional property: "+t.params.additionalProperty),t},e.insideRect=function(t,e,i){var l=void 0!==i?i:0;return e.left-l>=t.left&&e.right+l<=t.right&&e.top-l>=t.top&&e.bottom+l<=t.bottom},e.debounce=function(t,e,i){var l;return function(){var a=this,n=arguments,s=function(){l=null,i||t.apply(a,n)},d=i&&!l;clearTimeout(l),l=setTimeout(s,e),d&&t.apply(a,n)}},e.textDiff=function(t,e){for(var i=e.length,l=0,a=t.length,n=e.length;e.charAt(l)===t.charAt(l)&&ll&&a>0;)n--,a--;return{start:l,end:n}}},function(t,e,i){var l,a,n=(l={trace:function(){},yy:{},symbols_:{error:2,JSONString:3,STRING:4,JSONNumber:5,NUMBER:6,JSONNullLiteral:7,NULL:8,JSONBooleanLiteral:9,TRUE:10,FALSE:11,JSONText:12,JSONValue:13,EOF:14,JSONObject:15,JSONArray:16,"{":17,"}":18,JSONMemberList:19,JSONMember:20,":":21,",":22,"[":23,"]":24,JSONElementList:25,$accept:0,$end:1},terminals_:{2:"error",4:"STRING",6:"NUMBER",8:"NULL",10:"TRUE",11:"FALSE",14:"EOF",17:"{",18:"}",21:":",22:",",23:"[",24:"]"},productions_:[0,[3,1],[5,1],[7,1],[9,1],[9,1],[12,2],[13,1],[13,1],[13,1],[13,1],[13,1],[13,1],[15,2],[15,3],[20,3],[19,1],[19,3],[16,2],[16,3],[25,1],[25,3]],performAction:function(t,e,i,l,a,n,s){var d=n.length-1;switch(a){case 1:this.$=t.replace(/\\(\\|")/g,"$1").replace(/\\n/g,"\n").replace(/\\r/g,"\r").replace(/\\t/g,"\t").replace(/\\v/g,"\v").replace(/\\f/g,"\f").replace(/\\b/g,"\b");break;case 2:this.$=Number(t);break;case 3:this.$=null;break;case 4:this.$=!0;break;case 5:this.$=!1;break;case 6:return this.$=n[d-1];case 13:this.$={};break;case 14:this.$=n[d-1];break;case 15:this.$=[n[d-2],n[d]];break;case 16:this.$={},this.$[n[d][0]]=n[d][1];break;case 17:this.$=n[d-2],n[d-2][n[d][0]]=n[d][1];break;case 18:this.$=[];break;case 19:this.$=n[d-1];break;case 20:this.$=[n[d]];break;case 21:this.$=n[d-2],n[d-2].push(n[d])}},table:[{3:5,4:[1,12],5:6,6:[1,13],7:3,8:[1,9],9:4,10:[1,10],11:[1,11],12:1,13:2,15:7,16:8,17:[1,14],23:[1,15]},{1:[3]},{14:[1,16]},{14:[2,7],18:[2,7],22:[2,7],24:[2,7]},{14:[2,8],18:[2,8],22:[2,8],24:[2,8]},{14:[2,9],18:[2,9],22:[2,9],24:[2,9]},{14:[2,10],18:[2,10],22:[2,10],24:[2,10]},{14:[2,11],18:[2,11],22:[2,11],24:[2,11]},{14:[2,12],18:[2,12],22:[2,12],24:[2,12]},{14:[2,3],18:[2,3],22:[2,3],24:[2,3]},{14:[2,4],18:[2,4],22:[2,4],24:[2,4]},{14:[2,5],18:[2,5],22:[2,5],24:[2,5]},{14:[2,1],18:[2,1],21:[2,1],22:[2,1],24:[2,1]},{14:[2,2],18:[2,2],22:[2,2],24:[2,2]},{3:20,4:[1,12],18:[1,17],19:18,20:19},{3:5,4:[1,12],5:6,6:[1,13],7:3,8:[1,9],9:4,10:[1,10],11:[1,11],13:23,15:7,16:8,17:[1,14],23:[1,15],24:[1,21],25:22},{1:[2,6]},{14:[2,13],18:[2,13],22:[2,13],24:[2,13]},{18:[1,24],22:[1,25]},{18:[2,16],22:[2,16]},{21:[1,26]},{14:[2,18],18:[2,18],22:[2,18],24:[2,18]},{22:[1,28],24:[1,27]},{22:[2,20],24:[2,20]},{14:[2,14],18:[2,14],22:[2,14],24:[2,14]},{3:20,4:[1,12],20:29},{3:5,4:[1,12],5:6,6:[1,13],7:3,8:[1,9],9:4,10:[1,10],11:[1,11],13:30,15:7,16:8,17:[1,14],23:[1,15]},{14:[2,19],18:[2,19],22:[2,19],24:[2,19]},{3:5,4:[1,12],5:6,6:[1,13],7:3,8:[1,9],9:4,10:[1,10],11:[1,11],13:31,15:7,16:8,17:[1,14],23:[1,15]},{18:[2,17],22:[2,17]},{18:[2,15],22:[2,15]},{22:[2,21],24:[2,21]}],defaultActions:{16:[2,6]},parseError:function(t,e){throw new Error(t)},parse:function(t){var e=this,i=[0],l=[null],a=[],n=this.table,s="",d=0,c=0,o=0;this.lexer.setInput(t),this.lexer.yy=this.yy,this.yy.lexer=this.lexer,void 0===this.lexer.yylloc&&(this.lexer.yylloc={});var m=this.lexer.yylloc;function r(){var t;return"number"!=typeof(t=e.lexer.lex()||1)&&(t=e.symbols_[t]||t),t}a.push(m),"function"==typeof this.yy.parseError&&(this.parseError=this.yy.parseError);for(var b,g,Z,h,W,N,y,u,I,G,M={};;){if(Z=i[i.length-1],this.defaultActions[Z]?h=this.defaultActions[Z]:(null==b&&(b=r()),h=n[Z]&&n[Z][b]),void 0===h||!h.length||!h[0]){if(!o){for(N in I=[],n[Z])this.terminals_[N]&&N>2&&I.push("'"+this.terminals_[N]+"'");var p="";p=this.lexer.showPosition?"Parse error on line "+(d+1)+":\n"+this.lexer.showPosition()+"\nExpecting "+I.join(", ")+", got '"+this.terminals_[b]+"'":"Parse error on line "+(d+1)+": Unexpected "+(1==b?"end of input":"'"+(this.terminals_[b]||b)+"'"),this.parseError(p,{text:this.lexer.match,token:this.terminals_[b]||b,line:this.lexer.yylineno,loc:m,expected:I})}if(3==o){if(1==b)throw new Error(p||"Parsing halted.");c=this.lexer.yyleng,s=this.lexer.yytext,d=this.lexer.yylineno,m=this.lexer.yylloc,b=r()}for(;!(2..toString()in n[Z]);){if(0==Z)throw new Error(p||"Parsing halted.");G=1,i.length=i.length-2*G,l.length=l.length-G,a.length=a.length-G,Z=i[i.length-1]}g=b,b=2,h=n[Z=i[i.length-1]]&&n[Z][2],o=3}if(h[0]instanceof Array&&h.length>1)throw new Error("Parse Error: multiple actions possible at state: "+Z+", token: "+b);switch(h[0]){case 1:i.push(b),l.push(this.lexer.yytext),a.push(this.lexer.yylloc),i.push(h[1]),b=null,g?(b=g,g=null):(c=this.lexer.yyleng,s=this.lexer.yytext,d=this.lexer.yylineno,m=this.lexer.yylloc,o>0&&o--);break;case 2:if(y=this.productions_[h[1]][1],M.$=l[l.length-y],M._$={first_line:a[a.length-(y||1)].first_line,last_line:a[a.length-1].last_line,first_column:a[a.length-(y||1)].first_column,last_column:a[a.length-1].last_column},void 0!==(W=this.performAction.call(M,s,c,d,this.yy,h[1],l,a)))return W;y&&(i=i.slice(0,-1*y*2),l=l.slice(0,-1*y),a=a.slice(0,-1*y)),i.push(this.productions_[h[1]][0]),l.push(M.$),a.push(M._$),u=n[i[i.length-2]][i[i.length-1]],i.push(u);break;case 3:return!0}}return!0}},a=function(){var t={EOF:1,parseError:function(t,e){if(!this.yy.parseError)throw new Error(t);this.yy.parseError(t,e)},setInput:function(t){return this._input=t,this._more=this._less=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this},input:function(){var t=this._input[0];return this.yytext+=t,this.yyleng++,this.match+=t,this.matched+=t,t.match(/\n/)&&this.yylineno++,this._input=this._input.slice(1),t},unput:function(t){return this._input=t+this._input,this},more:function(){return this._more=!0,this},less:function(t){this._input=this.match.slice(t)+this._input},pastInput:function(){var t=this.matched.substr(0,this.matched.length-this.match.length);return(t.length>20?"...":"")+t.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var t=this.match;return t.length<20&&(t+=this._input.substr(0,20-t.length)),(t.substr(0,20)+(t.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var t=this.pastInput(),e=new Array(t.length+1).join("-");return t+this.upcomingInput()+"\n"+e+"^"},next:function(){if(this.done)return this.EOF;var t,e,i,l,a;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var n=this._currentRules(),s=0;se[0].length)||(e=i,l=s,this.options.flex));s++);return e?((a=e[0].match(/\n.*/g))&&(this.yylineno+=a.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:a?a[a.length-1].length-1:this.yylloc.last_column+e[0].length},this.yytext+=e[0],this.match+=e[0],this.yyleng=this.yytext.length,this._more=!1,this._input=this._input.slice(e[0].length),this.matched+=e[0],t=this.performAction.call(this,this.yy,this,n[l],this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),t||void 0):""===this._input?this.EOF:void this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var t=this.next();return void 0!==t?t:this.lex()},begin:function(t){this.conditionStack.push(t)},popState:function(){return this.conditionStack.pop()},_currentRules:function(){return this.conditions[this.conditionStack[this.conditionStack.length-1]].rules},topState:function(){return this.conditionStack[this.conditionStack.length-2]},pushState:function(t){this.begin(t)},options:{},performAction:function(t,e,i,l){switch(i){case 0:break;case 1:return 6;case 2:return e.yytext=e.yytext.substr(1,e.yyleng-2),4;case 3:return 17;case 4:return 18;case 5:return 23;case 6:return 24;case 7:return 22;case 8:return 21;case 9:return 10;case 10:return 11;case 11:return 8;case 12:return 14;case 13:return"INVALID"}},rules:[/^(?:\s+)/,/^(?:(-?([0-9]|[1-9][0-9]+))(\.[0-9]+)?([eE][-+]?[0-9]+)?\b)/,/^(?:"(?:\\[\\"bfnrt/]|\\u[a-fA-F0-9]{4}|[^\\\0-\x09\x0a-\x1f"])*")/,/^(?:\{)/,/^(?:\})/,/^(?:\[)/,/^(?:\])/,/^(?:,)/,/^(?::)/,/^(?:true\b)/,/^(?:false\b)/,/^(?:null\b)/,/^(?:$)/,/^(?:.)/],conditions:{INITIAL:{rules:[0,1,2,3,4,5,6,7,8,9,10,11,12,13],inclusive:!0}}};return t}(),l.lexer=a,l);e.parser=n,e.parse=n.parse.bind(n)},function(t,e){"use strict";function i(t,e){var i=this;this.editor=t,this.timeout=void 0,this.delay=200,this.lastText=void 0,this.dom={},this.dom.container=e;var l=document.createElement("table");this.dom.table=l,l.className="jsoneditor-search",e.appendChild(l);var a=document.createElement("tbody");this.dom.tbody=a,l.appendChild(a);var n=document.createElement("tr");a.appendChild(n);var s=document.createElement("td");n.appendChild(s);var d=document.createElement("div");this.dom.results=d,d.className="jsoneditor-results",s.appendChild(d),s=document.createElement("td"),n.appendChild(s);var c=document.createElement("div");this.dom.input=c,c.className="jsoneditor-frame",c.title="Search fields and values",s.appendChild(c);var o=document.createElement("table");c.appendChild(o);var m=document.createElement("tbody");o.appendChild(m),n=document.createElement("tr"),m.appendChild(n);var r=document.createElement("button");r.type="button",r.className="jsoneditor-refresh",(s=document.createElement("td")).appendChild(r),n.appendChild(s);var b=document.createElement("input");this.dom.search=b,b.oninput=function(t){i._onDelayedSearch(t)},b.onchange=function(t){i._onSearch()},b.onkeydown=function(t){i._onKeyDown(t)},b.onkeyup=function(t){i._onKeyUp(t)},r.onclick=function(t){b.select()},(s=document.createElement("td")).appendChild(b),n.appendChild(s);var g=document.createElement("button");g.type="button",g.title="Next result (Enter)",g.className="jsoneditor-next",g.onclick=function(){i.next()},(s=document.createElement("td")).appendChild(g),n.appendChild(s);var Z=document.createElement("button");Z.type="button",Z.title="Previous result (Shift+Enter)",Z.className="jsoneditor-previous",Z.onclick=function(){i.previous()},(s=document.createElement("td")).appendChild(Z),n.appendChild(s)}i.prototype.next=function(t){if(null!=this.results){var e=null!=this.resultIndex?this.resultIndex+1:0;e>this.results.length-1&&(e=0),this._setActiveResult(e,t)}},i.prototype.previous=function(t){if(null!=this.results){var e=this.results.length-1,i=null!=this.resultIndex?this.resultIndex-1:e;i<0&&(i=e),this._setActiveResult(i,t)}},i.prototype._setActiveResult=function(t,e){if(this.activeResult){var i=this.activeResult.node;"field"==this.activeResult.elem?delete i.searchFieldActive:delete i.searchValueActive,i.updateDom()}if(!this.results||!this.results[t])return this.resultIndex=void 0,void(this.activeResult=void 0);this.resultIndex=t;var l=this.results[this.resultIndex].node,a=this.results[this.resultIndex].elem;"field"==a?l.searchFieldActive=!0:l.searchValueActive=!0,this.activeResult=this.results[this.resultIndex],l.updateDom(),l.scrollTo((function(){e&&l.focus(a)}))},i.prototype._clearDelay=function(){null!=this.timeout&&(clearTimeout(this.timeout),delete this.timeout)},i.prototype._onDelayedSearch=function(t){this._clearDelay();var e=this;this.timeout=setTimeout((function(t){e._onSearch()}),this.delay)},i.prototype._onSearch=function(t){this._clearDelay();var e=this.dom.search.value,i=e.length>0?e:void 0;if(i!=this.lastText||t)if(this.lastText=i,this.results=this.editor.search(i),this._setActiveResult(void 0),null!=i){var l=this.results.length;switch(l){case 0:this.dom.results.innerHTML="no results";break;case 1:this.dom.results.innerHTML="1 result";break;default:this.dom.results.innerHTML=l+" results"}}else this.dom.results.innerHTML=""},i.prototype._onKeyDown=function(t){var e=t.which;27==e?(this.dom.search.value="",this._onSearch(),t.preventDefault(),t.stopPropagation()):13==e&&(t.ctrlKey?this._onSearch(!0):t.shiftKey?this.previous():this.next(),t.preventDefault(),t.stopPropagation())},i.prototype._onKeyUp=function(t){var e=t.keyCode;27!=e&&13!=e&&this._onDelayedSearch(t)},i.prototype.clear=function(){this.dom.search.value="",this._onSearch()},i.prototype.destroy=function(){this.editor=null,this.dom.container.removeChild(this.dom.table),this.dom=null,this.results=null,this.activeResult=null,this._clearDelay()},t.exports=i},function(t,e,i){"use strict";var l=i(54);function a(t,e){this.dom={};var i=this,l=this.dom;this.anchor=void 0,this.items=t,this.eventListeners={},this.selection=void 0,this.onClose=e?e.close:void 0;var a=document.createElement("div");a.className="jsoneditor-contextmenu-root",l.root=a;var n=document.createElement("div");n.className="jsoneditor-contextmenu",l.menu=n,a.appendChild(n);var s=document.createElement("ul");s.className="jsoneditor-menu",n.appendChild(s),l.list=s,l.items=[];var d=document.createElement("button");d.type="button",l.focusButton=d;var c=document.createElement("li");c.style.overflow="hidden",c.style.height="0",c.appendChild(d),s.appendChild(c),function t(e,l,a){a.forEach((function(a){if("separator"==a.type){var n=document.createElement("div");n.className="jsoneditor-separator",(d=document.createElement("li")).appendChild(n),e.appendChild(d)}else{var s={},d=document.createElement("li");e.appendChild(d);var c=document.createElement("button");if(c.type="button",c.className=a.className,s.button=c,a.title&&(c.title=a.title),a.click&&(c.onclick=function(t){t.preventDefault(),i.hide(),a.click()}),d.appendChild(c),a.submenu){var o,m=document.createElement("div");if(m.className="jsoneditor-icon",c.appendChild(m),c.appendChild(document.createTextNode(a.text)),a.click){c.className+=" jsoneditor-default";var r=document.createElement("button");r.type="button",s.buttonExpand=r,r.className="jsoneditor-expand",r.innerHTML='
',d.appendChild(r),a.submenuTitle&&(r.title=a.submenuTitle),o=r}else{var b=document.createElement("div");b.className="jsoneditor-expand",c.appendChild(b),o=c}o.onclick=function(t){t.preventDefault(),i._onExpandItem(s),o.focus()};var g=[];s.subItems=g;var Z=document.createElement("ul");s.ul=Z,Z.className="jsoneditor-menu",Z.style.height="0",d.appendChild(Z),t(Z,g,a.submenu)}else c.innerHTML='
'+a.text;l.push(s)}}))}(s,this.dom.items,t),this.maxHeight=0,t.forEach((function(e){var l=24*(t.length+(e.submenu?e.submenu.length:0));i.maxHeight=Math.max(i.maxHeight,l)}))}a.prototype._getVisibleButtons=function(){var t=[],e=this;return this.dom.items.forEach((function(i){t.push(i.button),i.buttonExpand&&t.push(i.buttonExpand),i.subItems&&i==e.expandedItem&&i.subItems.forEach((function(e){t.push(e.button),e.buttonExpand&&t.push(e.buttonExpand)}))})),t},a.visibleMenu=void 0,a.prototype.show=function(t,e){this.hide();var i=!0;if(e){var n=t.getBoundingClientRect(),s=e.getBoundingClientRect();n.bottom+this.maxHeights.top&&(i=!1)}if(i){var d=t.offsetHeight;this.dom.menu.style.left="0px",this.dom.menu.style.top=d+"px",this.dom.menu.style.bottom=""}else this.dom.menu.style.left="0px",this.dom.menu.style.top="",this.dom.menu.style.bottom="0px";var c=t.parentNode;c.insertBefore(this.dom.root,c.firstChild);var o=this,m=this.dom.list;this.eventListeners.mousedown=l.addEventListener(window,"mousedown",(function(t){var e=t.target;e==m||o._isChildOf(e,m)||(o.hide(),t.stopPropagation(),t.preventDefault())})),this.eventListeners.keydown=l.addEventListener(window,"keydown",(function(t){o._onKeyDown(t)})),this.selection=l.getSelection(),this.anchor=t,setTimeout((function(){o.dom.focusButton.focus()}),0),a.visibleMenu&&a.visibleMenu.hide(),a.visibleMenu=this},a.prototype.hide=function(){for(var t in this.dom.root.parentNode&&(this.dom.root.parentNode.removeChild(this.dom.root),this.onClose&&this.onClose()),this.eventListeners)if(this.eventListeners.hasOwnProperty(t)){var e=this.eventListeners[t];e&&l.removeEventListener(window,t,e),delete this.eventListeners[t]}a.visibleMenu==this&&(a.visibleMenu=void 0)},a.prototype._onExpandItem=function(t){var e=this,i=t==this.expandedItem,a=this.expandedItem;if(a&&(a.ul.style.height="0",a.ul.style.padding="",setTimeout((function(){e.expandedItem!=a&&(a.ul.style.display="",l.removeClassName(a.ul.parentNode,"jsoneditor-selected"))}),300),this.expandedItem=void 0),!i){var n=t.ul;n.style.display="block",n.clientHeight,setTimeout((function(){e.expandedItem==t&&(n.style.height=24*n.childNodes.length+"px",n.style.padding="5px 10px")}),0),l.addClassName(n.parentNode,"jsoneditor-selected"),this.expandedItem=t}},a.prototype._onKeyDown=function(t){var e,i,a,n,s=t.target,d=t.which,c=!1;27==d?(this.selection&&l.setSelection(this.selection),this.anchor&&this.anchor.focus(),this.hide(),c=!0):9==d?t.shiftKey?0==(i=(e=this._getVisibleButtons()).indexOf(s))&&(e[e.length-1].focus(),c=!0):(i=(e=this._getVisibleButtons()).indexOf(s))==e.length-1&&(e[0].focus(),c=!0):37==d?("jsoneditor-expand"==s.className&&(i=(e=this._getVisibleButtons()).indexOf(s),(a=e[i-1])&&a.focus()),c=!0):38==d?(i=(e=this._getVisibleButtons()).indexOf(s),(a=e[i-1])&&"jsoneditor-expand"==a.className&&(a=e[i-2]),a||(a=e[e.length-1]),a&&a.focus(),c=!0):39==d?(i=(e=this._getVisibleButtons()).indexOf(s),(n=e[i+1])&&"jsoneditor-expand"==n.className&&n.focus(),c=!0):40==d&&(i=(e=this._getVisibleButtons()).indexOf(s),(n=e[i+1])&&"jsoneditor-expand"==n.className&&(n=e[i+2]),n||(n=e[0]),n&&(n.focus(),c=!0),c=!0),c&&(t.stopPropagation(),t.preventDefault())},a.prototype._isChildOf=function(t,e){for(var i=t.parentNode;i;){if(i==e)return!0;i=i.parentNode}return!1},t.exports=a},function(t,e,i){"use strict";var l=i(59),a=i(57),n=i(60),s=i(54);function d(t,e){this.editor=t,this.dom={},this.expanded=!1,e&&e instanceof Object?(this.setField(e.field,e.fieldEditable),this.setValue(e.value,e.type)):(this.setField(""),this.setValue(null)),this._debouncedOnChangeValue=s.debounce(this._onChangeValue.bind(this),d.prototype.DEBOUNCE_INTERVAL),this._debouncedOnChangeField=s.debounce(this._onChangeField.bind(this),d.prototype.DEBOUNCE_INTERVAL)}d.prototype.DEBOUNCE_INTERVAL=150,d.prototype._updateEditability=function(){if(this.editable={field:!0,value:!0},this.editor&&(this.editable.field="tree"===this.editor.options.mode,this.editable.value="view"!==this.editor.options.mode,("tree"===this.editor.options.mode||"form"===this.editor.options.mode)&&"function"==typeof this.editor.options.onEditable)){var t=this.editor.options.onEditable({field:this.field,value:this.value,path:this.getPath()});"boolean"==typeof t?(this.editable.field=t,this.editable.value=t):("boolean"==typeof t.field&&(this.editable.field=t.field),"boolean"==typeof t.value&&(this.editable.value=t.value))}},d.prototype.getPath=function(){for(var t=this,e=[];t;){var i=t.parent?"array"!=t.parent.type?t.field:t.index:void 0;void 0!==i&&e.unshift(i),t=t.parent}return e},d.prototype.findNode=function(t){for(var e=s.parsePath(t),i=this;i&&e.length>0;){var l=e.shift();if("number"==typeof l){if("array"!==i.type)throw new Error("Cannot get child node at index "+l+": node is no array");i=i.childs[l]}else{if("object"!==i.type)throw new Error("Cannot get child node "+l+": node is no object");i=i.childs.filter((function(t){return t.field===l}))[0]}}return i},d.prototype.findParents=function(){for(var t=[],e=this.parent;e;)t.unshift(e),e=e.parent;return t},d.prototype.setError=function(t,e){this.getDom(),this.error=t;var i=this.dom.tdError;if(t){i||(i=document.createElement("td"),this.dom.tdError=i,this.dom.tdValue.parentNode.appendChild(i));var l=document.createElement("div");l.className="jsoneditor-popover jsoneditor-right",l.appendChild(document.createTextNode(t.message));var a=document.createElement("button");for(a.type="button",a.className="jsoneditor-schema-error",a.appendChild(l),a.onmouseover=a.onfocus=function(){for(var t=["right","above","below","left"],e=0;e0&&(t=this.childs.filter((function(t){return-1!==i.indexOf(t.field)})).map((function(t){return{node:t,error:{message:'duplicate key "'+t.field+'"'}}})))}if(this.childs)for(l=0;l0&&(t=t.concat(n))}return t},d.prototype.clearDom=function(){this.dom={}},d.prototype.getDom=function(){var t=this.dom;if(t.tr)return t.tr;if(this._updateEditability(),t.tr=document.createElement("tr"),t.tr.node=this,"tree"===this.editor.options.mode){var e=document.createElement("td");if(this.editable.field&&this.parent){var i=document.createElement("button");i.type="button",t.drag=i,i.className="jsoneditor-dragarea",i.title="Drag to move this field (Alt+Shift+Arrows)",e.appendChild(i)}t.tr.appendChild(e);var l=document.createElement("td"),a=document.createElement("button");a.type="button",t.menu=a,a.className="jsoneditor-contextmenu",a.title="Click to open the actions menu (Ctrl+M)",l.appendChild(t.menu),t.tr.appendChild(l)}var n=document.createElement("td");return t.tr.appendChild(n),t.tree=this._createDomTree(),n.appendChild(t.tree),this.updateDom({updateIndexes:!0}),t.tr},d.onDragStart=function(t,e){if(!Array.isArray(t))return d.onDragStart([t],e);if(0!==t.length){var i=t[0],l=t[t.length-1],a=d.getNodeFromTarget(e.target),n=l._nextSibling(),c=i.editor,o=s.getAbsoluteTop(a.dom.tr)-s.getAbsoluteTop(i.dom.tr);c.mousemove||(c.mousemove=s.addEventListener(window,"mousemove",(function(e){d.onDrag(t,e)}))),c.mouseup||(c.mouseup=s.addEventListener(window,"mouseup",(function(e){d.onDragEnd(t,e)}))),c.highlighter.lock(),c.drag={oldCursor:document.body.style.cursor,oldSelection:c.getSelection(),oldBeforeNode:n,mouseX:e.pageX,offsetY:o,level:i.getLevel()},document.body.style.cursor="move",e.preventDefault()}},d.onDrag=function(t,e){if(!Array.isArray(t))return d.onDrag([t],e);if(0!==t.length){var i,l,a,n,o,m,r,b,g,Z,h,W,N,y,u=t[0].editor,I=e.pageY-u.drag.offsetY,G=e.pageX,M=!1,p=t[0];if(i=p.dom.tr,g=s.getAbsoluteTop(i),W=i.offsetHeight,I(Z=(l=r.dom.tr)?s.getAbsoluteTop(l):0)+W&&(r=void 0),r&&(t.forEach((function(t){r.parent.moveBefore(t,r)})),M=!0)}else{var V=t[t.length-1];if(n=(o=V.expanded&&V.append?V.append.getDom():V.dom.tr)?o.nextSibling:void 0){h=s.getAbsoluteTop(n),a=n;do{b=d.getNodeFromTarget(a),a&&(N=a.nextSibling?s.getAbsoluteTop(a.nextSibling):0,y=a?N-h:0,b.parent.childs.length==t.length&&b.parent.childs[t.length-1]==V&&(g+=27)),a=a.nextSibling}while(a&&I>g+y);if(b&&b.parent){var Y=G-u.drag.mouseX,R=Math.round(Y/24/2),B=u.drag.level+R,D=b.getLevel();for(l=b.dom.tr.previousSibling;D0)return i[0].enum}return null},d._findSchema=function(t,e){for(var i=t,l=0;l0?this.editor.multiselection.nodes:[this],I=u[0],G=u[u.length-1];if(13==b){if(g==this.dom.value)this.editable.value&&!t.ctrlKey||s.isUrl(this.value)&&(window.open(this.value,"_blank"),N=!0);else if(g==this.dom.expand&&this._hasChilds()){var M=t.ctrlKey;this._onExpand(M),g.focus(),N=!0}}else if(68==b)Z&&y&&(d.onDuplicate(u),N=!0);else if(69==b)Z&&(this._onExpand(h),g.focus(),N=!0);else if(77==b&&y)Z&&(this.showContextMenu(g),N=!0);else if(46==b&&y)Z&&(d.onRemove(u),N=!0);else if(45==b&&y)Z&&!h?(this._onInsertBefore(),N=!0):Z&&h&&(this._onInsertAfter(),N=!0);else if(35==b){if(W){var p=this._lastNode();p&&p.focus(d.focusElement||this._getElementName(g)),N=!0}}else if(36==b){if(W){var V=this._firstNode();V&&V.focus(d.focusElement||this._getElementName(g)),N=!0}}else if(37==b){if(W&&!h){var Y=this._previousElement(g);Y&&this.focus(this._getElementName(Y)),N=!0}else if(W&&h&&y){if(G.expanded){var R=G.getAppend();l=R?R.nextSibling:void 0}else{var B=G.getDom();l=B.nextSibling}l&&(i=d.getNodeFromTarget(l),a=l.nextSibling,T=d.getNodeFromTarget(a),i&&i instanceof c&&1!=G.parent.childs.length&&T&&T.parent&&(n=this.editor.getSelection(),o=G._nextSibling(),u.forEach((function(t){T.parent.moveBefore(t,T)})),this.focus(d.focusElement||this._getElementName(g)),this.editor._onAction("moveNodes",{nodes:u,oldBeforeNode:o,newBeforeNode:T,oldSelection:n,newSelection:this.editor.getSelection()})))}}else if(38==b)W&&!h?((e=this._previousNode())&&(this.editor.deselect(!0),e.focus(d.focusElement||this._getElementName(g))),N=!0):!W&&Z&&h&&y?((e=this._previousNode())&&((r=this.editor.multiselection).start=r.start||this,r.end=e,m=this.editor._findTopLevelNodes(r.start,r.end),this.editor.select(m),e.focus("field")),N=!0):W&&h&&y&&((e=I._previousNode())&&e.parent&&(n=this.editor.getSelection(),o=G._nextSibling(),u.forEach((function(t){e.parent.moveBefore(t,e)})),this.focus(d.focusElement||this._getElementName(g)),this.editor._onAction("moveNodes",{nodes:u,oldBeforeNode:o,newBeforeNode:e,oldSelection:n,newSelection:this.editor.getSelection()})),N=!0);else if(39==b){if(W&&!h){var D=this._nextElement(g);D&&this.focus(this._getElementName(D)),N=!0}else if(W&&h&&y){var O=(B=I.getDom()).previousSibling;O&&(e=d.getNodeFromTarget(O))&&e.parent&&e instanceof c&&!e.isVisible()&&(n=this.editor.getSelection(),o=G._nextSibling(),u.forEach((function(t){e.parent.moveBefore(t,e)})),this.focus(d.focusElement||this._getElementName(g)),this.editor._onAction("moveNodes",{nodes:u,oldBeforeNode:o,newBeforeNode:e,oldSelection:n,newSelection:this.editor.getSelection()}))}}else if(40==b)if(W&&!h)(i=this._nextNode())&&(this.editor.deselect(!0),i.focus(d.focusElement||this._getElementName(g))),N=!0;else if(!W&&Z&&h&&y)(i=this._nextNode())&&((r=this.editor.multiselection).start=r.start||this,r.end=i,m=this.editor._findTopLevelNodes(r.start,r.end),this.editor.select(m),i.focus("field")),N=!0;else if(W&&h&&y){var T=(i=G.expanded?G.append?G.append._nextNode():void 0:G._nextNode())&&(i._nextNode()||i.parent.append);T&&T.parent&&(n=this.editor.getSelection(),o=G._nextSibling(),u.forEach((function(t){T.parent.moveBefore(t,T)})),this.focus(d.focusElement||this._getElementName(g)),this.editor._onAction("moveNodes",{nodes:u,oldBeforeNode:o,newBeforeNode:T,oldSelection:n,newSelection:this.editor.getSelection()})),N=!0}N&&(t.preventDefault(),t.stopPropagation())},d.prototype._onExpand=function(t){if(t){var e=this.dom.tr.parentNode,i=e.parentNode,l=i.scrollTop;i.removeChild(e)}this.expanded?this.collapse(t):this.expand(t),t&&(i.appendChild(e),i.scrollTop=l)},d.onRemove=function(t){if(!Array.isArray(t))return d.onRemove([t]);if(t&&t.length>0){var e=t[0],i=e.parent,l=e.editor,a=e.getIndex();l.highlighter.unhighlight();var n=l.getSelection();d.blurNodes(t);var s=l.getSelection();t.forEach((function(t){t.parent._remove(t)})),l._onAction("removeNodes",{nodes:t.slice(0),parent:i,index:a,oldSelection:n,newSelection:s})}},d.onDuplicate=function(t){if(!Array.isArray(t))return d.onDuplicate([t]);if(t&&t.length>0){var e=t[t.length-1],i=e.parent,l=e.editor;l.deselect(l.multiselection.nodes);var a=l.getSelection(),n=e,s=t.map((function(t){var e=t.clone();return i.insertAfter(e,n),n=e,e}));1===t.length?s[0].focus():l.select(s);var c=l.getSelection();l._onAction("duplicateNodes",{afterNode:e,nodes:s,parent:i,oldSelection:a,newSelection:c})}},d.prototype._onInsertBefore=function(t,e,i){var l=this.editor.getSelection(),a=new d(this.editor,{field:null!=t?t:"",value:null!=e?e:"",type:i});a.expand(!0),this.parent.insertBefore(a,this),this.editor.highlighter.unhighlight(),a.focus("field");var n=this.editor.getSelection();this.editor._onAction("insertBeforeNodes",{nodes:[a],beforeNode:this,parent:this.parent,oldSelection:l,newSelection:n})},d.prototype._onInsertAfter=function(t,e,i){var l=this.editor.getSelection(),a=new d(this.editor,{field:null!=t?t:"",value:null!=e?e:"",type:i});a.expand(!0),this.parent.insertAfter(a,this),this.editor.highlighter.unhighlight(),a.focus("field");var n=this.editor.getSelection();this.editor._onAction("insertAfterNodes",{nodes:[a],afterNode:this,parent:this.parent,oldSelection:l,newSelection:n})},d.prototype._onAppend=function(t,e,i){var l=this.editor.getSelection(),a=new d(this.editor,{field:null!=t?t:"",value:null!=e?e:"",type:i});a.expand(!0),this.parent.appendChild(a),this.editor.highlighter.unhighlight(),a.focus("field");var n=this.editor.getSelection();this.editor._onAction("appendNodes",{nodes:[a],parent:this.parent,oldSelection:l,newSelection:n})},d.prototype._onChangeType=function(t){var e=this.type;if(t!=e){var i=this.editor.getSelection();this.changeType(t);var l=this.editor.getSelection();this.editor._onAction("changeType",{node:this,oldType:e,newType:t,oldSelection:i,newSelection:l})}},d.prototype.sort=function(t){if(this._hasChilds()){var e="desc"==t?-1:1,i="array"==this.type?"value":"field";this.hideChilds();var a=this.childs,n=this.sortOrder;this.childs=this.childs.concat(),this.childs.sort((function(t,a){return e*l(t[i],a[i])})),this.sortOrder=1==e?"asc":"desc",this.editor._onAction("sort",{node:this,oldChilds:a,oldSort:n,newChilds:this.childs,newSort:this.sortOrder}),this.showChilds()}},d.prototype.getAppend=function(){return this.append||(this.append=new c(this.editor),this.append.setParent(this)),this.append.getDom()},d.getNodeFromTarget=function(t){for(;t;){if(t.node)return t.node;t=t.parentNode}},d.blurNodes=function(t){if(Array.isArray(t)){var e=t[0],i=e.parent,l=e.getIndex();i.childs[l+t.length]?i.childs[l+t.length].focus():i.childs[l-1]?i.childs[l-1].focus():i.focus()}else d.blurNodes([t])},d.prototype._nextSibling=function(){var t=this.parent.childs.indexOf(this);return this.parent.childs[t+1]||this.parent.append},d.prototype._previousNode=function(){var t=null,e=this.getDom();if(e&&e.parentNode){var i=e;do{i=i.previousSibling,t=d.getNodeFromTarget(i)}while(i&&t instanceof c&&!t.isVisible())}return t},d.prototype._nextNode=function(){var t=null,e=this.getDom();if(e&&e.parentNode){var i=e;do{i=i.nextSibling,t=d.getNodeFromTarget(i)}while(i&&t instanceof c&&!t.isVisible())}return t},d.prototype._firstNode=function(){var t=null,e=this.getDom();if(e&&e.parentNode){var i=e.parentNode.firstChild;t=d.getNodeFromTarget(i)}return t},d.prototype._lastNode=function(){var t=null,e=this.getDom();if(e&&e.parentNode){var i=e.parentNode.lastChild;for(t=d.getNodeFromTarget(i);i&&t instanceof c&&!t.isVisible();)i=i.previousSibling,t=d.getNodeFromTarget(i)}return t},d.prototype._previousElement=function(t){var e=this.dom;switch(t){case e.value:if(this.fieldEditable)return e.field;case e.field:if(this._hasChilds())return e.expand;case e.expand:return e.menu;case e.menu:if(e.drag)return e.drag;default:return null}},d.prototype._nextElement=function(t){var e=this.dom;switch(t){case e.drag:return e.menu;case e.menu:if(this._hasChilds())return e.expand;case e.expand:if(this.fieldEditable)return e.field;case e.field:if(!this._hasChilds())return e.value;default:return null}},d.prototype._getElementName=function(t){var e=this.dom;for(var i in e)if(e.hasOwnProperty(i)&&e[i]==t)return i;return null},d.prototype._hasChilds=function(){return"array"==this.type||"object"==this.type},d.TYPE_TITLES={auto:'Field type "auto". The field type is automatically determined from the value and can be a string, number, boolean, or null.',object:'Field type "object". An object contains an unordered set of key/value pairs.',array:'Field type "array". An array contains an ordered collection of values.',string:'Field type "string". Field type is not determined from the value, but always returned as string.'},d.prototype.showContextMenu=function(t,e){var i=this,l=d.TYPE_TITLES,n=[];if(this.editable.value&&n.push({text:"Type",title:"Change the type of this field",className:"jsoneditor-type-"+this.type,submenu:[{text:"Auto",className:"jsoneditor-type-auto"+("auto"==this.type?" jsoneditor-selected":""),title:l.auto,click:function(){i._onChangeType("auto")}},{text:"Array",className:"jsoneditor-type-array"+("array"==this.type?" jsoneditor-selected":""),title:l.array,click:function(){i._onChangeType("array")}},{text:"Object",className:"jsoneditor-type-object"+("object"==this.type?" jsoneditor-selected":""),title:l.object,click:function(){i._onChangeType("object")}},{text:"String",className:"jsoneditor-type-string"+("string"==this.type?" jsoneditor-selected":""),title:l.string,click:function(){i._onChangeType("string")}}]}),this._hasChilds()){var s="asc"==this.sortOrder?"desc":"asc";n.push({text:"Sort",title:"Sort the childs of this "+this.type,className:"jsoneditor-sort-"+s,click:function(){i.sort(s)},submenu:[{text:"Ascending",className:"jsoneditor-sort-asc",title:"Sort the childs of this "+this.type+" in ascending order",click:function(){i.sort("asc")}},{text:"Descending",className:"jsoneditor-sort-desc",title:"Sort the childs of this "+this.type+" in descending order",click:function(){i.sort("desc")}}]})}if(this.parent&&this.parent._hasChilds()){n.length&&n.push({type:"separator"});var c=i.parent.childs;i==c[c.length-1]&&n.push({text:"Append",title:"Append a new field with type 'auto' after this field (Ctrl+Shift+Ins)",submenuTitle:"Select the type of the field to be appended",className:"jsoneditor-append",click:function(){i._onAppend("","","auto")},submenu:[{text:"Auto",className:"jsoneditor-type-auto",title:l.auto,click:function(){i._onAppend("","","auto")}},{text:"Array",className:"jsoneditor-type-array",title:l.array,click:function(){i._onAppend("",[])}},{text:"Object",className:"jsoneditor-type-object",title:l.object,click:function(){i._onAppend("",{})}},{text:"String",className:"jsoneditor-type-string",title:l.string,click:function(){i._onAppend("","","string")}}]}),n.push({text:"Insert",title:"Insert a new field with type 'auto' before this field (Ctrl+Ins)",submenuTitle:"Select the type of the field to be inserted",className:"jsoneditor-insert",click:function(){i._onInsertBefore("","","auto")},submenu:[{text:"Auto",className:"jsoneditor-type-auto",title:l.auto,click:function(){i._onInsertBefore("","","auto")}},{text:"Array",className:"jsoneditor-type-array",title:l.array,click:function(){i._onInsertBefore("",[])}},{text:"Object",className:"jsoneditor-type-object",title:l.object,click:function(){i._onInsertBefore("",{})}},{text:"String",className:"jsoneditor-type-string",title:l.string,click:function(){i._onInsertBefore("","","string")}}]}),this.editable.field&&(n.push({text:"Duplicate",title:"Duplicate this field (Ctrl+D)",className:"jsoneditor-duplicate",click:function(){d.onDuplicate(i)}}),n.push({text:"Remove",title:"Remove this field (Ctrl+Del)",className:"jsoneditor-remove",click:function(){d.onRemove(i)}}))}new a(n,{close:e}).show(t,this.editor.content)},d.prototype._getType=function(t){return t instanceof Array?"array":t instanceof Object?"object":"string"==typeof t&&"string"!=typeof this._stringCast(t)?"string":"auto"},d.prototype._stringCast=function(t){var e=t.toLowerCase(),i=Number(t),l=parseFloat(t);return""==t?"":"null"==e?null:"true"==e||"false"!=e&&(isNaN(i)||isNaN(l)?t:i)},d.prototype._escapeHTML=function(t){if("string"!=typeof t)return String(t);var e=String(t).replace(/&/g,"&").replace(//g,">").replace(/ /g,"  ").replace(/^ /," ").replace(/ $/," "),i=JSON.stringify(e),l=i.substring(1,i.length-1);return!0===this.editor.options.escapeUnicode&&(l=s.escapeUnicodeChars(l)),l},d.prototype._unescapeHTML=function(t){var e='"'+this._escapeJSON(t)+'"';return s.parse(e).replace(/</g,"<").replace(/>/g,">").replace(/ |\u00A0/g," ").replace(/&/g,"&")},d.prototype._escapeJSON=function(t){for(var e="",i=0;iW)return 1}for(var N=0,y=Math.max(g.length,Z.length);Na)return 1}return 0}},function(t,e,i){"use strict";var l=i(54),a=i(57);t.exports=function(t){function e(t){this.editor=t,this.dom={}}return e.prototype=new t,e.prototype.getDom=function(){var t=this.dom;if(t.tr)return t.tr;this._updateEditability();var e=document.createElement("tr");if(e.node=this,t.tr=e,"tree"===this.editor.options.mode){t.tdDrag=document.createElement("td");var i=document.createElement("td");t.tdMenu=i;var l=document.createElement("button");l.type="button",l.className="jsoneditor-contextmenu",l.title="Click to open the actions menu (Ctrl+M)",t.menu=l,i.appendChild(t.menu)}var a=document.createElement("td"),n=document.createElement("div");return n.innerHTML="(empty)",n.className="jsoneditor-readonly",a.appendChild(n),t.td=a,t.text=n,this.updateDom(),e},e.prototype.updateDom=function(){var t=this.dom,e=t.td;e&&(e.style.paddingLeft=24*this.getLevel()+26+"px");var i=t.text;i&&(i.innerHTML="(empty "+this.parent.type+")");var l=t.tr;this.isVisible()?t.tr.firstChild||(t.tdDrag&&l.appendChild(t.tdDrag),t.tdMenu&&l.appendChild(t.tdMenu),l.appendChild(e)):t.tr.firstChild&&(t.tdDrag&&l.removeChild(t.tdDrag),t.tdMenu&&l.removeChild(t.tdMenu),l.removeChild(e))},e.prototype.isVisible=function(){return 0==this.parent.childs.length},e.prototype.showContextMenu=function(e,i){var l=this,n=t.TYPE_TITLES,s=[{text:"Append",title:"Append a new field with type 'auto' (Ctrl+Shift+Ins)",submenuTitle:"Select the type of the field to be appended",className:"jsoneditor-insert",click:function(){l._onAppend("","","auto")},submenu:[{text:"Auto",className:"jsoneditor-type-auto",title:n.auto,click:function(){l._onAppend("","","auto")}},{text:"Array",className:"jsoneditor-type-array",title:n.array,click:function(){l._onAppend("",[])}},{text:"Object",className:"jsoneditor-type-object",title:n.object,click:function(){l._onAppend("",{})}},{text:"String",className:"jsoneditor-type-string",title:n.string,click:function(){l._onAppend("","","string")}}]}];new a(s,{close:i}).show(e,this.editor.content)},e.prototype.onEvent=function(t){var e=t.type,i=t.target||t.srcElement,a=this.dom;if(i==a.menu&&("mouseover"==e?this.editor.highlighter.highlight(this.parent):"mouseout"==e&&this.editor.highlighter.unhighlight()),"click"==e&&i==a.menu){var n=this.editor.highlighter;n.highlight(this.parent),n.lock(),l.addClassName(a.menu,"jsoneditor-selected"),this.showContextMenu(a.menu,(function(){l.removeClassName(a.menu,"jsoneditor-selected"),n.unlock(),n.unhighlight()}))}"keydown"==e&&this.onKeyDown(t)},e}},function(t,e,i){"use strict";var l=i(57);function a(t,e,i,a){for(var n={code:{text:"Code",title:"Switch to code highlighter",click:function(){a("code")}},form:{text:"Form",title:"Switch to form editor",click:function(){a("form")}},text:{text:"Text",title:"Switch to plain text editor",click:function(){a("text")}},tree:{text:"Tree",title:"Switch to tree editor",click:function(){a("tree")}},view:{text:"View",title:"Switch to tree view",click:function(){a("view")}}},s=[],d=0;d0){if(i.length>3){i=i.slice(0,3);var l=this.validateSchema.errors.length-3;i.push("("+l+" more errors...)")}var a=document.createElement("div");a.innerHTML=''+i.map((function(t){return''+("string"==typeof t?'":"")+""})).join("")+"
'+t+"
"+t.dataPath+""+t.message+"
",this.dom.validationErrors=a,this.frame.appendChild(a);var s=a.clientHeight;this.content.style.marginBottom=-s+"px",this.content.style.paddingBottom=s+"px"}this.aceEditor&&this.aceEditor.resize(!1)}};t.exports=[{mode:"text",mixin:s,data:"text",load:s.format},{mode:"code",mixin:s,data:"text",load:s.format}]},function(t,e,i){var l=i(64);i(67),i(69),t.exports=l},function(t,e,i){!function(){var t=function(){return this}();t||"undefined"==typeof window||(t=window);var e=function(t,i,l){"string"==typeof t?(2==arguments.length&&(l=i),e.modules[t]||(e.payloads[t]=l,e.modules[t]=null)):e.original?e.original.apply(this,arguments):(console.error("dropping module because define wasn't a string."),console.trace())};e.modules={},e.payloads={};var i,l,a=function(t,e,i){if("string"==typeof e){var l=d(t,e);if(null!=l)return i&&i(),l}else if("[object Array]"===Object.prototype.toString.call(e)){for(var a=[],s=0,c=e.length;s1&&c(l,"")>-1&&(i=RegExp(this.source,a.replace.call(d(this),"g","")),a.replace.call(t.slice(l.index),i,(function(){for(var t=1;tl.index&&this.lastIndex--}return l},s||(RegExp.prototype.test=function(t){var e=a.exec.call(this,t);return e&&this.global&&!e[0].length&&this.lastIndex>e.index&&this.lastIndex--,!!e}))})),ace.define("ace/lib/es5-shim",["require","exports","module"],(function(t,e,i){function l(){}Function.prototype.bind||(Function.prototype.bind=function(t){var e=this;if("function"!=typeof e)throw new TypeError("Function.prototype.bind called on incompatible "+e);var i=b.call(arguments,1),a=function(){if(this instanceof a){var l=e.apply(this,i.concat(b.call(arguments)));return Object(l)===l?l:this}return e.apply(t,i.concat(b.call(arguments)))};return e.prototype&&(l.prototype=e.prototype,a.prototype=new l,l.prototype=null),a});var a,n,s,d,c,o=Function.prototype.call,m=Array.prototype,r=Object.prototype,b=m.slice,g=o.bind(r.toString),Z=o.bind(r.hasOwnProperty);if((c=Z(r,"__defineGetter__"))&&(a=o.bind(r.__defineGetter__),n=o.bind(r.__defineSetter__),s=o.bind(r.__lookupGetter__),d=o.bind(r.__lookupSetter__)),2!=[1,2].splice(0).length)if(function(){function t(t){var e=new Array(t+2);return e[0]=e[1]=0,e}var e,i=[];if(i.splice.apply(i,t(20)),i.splice.apply(i,t(26)),e=i.length,i.splice(5,0,"XXX"),i.length,e+1==i.length)return!0}()){var h=Array.prototype.splice;Array.prototype.splice=function(t,e){return arguments.length?h.apply(this,[void 0===t?0:t,void 0===e?this.length-t:e].concat(b.call(arguments,2))):[]}}else Array.prototype.splice=function(t,e){var i=this.length;t>0?t>i&&(t=i):null==t?t=0:t<0&&(t=Math.max(i+t,0)),t+ed)for(r=o;r--;)this[c+r]=this[d+r];if(n&&t===m)this.length=m,this.push.apply(this,a);else for(this.length=m+n,r=0;r>>0;if("[object Function]"!=g(t))throw new TypeError;for(;++a>>0,a=Array(l),n=arguments[1];if("[object Function]"!=g(t))throw new TypeError(t+" is not a function");for(var s=0;s>>0,n=[],s=arguments[1];if("[object Function]"!=g(t))throw new TypeError(t+" is not a function");for(var d=0;d>>0,a=arguments[1];if("[object Function]"!=g(t))throw new TypeError(t+" is not a function");for(var n=0;n>>0,a=arguments[1];if("[object Function]"!=g(t))throw new TypeError(t+" is not a function");for(var n=0;n>>0;if("[object Function]"!=g(t))throw new TypeError(t+" is not a function");if(!l&&1==arguments.length)throw new TypeError("reduce of empty array with no initial value");var a,n=0;if(arguments.length>=2)a=arguments[1];else for(;;){if(n in i){a=i[n++];break}if(++n>=l)throw new TypeError("reduce of empty array with no initial value")}for(;n>>0;if("[object Function]"!=g(t))throw new TypeError(t+" is not a function");if(!l&&1==arguments.length)throw new TypeError("reduceRight of empty array with no initial value");var a,n=l-1;if(arguments.length>=2)a=arguments[1];else for(;;){if(n in i){a=i[n--];break}if(--n<0)throw new TypeError("reduceRight of empty array with no initial value")}do{n in this&&(a=t.call(void 0,a,i[n],n,e))}while(n--);return a}),Array.prototype.indexOf&&-1==[0,1].indexOf(1,2)||(Array.prototype.indexOf=function(t){var e=u&&"[object String]"==g(this)?this.split(""):X(this),i=e.length>>>0;if(!i)return-1;var l=0;for(arguments.length>1&&(l=U(arguments[1])),l=l>=0?l:Math.max(0,i+l);l>>0;if(!i)return-1;var l=i-1;for(arguments.length>1&&(l=Math.min(l,U(arguments[1]))),l=l>=0?l:i-Math.abs(l);l>=0;l--)if(l in e&&t===e[l])return l;return-1}),Object.getPrototypeOf||(Object.getPrototypeOf=function(t){return t.__proto__||(t.constructor?t.constructor.prototype:r)}),Object.getOwnPropertyDescriptor||(Object.getOwnPropertyDescriptor=function(t,e){if("object"!=typeof t&&"function"!=typeof t||null===t)throw new TypeError("Object.getOwnPropertyDescriptor called on a non-object: "+t);if(Z(t,e)){var i;if(i={enumerable:!0,configurable:!0},c){var l=t.__proto__;t.__proto__=r;var a=s(t,e),n=d(t,e);if(t.__proto__=l,a||n)return a&&(i.get=a),n&&(i.set=n),i}return i.value=t[e],i}}),Object.getOwnPropertyNames||(Object.getOwnPropertyNames=function(t){return Object.keys(t)}),Object.create||(W=null===Object.prototype.__proto__?function(){return{__proto__:null}}:function(){var t={};for(var e in t)t[e]=null;return t.constructor=t.hasOwnProperty=t.propertyIsEnumerable=t.isPrototypeOf=t.toLocaleString=t.toString=t.valueOf=t.__proto__=null,t},Object.create=function(t,e){var i;if(null===t)i=W();else{if("object"!=typeof t)throw new TypeError("typeof prototype["+typeof t+"] != 'object'");var l=function(){};l.prototype=t,(i=new l).__proto__=t}return void 0!==e&&Object.defineProperties(i,e),i}),Object.defineProperty){var G=I({}),M="undefined"==typeof document||I(document.createElement("div"));if(!G||!M)var p=Object.defineProperty}Object.defineProperty&&!p||(Object.defineProperty=function(t,e,i){if("object"!=typeof t&&"function"!=typeof t||null===t)throw new TypeError("Object.defineProperty called on non-object: "+t);if("object"!=typeof i&&"function"!=typeof i||null===i)throw new TypeError("Property description must be an object: "+i);if(p)try{return p.call(Object,t,e,i)}catch(t){}if(Z(i,"value"))if(c&&(s(t,e)||d(t,e))){var l=t.__proto__;t.__proto__=r,delete t[e],t[e]=i.value,t.__proto__=l}else t[e]=i.value;else{if(!c)throw new TypeError("getters & setters can not be defined on this javascript engine");Z(i,"get")&&a(t,e,i.get),Z(i,"set")&&n(t,e,i.set)}return t}),Object.defineProperties||(Object.defineProperties=function(t,e){for(var i in e)Z(e,i)&&Object.defineProperty(t,i,e[i]);return t}),Object.seal||(Object.seal=function(t){return t}),Object.freeze||(Object.freeze=function(t){return t});try{Object.freeze((function(){}))}catch(t){Object.freeze=(N=Object.freeze,function(t){return"function"==typeof t?t:N(t)})}if(Object.preventExtensions||(Object.preventExtensions=function(t){return t}),Object.isSealed||(Object.isSealed=function(t){return!1}),Object.isFrozen||(Object.isFrozen=function(t){return!1}),Object.isExtensible||(Object.isExtensible=function(t){if(Object(t)===t)throw new TypeError;for(var e="";Z(t,e);)e+="?";t[e]=!0;var i=Z(t,e);return delete t[e],i}),!Object.keys){var V=!0,Y=["toString","toLocaleString","valueOf","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","constructor"],R=Y.length;for(var B in{toString:null})V=!1;Object.keys=function(t){if("object"!=typeof t&&"function"!=typeof t||null===t)throw new TypeError("Object.keys called on a non-object");var e=[];for(var i in t)Z(t,i)&&e.push(i);if(V)for(var l=0,a=R;l0||-1)*Math.floor(Math.abs(t))),t}var X=function(t){if(null==t)throw new TypeError("can't convert "+t+" to object");return Object(t)}})),ace.define("ace/lib/fixoldbrowsers",["require","exports","module","ace/lib/regexp","ace/lib/es5-shim"],(function(t,e,i){"use strict";t("./regexp"),t("./es5-shim")})),ace.define("ace/lib/dom",["require","exports","module"],(function(t,e,i){"use strict";e.getDocumentHead=function(t){return t||(t=document),t.head||t.getElementsByTagName("head")[0]||t.documentElement},e.createElement=function(t,e){return document.createElementNS?document.createElementNS(e||"http://www.w3.org/1999/xhtml",t):document.createElement(t)},e.hasCssClass=function(t,e){return-1!==(t.className||"").split(/\s+/g).indexOf(e)},e.addCssClass=function(t,i){e.hasCssClass(t,i)||(t.className+=" "+i)},e.removeCssClass=function(t,e){for(var i=t.className.split(/\s+/g);;){var l=i.indexOf(e);if(-1==l)break;i.splice(l,1)}t.className=i.join(" ")},e.toggleCssClass=function(t,e){for(var i=t.className.split(/\s+/g),l=!0;;){var a=i.indexOf(e);if(-1==a)break;l=!1,i.splice(a,1)}return l&&i.push(e),t.className=i.join(" "),l},e.setCssClass=function(t,i,l){l?e.addCssClass(t,i):e.removeCssClass(t,i)},e.hasCssString=function(t,e){var i,l=0;if((e=e||document).createStyleSheet&&(i=e.styleSheets)){for(;l=0?parseFloat((a.match(/(?:MSIE |Trident\/[0-9]+[\.0-9]+;.*rv:)([0-9]+[\.0-9]+)/)||[])[1]):parseFloat((a.match(/(?:Trident\/[0-9]+[\.0-9]+;.*rv:)([0-9]+[\.0-9]+)/)||[])[1]),e.isOldIE=e.isIE&&e.isIE<9,e.isGecko=e.isMozilla=(window.Controllers||window.controllers)&&"Gecko"===window.navigator.product,e.isOldGecko=e.isGecko&&parseInt((a.match(/rv\:(\d+)/)||[])[1],10)<4,e.isOpera=window.opera&&"[object Opera]"==Object.prototype.toString.call(window.opera),e.isWebKit=parseFloat(a.split("WebKit/")[1])||void 0,e.isChrome=parseFloat(a.split(" Chrome/")[1])||void 0,e.isAIR=a.indexOf("AdobeAIR")>=0,e.isIPad=a.indexOf("iPad")>=0,e.isTouchPad=a.indexOf("TouchPad")>=0,e.isChromeOS=a.indexOf(" CrOS ")>=0}})),ace.define("ace/lib/event",["require","exports","module","ace/lib/keys","ace/lib/useragent"],(function(t,e,i){"use strict";var l=t("./keys"),a=t("./useragent"),n=null,s=0;e.addListener=function(t,e,i){if(t.addEventListener)return t.addEventListener(e,i,!1);if(t.attachEvent){var l=function(){i.call(t,window.event)};i._wrapper=l,t.attachEvent("on"+e,l)}},e.removeListener=function(t,e,i){if(t.removeEventListener)return t.removeEventListener(e,i,!1);t.detachEvent&&t.detachEvent("on"+e,i._wrapper||i)},e.stopEvent=function(t){return e.stopPropagation(t),e.preventDefault(t),!1},e.stopPropagation=function(t){t.stopPropagation?t.stopPropagation():t.cancelBubble=!0},e.preventDefault=function(t){t.preventDefault?t.preventDefault():t.returnValue=!1},e.getButton=function(t){return"dblclick"==t.type?0:"contextmenu"==t.type||a.isMac&&t.ctrlKey&&!t.altKey&&!t.shiftKey?2:t.preventDefault?t.button:{1:0,2:2,4:1}[t.button]},e.capture=function(t,i,l){function a(t){i&&i(t),l&&l(t),e.removeListener(document,"mousemove",i,!0),e.removeListener(document,"mouseup",a,!0),e.removeListener(document,"dragstart",a,!0)}return e.addListener(document,"mousemove",i,!0),e.addListener(document,"mouseup",a,!0),e.addListener(document,"dragstart",a,!0),a},e.addTouchMoveListener=function(t,i){var l,a;"ontouchmove"in t&&(e.addListener(t,"touchstart",(function(t){var e=t.changedTouches[0];l=e.clientX,a=e.clientY})),e.addListener(t,"touchmove",(function(t){var e=t.changedTouches[0];t.wheelX=-(e.clientX-l)/1,t.wheelY=-(e.clientY-a)/1,l=e.clientX,a=e.clientY,i(t)})))},e.addMouseWheelListener=function(t,i){"onmousewheel"in t?e.addListener(t,"mousewheel",(function(t){void 0!==t.wheelDeltaX?(t.wheelX=-t.wheelDeltaX/8,t.wheelY=-t.wheelDeltaY/8):(t.wheelX=0,t.wheelY=-t.wheelDelta/8),i(t)})):"onwheel"in t?e.addListener(t,"wheel",(function(t){switch(t.deltaMode){case t.DOM_DELTA_PIXEL:t.wheelX=.35*t.deltaX||0,t.wheelY=.35*t.deltaY||0;break;case t.DOM_DELTA_LINE:case t.DOM_DELTA_PAGE:t.wheelX=5*(t.deltaX||0),t.wheelY=5*(t.deltaY||0)}i(t)})):e.addListener(t,"DOMMouseScroll",(function(t){t.axis&&t.axis==t.HORIZONTAL_AXIS?(t.wheelX=5*(t.detail||0),t.wheelY=0):(t.wheelX=0,t.wheelY=5*(t.detail||0)),i(t)}))},e.addMultiMouseDownListener=function(t,i,l,n){var s,d,c,o=0,m={2:"dblclick",3:"tripleclick",4:"quadclick"};function r(t){if(0!==e.getButton(t)?o=0:t.detail>1?++o>4&&(o=1):o=1,a.isIE){var r=Math.abs(t.clientX-s)>5||Math.abs(t.clientY-d)>5;c&&!r||(o=1),c&&clearTimeout(c),c=setTimeout((function(){c=null}),i[o-1]||600),1==o&&(s=t.clientX,d=t.clientY)}if(t._clicks=o,l[n]("mousedown",t),o>4)o=0;else if(o>1)return l[n](m[o],t)}function b(t){o=2,c&&clearTimeout(c),c=setTimeout((function(){c=null}),i[o-1]||600),l[n]("mousedown",t),l[n](m[o],t)}Array.isArray(t)||(t=[t]),t.forEach((function(t){e.addListener(t,"mousedown",r),a.isOldIE&&e.addListener(t,"dblclick",b)}))};var d=a.isMac&&a.isOpera&&!("KeyboardEvent"in window)?function(t){return 0|(t.metaKey?1:0)|(t.altKey?2:0)|(t.shiftKey?4:0)|(t.ctrlKey?8:0)}:function(t){return 0|(t.ctrlKey?1:0)|(t.altKey?2:0)|(t.shiftKey?4:0)|(t.metaKey?8:0)};function c(t,e,i){var c=d(e);if(!a.isMac&&n){if(n.OSKey&&(c|=8),n.altGr){if(3==(3&c))return;n.altGr=0}if(18===i||17===i){var o="location"in e?e.location:e.keyLocation;17===i&&1===o?1==n[i]&&(s=e.timeStamp):18===i&&3===c&&2===o&&e.timeStamp-s<50&&(n.altGr=!0)}}if(i in l.MODIFIER_KEYS&&(i=-1),8&c&&i>=91&&i<=93&&(i=-1),c||13!==i||3!==(o="location"in e?e.location:e.keyLocation)||(t(e,c,-i),!e.defaultPrevented)){if(a.isChromeOS&&8&c){if(t(e,c,i),e.defaultPrevented)return;c&=-9}return!!(c||i in l.FUNCTION_KEYS||i in l.PRINTABLE_KEYS)&&t(e,c,i)}}function o(){(n=Object.create(null)).count=0,n.lastT=0}e.getModifierString=function(t){return l.KEY_MODS[d(t)]},e.addCommandKeyListener=function(t,i){var l=e.addListener;if(a.isOldGecko||a.isOpera&&!("KeyboardEvent"in window)){var s=null;l(t,"keydown",(function(t){s=t.keyCode})),l(t,"keypress",(function(t){return c(i,t,s)}))}else{var d=null;l(t,"keydown",(function(t){var e=t.keyCode;n[e]=(n[e]||0)+1,91==e||92==e?n.OSKey=!0:n.OSKey&&t.timeStamp-n.lastT>200&&1==n.count&&o(),1==n[e]&&n.count++,n.lastT=t.timeStamp;var l=c(i,t,e);return d=t.defaultPrevented,l})),l(t,"keypress",(function(t){d&&(t.ctrlKey||t.altKey||t.shiftKey||t.metaKey)&&(e.stopEvent(t),d=null)})),l(t,"keyup",(function(t){var e=t.keyCode;n[e]?n.count=Math.max(n.count-1,0):o(),91!=e&&92!=e||(n.OSKey=!1),n[e]=null})),n||(o(),l(window,"focus",o))}},"object"==typeof window&&window.postMessage&&!a.isOldIE&&(e.nextTick=function(t,i){i=i||window,e.addListener(i,"message",(function l(a){"zero-timeout-message-1"==a.data&&(e.stopPropagation(a),e.removeListener(i,"message",l),t())})),i.postMessage("zero-timeout-message-1","*")}),e.nextFrame="object"==typeof window&&(window.requestAnimationFrame||window.mozRequestAnimationFrame||window.webkitRequestAnimationFrame||window.msRequestAnimationFrame||window.oRequestAnimationFrame),e.nextFrame?e.nextFrame=e.nextFrame.bind(window):e.nextFrame=function(t){setTimeout(t,17)}})),ace.define("ace/lib/lang",["require","exports","module"],(function(t,e,i){"use strict";e.last=function(t){return t[t.length-1]},e.stringReverse=function(t){return t.split("").reverse().join("")},e.stringRepeat=function(t,e){for(var i="";e>0;)1&e&&(i+=t),(e>>=1)&&(t+=t);return i};var l=/^\s\s*/,a=/\s\s*$/;e.stringTrimLeft=function(t){return t.replace(l,"")},e.stringTrimRight=function(t){return t.replace(a,"")},e.copyObject=function(t){var e={};for(var i in t)e[i]=t[i];return e},e.copyArray=function(t){for(var e=[],i=0,l=t.length;i1),t.preventDefault()):(this.setState("focusWait"),void this.captureMouse(t))},this.startSelect=function(t,e){t=t||this.editor.renderer.screenToTextCoordinates(this.x,this.y);var i=this.editor;i.$blockScrolling++,this.mousedownEvent.getShiftKey()?i.selection.selectToPosition(t):e||i.selection.moveToPosition(t),e||this.select(),i.renderer.scroller.setCapture&&i.renderer.scroller.setCapture(),i.setStyle("ace_selecting"),this.setState("select"),i.$blockScrolling--},this.select=function(){var t,e=this.editor,i=e.renderer.screenToTextCoordinates(this.x,this.y);if(e.$blockScrolling++,this.$clickSelection){var l=this.$clickSelection.comparePoint(i);if(-1==l)t=this.$clickSelection.end;else if(1==l)t=this.$clickSelection.start;else{var n=a(this.$clickSelection,i);i=n.cursor,t=n.anchor}e.selection.setSelectionAnchor(t.row,t.column)}e.selection.selectToPosition(i),e.$blockScrolling--,e.renderer.scrollCursorIntoView()},this.extendSelectionBy=function(t){var e,i=this.editor,l=i.renderer.screenToTextCoordinates(this.x,this.y),n=i.selection[t](l.row,l.column);if(i.$blockScrolling++,this.$clickSelection){var s=this.$clickSelection.comparePoint(n.start),d=this.$clickSelection.comparePoint(n.end);if(-1==s&&d<=0)e=this.$clickSelection.end,n.end.row==l.row&&n.end.column==l.column||(l=n.start);else if(1==d&&s>=0)e=this.$clickSelection.start,n.start.row==l.row&&n.start.column==l.column||(l=n.end);else if(-1==s&&1==d)l=n.end,e=n.start;else{var c=a(this.$clickSelection,l);l=c.cursor,e=c.anchor}i.selection.setSelectionAnchor(e.row,e.column)}i.selection.selectToPosition(l),i.$blockScrolling--,i.renderer.scrollCursorIntoView()},this.selectEnd=this.selectAllEnd=this.selectByWordsEnd=this.selectByLinesEnd=function(){this.$clickSelection=null,this.editor.unsetStyle("ace_selecting"),this.editor.renderer.scroller.releaseCapture&&this.editor.renderer.scroller.releaseCapture()},this.focusWait=function(){var t,e,i,l,a=(t=this.mousedownEvent.x,e=this.mousedownEvent.y,i=this.x,l=this.y,Math.sqrt(Math.pow(i-t,2)+Math.pow(l-e,2))),n=Date.now();(a>0||n-this.mousedownEvent.time>this.$focusTimout)&&this.startSelect(this.mousedownEvent.getDocumentPosition())},this.onDoubleClick=function(t){var e=t.getDocumentPosition(),i=this.editor,l=i.session.getBracketRange(e);l?(l.isEmpty()&&(l.start.column--,l.end.column++),this.setState("select")):(l=i.selection.getWordRange(e.row,e.column),this.setState("selectByWords")),this.$clickSelection=l,this.select()},this.onTripleClick=function(t){var e=t.getDocumentPosition(),i=this.editor;this.setState("selectByLines");var l=i.getSelectionRange();l.isMultiLine()&&l.contains(e.row,e.column)?(this.$clickSelection=i.selection.getLineRange(l.start.row),this.$clickSelection.end=i.selection.getLineRange(l.end.row).end):this.$clickSelection=i.selection.getLineRange(e.row),this.select()},this.onQuadClick=function(t){var e=this.editor;e.selectAll(),this.$clickSelection=e.getSelectionRange(),this.setState("selectAll")},this.onMouseWheel=function(t){if(!t.getAccelKey()){t.getShiftKey()&&t.wheelY&&!t.wheelX&&(t.wheelX=t.wheelY,t.wheelY=0);var e=t.domEvent.timeStamp,i=e-(this.$lastScrollTime||0),l=this.editor;return l.renderer.isScrollableBy(t.wheelX*t.speed,t.wheelY*t.speed)||i<200?(this.$lastScrollTime=e,l.renderer.scrollBy(t.wheelX*t.speed,t.wheelY*t.speed),t.stop()):void 0}},this.onTouchMove=function(t){var e=t.domEvent.timeStamp,i=e-(this.$lastScrollTime||0),l=this.editor;if(l.renderer.isScrollableBy(t.wheelX*t.speed,t.wheelY*t.speed)||i<200)return this.$lastScrollTime=e,l.renderer.scrollBy(t.wheelX*t.speed,t.wheelY*t.speed),t.stop()}}.call(l.prototype),e.DefaultHandlers=l})),ace.define("ace/tooltip",["require","exports","module","ace/lib/oop","ace/lib/dom"],(function(t,e,i){"use strict";t("./lib/oop");var l=t("./lib/dom");function a(t){this.isOpen=!1,this.$element=null,this.$parentNode=t}(function(){this.$init=function(){return this.$element=l.createElement("div"),this.$element.className="ace_tooltip",this.$element.style.display="none",this.$parentNode.appendChild(this.$element),this.$element},this.getElement=function(){return this.$element||this.$init()},this.setText=function(t){l.setInnerText(this.getElement(),t)},this.setHtml=function(t){this.getElement().innerHTML=t},this.setPosition=function(t,e){this.getElement().style.left=t+"px",this.getElement().style.top=e+"px"},this.setClassName=function(t){l.addCssClass(this.getElement(),t)},this.show=function(t,e,i){null!=t&&this.setText(t),null!=e&&null!=i&&this.setPosition(e,i),this.isOpen||(this.getElement().style.display="block",this.isOpen=!0)},this.hide=function(){this.isOpen&&(this.getElement().style.display="none",this.isOpen=!1)},this.getHeight=function(){return this.getElement().offsetHeight},this.getWidth=function(){return this.getElement().offsetWidth}}).call(a.prototype),e.Tooltip=a})),ace.define("ace/mouse/default_gutter_handler",["require","exports","module","ace/lib/dom","ace/lib/oop","ace/lib/event","ace/tooltip"],(function(t,e,i){"use strict";var l=t("../lib/dom"),a=t("../lib/oop"),n=t("../lib/event"),s=t("../tooltip").Tooltip;function d(t){s.call(this,t)}a.inherits(d,s),function(){this.setPosition=function(t,e){var i=window.innerWidth||document.documentElement.clientWidth,l=window.innerHeight||document.documentElement.clientHeight,a=this.getWidth(),n=this.getHeight();(t+=15)+a>i&&(t-=t+a-i),(e+=15)+n>l&&(e-=20+n),s.prototype.setPosition.call(this,t,e)}}.call(d.prototype),e.GutterHandler=function(t){var e,i,a,s=t.editor,c=s.renderer.$gutterLayer,o=new d(s.container);function m(){e&&(e=clearTimeout(e)),a&&(o.hide(),a=null,s.removeEventListener("mousewheel",m))}function r(t){o.setPosition(t.x,t.y)}t.editor.setDefaultHandler("guttermousedown",(function(e){if(s.isFocused()&&0==e.getButton()&&"foldWidgets"!=c.getRegion(e)){var i=e.getDocumentPosition().row,l=s.session.selection;if(e.getShiftKey())l.selectTo(i,0);else{if(2==e.domEvent.detail)return s.selectAll(),e.preventDefault();t.$clickSelection=s.selection.getLineRange(i)}return t.setState("selectByLines"),t.captureMouse(e),e.preventDefault()}})),t.editor.setDefaultHandler("guttermousemove",(function(n){var d=n.domEvent.target||n.domEvent.srcElement;if(l.hasCssClass(d,"ace_fold-widget"))return m();a&&t.$tooltipFollowsMouse&&r(n),i=n,e||(e=setTimeout((function(){e=null,i&&!t.isMousePressed?function(){var e=i.getDocumentPosition().row,l=c.$annotations[e];if(!l)return m();if(e==s.session.getLength()){var n=s.renderer.pixelToScreenCoordinates(0,i.y).row,d=i.$pos;if(n>s.session.documentToScreenRow(d.row,d.column))return m()}if(a!=l)if(a=l.text.join("
"),o.setHtml(a),o.show(),s.on("mousewheel",m),t.$tooltipFollowsMouse)r(i);else{var b=i.domEvent.target.getBoundingClientRect(),g=o.getElement().style;g.left=b.right+"px",g.top=b.bottom+"px"}}():m()}),50))})),n.addListener(s.renderer.$gutter,"mouseout",(function(t){i=null,a&&!e&&(e=setTimeout((function(){e=null,m()}),50))})),s.on("changeSession",m)}})),ace.define("ace/mouse/mouse_event",["require","exports","module","ace/lib/event","ace/lib/useragent"],(function(t,e,i){"use strict";var l=t("../lib/event"),a=t("../lib/useragent"),n=e.MouseEvent=function(t,e){this.domEvent=t,this.editor=e,this.x=this.clientX=t.clientX,this.y=this.clientY=t.clientY,this.$pos=null,this.$inSelection=null,this.propagationStopped=!1,this.defaultPrevented=!1};(function(){this.stopPropagation=function(){l.stopPropagation(this.domEvent),this.propagationStopped=!0},this.preventDefault=function(){l.preventDefault(this.domEvent),this.defaultPrevented=!0},this.stop=function(){this.stopPropagation(),this.preventDefault()},this.getDocumentPosition=function(){return this.$pos||(this.$pos=this.editor.renderer.screenToTextCoordinates(this.clientX,this.clientY)),this.$pos},this.inSelection=function(){if(null!==this.$inSelection)return this.$inSelection;var t=this.editor.getSelectionRange();if(t.isEmpty())this.$inSelection=!1;else{var e=this.getDocumentPosition();this.$inSelection=t.contains(e.row,e.column)}return this.$inSelection},this.getButton=function(){return l.getButton(this.domEvent)},this.getShiftKey=function(){return this.domEvent.shiftKey},this.getAccelKey=a.isMac?function(){return this.domEvent.metaKey}:function(){return this.domEvent.ctrlKey}}).call(n.prototype)})),ace.define("ace/mouse/dragdrop_handler",["require","exports","module","ace/lib/dom","ace/lib/event","ace/lib/useragent"],(function(t,e,i){"use strict";var l=t("../lib/dom"),a=t("../lib/event"),n=t("../lib/useragent");function s(t){var e=t.editor,i=l.createElement("img");i.src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==",n.isOpera&&(i.style.cssText="width:1px;height:1px;position:fixed;top:0;left:0;z-index:2147483647;opacity:0;"),["dragWait","dragWaitEnd","startDrag","dragReadyEnd","onMouseDrag"].forEach((function(e){t[e]=this[e]}),this),e.addEventListener("mousedown",this.onMouseDown.bind(t));var s,c,o,m,r,b,g,Z,h,W,N,y=e.container,u=0;function I(){var t=b;(function(t,i){var l=Date.now(),a=!i||t.row!=i.row,n=!i||t.column!=i.column;!W||a||n?(e.$blockScrolling+=1,e.moveCursorToPosition(t),e.$blockScrolling-=1,W=l,N={x:c,y:o}):d(N.x,N.y,c,o)>5?W=null:l-W>=200&&(e.renderer.scrollCursorIntoView(),W=null)})(b=e.renderer.screenToTextCoordinates(c,o),t),function(t,i){var l=Date.now(),a=e.renderer.layerConfig.lineHeight,n=e.renderer.layerConfig.characterWidth,s=e.renderer.scroller.getBoundingClientRect(),d={x:{left:c-s.left,right:s.right-c},y:{top:o-s.top,bottom:s.bottom-o}},m=Math.min(d.x.left,d.x.right),r=Math.min(d.y.top,d.y.bottom),b={row:t.row,column:t.column};m/n<=2&&(b.column+=d.x.left=200&&e.renderer.scrollCursorIntoView(b):h=l:h=null}(b,t)}function G(){r=e.selection.toOrientedRange(),s=e.session.addMarker(r,"ace_selection",e.getSelectionStyle()),e.clearSelection(),e.isFocused()&&e.renderer.$cursorLayer.setBlinking(!1),clearInterval(m),I(),m=setInterval(I,20),u=0,a.addListener(document,"mousemove",V)}function M(){clearInterval(m),e.session.removeMarker(s),s=null,e.$blockScrolling+=1,e.selection.fromOrientedRange(r),e.$blockScrolling-=1,e.isFocused()&&!Z&&e.renderer.$cursorLayer.setBlinking(!e.getReadOnly()),r=null,b=null,u=0,h=null,W=null,a.removeListener(document,"mousemove",V)}this.onDragStart=function(t){if(this.cancelDrag||!y.draggable){var l=this;return setTimeout((function(){l.startSelect(),l.captureMouse(t)}),0),t.preventDefault()}r=e.getSelectionRange();var a=t.dataTransfer;a.effectAllowed=e.getReadOnly()?"copy":"copyMove",n.isOpera&&(e.container.appendChild(i),i.scrollTop=0),a.setDragImage&&a.setDragImage(i,0,0),n.isOpera&&e.container.removeChild(i),a.clearData(),a.setData("Text",e.session.getTextRange()),Z=!0,this.setState("drag")},this.onDragEnd=function(t){if(y.draggable=!1,Z=!1,this.setState(null),!e.getReadOnly()){var i=t.dataTransfer.dropEffect;g||"move"!=i||e.session.remove(e.getSelectionRange()),e.renderer.$cursorLayer.setBlinking(!0)}this.editor.unsetStyle("ace_dragging"),this.editor.renderer.setCursorStyle("")},this.onDragEnter=function(t){if(!e.getReadOnly()&&Y(t.dataTransfer))return c=t.clientX,o=t.clientY,s||G(),u++,t.dataTransfer.dropEffect=g=R(t),a.preventDefault(t)},this.onDragOver=function(t){if(!e.getReadOnly()&&Y(t.dataTransfer))return c=t.clientX,o=t.clientY,s||(G(),u++),null!==p&&(p=null),t.dataTransfer.dropEffect=g=R(t),a.preventDefault(t)},this.onDragLeave=function(t){if(--u<=0&&s)return M(),g=null,a.preventDefault(t)},this.onDrop=function(t){if(b){var i=t.dataTransfer;if(Z)switch(g){case"move":r=r.contains(b.row,b.column)?{start:b,end:b}:e.moveText(r,b);break;case"copy":r=e.moveText(r,b,!0)}else{var l=i.getData("Text");r={start:b,end:e.session.insert(b,l)},e.focus(),g=null}return M(),a.preventDefault(t)}},a.addListener(y,"dragstart",this.onDragStart.bind(t)),a.addListener(y,"dragend",this.onDragEnd.bind(t)),a.addListener(y,"dragenter",this.onDragEnter.bind(t)),a.addListener(y,"dragover",this.onDragOver.bind(t)),a.addListener(y,"dragleave",this.onDragLeave.bind(t)),a.addListener(y,"drop",this.onDrop.bind(t));var p=null;function V(){null==p&&(p=setTimeout((function(){null!=p&&s&&M()}),20))}function Y(t){var e=t.types;return!e||Array.prototype.some.call(e,(function(t){return"text/plain"==t||"Text"==t}))}function R(t){var e=["copy","copymove","all","uninitialized"],i=n.isMac?t.altKey:t.ctrlKey,l="uninitialized";try{l=t.dataTransfer.effectAllowed.toLowerCase()}catch(t){}var a="none";return i&&e.indexOf(l)>=0?a="copy":["move","copymove","linkmove","all","uninitialized"].indexOf(l)>=0?a="move":e.indexOf(l)>=0&&(a="copy"),a}}function d(t,e,i,l){return Math.sqrt(Math.pow(i-t,2)+Math.pow(l-e,2))}(function(){this.dragWait=function(){Date.now()-this.mousedownEvent.time>this.editor.getDragDelay()&&this.startDrag()},this.dragWaitEnd=function(){this.editor.container.draggable=!1,this.startSelect(this.mousedownEvent.getDocumentPosition()),this.selectEnd()},this.dragReadyEnd=function(t){this.editor.renderer.$cursorLayer.setBlinking(!this.editor.getReadOnly()),this.editor.unsetStyle("ace_dragging"),this.editor.renderer.setCursorStyle(""),this.dragWaitEnd()},this.startDrag=function(){this.cancelDrag=!1;var t=this.editor;t.container.draggable=!0,t.renderer.$cursorLayer.setBlinking(!1),t.setStyle("ace_dragging");var e=n.isWin?"default":"move";t.renderer.setCursorStyle(e),this.setState("dragReady")},this.onMouseDrag=function(t){var e=this.editor.container;n.isIE&&"dragReady"==this.state&&d(this.mousedownEvent.x,this.mousedownEvent.y,this.x,this.y)>3&&e.dragDrop(),"dragWait"===this.state&&d(this.mousedownEvent.x,this.mousedownEvent.y,this.x,this.y)>0&&(e.draggable=!1,this.startSelect(this.mousedownEvent.getDocumentPosition()))},this.onMouseDown=function(t){if(this.$dragEnabled){this.mousedownEvent=t;var e=this.editor,i=t.inSelection(),l=t.getButton();if(1===(t.domEvent.detail||1)&&0===l&&i){if(t.editor.inMultiSelectMode&&(t.getAccelKey()||t.getShiftKey()))return;this.mousedownEvent.time=Date.now();var a=t.domEvent.target||t.domEvent.srcElement;"unselectable"in a&&(a.unselectable="on"),e.getDragDelay()?(n.isWebKit&&(this.cancelDrag=!0,e.container.draggable=!0),this.setState("dragWait")):this.startDrag(),this.captureMouse(t,this.onMouseDrag.bind(this)),t.defaultPrevented=!0}}}}).call(s.prototype),e.DragdropHandler=s})),ace.define("ace/lib/net",["require","exports","module","ace/lib/dom"],(function(t,e,i){"use strict";var l=t("./dom");e.get=function(t,e){var i=new XMLHttpRequest;i.open("GET",t,!0),i.onreadystatechange=function(){4===i.readyState&&e(i.responseText)},i.send(null)},e.loadScript=function(t,e){var i=l.getDocumentHead(),a=document.createElement("script");a.src=t,i.appendChild(a),a.onload=a.onreadystatechange=function(t,i){!i&&a.readyState&&"loaded"!=a.readyState&&"complete"!=a.readyState||(a=a.onload=a.onreadystatechange=null,i||e())}},e.qualifyURL=function(t){var e=document.createElement("a");return e.href=t,e.href}})),ace.define("ace/lib/event_emitter",["require","exports","module"],(function(t,e,i){"use strict";var l={},a=function(){this.propagationStopped=!0},n=function(){this.defaultPrevented=!0};l._emit=l._dispatchEvent=function(t,e){this._eventRegistry||(this._eventRegistry={}),this._defaultHandlers||(this._defaultHandlers={});var i=this._eventRegistry[t]||[],l=this._defaultHandlers[t];if(i.length||l){"object"==typeof e&&e||(e={}),e.type||(e.type=t),e.stopPropagation||(e.stopPropagation=a),e.preventDefault||(e.preventDefault=n),i=i.slice();for(var s=0;s1&&(a=i[i.length-2]);var s=c[e+"Path"];return null==s?s=c.basePath:"/"==l&&(e=l=""),s&&"/"!=s.slice(-1)&&(s+="/"),s+e+l+a+this.get("suffix")},e.setModuleUrl=function(t,e){return c.$moduleUrls[t]=e},e.$loading={},e.loadModule=function(i,l){var a,s;Array.isArray(i)&&(s=i[0],i=i[1]);try{a=t(i)}catch(t){}if(a&&!e.$loading[i])return l&&l(a);if(e.$loading[i]||(e.$loading[i]=[]),e.$loading[i].push(l),!(e.$loading[i].length>1)){var d=function(){t([i],(function(t){e._emit("load.module",{name:i,module:t});var l=e.$loading[i];e.$loading[i]=null,l.forEach((function(e){e&&e(t)}))}))};if(!e.get("packaged"))return d();n.loadScript(e.moduleUrl(i,s),d)}},o(!0),e.init=o})),ace.define("ace/mouse/mouse_handler",["require","exports","module","ace/lib/event","ace/lib/useragent","ace/mouse/default_handlers","ace/mouse/default_gutter_handler","ace/mouse/mouse_event","ace/mouse/dragdrop_handler","ace/config"],(function(t,e,i){"use strict";var l=t("../lib/event"),a=t("../lib/useragent"),n=t("./default_handlers").DefaultHandlers,s=t("./default_gutter_handler").GutterHandler,d=t("./mouse_event").MouseEvent,c=t("./dragdrop_handler").DragdropHandler,o=t("../config"),m=function(t){var e=this;this.editor=t,new n(this),new s(this),new c(this);var i=function(e){(!document.hasFocus||!document.hasFocus()||!t.isFocused()&&document.activeElement==(t.textInput&&t.textInput.getElement()))&&window.focus(),t.focus()},d=t.renderer.getMouseEventTarget();l.addListener(d,"click",this.onMouseEvent.bind(this,"click")),l.addListener(d,"mousemove",this.onMouseMove.bind(this,"mousemove")),l.addMultiMouseDownListener([d,t.renderer.scrollBarV&&t.renderer.scrollBarV.inner,t.renderer.scrollBarH&&t.renderer.scrollBarH.inner,t.textInput&&t.textInput.getElement()].filter(Boolean),[400,300,250],this,"onMouseEvent"),l.addMouseWheelListener(t.container,this.onMouseWheel.bind(this,"mousewheel")),l.addTouchMoveListener(t.container,this.onTouchMove.bind(this,"touchmove"));var o=t.renderer.$gutter;l.addListener(o,"mousedown",this.onMouseEvent.bind(this,"guttermousedown")),l.addListener(o,"click",this.onMouseEvent.bind(this,"gutterclick")),l.addListener(o,"dblclick",this.onMouseEvent.bind(this,"gutterdblclick")),l.addListener(o,"mousemove",this.onMouseEvent.bind(this,"guttermousemove")),l.addListener(d,"mousedown",i),l.addListener(o,"mousedown",i),a.isIE&&t.renderer.scrollBarV&&(l.addListener(t.renderer.scrollBarV.element,"mousedown",i),l.addListener(t.renderer.scrollBarH.element,"mousedown",i)),t.on("mousemove",(function(i){if(!e.state&&!e.$dragDelay&&e.$dragEnabled){var l=t.renderer.screenToTextCoordinates(i.x,i.y),a=t.session.selection.getRange(),n=t.renderer;!a.isEmpty()&&a.insideStart(l.row,l.column)?n.setCursorStyle("default"):n.setCursorStyle("")}}))};(function(){this.onMouseEvent=function(t,e){this.editor._emit(t,new d(e,this.editor))},this.onMouseMove=function(t,e){var i=this.editor._eventRegistry&&this.editor._eventRegistry.mousemove;i&&i.length&&this.editor._emit(t,new d(e,this.editor))},this.onMouseWheel=function(t,e){var i=new d(e,this.editor);i.speed=2*this.$scrollSpeed,i.wheelX=e.wheelX,i.wheelY=e.wheelY,this.editor._emit(t,i)},this.onTouchMove=function(t,e){var i=new d(e,this.editor);i.speed=1,i.wheelX=e.wheelX,i.wheelY=e.wheelY,this.editor._emit(t,i)},this.setState=function(t){this.state=t},this.captureMouse=function(t,e){this.x=t.x,this.y=t.y,this.isMousePressed=!0;var i=this.editor.renderer;i.$keepTextAreaAtCursor&&(i.$keepTextAreaAtCursor=null);var n=this,s=function(t){if(t){if(a.isWebKit&&!t.which&&n.releaseMouse)return n.releaseMouse();n.x=t.clientX,n.y=t.clientY,e&&e(t),n.mouseEvent=new d(t,n.editor),n.$mouseMoved=!0}},c=function(t){clearInterval(m),o(),n[n.state+"End"]&&n[n.state+"End"](t),n.state="",null==i.$keepTextAreaAtCursor&&(i.$keepTextAreaAtCursor=!0,i.$moveTextAreaToCursor()),n.isMousePressed=!1,n.$onCaptureMouseMove=n.releaseMouse=null,t&&n.onMouseEvent("mouseup",t)},o=function(){n[n.state]&&n[n.state](),n.$mouseMoved=!1};if(a.isOldIE&&"dblclick"==t.domEvent.type)return setTimeout((function(){c(t)}));n.$onCaptureMouseMove=s,n.releaseMouse=l.capture(this.editor.container,s,c);var m=setInterval(o,20)},this.releaseMouse=null,this.cancelContextMenu=function(){var t=function(e){e&&e.domEvent&&"contextmenu"!=e.domEvent.type||(this.editor.off("nativecontextmenu",t),e&&e.domEvent&&l.stopEvent(e.domEvent))}.bind(this);setTimeout(t,10),this.editor.on("nativecontextmenu",t)}}).call(m.prototype),o.defineOptions(m.prototype,"mouseHandler",{scrollSpeed:{initialValue:2},dragDelay:{initialValue:a.isMac?150:0},dragEnabled:{initialValue:!0},focusTimout:{initialValue:0},tooltipFollowsMouse:{initialValue:!0}}),e.MouseHandler=m})),ace.define("ace/mouse/fold_handler",["require","exports","module"],(function(t,e,i){"use strict";e.FoldHandler=function(t){t.on("click",(function(e){var i=e.getDocumentPosition(),l=t.session,a=l.getFoldAt(i.row,i.column,1);a&&(e.getAccelKey()?l.removeFold(a):l.expandFold(a),e.stop())})),t.on("gutterclick",(function(e){if("foldWidgets"==t.renderer.$gutterLayer.getRegion(e)){var i=e.getDocumentPosition().row,l=t.session;l.foldWidgets&&l.foldWidgets[i]&&t.session.onFoldWidgetClick(i,e),t.isFocused()||t.focus(),e.stop()}})),t.on("gutterdblclick",(function(e){if("foldWidgets"==t.renderer.$gutterLayer.getRegion(e)){var i=e.getDocumentPosition().row,l=t.session,a=l.getParentFoldRangeData(i,!0),n=a.range||a.firstRange;if(n){i=n.start.row;var s=l.getFoldAt(i,l.getLine(i).length,1);s?l.removeFold(s):(l.addFold("...",n),t.renderer.scrollCursorIntoView({row:n.start.row,column:0}))}e.stop()}}))}})),ace.define("ace/keyboard/keybinding",["require","exports","module","ace/lib/keys","ace/lib/event"],(function(t,e,i){"use strict";var l=t("../lib/keys"),a=t("../lib/event"),n=function(t){this.$editor=t,this.$data={editor:t},this.$handlers=[],this.setDefaultHandler(t.commands)};(function(){this.setDefaultHandler=function(t){this.removeKeyboardHandler(this.$defaultHandler),this.$defaultHandler=t,this.addKeyboardHandler(t,0)},this.setKeyboardHandler=function(t){var e=this.$handlers;if(e[e.length-1]!=t){for(;e[e.length-1]&&e[e.length-1]!=this.$defaultHandler;)this.removeKeyboardHandler(e[e.length-1]);this.addKeyboardHandler(t,1)}},this.addKeyboardHandler=function(t,e){if(t){"function"!=typeof t||t.handleKeyboard||(t.handleKeyboard=t);var i=this.$handlers.indexOf(t);-1!=i&&this.$handlers.splice(i,1),null==e?this.$handlers.push(t):this.$handlers.splice(e,0,t),-1==i&&t.attach&&t.attach(this.$editor)}},this.removeKeyboardHandler=function(t){var e=this.$handlers.indexOf(t);return-1!=e&&(this.$handlers.splice(e,1),t.detach&&t.detach(this.$editor),!0)},this.getKeyboardHandler=function(){return this.$handlers[this.$handlers.length-1]},this.getStatusText=function(){var t=this.$data,e=t.editor;return this.$handlers.map((function(i){return i.getStatusText&&i.getStatusText(e,t)||""})).filter(Boolean).join(" ")},this.$callKeyboardHandlers=function(t,e,i,l){for(var n,s=!1,d=this.$editor.commands,c=this.$handlers.length;c--&&!((n=this.$handlers[c].handleKeyboard(this.$data,t,e,i,l))&&n.command&&((s="null"==n.command||d.exec(n.command,this.$editor,n.args,l))&&l&&-1!=t&&1!=n.passEvent&&1!=n.command.passEvent&&a.stopEvent(l),s)););return s||-1!=t||(n={command:"insertstring"},s=d.exec("insertstring",this.$editor,e)),s&&this.$editor._signal("keyboardActivity",n),s},this.onCommandKey=function(t,e,i){var a=l.keyCodeToString(i);this.$callKeyboardHandlers(e,a,i,t)},this.onTextInput=function(t){this.$callKeyboardHandlers(-1,t)}}).call(n.prototype),e.KeyBinding=n})),ace.define("ace/range",["require","exports","module"],(function(t,e,i){"use strict";var l=function(t,e,i,l){this.start={row:t,column:e},this.end={row:i,column:l}};(function(){this.isEqual=function(t){return this.start.row===t.start.row&&this.end.row===t.end.row&&this.start.column===t.start.column&&this.end.column===t.end.column},this.toString=function(){return"Range: ["+this.start.row+"/"+this.start.column+"] -> ["+this.end.row+"/"+this.end.column+"]"},this.contains=function(t,e){return 0==this.compare(t,e)},this.compareRange=function(t){var e,i=t.end,l=t.start;return 1==(e=this.compare(i.row,i.column))?1==(e=this.compare(l.row,l.column))?2:0==e?1:0:-1==e?-2:-1==(e=this.compare(l.row,l.column))?-1:1==e?42:0},this.comparePoint=function(t){return this.compare(t.row,t.column)},this.containsRange=function(t){return 0==this.comparePoint(t.start)&&0==this.comparePoint(t.end)},this.intersects=function(t){var e=this.compareRange(t);return-1==e||0==e||1==e},this.isEnd=function(t,e){return this.end.row==t&&this.end.column==e},this.isStart=function(t,e){return this.start.row==t&&this.start.column==e},this.setStart=function(t,e){"object"==typeof t?(this.start.column=t.column,this.start.row=t.row):(this.start.row=t,this.start.column=e)},this.setEnd=function(t,e){"object"==typeof t?(this.end.column=t.column,this.end.row=t.row):(this.end.row=t,this.end.column=e)},this.inside=function(t,e){return 0==this.compare(t,e)&&!this.isEnd(t,e)&&!this.isStart(t,e)},this.insideStart=function(t,e){return 0==this.compare(t,e)&&!this.isEnd(t,e)},this.insideEnd=function(t,e){return 0==this.compare(t,e)&&!this.isStart(t,e)},this.compare=function(t,e){return this.isMultiLine()||t!==this.start.row?tthis.end.row?1:this.start.row===t?e>=this.start.column?0:-1:this.end.row===t?e<=this.end.column?0:1:0:ethis.end.column?1:0},this.compareStart=function(t,e){return this.start.row==t&&this.start.column==e?-1:this.compare(t,e)},this.compareEnd=function(t,e){return this.end.row==t&&this.end.column==e?1:this.compare(t,e)},this.compareInside=function(t,e){return this.end.row==t&&this.end.column==e?1:this.start.row==t&&this.start.column==e?-1:this.compare(t,e)},this.clipRows=function(t,e){if(this.end.row>e)var i={row:e+1,column:0};else this.end.rowe)var a={row:e+1,column:0};else this.start.rowe.row||t.row==e.row&&t.column>e.column},this.getRange=function(){var t=this.anchor,e=this.lead;return this.isEmpty()?s.fromPoints(e,e):this.isBackwards()?s.fromPoints(e,t):s.fromPoints(t,e)},this.clearSelection=function(){this.$isEmpty||(this.$isEmpty=!0,this._emit("changeSelection"))},this.selectAll=function(){var t=this.doc.getLength()-1;this.setSelectionAnchor(0,0),this.moveCursorTo(t,this.doc.getLine(t).length)},this.setRange=this.setSelectionRange=function(t,e){e?(this.setSelectionAnchor(t.end.row,t.end.column),this.selectTo(t.start.row,t.start.column)):(this.setSelectionAnchor(t.start.row,t.start.column),this.selectTo(t.end.row,t.end.column)),this.getRange().isEmpty()&&(this.$isEmpty=!0),this.$desiredColumn=null},this.$moveSelection=function(t){var e=this.lead;this.$isEmpty&&this.setSelectionAnchor(e.row,e.column),t.call(this)},this.selectTo=function(t,e){this.$moveSelection((function(){this.moveCursorTo(t,e)}))},this.selectToPosition=function(t){this.$moveSelection((function(){this.moveCursorToPosition(t)}))},this.moveTo=function(t,e){this.clearSelection(),this.moveCursorTo(t,e)},this.moveToPosition=function(t){this.clearSelection(),this.moveCursorToPosition(t)},this.selectUp=function(){this.$moveSelection(this.moveCursorUp)},this.selectDown=function(){this.$moveSelection(this.moveCursorDown)},this.selectRight=function(){this.$moveSelection(this.moveCursorRight)},this.selectLeft=function(){this.$moveSelection(this.moveCursorLeft)},this.selectLineStart=function(){this.$moveSelection(this.moveCursorLineStart)},this.selectLineEnd=function(){this.$moveSelection(this.moveCursorLineEnd)},this.selectFileEnd=function(){this.$moveSelection(this.moveCursorFileEnd)},this.selectFileStart=function(){this.$moveSelection(this.moveCursorFileStart)},this.selectWordRight=function(){this.$moveSelection(this.moveCursorWordRight)},this.selectWordLeft=function(){this.$moveSelection(this.moveCursorWordLeft)},this.getWordRange=function(t,e){if(void 0===e){var i=t||this.lead;t=i.row,e=i.column}return this.session.getWordRange(t,e)},this.selectWord=function(){this.setSelectionRange(this.getWordRange())},this.selectAWord=function(){var t=this.getCursor(),e=this.session.getAWordRange(t.row,t.column);this.setSelectionRange(e)},this.getLineRange=function(t,e){var i,l="number"==typeof t?t:this.lead.row,a=this.session.getFoldLine(l);return a?(l=a.start.row,i=a.end.row):i=l,!0===e?new s(l,0,i,this.session.getLine(i).length):new s(l,0,i+1,0)},this.selectLine=function(){this.setSelectionRange(this.getLineRange())},this.moveCursorUp=function(){this.moveCursorBy(-1,0)},this.moveCursorDown=function(){this.moveCursorBy(1,0)},this.moveCursorLeft=function(){var t,e=this.lead.getPosition();if(t=this.session.getFoldAt(e.row,e.column,-1))this.moveCursorTo(t.start.row,t.start.column);else if(0===e.column)e.row>0&&this.moveCursorTo(e.row-1,this.doc.getLine(e.row-1).length);else{var i=this.session.getTabSize();this.session.isTabStop(e)&&this.doc.getLine(e.row).slice(e.column-i,e.column).split(" ").length-1==i?this.moveCursorBy(0,-i):this.moveCursorBy(0,-1)}},this.moveCursorRight=function(){var t,e=this.lead.getPosition();if(t=this.session.getFoldAt(e.row,e.column,1))this.moveCursorTo(t.end.row,t.end.column);else if(this.lead.column==this.doc.getLine(this.lead.row).length)this.lead.row0&&(e.column=l)}}this.moveCursorTo(e.row,e.column)},this.moveCursorFileEnd=function(){var t=this.doc.getLength()-1,e=this.doc.getLine(t).length;this.moveCursorTo(t,e)},this.moveCursorFileStart=function(){this.moveCursorTo(0,0)},this.moveCursorLongWordRight=function(){var t=this.lead.row,e=this.lead.column,i=this.doc.getLine(t),l=i.substring(e);this.session.nonTokenRe.lastIndex=0,this.session.tokenRe.lastIndex=0;var a=this.session.getFoldAt(t,e,1);if(a)this.moveCursorTo(a.end.row,a.end.column);else{if(this.session.nonTokenRe.exec(l)&&(e+=this.session.nonTokenRe.lastIndex,this.session.nonTokenRe.lastIndex=0,l=i.substring(e)),e>=i.length)return this.moveCursorTo(t,i.length),this.moveCursorRight(),void(t0&&this.moveCursorWordLeft());this.session.tokenRe.exec(n)&&(i-=this.session.tokenRe.lastIndex,this.session.tokenRe.lastIndex=0),this.moveCursorTo(e,i)}},this.$shortWordEndIndex=function(t){var e,i=0,l=/\s/,a=this.session.tokenRe;if(a.lastIndex=0,this.session.tokenRe.exec(t))i=this.session.tokenRe.lastIndex;else{for(;(e=t[i])&&l.test(e);)i++;if(i<1)for(a.lastIndex=0;(e=t[i])&&!a.test(e);)if(a.lastIndex=0,i++,l.test(e)){if(i>2){i--;break}for(;(e=t[i])&&l.test(e);)i++;if(i>2)break}}return a.lastIndex=0,i},this.moveCursorShortWordRight=function(){var t=this.lead.row,e=this.lead.column,i=this.doc.getLine(t),l=i.substring(e),a=this.session.getFoldAt(t,e,1);if(a)return this.moveCursorTo(a.end.row,a.end.column);if(e==i.length){var n=this.doc.getLength();do{t++,l=this.doc.getLine(t)}while(t0&&/^\s*$/.test(l));i=l.length,/\s+$/.test(l)||(l="")}var n=a.stringReverse(l),s=this.$shortWordEndIndex(n);return this.moveCursorTo(e,i-s)},this.moveCursorWordRight=function(){this.session.$selectLongWords?this.moveCursorLongWordRight():this.moveCursorShortWordRight()},this.moveCursorWordLeft=function(){this.session.$selectLongWords?this.moveCursorLongWordLeft():this.moveCursorShortWordLeft()},this.moveCursorBy=function(t,e){var i=this.session.documentToScreenPosition(this.lead.row,this.lead.column);0===e&&(this.$desiredColumn?i.column=this.$desiredColumn:this.$desiredColumn=i.column);var l=this.session.screenToDocumentPosition(i.row+t,i.column);0!==t&&0===e&&l.row===this.lead.row&&l.column===this.lead.column&&this.session.lineWidgets&&this.session.lineWidgets[l.row]&&(l.row>0||t>0)&&l.row++,this.moveCursorTo(l.row,l.column+e,0===e)},this.moveCursorToPosition=function(t){this.moveCursorTo(t.row,t.column)},this.moveCursorTo=function(t,e,i){var l=this.session.getFoldAt(t,e,1);l&&(t=l.start.row,e=l.start.column),this.$keepDesiredColumnOnChange=!0,this.lead.setPosition(t,e),this.$keepDesiredColumnOnChange=!1,i||(this.$desiredColumn=null)},this.moveCursorToScreen=function(t,e,i){var l=this.session.screenToDocumentPosition(t,e);this.moveCursorTo(l.row,l.column,i)},this.detach=function(){this.lead.detach(),this.anchor.detach(),this.session=this.doc=null},this.fromOrientedRange=function(t){this.setSelectionRange(t,t.cursor==t.start),this.$desiredColumn=t.desiredColumn||this.$desiredColumn},this.toOrientedRange=function(t){var e=this.getRange();return t?(t.start.column=e.start.column,t.start.row=e.start.row,t.end.column=e.end.column,t.end.row=e.end.row):t=e,t.cursor=this.isBackwards()?t.start:t.end,t.desiredColumn=this.$desiredColumn,t},this.getRangeOfMovements=function(t){var e=this.getCursor();try{t(this);var i=this.getCursor();return s.fromPoints(e,i)}catch(t){return s.fromPoints(e,e)}finally{this.moveCursorToPosition(e)}},this.toJSON=function(){if(this.rangeCount)var t=this.ranges.map((function(t){var e=t.clone();return e.isBackwards=t.cursor==t.start,e}));else(t=this.getRange()).isBackwards=this.isBackwards();return t},this.fromJSON=function(t){if(null==t.start){if(this.rangeList){this.toSingleRange(t[0]);for(var e=t.length;e--;){var i=s.fromPoints(t[e].start,t[e].end);t[e].isBackwards&&(i.cursor=i.start),this.addRange(i,!0)}return}t=t[0]}this.rangeList&&this.toSingleRange(t),this.setSelectionRange(t,t.isBackwards)},this.isEqual=function(t){if((t.length||this.rangeCount)&&t.length!=this.rangeCount)return!1;if(!t.length||!this.ranges)return this.getRange().isEqual(t);for(var e=this.ranges.length;e--;)if(!this.ranges[e].isEqual(t[e]))return!1;return!0}}).call(d.prototype),e.Selection=d})),ace.define("ace/tokenizer",["require","exports","module","ace/config"],(function(t,e,i){"use strict";var l=t("./config"),a=2e3,n=function(t){for(var e in this.states=t,this.regExps={},this.matchMappings={},this.states){for(var i=this.states[e],l=[],a=0,n=this.matchMappings[e]={defaultToken:"text"},s="g",d=[],c=0;c1?this.$applyToken:o.token),r>1&&(/\\\d/.test(o.regex)?m=o.regex.replace(/\\([0-9]+)/g,(function(t,e){return"\\"+(parseInt(e,10)+a+1)})):(r=1,m=this.removeCapturingGroups(o.regex)),o.splitRegex||"string"==typeof o.token||d.push(o)),n[a]=c,a+=r,l.push(m),o.onMatch||(o.onMatch=null)}}l.length||(n[0]=0,l.push("$")),d.forEach((function(t){t.splitRegex=this.createSplitterRegexp(t.regex,s)}),this),this.regExps[e]=new RegExp("("+l.join(")|(")+")|($)",s)}};(function(){this.$setMaxTokenCount=function(t){a=0|t},this.$applyToken=function(t){var e=this.splitRegex.exec(t).slice(1),i=this.token.apply(this,e);if("string"==typeof i)return[{type:i,value:t}];for(var l=[],a=0,n=i.length;am){var N=t.substring(m,W-h.length);b.type==g?b.value+=N:(b.type&&o.push(b),b={type:g,value:N})}for(var y=0;ya){for(r>2*t.length&&this.reportError("infinite loop with in ace tokenizer",{startState:e,line:t});m1&&i[0]!==l&&i.unshift("#tmp",l),{tokens:o,state:i.length?i:l}},this.reportError=l.reportError}).call(n.prototype),e.Tokenizer=n})),ace.define("ace/mode/text_highlight_rules",["require","exports","module","ace/lib/lang"],(function(t,e,i){"use strict";var l=t("../lib/lang"),a=function(){this.$rules={start:[{token:"empty_line",regex:"^$"},{defaultToken:"text"}]}};(function(){this.addRules=function(t,e){if(e)for(var i in t){for(var l=t[i],a=0;a=this.$rowTokens.length;){if(this.$row+=1,t||(t=this.$session.getLength()),this.$row>=t)return this.$row=t-1,null;this.$rowTokens=this.$session.getTokens(this.$row),this.$tokenIndex=0}return this.$rowTokens[this.$tokenIndex]},this.getCurrentToken=function(){return this.$rowTokens[this.$tokenIndex]},this.getCurrentTokenRow=function(){return this.$row},this.getCurrentTokenColumn=function(){var t=this.$rowTokens,e=this.$tokenIndex,i=t[e].start;if(void 0!==i)return i;for(i=0;e>0;)i+=t[e-=1].value.length;return i},this.getCurrentTokenPosition=function(){return{row:this.$row,column:this.getCurrentTokenColumn()}}}).call(l.prototype),e.TokenIterator=l})),ace.define("ace/mode/text",["require","exports","module","ace/tokenizer","ace/mode/text_highlight_rules","ace/mode/behaviour","ace/unicode","ace/lib/lang","ace/token_iterator","ace/range"],(function(t,e,i){"use strict";var l=t("../tokenizer").Tokenizer,a=t("./text_highlight_rules").TextHighlightRules,n=t("./behaviour").Behaviour,s=t("../unicode"),d=t("../lib/lang"),c=t("../token_iterator").TokenIterator,o=t("../range").Range,m=function(){this.HighlightRules=a,this.$behaviour=new n};(function(){this.tokenRe=new RegExp("^["+s.packages.L+s.packages.Mn+s.packages.Mc+s.packages.Nd+s.packages.Pc+"\\$_]+","g"),this.nonTokenRe=new RegExp("^(?:[^"+s.packages.L+s.packages.Mn+s.packages.Mc+s.packages.Nd+s.packages.Pc+"\\$_]|\\s])+","g"),this.getTokenizer=function(){return this.$tokenizer||(this.$highlightRules=this.$highlightRules||new this.HighlightRules,this.$tokenizer=new l(this.$highlightRules.getRules())),this.$tokenizer},this.lineCommentStart="",this.blockComment="",this.toggleCommentLines=function(t,e,i,l){var a=e.doc,n=!0,s=!0,c=1/0,o=e.getTabSize(),m=!1;if(this.lineCommentStart){Array.isArray(this.lineCommentStart)?(h=this.lineCommentStart.map(d.escapeRegExp).join("|"),g=this.lineCommentStart[0]):(h=d.escapeRegExp(this.lineCommentStart),g=this.lineCommentStart),h=new RegExp("^(\\s*)(?:"+h+") ?"),m=e.getUseSoftTabs(),y=function(t,e){var i=t.match(h);if(i){var l=i[1].length,n=i[0].length;b(t,l,n)||" "!=i[0][n-1]||n--,a.removeInLine(e,l,n)}};var r=g+" ",b=(N=function(t,e){n&&!/\S/.test(t)||(b(t,c,c)?a.insertInLine({row:e,column:c},r):a.insertInLine({row:e,column:c},g))},u=function(t,e){return h.test(t)},function(t,e,i){for(var l=0;e--&&" "==t.charAt(e);)l++;if(l%o!=0)return!1;for(l=0;" "==t.charAt(i++);)l++;return o>2?l%o!=o-1:l%o==0})}else{if(!this.blockComment)return!1;var g=this.blockComment.start,Z=this.blockComment.end,h=new RegExp("^(\\s*)(?:"+d.escapeRegExp(g)+")"),W=new RegExp("(?:"+d.escapeRegExp(Z)+")\\s*$"),N=function(t,e){u(t,e)||n&&!/\S/.test(t)||(a.insertInLine({row:e,column:t.length},Z),a.insertInLine({row:e,column:c},g))},y=function(t,e){var i;(i=t.match(W))&&a.removeInLine(e,t.length-i[0].length,t.length),(i=t.match(h))&&a.removeInLine(e,i[1].length,i[0].length)},u=function(t,i){if(h.test(t))return!0;for(var l=e.getTokens(i),a=0;at.length&&(G=t.length)})),c==1/0&&(c=G,n=!1,s=!1),m&&c%o!=0&&(c=Math.floor(c/o)*o),I(s?y:N)},this.toggleBlockComment=function(t,e,i,l){var a=this.blockComment;if(a){!a.start&&a[0]&&(a=a[0]);var n,s,d=(h=new c(e,l.row,l.column)).getCurrentToken(),m=(e.selection,e.selection.toOrientedRange());if(d&&/comment/.test(d.type)){for(var r,b;d&&/comment/.test(d.type);){if(-1!=(W=d.value.indexOf(a.start))){var g=h.getCurrentTokenRow(),Z=h.getCurrentTokenColumn()+W;r=new o(g,Z,g,Z+a.start.length);break}d=h.stepBackward()}var h;for(d=(h=new c(e,l.row,l.column)).getCurrentToken();d&&/comment/.test(d.type);){var W;if(-1!=(W=d.value.indexOf(a.end))){g=h.getCurrentTokenRow(),Z=h.getCurrentTokenColumn()+W,b=new o(g,Z,g,Z+a.end.length);break}d=h.stepForward()}b&&e.remove(b),r&&(e.remove(r),n=r.start.row,s=-a.start.length)}else s=a.start.length,n=i.start.row,e.insert(i.end,a.end),e.insert(i.start,a.start);m.start.row==n&&(m.start.column+=s),m.end.row==n&&(m.end.column+=s),e.selection.fromOrientedRange(m)}},this.getNextLineIndent=function(t,e,i){return this.$getIndent(e)},this.checkOutdent=function(t,e,i){return!1},this.autoOutdent=function(t,e,i){},this.$getIndent=function(t){return t.match(/^\s*/)[0]},this.createWorker=function(t){return null},this.createModeDelegates=function(t){for(var e in this.$embeds=[],this.$modes={},t)t[e]&&(this.$embeds.push(e),this.$modes[e]=new t[e]);var i=["toggleBlockComment","toggleCommentLines","getNextLineIndent","checkOutdent","autoOutdent","transformAction","getCompletions"];for(e=0;ethis.row)){var i=function(e,i,l){var a="insert"==e.action,n=(a?1:-1)*(e.end.row-e.start.row),s=(a?1:-1)*(e.end.column-e.start.column),d=e.start,c=a?d:e.end;return t(i,d,l)?{row:i.row,column:i.column}:t(c,i,!l)?{row:i.row+n,column:i.column+(i.row==c.row?s:0)}:{row:d.row,column:d.column}}(e,{row:this.row,column:this.column},this.$insertRight);this.setPosition(i.row,i.column,!0)}},this.setPosition=function(t,e,i){var l;if(l=i?{row:t,column:e}:this.$clipPositionToDocument(t,e),this.row!=l.row||this.column!=l.column){var a={row:this.row,column:this.column};this.row=l.row,this.column=l.column,this._signal("change",{old:a,value:l})}},this.detach=function(){this.document.removeEventListener("change",this.$onChange)},this.attach=function(t){this.document=t||this.document,this.document.on("change",this.$onChange)},this.$clipPositionToDocument=function(t,e){var i={};return t>=this.document.getLength()?(i.row=Math.max(0,this.document.getLength()-1),i.column=this.document.getLine(i.row).length):t<0?(i.row=0,i.column=0):(i.row=t,i.column=Math.min(this.document.getLine(i.row).length,Math.max(0,e))),e<0&&(i.column=0),i}}).call(n.prototype)})),ace.define("ace/document",["require","exports","module","ace/lib/oop","ace/apply_delta","ace/lib/event_emitter","ace/range","ace/anchor"],(function(t,e,i){"use strict";var l=t("./lib/oop"),a=t("./apply_delta").applyDelta,n=t("./lib/event_emitter").EventEmitter,s=t("./range").Range,d=t("./anchor").Anchor,c=function(t){this.$lines=[""],0===t.length?this.$lines=[""]:Array.isArray(t)?this.insertMergedLines({row:0,column:0},t):this.insert({row:0,column:0},t)};(function(){l.implement(this,n),this.setValue=function(t){var e=this.getLength()-1;this.remove(new s(0,0,e,this.getLine(e).length)),this.insert({row:0,column:0},t)},this.getValue=function(){return this.getAllLines().join(this.getNewLineCharacter())},this.createAnchor=function(t,e){return new d(this,t,e)},0==="aaa".split(/a/).length?this.$split=function(t){return t.replace(/\r\n|\r/g,"\n").split("\n")}:this.$split=function(t){return t.split(/\r\n|\r|\n/)},this.$detectNewLine=function(t){var e=t.match(/^.*?(\r\n|\r|\n)/m);this.$autoNewLine=e?e[1]:"\n",this._signal("changeNewLineMode")},this.getNewLineCharacter=function(){switch(this.$newLineMode){case"windows":return"\r\n";case"unix":return"\n";default:return this.$autoNewLine||"\n"}},this.$autoNewLine="",this.$newLineMode="auto",this.setNewLineMode=function(t){this.$newLineMode!==t&&(this.$newLineMode=t,this._signal("changeNewLineMode"))},this.getNewLineMode=function(){return this.$newLineMode},this.isNewLine=function(t){return"\r\n"==t||"\r"==t||"\n"==t},this.getLine=function(t){return this.$lines[t]||""},this.getLines=function(t,e){return this.$lines.slice(t,e+1)},this.getAllLines=function(){return this.getLines(0,this.getLength())},this.getLength=function(){return this.$lines.length},this.getTextRange=function(t){return this.getLinesForRange(t).join(this.getNewLineCharacter())},this.getLinesForRange=function(t){var e;if(t.start.row===t.end.row)e=[this.getLine(t.start.row).substring(t.start.column,t.end.column)];else{(e=this.getLines(t.start.row,t.end.row))[0]=(e[0]||"").substring(t.start.column);var i=e.length-1;t.end.row-t.start.row==i&&(e[i]=e[i].substring(0,t.end.column))}return e},this.insertLines=function(t,e){return console.warn("Use of document.insertLines is deprecated. Use the insertFullLines method instead."),this.insertFullLines(t,e)},this.removeLines=function(t,e){return console.warn("Use of document.removeLines is deprecated. Use the removeFullLines method instead."),this.removeFullLines(t,e)},this.insertNewLine=function(t){return console.warn("Use of document.insertNewLine is deprecated. Use insertMergedLines(position, ['', '']) instead."),this.insertMergedLines(t,["",""])},this.insert=function(t,e){return this.getLength()<=1&&this.$detectNewLine(e),this.insertMergedLines(t,this.$split(e))},this.insertInLine=function(t,e){var i=this.clippedPos(t.row,t.column),l=this.pos(t.row,t.column+e.length);return this.applyDelta({start:i,end:l,action:"insert",lines:[e]},!0),this.clonePos(l)},this.clippedPos=function(t,e){var i=this.getLength();void 0===t?t=i:t<0?t=0:t>=i&&(t=i-1,e=void 0);var l=this.getLine(t);return null==e&&(e=l.length),{row:t,column:e=Math.min(Math.max(e,0),l.length)}},this.clonePos=function(t){return{row:t.row,column:t.column}},this.pos=function(t,e){return{row:t,column:e}},this.$clipPosition=function(t){var e=this.getLength();return t.row>=e?(t.row=Math.max(0,e-1),t.column=this.getLine(e-1).length):(t.row=Math.max(0,t.row),t.column=Math.min(Math.max(t.column,0),this.getLine(t.row).length)),t},this.insertFullLines=function(t,e){var i=0;(t=Math.min(Math.max(t,0),this.getLength()))0,l=e=0&&this.applyDelta({start:this.pos(t,this.getLine(t).length),end:this.pos(t+1,0),action:"remove",lines:["",""]})},this.replace=function(t,e){return t instanceof s||(t=s.fromPoints(t.start,t.end)),0===e.length&&t.isEmpty()?t.start:e==this.getTextRange(t)?t.end:(this.remove(t),e?this.insert(t.start,e):t.start)},this.applyDeltas=function(t){for(var e=0;e=0;e--)this.revertDelta(t[e])},this.applyDelta=function(t,e){var i="insert"==t.action;(i?t.lines.length<=1&&!t.lines[0]:!s.comparePoints(t.start,t.end))||(i&&t.lines.length>2e4&&this.$splitAndapplyLargeDelta(t,2e4),a(this.$lines,t,e),this._signal("change",t))},this.$splitAndapplyLargeDelta=function(t,e){for(var i=t.lines,l=i.length,a=t.start.row,n=t.start.column,s=0,d=0;;){s=d,d+=e-1;var c=i.slice(s,d);if(d>l){t.lines=c,t.start.row=a+s,t.start.column=n;break}c.push(""),this.applyDelta({start:this.pos(a+s,n),end:this.pos(a+d,n=0),action:t.action,lines:c},!0)}},this.revertDelta=function(t){this.applyDelta({start:this.clonePos(t.start),end:this.clonePos(t.end),action:"insert"==t.action?"remove":"insert",lines:t.lines.slice()})},this.indexToPosition=function(t,e){for(var i=this.$lines||this.getAllLines(),l=this.getNewLineCharacter().length,a=e||0,n=i.length;a20){i.running=setTimeout(i.$worker,20);break}}i.currentLine=e,n<=l&&i.fireUpdateEvent(n,l)}}};(function(){l.implement(this,a),this.setTokenizer=function(t){this.tokenizer=t,this.lines=[],this.states=[],this.start(0)},this.setDocument=function(t){this.doc=t,this.lines=[],this.states=[],this.stop()},this.fireUpdateEvent=function(t,e){var i={first:t,last:e};this._signal("update",{data:i})},this.start=function(t){this.currentLine=Math.min(t||0,this.currentLine,this.doc.getLength()),this.lines.splice(this.currentLine,this.lines.length),this.states.splice(this.currentLine,this.states.length),this.stop(),this.running=setTimeout(this.$worker,700)},this.scheduleStart=function(){this.running||(this.running=setTimeout(this.$worker,700))},this.$updateOnChange=function(t){var e=t.start.row,i=t.end.row-e;if(0===i)this.lines[e]=null;else if("remove"==t.action)this.lines.splice(e,i+1,null),this.states.splice(e,i+1,null);else{var l=Array(i+1);l.unshift(e,1),this.lines.splice.apply(this.lines,l),this.states.splice.apply(this.states,l)}this.currentLine=Math.min(e,this.currentLine,this.doc.getLength()),this.stop()},this.stop=function(){this.running&&clearTimeout(this.running),this.running=!1},this.getTokens=function(t){return this.lines[t]||this.$tokenizeRow(t)},this.getState=function(t){return this.currentLine==t&&this.$tokenizeRow(t),this.states[t]||"start"},this.$tokenizeRow=function(t){var e=this.doc.getLine(t),i=this.states[t-1],l=this.tokenizer.getLineTokens(e,i,t);return this.states[t]+""!=l.state+""?(this.states[t]=l.state,this.lines[t+1]=null,this.currentLine>t+1&&(this.currentLine=t+1)):this.currentLine==t&&(this.currentLine=t+1),this.lines[t]=l.tokens}}).call(n.prototype),e.BackgroundTokenizer=n})),ace.define("ace/search_highlight",["require","exports","module","ace/lib/lang","ace/lib/oop","ace/range"],(function(t,e,i){"use strict";var l=t("./lib/lang"),a=(t("./lib/oop"),t("./range").Range),n=function(t,e,i){this.setRegexp(t),this.clazz=e,this.type=i||"text"};(function(){this.MAX_RANGES=500,this.setRegexp=function(t){this.regExp+""!=t+""&&(this.regExp=t,this.cache=[])},this.update=function(t,e,i,n){if(this.regExp)for(var s=n.firstRow,d=n.lastRow,c=s;c<=d;c++){var o=this.cache[c];null==o&&((o=l.getMatchOffsets(i.getLine(c),this.regExp)).length>this.MAX_RANGES&&(o=o.slice(0,this.MAX_RANGES)),o=o.map((function(t){return new a(c,t.offset,c,t.offset+t.length)})),this.cache[c]=o.length?o:"");for(var m=o.length;m--;)e.drawSingleLineMarker(t,o[m].toScreenRange(i),this.clazz,n)}}}).call(n.prototype),e.SearchHighlight=n})),ace.define("ace/edit_session/fold_line",["require","exports","module","ace/range"],(function(t,e,i){"use strict";var l=t("../range").Range;function a(t,e){this.foldData=t,Array.isArray(e)?this.folds=e:e=this.folds=[e];var i=e[e.length-1];this.range=new l(e[0].start.row,e[0].start.column,i.end.row,i.end.column),this.start=this.range.start,this.end=this.range.end,this.folds.forEach((function(t){t.setFoldLine(this)}),this)}(function(){this.shiftRow=function(t){this.start.row+=t,this.end.row+=t,this.folds.forEach((function(e){e.start.row+=t,e.end.row+=t}))},this.addFold=function(t){if(t.sameRow){if(t.start.rowthis.endRow)throw new Error("Can't add a fold to this FoldLine as it has no connection");this.folds.push(t),this.folds.sort((function(t,e){return-t.range.compareEnd(e.start.row,e.start.column)})),this.range.compareEnd(t.start.row,t.start.column)>0?(this.end.row=t.end.row,this.end.column=t.end.column):this.range.compareStart(t.end.row,t.end.column)<0&&(this.start.row=t.start.row,this.start.column=t.start.column)}else if(t.start.row==this.end.row)this.folds.push(t),this.end.row=t.end.row,this.end.column=t.end.column;else{if(t.end.row!=this.start.row)throw new Error("Trying to add fold to FoldRow that doesn't have a matching row");this.folds.unshift(t),this.start.row=t.start.row,this.start.column=t.start.column}t.foldLine=this},this.containsRow=function(t){return t>=this.start.row&&t<=this.end.row},this.walk=function(t,e,i){var l,a,n=0,s=this.folds,d=!0;null==e&&(e=this.end.row,i=this.end.column);for(var c=0;c0)){var c=l(t,s.start);return 0===d?e&&0!==c?-n-2:n:c>0||0===c&&!e?n:-n-1}}return-n-1},this.add=function(t){var e=!t.isEmpty(),i=this.pointIndex(t.start,e);i<0&&(i=-i-1);var l=this.pointIndex(t.end,e,i);return l<0?l=-l-1:l++,this.ranges.splice(i,l-i,t)},this.addList=function(t){for(var e=[],i=t.length;i--;)e.push.apply(e,this.add(t[i]));return e},this.substractPoint=function(t){var e=this.pointIndex(t);if(e>=0)return this.ranges.splice(e,1)},this.merge=function(){for(var t,e=[],i=this.ranges,a=(i=i.sort((function(t,e){return l(t.start,e.start)})))[0],n=1;n=0},this.containsPoint=function(t){return this.pointIndex(t)>=0},this.rangeAtPoint=function(t){var e=this.pointIndex(t);if(e>=0)return this.ranges[e]},this.clipRows=function(t,e){var i=this.ranges;if(i[0].start.row>e||i[i.length-1].start.rowl)break;if(o.start.row==l&&o.start.column>=e.column&&(o.start.column==e.column&&this.$insertRight||(o.start.column+=n,o.start.row+=a)),o.end.row==l&&o.end.column>=e.column){if(o.end.column==e.column&&this.$insertRight)continue;o.end.column==e.column&&n>0&&do.start.column&&o.end.column==s[d+1].start.column&&(o.end.column-=n),o.end.column+=n,o.end.row+=a}}if(0!=a&&d=t)return a;if(a.end.row>t)return null}return null},this.getNextFoldLine=function(t,e){var i=this.$foldData,l=0;for(e&&(l=i.indexOf(e)),-1==l&&(l=0);l=t)return a}return null},this.getFoldedRowCount=function(t,e){for(var i=this.$foldData,l=e-t+1,a=0;a=e){d=t?l-=e-d:l=0);break}s>=t&&(l-=d>=t?s-d:s-t+1)}return l},this.$addFoldLine=function(t){return this.$foldData.push(t),this.$foldData.sort((function(t,e){return t.start.row-e.start.row})),t},this.addFold=function(t,e){var i,l=this.$foldData,s=!1;t instanceof n?i=t:(i=new n(e,t)).collapseChildren=e.collapseChildren,this.$clipRangeToDocument(i.range);var d=i.start.row,c=i.start.column,o=i.end.row,m=i.end.column;if(!(d0&&(this.removeFolds(g),g.forEach((function(t){i.addSubFold(t)})));for(var Z=0;Z0&&this.foldAll(t.start.row+1,t.end.row,t.collapseChildren-1),t.subFolds=[]},this.expandFolds=function(t){t.forEach((function(t){this.expandFold(t)}),this)},this.unfold=function(t,e){var i,a;if(null==t?(i=new l(0,0,this.getLength(),0),e=!0):i="number"==typeof t?new l(t,0,t,this.getLine(t).length):"row"in t?l.fromPoints(t,t):t,a=this.getFoldsInRangeList(i),e)this.removeFolds(a);else for(var n=a;n.length;)this.expandFolds(n),n=this.getFoldsInRangeList(i);if(a.length)return a},this.isRowFolded=function(t,e){return!!this.getFoldLine(t,e)},this.getRowFoldEnd=function(t,e){var i=this.getFoldLine(t,e);return i?i.end.row:t},this.getRowFoldStart=function(t,e){var i=this.getFoldLine(t,e);return i?i.start.row:t},this.getFoldDisplayLine=function(t,e,i,l,a){null==l&&(l=t.start.row),null==a&&(a=0),null==e&&(e=t.end.row),null==i&&(i=this.getLine(e).length);var n=this.doc,s="";return t.walk((function(t,e,i,d){if(!(e=t){a=n.end.row;try{var s=this.addFold("...",n);s&&(s.collapseChildren=i)}catch(t){}}}}},this.$foldStyles={manual:1,markbegin:1,markbeginend:1},this.$foldStyle="markbegin",this.setFoldStyle=function(t){if(!this.$foldStyles[t])throw new Error("invalid fold style: "+t+"["+Object.keys(this.$foldStyles).join(", ")+"]");if(this.$foldStyle!=t){this.$foldStyle=t,"manual"==t&&this.unfold();var e=this.$foldMode;this.$setFolding(null),this.$setFolding(e)}},this.$setFolding=function(t){this.$foldMode!=t&&(this.$foldMode=t,this.off("change",this.$updateFoldWidgets),this.off("tokenizerUpdate",this.$tokenizerUpdateFoldWidgets),this._signal("changeAnnotation"),t&&"manual"!=this.$foldStyle?(this.foldWidgets=[],this.getFoldWidget=t.getFoldWidget.bind(t,this,this.$foldStyle),this.getFoldWidgetRange=t.getFoldWidgetRange.bind(t,this,this.$foldStyle),this.$updateFoldWidgets=this.updateFoldWidgets.bind(this),this.$tokenizerUpdateFoldWidgets=this.tokenizerUpdateFoldWidgets.bind(this),this.on("change",this.$updateFoldWidgets),this.on("tokenizerUpdate",this.$tokenizerUpdateFoldWidgets)):this.foldWidgets=null)},this.getParentFoldRangeData=function(t,e){var i=this.foldWidgets;if(!i||e&&i[t])return{};for(var l,a=t-1;a>=0;){var n=i[a];if(null==n&&(n=i[a]=this.getFoldWidget(a)),"start"==n){var s=this.getFoldWidgetRange(a);if(l||(l=s),s&&s.end.row>=t)break}a--}return{range:-1!==a&&s,firstRange:l}},this.onFoldWidgetClick=function(t,e){var i={children:(e=e.domEvent).shiftKey,all:e.ctrlKey||e.metaKey,siblings:e.altKey};if(!this.$toggleFoldWidget(t,i)){var l=e.target||e.srcElement;l&&/ace_fold-widget/.test(l.className)&&(l.className+=" ace_invalid")}},this.$toggleFoldWidget=function(t,e){if(this.getFoldWidget){var i=this.getFoldWidget(t),l=this.getLine(t),a="end"===i?-1:1,n=this.getFoldAt(t,-1===a?0:l.length,a);if(n)e.children||e.all?this.removeFold(n):this.expandFold(n);else{var s=this.getFoldWidgetRange(t,!0);if(!s||s.isMultiLine()||!(n=this.getFoldAt(s.start.row,s.start.column,1))||!s.isEqual(n.range)){if(e.siblings){var d=this.getParentFoldRangeData(t);if(d.range)var c=d.range.start.row+1,o=d.range.end.row;this.foldAll(c,o,e.all?1e4:0)}else e.children?(o=s?s.end.row:this.getLength(),this.foldAll(t+1,o,e.all?1e4:0)):s&&(e.all&&(s.collapseChildren=1e4),this.addFold("...",s));return s}this.removeFold(n)}}},this.toggleFoldWidget=function(t){var e=this.selection.getCursor().row;e=this.getRowFoldStart(e);var i=this.$toggleFoldWidget(e,{});if(!i){var l=this.getParentFoldRangeData(e,!0);if(i=l.range||l.firstRange){e=i.start.row;var a=this.getFoldAt(e,this.getLine(e).length,1);a?this.removeFold(a):this.addFold("...",i)}}},this.updateFoldWidgets=function(t){var e=t.start.row,i=t.end.row-e;if(0===i)this.foldWidgets[e]=null;else if("remove"==t.action)this.foldWidgets.splice(e,i+1,null);else{var l=Array(i+1);l.unshift(e,1),this.foldWidgets.splice.apply(this.foldWidgets,l)}},this.tokenizerUpdateFoldWidgets=function(t){var e=t.data;e.first!=e.last&&this.foldWidgets.length>e.first&&this.foldWidgets.splice(e.first,this.foldWidgets.length)}}})),ace.define("ace/edit_session/bracket_match",["require","exports","module","ace/token_iterator","ace/range"],(function(t,e,i){"use strict";var l=t("../token_iterator").TokenIterator,a=t("../range").Range;e.BracketMatch=function(){this.findMatchingBracket=function(t,e){if(0==t.column)return null;var i=e||this.getLine(t.row).charAt(t.column-1);if(""==i)return null;var l=i.match(/([\(\[\{])|([\)\]\}])/);return l?l[1]?this.$findClosingBracket(l[1],t):this.$findOpeningBracket(l[2],t):null},this.getBracketRange=function(t){var e,i=this.getLine(t.row),l=!0,n=i.charAt(t.column-1),s=n&&n.match(/([\(\[\{])|([\)\]\}])/);if(s||(n=i.charAt(t.column),t={row:t.row,column:t.column+1},s=n&&n.match(/([\(\[\{])|([\)\]\}])/),l=!1),!s)return null;if(s[1]){if(!(d=this.$findClosingBracket(s[1],t)))return null;e=a.fromPoints(t,d),l||(e.end.column++,e.start.column--),e.cursor=e.end}else{var d;if(!(d=this.$findOpeningBracket(s[2],t)))return null;e=a.fromPoints(d,t),l||(e.start.column++,e.end.column--),e.cursor=e.start}return e},this.$brackets={")":"(","(":")","]":"[","[":"]","{":"}","}":"{"},this.$findOpeningBracket=function(t,e,i){var a=this.$brackets[t],n=1,s=new l(this,e.row,e.column),d=s.getCurrentToken();if(d||(d=s.stepForward()),d){i||(i=new RegExp("(\\.?"+d.type.replace(".","\\.").replace("rparen",".paren").replace(/\b(?:end)\b/,"(?:start|begin|end)")+")+"));for(var c=e.column-s.getCurrentTokenColumn()-2,o=d.value;;){for(;c>=0;){var m=o.charAt(c);if(m==a){if(0==(n-=1))return{row:s.getCurrentTokenRow(),column:c+s.getCurrentTokenColumn()}}else m==t&&(n+=1);c-=1}do{d=s.stepBackward()}while(d&&!i.test(d.type));if(null==d)break;c=(o=d.value).length-1}return null}},this.$findClosingBracket=function(t,e,i){var a=this.$brackets[t],n=1,s=new l(this,e.row,e.column),d=s.getCurrentToken();if(d||(d=s.stepForward()),d){i||(i=new RegExp("(\\.?"+d.type.replace(".","\\.").replace("lparen",".paren").replace(/\b(?:start|begin)\b/,"(?:start|begin|end)")+")+"));for(var c=e.column-s.getCurrentTokenColumn();;){for(var o=d.value,m=o.length;ci&&(this.$docRowCache.splice(i,e),this.$screenRowCache.splice(i,e))},this.$getRowCacheIndex=function(t,e){for(var i=0,l=t.length-1;i<=l;){var a=i+l>>1,n=t[a];if(e>n)i=a+1;else{if(!(e=e);n++);return(i=l[n])?(i.index=n,i.start=a-i.value.length,i):null},this.setUndoManager=function(t){if(this.$undoManager=t,this.$deltas=[],this.$deltasDoc=[],this.$deltasFold=[],this.$informUndoManager&&this.$informUndoManager.cancel(),t){var e=this;this.$syncInformUndoManager=function(){e.$informUndoManager.cancel(),e.$deltasFold.length&&(e.$deltas.push({group:"fold",deltas:e.$deltasFold}),e.$deltasFold=[]),e.$deltasDoc.length&&(e.$deltas.push({group:"doc",deltas:e.$deltasDoc}),e.$deltasDoc=[]),e.$deltas.length>0&&t.execute({action:"aceupdate",args:[e.$deltas,e],merge:e.mergeUndoDeltas}),e.mergeUndoDeltas=!1,e.$deltas=[]},this.$informUndoManager=a.delayedCall(this.$syncInformUndoManager)}},this.markUndoGroup=function(){this.$syncInformUndoManager&&this.$syncInformUndoManager()},this.$defaultUndoManager={undo:function(){},redo:function(){},reset:function(){}},this.getUndoManager=function(){return this.$undoManager||this.$defaultUndoManager},this.getTabString=function(){return this.getUseSoftTabs()?a.stringRepeat(" ",this.getTabSize()):"\t"},this.setUseSoftTabs=function(t){this.setOption("useSoftTabs",t)},this.getUseSoftTabs=function(){return this.$useSoftTabs&&!this.$mode.$indentWithTabs},this.setTabSize=function(t){this.setOption("tabSize",t)},this.getTabSize=function(){return this.$tabSize},this.isTabStop=function(t){return this.$useSoftTabs&&t.column%this.$tabSize==0},this.$overwrite=!1,this.setOverwrite=function(t){this.setOption("overwrite",t)},this.getOverwrite=function(){return this.$overwrite},this.toggleOverwrite=function(){this.setOverwrite(!this.$overwrite)},this.addGutterDecoration=function(t,e){this.$decorations[t]||(this.$decorations[t]=""),this.$decorations[t]+=" "+e,this._signal("changeBreakpoint",{})},this.removeGutterDecoration=function(t,e){this.$decorations[t]=(this.$decorations[t]||"").replace(" "+e,""),this._signal("changeBreakpoint",{})},this.getBreakpoints=function(){return this.$breakpoints},this.setBreakpoints=function(t){this.$breakpoints=[];for(var e=0;e0&&(l=!!i.charAt(e-1).match(this.tokenRe)),l||(l=!!i.charAt(e).match(this.tokenRe)),l)var a=this.tokenRe;else a=/^\s+$/.test(i.slice(e-1,e+1))?/\s/:this.nonTokenRe;var n=e;if(n>0){do{n--}while(n>=0&&i.charAt(n).match(a));n++}for(var s=e;st&&(t=e.screenWidth)})),this.lineWidgetWidth=t},this.$computeWidth=function(t){if(this.$modified||t){if(this.$modified=!1,this.$useWrapMode)return this.screenWidth=this.$wrapLimit;for(var e=this.doc.getAllLines(),i=this.$rowLengthCache,l=0,a=0,n=this.$foldData[a],s=n?n.start.row:1/0,d=e.length,c=0;cs){if((c=n.end.row+1)>=d)break;s=(n=this.$foldData[a++])?n.start.row:1/0}null==i[c]&&(i[c]=this.$getStringScreenWidth(e[c])[0]),i[c]>l&&(l=i[c])}this.screenWidth=l}},this.getLine=function(t){return this.doc.getLine(t)},this.getLines=function(t,e){return this.doc.getLines(t,e)},this.getLength=function(){return this.doc.getLength()},this.getTextRange=function(t){return this.doc.getTextRange(t||this.selection.getRange())},this.insert=function(t,e){return this.doc.insert(t,e)},this.remove=function(t){return this.doc.remove(t)},this.removeFullLines=function(t,e){return this.doc.removeFullLines(t,e)},this.undoChanges=function(t,e){if(t.length){this.$fromUndo=!0;for(var i=null,l=t.length-1;-1!=l;l--){var a=t[l];"doc"==a.group?(this.doc.revertDeltas(a.deltas),i=this.$getUndoSelection(a.deltas,!0,i)):a.deltas.forEach((function(t){this.addFolds(t.folds)}),this)}return this.$fromUndo=!1,i&&this.$undoSelect&&!e&&this.selection.setSelectionRange(i),i}},this.redoChanges=function(t,e){if(t.length){this.$fromUndo=!0;for(var i=null,l=0;lt.end.column&&(n.start.column+=m),n.end.row==t.end.row&&n.end.column>t.end.column&&(n.end.column+=m)),s&&n.start.row>=t.end.row&&(n.start.row+=s,n.end.row+=s)}if(n.end=this.insert(n.start,l),a.length){var d=t.start,c=n.start,m=(s=c.row-d.row,c.column-d.column);this.addFolds(a.map((function(t){return(t=t.clone()).start.row==d.row&&(t.start.column+=m),t.end.row==d.row&&(t.end.column+=m),t.start.row+=s,t.end.row+=s,t})))}return n},this.indentRows=function(t,e,i){i=i.replace(/\t/g,this.getTabString());for(var l=t;l<=e;l++)this.doc.insertInLine({row:l,column:0},i)},this.outdentRows=function(t){for(var e=t.collapseRows(),i=new o(0,0,0,0),l=this.getTabSize(),a=e.start.row;a<=e.end.row;++a){var n=this.getLine(a);i.start.row=a,i.end.row=a;for(var s=0;s0){var a;if((a=this.getRowFoldEnd(e+i))>this.doc.getLength()-1)return 0;l=a-e}else t=this.$clipRowToDocument(t),l=(e=this.$clipRowToDocument(e))-t+1;var n=new o(t,0,e,Number.MAX_VALUE),s=this.getFoldsInRange(n).map((function(t){return(t=t.clone()).start.row+=l,t.end.row+=l,t})),d=0==i?this.doc.getLines(t,e):this.doc.removeFullLines(t,e);return this.doc.insertFullLines(t+l,d),s.length&&this.addFolds(s),l},this.moveLinesUp=function(t,e){return this.$moveLines(t,e,-1)},this.moveLinesDown=function(t,e){return this.$moveLines(t,e,1)},this.duplicateLines=function(t,e){return this.$moveLines(t,e,0)},this.$clipRowToDocument=function(t){return Math.max(0,Math.min(t,this.doc.getLength()-1))},this.$clipColumnToRow=function(t,e){return e<0?0:Math.min(this.doc.getLine(t).length,e)},this.$clipPositionToDocument=function(t,e){if(e=Math.max(0,e),t<0)t=0,e=0;else{var i=this.doc.getLength();t>=i?(t=i-1,e=this.doc.getLine(i-1).length):e=Math.min(this.doc.getLine(t).length,e)}return{row:t,column:e}},this.$clipRangeToDocument=function(t){t.start.row<0?(t.start.row=0,t.start.column=0):t.start.column=this.$clipColumnToRow(t.start.row,t.start.column);var e=this.doc.getLength()-1;return t.end.row>e?(t.end.row=e,t.end.column=this.doc.getLine(e).length):t.end.column=this.$clipColumnToRow(t.end.row,t.end.column),t},this.$wrapLimit=80,this.$useWrapMode=!1,this.$wrapLimitRange={min:null,max:null},this.setUseWrapMode=function(t){if(t!=this.$useWrapMode){if(this.$useWrapMode=t,this.$modified=!0,this.$resetRowCache(0),t){var e=this.getLength();this.$wrapData=Array(e),this.$updateWrapData(0,e-1)}this._signal("changeWrapMode")}},this.getUseWrapMode=function(){return this.$useWrapMode},this.setWrapLimitRange=function(t,e){this.$wrapLimitRange.min===t&&this.$wrapLimitRange.max===e||(this.$wrapLimitRange={min:t,max:e},this.$modified=!0,this.$useWrapMode&&this._signal("changeWrapMode"))},this.adjustWrapLimit=function(t,e){var i=this.$wrapLimitRange;i.max<0&&(i={min:e,max:e});var l=this.$constrainWrapLimit(t,i.min,i.max);return l!=this.$wrapLimit&&l>1&&(this.$wrapLimit=l,this.$modified=!0,this.$useWrapMode&&(this.$updateWrapData(0,this.getLength()-1),this.$resetRowCache(0),this._signal("changeWrapLimit")),!0)},this.$constrainWrapLimit=function(t,e,i){return e&&(t=Math.max(e,t)),i&&(t=Math.min(i,t)),t},this.getWrapLimit=function(){return this.$wrapLimit},this.setWrapLimit=function(t){this.setWrapLimitRange(t,t)},this.getWrapLimitRange=function(){return{min:this.$wrapLimitRange.min,max:this.$wrapLimitRange.max}},this.$updateInternalDataOnChange=function(t){var e=this.$useWrapMode,i=t.action,l=t.start,a=t.end,n=l.row,s=a.row,d=s-n,c=null;if(this.$updating=!0,0!=d)if("remove"===i){this[e?"$wrapData":"$rowLengthCache"].splice(n,d);var o=this.$foldData;c=this.getFoldsInRange(t),this.removeFolds(c);var m=0;if(h=this.getFoldLine(a.row)){h.addRemoveChars(a.row,a.column,l.column-a.column),h.shiftRow(-d);var r=this.getFoldLine(n);r&&r!==h&&(r.merge(h),h=r),m=o.indexOf(h)+1}for(;m=a.row&&h.shiftRow(-d);s=n}else{var b=Array(d);b.unshift(n,0);var g=e?this.$wrapData:this.$rowLengthCache;if(g.splice.apply(g,b),o=this.$foldData,m=0,h=this.getFoldLine(n)){var Z=h.range.compareInside(l.row,l.column);0==Z?(h=h.split(l.row,l.column))&&(h.shiftRow(d),h.addRemoveChars(s,0,a.column-l.column)):-1==Z&&(h.addRemoveChars(n,0,a.column-l.column),h.shiftRow(d)),m=o.indexOf(h)+1}for(;m=n&&h.shiftRow(d)}}else d=Math.abs(t.start.column-t.end.column),"remove"===i&&(c=this.getFoldsInRange(t),this.removeFolds(c),d=-d),(h=this.getFoldLine(n))&&h.addRemoveChars(n,l.column,d);return e&&this.$wrapData.length!=this.doc.getLength()&&console.error("doc.getLength() and $wrapData.length have to be the same!"),this.$updating=!1,e?this.$updateWrapData(n,s):this.$updateRowLengthCache(n,s),c},this.$updateRowLengthCache=function(t,e,i){this.$rowLengthCache[t]=null,this.$rowLengthCache[e]=null},this.$updateWrapData=function(i,l){var a,n,s=this.doc.getAllLines(),d=this.getTabSize(),c=this.$wrapData,o=this.$wrapLimit,m=i;for(l=Math.min(l,s.length-1);m<=l;)(n=this.getFoldLine(m,n))?(a=[],n.walk(function(i,l,n,d){var c;if(null!=i){(c=this.$getDisplayTokens(i,a.length))[0]=t;for(var o=1;o=4352&&t<=4447||t>=4515&&t<=4519||t>=4602&&t<=4607||t>=9001&&t<=9002||t>=11904&&t<=11929||t>=11931&&t<=12019||t>=12032&&t<=12245||t>=12272&&t<=12283||t>=12288&&t<=12350||t>=12353&&t<=12438||t>=12441&&t<=12543||t>=12549&&t<=12589||t>=12593&&t<=12686||t>=12688&&t<=12730||t>=12736&&t<=12771||t>=12784&&t<=12830||t>=12832&&t<=12871||t>=12880&&t<=13054||t>=13056&&t<=19903||t>=19968&&t<=42124||t>=42128&&t<=42182||t>=43360&&t<=43388||t>=44032&&t<=55203||t>=55216&&t<=55238||t>=55243&&t<=55291||t>=63744&&t<=64255||t>=65040&&t<=65049||t>=65072&&t<=65106||t>=65108&&t<=65126||t>=65128&&t<=65131||t>=65281&&t<=65376||t>=65504&&t<=65510)}this.$computeWrapSplits=function(i,l,a){if(0==i.length)return[];var n=[],s=i.length,d=0,c=0,o=this.$wrapAsCode,m=this.$indentedSoftWrap,r=l<=Math.max(2*a,8)||!1===m?0:Math.floor(l/2);function b(t){var e=i.slice(d,t),l=e.length;e.join("").replace(/12/g,(function(){l-=1})).replace(/2/g,(function(){l-=1})),n.length||(g=function(){var t=0;if(0===r)return t;if(m)for(var e=0;el-g;){var Z=d+l-g;if(i[Z-1]>=10&&i[Z]>=10)b(Z);else if(i[Z]!=t&&i[Z]!=e){for(var h=Math.max(Z-(l-(l>>2)),d-1);Z>h&&i[Z]h&&i[Z]h&&9==i[Z];)Z--}else for(;Z>h&&i[Z]<10;)Z--;Z>h?b(++Z):(2==i[Z=d+l]&&Z--,b(Z-g))}else{for(;Z!=d-1&&i[Z]!=t;Z--);if(Z>d){b(Z);continue}for(Z=d+l;Z39&&s<48||s>57&&s<64?a.push(9):s>=4352&&i(s)?a.push(1,2):a.push(1)}return a},this.$getStringScreenWidth=function(t,e,l){if(0==e)return[0,0];var a,n;for(null==e&&(e=1/0),l=l||0,n=0;n=4352&&i(a)?l+=2:l+=1,!(l>e));n++);return[l,n]},this.lineWidgets=null,this.getRowLength=function(t){if(this.lineWidgets)var e=this.lineWidgets[t]&&this.lineWidgets[t].rowCount||0;else e=0;return this.$useWrapMode&&this.$wrapData[t]?this.$wrapData[t].length+1+e:1+e},this.getRowLineCount=function(t){return this.$useWrapMode&&this.$wrapData[t]?this.$wrapData[t].length+1:1},this.getRowWrapIndent=function(t){if(this.$useWrapMode){var e=this.screenToDocumentPosition(t,Number.MAX_VALUE),i=this.$wrapData[e.row];return i.length&&i[0]=0){s=c[o],a=this.$docRowCache[o];var r=t>c[m-1]}else r=!m;for(var b=this.getLength()-1,g=this.getNextFoldLine(a),Z=g?g.start.row:1/0;s<=t&&!(s+(d=this.getRowLength(a))>t||a>=b);)s+=d,++a>Z&&(a=g.end.row+1,Z=(g=this.getNextFoldLine(a,g))?g.start.row:1/0),r&&(this.$docRowCache.push(a),this.$screenRowCache.push(s));if(g&&g.start.row<=a)i=this.getFoldDisplayLine(g),a=g.start.row;else{if(s+d<=t||a>b)return{row:b,column:this.getLine(b).length};i=this.getLine(a),g=null}var h=0;if(this.$useWrapMode){var W=this.$wrapData[a];if(W){var N=Math.floor(t-s);l=W[N],N>0&&W.length&&(h=W.indent,n=W[N-1]||W[W.length-1],i=i.substring(n))}}return n+=this.$getStringScreenWidth(i,e-h)[1],this.$useWrapMode&&n>=l&&(n=l-1),g?g.idxToPosition(n):{row:a,column:n}},this.documentToScreenPosition=function(t,e){if(void 0===e)var i=this.$clipPositionToDocument(t.row,t.column);else i=this.$clipPositionToDocument(t,e);t=i.row,e=i.column;var l,a=0,n=null;(l=this.getFoldAt(t,e,1))&&(t=l.start.row,e=l.start.column);var s,d=0,c=this.$docRowCache,o=this.$getRowCacheIndex(c,t),m=c.length;if(m&&o>=0){d=c[o],a=this.$screenRowCache[o];var r=t>c[m-1]}else r=!m;for(var b=this.getNextFoldLine(d),g=b?b.start.row:1/0;d=g){if((s=b.end.row+1)>t)break;g=(b=this.getNextFoldLine(s,b))?b.start.row:1/0}else s=d+1;a+=this.getRowLength(d),d=s,r&&(this.$docRowCache.push(d),this.$screenRowCache.push(a))}var Z="";b&&d>=g?(Z=this.getFoldDisplayLine(b,t,e),n=b.start.row):(Z=this.getLine(t).substring(0,e),n=t);var h=0;if(this.$useWrapMode){var W=this.$wrapData[n];if(W){for(var N=0;Z.length>=W[N];)a++,N++;Z=Z.substring(W[N-1]||0,Z.length),h=N>0?W.indent:0}}return{row:a,column:h+this.$getStringScreenWidth(Z)[0]}},this.documentToScreenColumn=function(t,e){return this.documentToScreenPosition(t,e).column},this.documentToScreenRow=function(t,e){return this.documentToScreenPosition(t,e).row},this.getScreenLength=function(){var t=0,e=null;if(this.$useWrapMode)for(var i=this.$wrapData.length,l=0,a=(d=0,(e=this.$foldData[d++])?e.start.row:1/0);la&&(l=e.end.row+1,a=(e=this.$foldData[d++])?e.start.row:1/0)}else{t=this.getLength();for(var s=this.$foldData,d=0;di);n++);return[l,n]})},this.destroy=function(){this.bgTokenizer&&(this.bgTokenizer.setDocument(null),this.bgTokenizer=null),this.$stopWorker()}}).call(g.prototype),t("./edit_session/folding").Folding.call(g.prototype),t("./edit_session/bracket_match").BracketMatch.call(g.prototype),n.defineOptions(g.prototype,"session",{wrap:{set:function(t){if(t&&"off"!=t?"free"==t?t=!0:"printMargin"==t?t=-1:"string"==typeof t&&(t=parseInt(t,10)||!1):t=!1,this.$wrap!=t)if(this.$wrap=t,t){var e="number"==typeof t?t:null;this.setWrapLimitRange(e,e),this.setUseWrapMode(!0)}else this.setUseWrapMode(!1)},get:function(){return this.getUseWrapMode()?-1==this.$wrap?"printMargin":this.getWrapLimitRange().min?this.$wrap:"free":"off"},handlesSet:!0},wrapMethod:{set:function(t){(t="auto"==t?"text"!=this.$mode.type:"text"!=t)!=this.$wrapAsCode&&(this.$wrapAsCode=t,this.$useWrapMode&&(this.$modified=!0,this.$resetRowCache(0),this.$updateWrapData(0,this.getLength()-1)))},initialValue:"auto"},indentedSoftWrap:{initialValue:!0},firstLineNumber:{set:function(){this._signal("changeBreakpoint")},initialValue:1},useWorker:{set:function(t){this.$useWorker=t,this.$stopWorker(),t&&this.$startWorker()},initialValue:!0},useSoftTabs:{initialValue:!0},tabSize:{set:function(t){isNaN(t)||this.$tabSize===t||(this.$modified=!0,this.$rowLengthCache=[],this.$tabSize=t,this._signal("changeTabSize"))},initialValue:4,handlesSet:!0},overwrite:{set:function(t){this._signal("changeOverwrite")},initialValue:!1},newLineMode:{set:function(t){this.doc.setNewLineMode(t)},get:function(){return this.doc.getNewLineMode()},handlesSet:!0},mode:{set:function(t){this.setMode(t)},get:function(){return this.$modeId}}}),e.EditSession=g})),ace.define("ace/search",["require","exports","module","ace/lib/lang","ace/lib/oop","ace/range"],(function(t,e,i){"use strict";var l=t("./lib/lang"),a=t("./lib/oop"),n=t("./range").Range,s=function(){this.$options={}};(function(){this.set=function(t){return a.mixin(this.$options,t),this},this.getOptions=function(){return l.copyObject(this.$options)},this.setOptions=function(t){this.$options=t},this.find=function(t){var e=this.$options,i=this.$matchIterator(t,e);if(!i)return!1;var l=null;return i.forEach((function(t,i,a){if(t.start)l=t;else{var s=t.offset+(a||0);if(l=new n(i,s,i,s+t.length),!t.length&&e.start&&e.start.start&&0!=e.skipCurrent&&l.isEqual(e.start))return l=null,!1}return!0})),l},this.findAll=function(t){var e=this.$options;if(!e.needle)return[];this.$assembleRegExp(e);var i=e.range,a=i?t.getLines(i.start.row,i.end.row):t.doc.getAllLines(),s=[],d=e.re;if(e.$isMultiLine){var c,o=d.length,m=a.length-o;t:for(var r=d.offset||0;r<=m;r++){for(var b=0;bh||(s.push(c=new n(r,h,r+o-1,W)),o>2&&(r=r+o-2))}}else for(var N=0;NG&&s[b].end.row==i.end.row;)b--;for(s=s.slice(N,b+1),N=0,b=s.length;N=0;d--)if(i(s[d],e,n))return!0}:function(t,e,n){for(var s=l.getMatchOffsets(t,a),d=0;d=s;l--)if(i(t.getLine(l),l))return;if(0!=e.wrap)for(l=d,s=n.row;l>=s;l--)if(i(t.getLine(l),l))return}}:function(i){var l=n.row;if(!i(t.getLine(l).substr(n.column),l,n.column)){for(l+=1;l<=d;l++)if(i(t.getLine(l),l))return;if(0!=e.wrap)for(l=s,d=n.row;l<=d;l++)if(i(t.getLine(l),l))return}}}}}).call(s.prototype),e.Search=s})),ace.define("ace/keyboard/hash_handler",["require","exports","module","ace/lib/keys","ace/lib/useragent"],(function(t,e,i){"use strict";var l=t("../lib/keys"),a=t("../lib/useragent"),n=l.KEY_MODS;function s(t,e){this.platform=e||(a.isMac?"mac":"win"),this.commands={},this.commandKeyBinding={},this.addCommands(t),this.$singleCommand=!0}function d(t,e){s.call(this,t,e),this.$singleCommand=!1}d.prototype=s.prototype,function(){function t(t){return"object"==typeof t&&t.bindKey&&t.bindKey.position||0}this.addCommand=function(t){this.commands[t.name]&&this.removeCommand(t),this.commands[t.name]=t,t.bindKey&&this._buildKeyHash(t)},this.removeCommand=function(t,e){var i=t&&("string"==typeof t?t:t.name);t=this.commands[i],e||delete this.commands[i];var l=this.commandKeyBinding;for(var a in l){var n=l[a];if(n==t)delete l[a];else if(Array.isArray(n)){var s=n.indexOf(t);-1!=s&&(n.splice(s,1),1==n.length&&(l[a]=n[0]))}}},this.bindKey=function(t,e,i){if("object"==typeof t&&t&&(null==i&&(i=t.position),t=t[this.platform]),t)return"function"==typeof e?this.addCommand({exec:e,bindKey:t,name:e.name||t}):void t.split("|").forEach((function(t){var l="";if(-1!=t.indexOf(" ")){var a=t.split(/\s+/);t=a.pop(),a.forEach((function(t){var e=this.parseKeys(t),i=n[e.hashId]+e.key;l+=(l?" ":"")+i,this._addCommandToBinding(l,"chainKeys")}),this),l+=" "}var s=this.parseKeys(t),d=n[s.hashId]+s.key;this._addCommandToBinding(l+d,e,i)}),this)},this._addCommandToBinding=function(e,i,l){var a,n=this.commandKeyBinding;if(i)if(!n[e]||this.$singleCommand)n[e]=i;else{Array.isArray(n[e])?-1!=(a=n[e].indexOf(i))&&n[e].splice(a,1):n[e]=[n[e]],"number"!=typeof l&&(l=l||i.isDefault?-100:t(i));var s=n[e];for(a=0;al);a++);s.splice(a,0,i)}else delete n[e]},this.addCommands=function(t){t&&Object.keys(t).forEach((function(e){var i=t[e];if(i){if("string"==typeof i)return this.bindKey(i,e);"function"==typeof i&&(i={exec:i}),"object"==typeof i&&(i.name||(i.name=e),this.addCommand(i))}}),this)},this.removeCommands=function(t){Object.keys(t).forEach((function(e){this.removeCommand(t[e])}),this)},this.bindKeys=function(t){Object.keys(t).forEach((function(e){this.bindKey(e,t[e])}),this)},this._buildKeyHash=function(t){this.bindKey(t.bindKey,t)},this.parseKeys=function(t){var e=t.toLowerCase().split(/[\-\+]([\-\+])?/).filter((function(t){return t})),i=e.pop(),a=l[i];if(l.FUNCTION_KEYS[a])i=l.FUNCTION_KEYS[a].toLowerCase();else{if(!e.length)return{key:i,hashId:-1};if(1==e.length&&"shift"==e[0])return{key:i.toUpperCase(),hashId:-1}}for(var n=0,s=e.length;s--;){var d=l.KEY_MODS[e[s]];if(null==d)return"undefined"!=typeof console&&console.error("invalid modifier "+e[s]+" in "+t),!1;n|=d}return{key:i,hashId:n}},this.findKeyCommand=function(t,e){var i=n[t]+e;return this.commandKeyBinding[i]},this.handleKeyboard=function(t,e,i,l){if(!(l<0)){var a=n[e]+i,s=this.commandKeyBinding[a];return t.$keyChain&&(t.$keyChain+=" "+a,s=this.commandKeyBinding[t.$keyChain]||s),!s||"chainKeys"!=s&&"chainKeys"!=s[s.length-1]?(t.$keyChain&&(e&&4!=e||1!=i.length?(-1==e||l>0)&&(t.$keyChain=""):t.$keyChain=t.$keyChain.slice(0,-a.length-1)),{command:s}):(t.$keyChain=t.$keyChain||a,{command:"null"})}},this.getStatusText=function(t,e){return e.$keyChain||""}}.call(s.prototype),e.HashHandler=s,e.MultiHashHandler=d})),ace.define("ace/commands/command_manager",["require","exports","module","ace/lib/oop","ace/keyboard/hash_handler","ace/lib/event_emitter"],(function(t,e,i){"use strict";var l=t("../lib/oop"),a=t("../keyboard/hash_handler").MultiHashHandler,n=t("../lib/event_emitter").EventEmitter,s=function(t,e){a.call(this,e,t),this.byName=this.commands,this.setDefaultHandler("exec",(function(t){return t.command.exec(t.editor,t.args||{})}))};l.inherits(s,a),function(){l.implement(this,n),this.exec=function(t,e,i){if(Array.isArray(t)){for(var l=t.length;l--;)if(this.exec(t[l],e,i))return!0;return!1}if("string"==typeof t&&(t=this.commands[t]),!t)return!1;if(e&&e.$readOnly&&!t.readOnly)return!1;var a={editor:e,command:t,args:i};return a.returnValue=this._emit("exec",a),this._signal("afterExec",a),!1!==a.returnValue},this.toggleRecording=function(t){if(!this.$inReplay)return t&&t._emit("changeStatus"),this.recording?(this.macro.pop(),this.removeEventListener("exec",this.$addCommandToMacro),this.macro.length||(this.macro=this.oldMacro),this.recording=!1):(this.$addCommandToMacro||(this.$addCommandToMacro=function(t){this.macro.push([t.command,t.args])}.bind(this)),this.oldMacro=this.macro,this.macro=[],this.on("exec",this.$addCommandToMacro),this.recording=!0)},this.replay=function(t){if(!this.$inReplay&&this.macro){if(this.recording)return this.toggleRecording(t);try{this.$inReplay=!0,this.macro.forEach((function(e){"string"==typeof e?this.exec(e,t):this.exec(e[0],t,e[1])}),this)}finally{this.$inReplay=!1}}},this.trimMacro=function(t){return t.map((function(t){return"string"!=typeof t[0]&&(t[0]=t[0].name),t[1]||(t=t[0]),t}))}}.call(s.prototype),e.CommandManager=s})),ace.define("ace/commands/default_commands",["require","exports","module","ace/lib/lang","ace/config","ace/range"],(function(t,e,i){"use strict";var l=t("../lib/lang"),a=t("../config"),n=t("../range").Range;function s(t,e){return{win:t,mac:e}}e.commands=[{name:"showSettingsMenu",bindKey:s("Ctrl-,","Command-,"),exec:function(t){a.loadModule("ace/ext/settings_menu",(function(e){e.init(t),t.showSettingsMenu()}))},readOnly:!0},{name:"goToNextError",bindKey:s("Alt-E","Ctrl-E"),exec:function(t){a.loadModule("ace/ext/error_marker",(function(e){e.showErrorMarker(t,1)}))},scrollIntoView:"animate",readOnly:!0},{name:"goToPreviousError",bindKey:s("Alt-Shift-E","Ctrl-Shift-E"),exec:function(t){a.loadModule("ace/ext/error_marker",(function(e){e.showErrorMarker(t,-1)}))},scrollIntoView:"animate",readOnly:!0},{name:"selectall",bindKey:s("Ctrl-A","Command-A"),exec:function(t){t.selectAll()},readOnly:!0},{name:"centerselection",bindKey:s(null,"Ctrl-L"),exec:function(t){t.centerSelection()},readOnly:!0},{name:"gotoline",bindKey:s("Ctrl-L","Command-L"),exec:function(t){var e=parseInt(prompt("Enter line number:"),10);isNaN(e)||t.gotoLine(e)},readOnly:!0},{name:"fold",bindKey:s("Alt-L|Ctrl-F1","Command-Alt-L|Command-F1"),exec:function(t){t.session.toggleFold(!1)},multiSelectAction:"forEach",scrollIntoView:"center",readOnly:!0},{name:"unfold",bindKey:s("Alt-Shift-L|Ctrl-Shift-F1","Command-Alt-Shift-L|Command-Shift-F1"),exec:function(t){t.session.toggleFold(!0)},multiSelectAction:"forEach",scrollIntoView:"center",readOnly:!0},{name:"toggleFoldWidget",bindKey:s("F2","F2"),exec:function(t){t.session.toggleFoldWidget()},multiSelectAction:"forEach",scrollIntoView:"center",readOnly:!0},{name:"toggleParentFoldWidget",bindKey:s("Alt-F2","Alt-F2"),exec:function(t){t.session.toggleFoldWidget(!0)},multiSelectAction:"forEach",scrollIntoView:"center",readOnly:!0},{name:"foldall",bindKey:s(null,"Ctrl-Command-Option-0"),exec:function(t){t.session.foldAll()},scrollIntoView:"center",readOnly:!0},{name:"foldOther",bindKey:s("Alt-0","Command-Option-0"),exec:function(t){t.session.foldAll(),t.session.unfold(t.selection.getAllRanges())},scrollIntoView:"center",readOnly:!0},{name:"unfoldall",bindKey:s("Alt-Shift-0","Command-Option-Shift-0"),exec:function(t){t.session.unfold()},scrollIntoView:"center",readOnly:!0},{name:"findnext",bindKey:s("Ctrl-K","Command-G"),exec:function(t){t.findNext()},multiSelectAction:"forEach",scrollIntoView:"center",readOnly:!0},{name:"findprevious",bindKey:s("Ctrl-Shift-K","Command-Shift-G"),exec:function(t){t.findPrevious()},multiSelectAction:"forEach",scrollIntoView:"center",readOnly:!0},{name:"selectOrFindNext",bindKey:s("Alt-K","Ctrl-G"),exec:function(t){t.selection.isEmpty()?t.selection.selectWord():t.findNext()},readOnly:!0},{name:"selectOrFindPrevious",bindKey:s("Alt-Shift-K","Ctrl-Shift-G"),exec:function(t){t.selection.isEmpty()?t.selection.selectWord():t.findPrevious()},readOnly:!0},{name:"find",bindKey:s("Ctrl-F","Command-F"),exec:function(t){a.loadModule("ace/ext/searchbox",(function(e){e.Search(t)}))},readOnly:!0},{name:"overwrite",bindKey:"Insert",exec:function(t){t.toggleOverwrite()},readOnly:!0},{name:"selecttostart",bindKey:s("Ctrl-Shift-Home","Command-Shift-Up"),exec:function(t){t.getSelection().selectFileStart()},multiSelectAction:"forEach",readOnly:!0,scrollIntoView:"animate",aceCommandGroup:"fileJump"},{name:"gotostart",bindKey:s("Ctrl-Home","Command-Home|Command-Up"),exec:function(t){t.navigateFileStart()},multiSelectAction:"forEach",readOnly:!0,scrollIntoView:"animate",aceCommandGroup:"fileJump"},{name:"selectup",bindKey:s("Shift-Up","Shift-Up"),exec:function(t){t.getSelection().selectUp()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"golineup",bindKey:s("Up","Up|Ctrl-P"),exec:function(t,e){t.navigateUp(e.times)},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"selecttoend",bindKey:s("Ctrl-Shift-End","Command-Shift-Down"),exec:function(t){t.getSelection().selectFileEnd()},multiSelectAction:"forEach",readOnly:!0,scrollIntoView:"animate",aceCommandGroup:"fileJump"},{name:"gotoend",bindKey:s("Ctrl-End","Command-End|Command-Down"),exec:function(t){t.navigateFileEnd()},multiSelectAction:"forEach",readOnly:!0,scrollIntoView:"animate",aceCommandGroup:"fileJump"},{name:"selectdown",bindKey:s("Shift-Down","Shift-Down"),exec:function(t){t.getSelection().selectDown()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"golinedown",bindKey:s("Down","Down|Ctrl-N"),exec:function(t,e){t.navigateDown(e.times)},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"selectwordleft",bindKey:s("Ctrl-Shift-Left","Option-Shift-Left"),exec:function(t){t.getSelection().selectWordLeft()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"gotowordleft",bindKey:s("Ctrl-Left","Option-Left"),exec:function(t){t.navigateWordLeft()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"selecttolinestart",bindKey:s("Alt-Shift-Left","Command-Shift-Left"),exec:function(t){t.getSelection().selectLineStart()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"gotolinestart",bindKey:s("Alt-Left|Home","Command-Left|Home|Ctrl-A"),exec:function(t){t.navigateLineStart()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"selectleft",bindKey:s("Shift-Left","Shift-Left"),exec:function(t){t.getSelection().selectLeft()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"gotoleft",bindKey:s("Left","Left|Ctrl-B"),exec:function(t,e){t.navigateLeft(e.times)},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"selectwordright",bindKey:s("Ctrl-Shift-Right","Option-Shift-Right"),exec:function(t){t.getSelection().selectWordRight()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"gotowordright",bindKey:s("Ctrl-Right","Option-Right"),exec:function(t){t.navigateWordRight()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"selecttolineend",bindKey:s("Alt-Shift-Right","Command-Shift-Right"),exec:function(t){t.getSelection().selectLineEnd()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"gotolineend",bindKey:s("Alt-Right|End","Command-Right|End|Ctrl-E"),exec:function(t){t.navigateLineEnd()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"selectright",bindKey:s("Shift-Right","Shift-Right"),exec:function(t){t.getSelection().selectRight()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"gotoright",bindKey:s("Right","Right|Ctrl-F"),exec:function(t,e){t.navigateRight(e.times)},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"selectpagedown",bindKey:"Shift-PageDown",exec:function(t){t.selectPageDown()},readOnly:!0},{name:"pagedown",bindKey:s(null,"Option-PageDown"),exec:function(t){t.scrollPageDown()},readOnly:!0},{name:"gotopagedown",bindKey:s("PageDown","PageDown|Ctrl-V"),exec:function(t){t.gotoPageDown()},readOnly:!0},{name:"selectpageup",bindKey:"Shift-PageUp",exec:function(t){t.selectPageUp()},readOnly:!0},{name:"pageup",bindKey:s(null,"Option-PageUp"),exec:function(t){t.scrollPageUp()},readOnly:!0},{name:"gotopageup",bindKey:"PageUp",exec:function(t){t.gotoPageUp()},readOnly:!0},{name:"scrollup",bindKey:s("Ctrl-Up",null),exec:function(t){t.renderer.scrollBy(0,-2*t.renderer.layerConfig.lineHeight)},readOnly:!0},{name:"scrolldown",bindKey:s("Ctrl-Down",null),exec:function(t){t.renderer.scrollBy(0,2*t.renderer.layerConfig.lineHeight)},readOnly:!0},{name:"selectlinestart",bindKey:"Shift-Home",exec:function(t){t.getSelection().selectLineStart()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"selectlineend",bindKey:"Shift-End",exec:function(t){t.getSelection().selectLineEnd()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"togglerecording",bindKey:s("Ctrl-Alt-E","Command-Option-E"),exec:function(t){t.commands.toggleRecording(t)},readOnly:!0},{name:"replaymacro",bindKey:s("Ctrl-Shift-E","Command-Shift-E"),exec:function(t){t.commands.replay(t)},readOnly:!0},{name:"jumptomatching",bindKey:s("Ctrl-P","Ctrl-P"),exec:function(t){t.jumpToMatching()},multiSelectAction:"forEach",scrollIntoView:"animate",readOnly:!0},{name:"selecttomatching",bindKey:s("Ctrl-Shift-P","Ctrl-Shift-P"),exec:function(t){t.jumpToMatching(!0)},multiSelectAction:"forEach",scrollIntoView:"animate",readOnly:!0},{name:"expandToMatching",bindKey:s("Ctrl-Shift-M","Ctrl-Shift-M"),exec:function(t){t.jumpToMatching(!0,!0)},multiSelectAction:"forEach",scrollIntoView:"animate",readOnly:!0},{name:"passKeysToBrowser",bindKey:s(null,null),exec:function(){},passEvent:!0,readOnly:!0},{name:"copy",exec:function(t){},readOnly:!0},{name:"cut",exec:function(t){var e=t.getSelectionRange();t._emit("cut",e),t.selection.isEmpty()||(t.session.remove(e),t.clearSelection())},scrollIntoView:"cursor",multiSelectAction:"forEach"},{name:"paste",exec:function(t,e){t.$handlePaste(e)},scrollIntoView:"cursor"},{name:"removeline",bindKey:s("Ctrl-D","Command-D"),exec:function(t){t.removeLines()},scrollIntoView:"cursor",multiSelectAction:"forEachLine"},{name:"duplicateSelection",bindKey:s("Ctrl-Shift-D","Command-Shift-D"),exec:function(t){t.duplicateSelection()},scrollIntoView:"cursor",multiSelectAction:"forEach"},{name:"sortlines",bindKey:s("Ctrl-Alt-S","Command-Alt-S"),exec:function(t){t.sortLines()},scrollIntoView:"selection",multiSelectAction:"forEachLine"},{name:"togglecomment",bindKey:s("Ctrl-/","Command-/"),exec:function(t){t.toggleCommentLines()},multiSelectAction:"forEachLine",scrollIntoView:"selectionPart"},{name:"toggleBlockComment",bindKey:s("Ctrl-Shift-/","Command-Shift-/"),exec:function(t){t.toggleBlockComment()},multiSelectAction:"forEach",scrollIntoView:"selectionPart"},{name:"modifyNumberUp",bindKey:s("Ctrl-Shift-Up","Alt-Shift-Up"),exec:function(t){t.modifyNumber(1)},scrollIntoView:"cursor",multiSelectAction:"forEach"},{name:"modifyNumberDown",bindKey:s("Ctrl-Shift-Down","Alt-Shift-Down"),exec:function(t){t.modifyNumber(-1)},scrollIntoView:"cursor",multiSelectAction:"forEach"},{name:"replace",bindKey:s("Ctrl-H","Command-Option-F"),exec:function(t){a.loadModule("ace/ext/searchbox",(function(e){e.Search(t,!0)}))}},{name:"undo",bindKey:s("Ctrl-Z","Command-Z"),exec:function(t){t.undo()}},{name:"redo",bindKey:s("Ctrl-Shift-Z|Ctrl-Y","Command-Shift-Z|Command-Y"),exec:function(t){t.redo()}},{name:"copylinesup",bindKey:s("Alt-Shift-Up","Command-Option-Up"),exec:function(t){t.copyLinesUp()},scrollIntoView:"cursor"},{name:"movelinesup",bindKey:s("Alt-Up","Option-Up"),exec:function(t){t.moveLinesUp()},scrollIntoView:"cursor"},{name:"copylinesdown",bindKey:s("Alt-Shift-Down","Command-Option-Down"),exec:function(t){t.copyLinesDown()},scrollIntoView:"cursor"},{name:"movelinesdown",bindKey:s("Alt-Down","Option-Down"),exec:function(t){t.moveLinesDown()},scrollIntoView:"cursor"},{name:"del",bindKey:s("Delete","Delete|Ctrl-D|Shift-Delete"),exec:function(t){t.remove("right")},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"backspace",bindKey:s("Shift-Backspace|Backspace","Ctrl-Backspace|Shift-Backspace|Backspace|Ctrl-H"),exec:function(t){t.remove("left")},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"cut_or_delete",bindKey:s("Shift-Delete",null),exec:function(t){if(!t.selection.isEmpty())return!1;t.remove("left")},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"removetolinestart",bindKey:s("Alt-Backspace","Command-Backspace"),exec:function(t){t.removeToLineStart()},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"removetolineend",bindKey:s("Alt-Delete","Ctrl-K"),exec:function(t){t.removeToLineEnd()},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"removewordleft",bindKey:s("Ctrl-Backspace","Alt-Backspace|Ctrl-Alt-Backspace"),exec:function(t){t.removeWordLeft()},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"removewordright",bindKey:s("Ctrl-Delete","Alt-Delete"),exec:function(t){t.removeWordRight()},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"outdent",bindKey:s("Shift-Tab","Shift-Tab"),exec:function(t){t.blockOutdent()},multiSelectAction:"forEach",scrollIntoView:"selectionPart"},{name:"indent",bindKey:s("Tab","Tab"),exec:function(t){t.indent()},multiSelectAction:"forEach",scrollIntoView:"selectionPart"},{name:"blockoutdent",bindKey:s("Ctrl-[","Ctrl-["),exec:function(t){t.blockOutdent()},multiSelectAction:"forEachLine",scrollIntoView:"selectionPart"},{name:"blockindent",bindKey:s("Ctrl-]","Ctrl-]"),exec:function(t){t.blockIndent()},multiSelectAction:"forEachLine",scrollIntoView:"selectionPart"},{name:"insertstring",exec:function(t,e){t.insert(e)},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"inserttext",exec:function(t,e){t.insert(l.stringRepeat(e.text||"",e.times||1))},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"splitline",bindKey:s(null,"Ctrl-O"),exec:function(t){t.splitLine()},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"transposeletters",bindKey:s("Ctrl-T","Ctrl-T"),exec:function(t){t.transposeLetters()},multiSelectAction:function(t){t.transposeSelections(1)},scrollIntoView:"cursor"},{name:"touppercase",bindKey:s("Ctrl-U","Ctrl-U"),exec:function(t){t.toUpperCase()},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"tolowercase",bindKey:s("Ctrl-Shift-U","Ctrl-Shift-U"),exec:function(t){t.toLowerCase()},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"expandtoline",bindKey:s("Ctrl-Shift-L","Command-Shift-L"),exec:function(t){var e=t.selection.getRange();e.start.column=e.end.column=0,e.end.row++,t.selection.setRange(e,!1)},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"joinlines",bindKey:s(null,null),exec:function(t){for(var e=t.selection.isBackwards(),i=e?t.selection.getSelectionLead():t.selection.getSelectionAnchor(),a=e?t.selection.getSelectionAnchor():t.selection.getSelectionLead(),s=t.session.doc.getLine(i.row).length,d=t.session.doc.getTextRange(t.selection.getRange()).replace(/\n\s*/," ").length,c=t.session.doc.getLine(i.row),o=i.row+1;o<=a.row+1;o++){var m=l.stringTrimLeft(l.stringTrimRight(t.session.doc.getLine(o)));0!==m.length&&(m=" "+m),c+=m}a.row+10?(t.selection.moveCursorTo(i.row,i.column),t.selection.selectTo(i.row,i.column+d)):(s=t.session.doc.getLine(i.row).length>s?s+1:s,t.selection.moveCursorTo(i.row,s))},multiSelectAction:"forEach",readOnly:!0},{name:"invertSelection",bindKey:s(null,null),exec:function(t){var e=t.session.doc.getLength()-1,i=t.session.doc.getLine(e).length,l=t.selection.rangeList.ranges,a=[];l.length<1&&(l=[t.selection.getRange()]);for(var s=0;s0&&this.$blockScrolling--;var i=e&&e.scrollIntoView;if(i){switch(i){case"center-animate":i="animate";case"center":this.renderer.scrollCursorIntoView(null,.5);break;case"animate":case"cursor":this.renderer.scrollCursorIntoView();break;case"selectionPart":var l=this.selection.getRange(),a=this.renderer.layerConfig;(l.start.row>=a.lastRow||l.end.row<=a.firstRow)&&this.renderer.scrollSelectionIntoView(this.selection.anchor,this.selection.lead)}"animate"==i&&this.renderer.animateScrolling(this.curOp.scrollTop)}this.prevOp=this.curOp,this.curOp=null}},this.$mergeableCommands=["backspace","del","insertstring"],this.$historyTracker=function(t){if(this.$mergeUndoDeltas){var e=this.prevOp,i=this.$mergeableCommands,l=e.command&&t.command.name==e.command.name;if("insertstring"==t.command.name){var a=t.args;void 0===this.mergeNextCommand&&(this.mergeNextCommand=!0),l=l&&this.mergeNextCommand&&(!/\s/.test(a)||/\s/.test(e.args)),this.mergeNextCommand=!0}else l=l&&-1!==i.indexOf(t.command.name);"always"!=this.$mergeUndoDeltas&&Date.now()-this.sequenceStartTime>2e3&&(l=!1),l?this.session.mergeUndoDeltas=!0:-1!==i.indexOf(t.command.name)&&(this.sequenceStartTime=Date.now())}},this.setKeyboardHandler=function(t,e){if(t&&"string"==typeof t){this.$keybindingId=t;var i=this;N.loadModule(["keybinding",t],(function(l){i.$keybindingId==t&&i.keyBinding.setKeyboardHandler(l&&l.handler),e&&e()}))}else this.$keybindingId=null,this.keyBinding.setKeyboardHandler(t),e&&e()},this.getKeyboardHandler=function(){return this.keyBinding.getKeyboardHandler()},this.setSession=function(t){if(this.session!=t){this.curOp&&this.endOperation(),this.curOp={};var e=this.session;if(e){this.session.off("change",this.$onDocumentChange),this.session.off("changeMode",this.$onChangeMode),this.session.off("tokenizerUpdate",this.$onTokenizerUpdate),this.session.off("changeTabSize",this.$onChangeTabSize),this.session.off("changeWrapLimit",this.$onChangeWrapLimit),this.session.off("changeWrapMode",this.$onChangeWrapMode),this.session.off("changeFold",this.$onChangeFold),this.session.off("changeFrontMarker",this.$onChangeFrontMarker),this.session.off("changeBackMarker",this.$onChangeBackMarker),this.session.off("changeBreakpoint",this.$onChangeBreakpoint),this.session.off("changeAnnotation",this.$onChangeAnnotation),this.session.off("changeOverwrite",this.$onCursorChange),this.session.off("changeScrollTop",this.$onScrollTopChange),this.session.off("changeScrollLeft",this.$onScrollLeftChange);var i=this.session.getSelection();i.off("changeCursor",this.$onCursorChange),i.off("changeSelection",this.$onSelectionChange)}this.session=t,t?(this.$onDocumentChange=this.onDocumentChange.bind(this),t.on("change",this.$onDocumentChange),this.renderer.setSession(t),this.$onChangeMode=this.onChangeMode.bind(this),t.on("changeMode",this.$onChangeMode),this.$onTokenizerUpdate=this.onTokenizerUpdate.bind(this),t.on("tokenizerUpdate",this.$onTokenizerUpdate),this.$onChangeTabSize=this.renderer.onChangeTabSize.bind(this.renderer),t.on("changeTabSize",this.$onChangeTabSize),this.$onChangeWrapLimit=this.onChangeWrapLimit.bind(this),t.on("changeWrapLimit",this.$onChangeWrapLimit),this.$onChangeWrapMode=this.onChangeWrapMode.bind(this),t.on("changeWrapMode",this.$onChangeWrapMode),this.$onChangeFold=this.onChangeFold.bind(this),t.on("changeFold",this.$onChangeFold),this.$onChangeFrontMarker=this.onChangeFrontMarker.bind(this),this.session.on("changeFrontMarker",this.$onChangeFrontMarker),this.$onChangeBackMarker=this.onChangeBackMarker.bind(this),this.session.on("changeBackMarker",this.$onChangeBackMarker),this.$onChangeBreakpoint=this.onChangeBreakpoint.bind(this),this.session.on("changeBreakpoint",this.$onChangeBreakpoint),this.$onChangeAnnotation=this.onChangeAnnotation.bind(this),this.session.on("changeAnnotation",this.$onChangeAnnotation),this.$onCursorChange=this.onCursorChange.bind(this),this.session.on("changeOverwrite",this.$onCursorChange),this.$onScrollTopChange=this.onScrollTopChange.bind(this),this.session.on("changeScrollTop",this.$onScrollTopChange),this.$onScrollLeftChange=this.onScrollLeftChange.bind(this),this.session.on("changeScrollLeft",this.$onScrollLeftChange),this.selection=t.getSelection(),this.selection.on("changeCursor",this.$onCursorChange),this.$onSelectionChange=this.onSelectionChange.bind(this),this.selection.on("changeSelection",this.$onSelectionChange),this.onChangeMode(),this.$blockScrolling+=1,this.onCursorChange(),this.$blockScrolling-=1,this.onScrollTopChange(),this.onScrollLeftChange(),this.onSelectionChange(),this.onChangeFrontMarker(),this.onChangeBackMarker(),this.onChangeBreakpoint(),this.onChangeAnnotation(),this.session.getUseWrapMode()&&this.renderer.adjustWrapLimit(),this.renderer.updateFull()):(this.selection=null,this.renderer.setSession(t)),this._signal("changeSession",{session:t,oldSession:e}),this.curOp=null,e&&e._signal("changeEditor",{oldEditor:this}),t&&t._signal("changeEditor",{editor:this})}},this.getSession=function(){return this.session},this.setValue=function(t,e){return this.session.doc.setValue(t),e?1==e?this.navigateFileEnd():-1==e&&this.navigateFileStart():this.selectAll(),t},this.getValue=function(){return this.session.getValue()},this.getSelection=function(){return this.selection},this.resize=function(t){this.renderer.onResize(t)},this.setTheme=function(t,e){this.renderer.setTheme(t,e)},this.getTheme=function(){return this.renderer.getTheme()},this.setStyle=function(t){this.renderer.setStyle(t)},this.unsetStyle=function(t){this.renderer.unsetStyle(t)},this.getFontSize=function(){return this.getOption("fontSize")||a.computedStyle(this.container,"fontSize")},this.setFontSize=function(t){this.setOption("fontSize",t)},this.$highlightBrackets=function(){if(this.session.$bracketHighlight&&(this.session.removeMarker(this.session.$bracketHighlight),this.session.$bracketHighlight=null),!this.$highlightPending){var t=this;this.$highlightPending=!0,setTimeout((function(){t.$highlightPending=!1;var e=t.session;if(e&&e.bgTokenizer){var i=e.findMatchingBracket(t.getCursorPosition());if(i)var l=new g(i.row,i.column,i.row,i.column+1);else e.$mode.getMatching&&(l=e.$mode.getMatching(t.session));l&&(e.$bracketHighlight=e.addMarker(l,"ace_bracket","text"))}}),50)}},this.$highlightTags=function(){if(!this.$highlightTagPending){var t=this;this.$highlightTagPending=!0,setTimeout((function(){t.$highlightTagPending=!1;var e=t.session;if(e&&e.bgTokenizer){var i=t.getCursorPosition(),l=new y(t.session,i.row,i.column),a=l.getCurrentToken();if(!a||!/\b(?:tag-open|tag-name)/.test(a.type))return e.removeMarker(e.$tagHighlight),void(e.$tagHighlight=null);if(-1==a.type.indexOf("tag-open")||(a=l.stepForward())){var n=a.value,s=0,d=l.stepBackward();if("<"==d.value)do{d=a,(a=l.stepForward())&&a.value===n&&-1!==a.type.indexOf("tag-name")&&("<"===d.value?s++:"=0);else{do{a=d,d=l.stepBackward(),a&&a.value===n&&-1!==a.type.indexOf("tag-name")&&("<"===d.value?s++:"1||(t=!1)),e.$highlightLineMarker&&!t)e.removeMarker(e.$highlightLineMarker.id),e.$highlightLineMarker=null;else if(!e.$highlightLineMarker&&t){var i=new g(t.row,t.column,t.row,1/0);i.id=e.addMarker(i,"ace_active-line","screenLine"),e.$highlightLineMarker=i}else t&&(e.$highlightLineMarker.start.row=t.row,e.$highlightLineMarker.end.row=t.row,e.$highlightLineMarker.start.column=t.column,e._signal("changeBackMarker"))},this.onSelectionChange=function(t){var e=this.session;if(e.$selectionMarker&&e.removeMarker(e.$selectionMarker),e.$selectionMarker=null,this.selection.isEmpty())this.$updateHighlightActiveLine();else{var i=this.selection.getRange(),l=this.getSelectionStyle();e.$selectionMarker=e.addMarker(i,"ace_selection",l)}var a=this.$highlightSelectedWord&&this.$getSelectionHighLightRegexp();this.session.highlight(a),this._signal("changeSelection")},this.$getSelectionHighLightRegexp=function(){var t=this.session,e=this.getSelectionRange();if(!e.isEmpty()&&!e.isMultiLine()){var i=e.start.column-1,l=e.end.column+1,a=t.getLine(e.start.row),n=a.length,s=a.substring(Math.max(i,0),Math.min(l,n));if(!(i>=0&&/^[\w\d]/.test(s)||l<=n&&/[\w\d]$/.test(s))&&(s=a.substring(e.start.column,e.end.column),/^[\w\d]+$/.test(s)))return this.$search.$assembleRegExp({wholeWord:!0,caseSensitive:!0,needle:s})}},this.onChangeFrontMarker=function(){this.renderer.updateFrontMarkers()},this.onChangeBackMarker=function(){this.renderer.updateBackMarkers()},this.onChangeBreakpoint=function(){this.renderer.updateBreakpoints()},this.onChangeAnnotation=function(){this.renderer.setAnnotations(this.session.getAnnotations())},this.onChangeMode=function(t){this.renderer.updateText(),this._emit("changeMode",t)},this.onChangeWrapLimit=function(){this.renderer.updateFull()},this.onChangeWrapMode=function(){this.renderer.onResize(!0)},this.onChangeFold=function(){this.$updateHighlightActiveLine(),this.renderer.updateFull()},this.getSelectedText=function(){return this.session.getTextRange(this.getSelectionRange())},this.getCopyText=function(){var t=this.getSelectedText();return this._signal("copy",t),t},this.onCopy=function(){this.commands.exec("copy",this)},this.onCut=function(){this.commands.exec("cut",this)},this.onPaste=function(t,e){var i={text:t,event:e};this.commands.exec("paste",this,i)},this.$handlePaste=function(t){"string"==typeof t&&(t={text:t}),this._signal("paste",t);var e=t.text;if(!this.inMultiSelectMode||this.inVirtualSelectionMode)this.insert(e);else{var i=e.split(/\r\n|\r|\n/),l=this.selection.rangeList.ranges;if(i.length>l.length||i.length<2||!i[1])return this.commands.exec("insertstring",this,e);for(var a=l.length;a--;){var n=l[a];n.isEmpty()||this.session.remove(n),this.session.insert(n.start,i[a])}}},this.execCommand=function(t,e){return this.commands.exec(t,this,e)},this.insert=function(t,e){var i=this.session,l=i.getMode(),a=this.getCursorPosition();if(this.getBehavioursEnabled()&&!e){var n=l.transformAction(i.getState(a.row),"insertion",this,i,t);n&&(t!==n.text&&(this.session.mergeUndoDeltas=!1,this.$mergeNextCommand=!1),t=n.text)}if("\t"==t&&(t=this.session.getTabString()),this.selection.isEmpty())this.session.getOverwrite()&&((s=new g.fromPoints(a,a)).end.column+=t.length,this.session.remove(s));else{var s=this.getSelectionRange();a=this.session.remove(s),this.clearSelection()}if("\n"==t||"\r\n"==t){var d=i.getLine(a.row);if(a.column>d.search(/\S|$/)){var c=d.substr(a.column).search(/\S|$/);i.doc.removeInLine(a.row,a.column,a.column+c)}}this.clearSelection();var o=a.column,m=i.getState(a.row),r=(d=i.getLine(a.row),l.checkOutdent(m,d,t));if(i.insert(a,t),n&&n.selection&&(2==n.selection.length?this.selection.setSelectionRange(new g(a.row,o+n.selection[0],a.row,o+n.selection[1])):this.selection.setSelectionRange(new g(a.row+n.selection[0],n.selection[1],a.row+n.selection[2],n.selection[3]))),i.getDocument().isNewLine(t)){var b=l.getNextLineIndent(m,d.slice(0,a.column),i.getTabString());i.insert({row:a.row+1,column:0},b)}r&&l.autoOutdent(m,i,a.row)},this.onTextInput=function(t){this.keyBinding.onTextInput(t)},this.onCommandKey=function(t,e,i){this.keyBinding.onCommandKey(t,e,i)},this.setOverwrite=function(t){this.session.setOverwrite(t)},this.getOverwrite=function(){return this.session.getOverwrite()},this.toggleOverwrite=function(){this.session.toggleOverwrite()},this.setScrollSpeed=function(t){this.setOption("scrollSpeed",t)},this.getScrollSpeed=function(){return this.getOption("scrollSpeed")},this.setDragDelay=function(t){this.setOption("dragDelay",t)},this.getDragDelay=function(){return this.getOption("dragDelay")},this.setSelectionStyle=function(t){this.setOption("selectionStyle",t)},this.getSelectionStyle=function(){return this.getOption("selectionStyle")},this.setHighlightActiveLine=function(t){this.setOption("highlightActiveLine",t)},this.getHighlightActiveLine=function(){return this.getOption("highlightActiveLine")},this.setHighlightGutterLine=function(t){this.setOption("highlightGutterLine",t)},this.getHighlightGutterLine=function(){return this.getOption("highlightGutterLine")},this.setHighlightSelectedWord=function(t){this.setOption("highlightSelectedWord",t)},this.getHighlightSelectedWord=function(){return this.$highlightSelectedWord},this.setAnimatedScroll=function(t){this.renderer.setAnimatedScroll(t)},this.getAnimatedScroll=function(){return this.renderer.getAnimatedScroll()},this.setShowInvisibles=function(t){this.renderer.setShowInvisibles(t)},this.getShowInvisibles=function(){return this.renderer.getShowInvisibles()},this.setDisplayIndentGuides=function(t){this.renderer.setDisplayIndentGuides(t)},this.getDisplayIndentGuides=function(){return this.renderer.getDisplayIndentGuides()},this.setShowPrintMargin=function(t){this.renderer.setShowPrintMargin(t)},this.getShowPrintMargin=function(){return this.renderer.getShowPrintMargin()},this.setPrintMarginColumn=function(t){this.renderer.setPrintMarginColumn(t)},this.getPrintMarginColumn=function(){return this.renderer.getPrintMarginColumn()},this.setReadOnly=function(t){this.setOption("readOnly",t)},this.getReadOnly=function(){return this.getOption("readOnly")},this.setBehavioursEnabled=function(t){this.setOption("behavioursEnabled",t)},this.getBehavioursEnabled=function(){return this.getOption("behavioursEnabled")},this.setWrapBehavioursEnabled=function(t){this.setOption("wrapBehavioursEnabled",t)},this.getWrapBehavioursEnabled=function(){return this.getOption("wrapBehavioursEnabled")},this.setShowFoldWidgets=function(t){this.setOption("showFoldWidgets",t)},this.getShowFoldWidgets=function(){return this.getOption("showFoldWidgets")},this.setFadeFoldWidgets=function(t){this.setOption("fadeFoldWidgets",t)},this.getFadeFoldWidgets=function(){return this.getOption("fadeFoldWidgets")},this.remove=function(t){this.selection.isEmpty()&&("left"==t?this.selection.selectLeft():this.selection.selectRight());var e=this.getSelectionRange();if(this.getBehavioursEnabled()){var i=this.session,l=i.getState(e.start.row),a=i.getMode().transformAction(l,"deletion",this,i,e);if(0===e.end.column){var n=i.getTextRange(e);if("\n"==n[n.length-1]){var s=i.getLine(e.end.row);/^\s+$/.test(s)&&(e.end.column=s.length)}}a&&(e=a)}this.session.remove(e),this.clearSelection()},this.removeWordRight=function(){this.selection.isEmpty()&&this.selection.selectWordRight(),this.session.remove(this.getSelectionRange()),this.clearSelection()},this.removeWordLeft=function(){this.selection.isEmpty()&&this.selection.selectWordLeft(),this.session.remove(this.getSelectionRange()),this.clearSelection()},this.removeToLineStart=function(){this.selection.isEmpty()&&this.selection.selectLineStart(),this.session.remove(this.getSelectionRange()),this.clearSelection()},this.removeToLineEnd=function(){this.selection.isEmpty()&&this.selection.selectLineEnd();var t=this.getSelectionRange();t.start.column==t.end.column&&t.start.row==t.end.row&&(t.end.column=0,t.end.row++),this.session.remove(t),this.clearSelection()},this.splitLine=function(){this.selection.isEmpty()||(this.session.remove(this.getSelectionRange()),this.clearSelection());var t=this.getCursorPosition();this.insert("\n"),this.moveCursorToPosition(t)},this.transposeLetters=function(){if(this.selection.isEmpty()){var t=this.getCursorPosition(),e=t.column;if(0!==e){var i,l,a=this.session.getLine(t.row);ee.toLowerCase()?1:0}));for(var l=new g(0,0,0,0),a=t.first;a<=t.last;a++){var n=e.getLine(a);l.start.row=a,l.end.row=a,l.end.column=n.length,e.replace(l,i[a-t.first])}},this.toggleCommentLines=function(){var t=this.session.getState(this.getCursorPosition().row),e=this.$getSelectedRows();this.session.getMode().toggleCommentLines(t,this.session,e.first,e.last)},this.toggleBlockComment=function(){var t=this.getCursorPosition(),e=this.session.getState(t.row),i=this.getSelectionRange();this.session.getMode().toggleBlockComment(e,this.session,i,t)},this.getNumberAt=function(t,e){var i=/[\-]?[0-9]+(?:\.[0-9]+)?/g;i.lastIndex=0;for(var l=this.session.getLine(t);i.lastIndex=e)return{value:a[0],start:a.index,end:a.index+a[0].length}}return null},this.modifyNumber=function(t){var e=this.selection.getCursor().row,i=this.selection.getCursor().column,l=new g(e,i-1,e,i),a=this.session.getTextRange(l);if(!isNaN(parseFloat(a))&&isFinite(a)){var n=this.getNumberAt(e,i);if(n){var s=n.value.indexOf(".")>=0?n.start+n.value.indexOf(".")+1:n.end,d=n.start+n.value.length-s,c=parseFloat(n.value);c*=Math.pow(10,d),s!==n.end&&ig+1)break;g=Z.last}for(m--,d=this.session.$moveLines(b,g,e?0:t),e&&-1==t&&(r=m+1);r<=m;)s[r].moveBy(d,0),r++;e||(d=0),c+=d}a.fromOrientedRange(a.ranges[0]),a.rangeList.attach(this.session),this.inVirtualSelectionMode=!1}},this.$getSelectedRows=function(t){return t=(t||this.getSelectionRange()).collapseRows(),{first:this.session.getRowFoldStart(t.start.row),last:this.session.getRowFoldEnd(t.end.row)}},this.onCompositionStart=function(t){this.renderer.showComposition(this.getCursorPosition())},this.onCompositionUpdate=function(t){this.renderer.setCompositionText(t)},this.onCompositionEnd=function(){this.renderer.hideComposition()},this.getFirstVisibleRow=function(){return this.renderer.getFirstVisibleRow()},this.getLastVisibleRow=function(){return this.renderer.getLastVisibleRow()},this.isRowVisible=function(t){return t>=this.getFirstVisibleRow()&&t<=this.getLastVisibleRow()},this.isRowFullyVisible=function(t){return t>=this.renderer.getFirstFullyVisibleRow()&&t<=this.renderer.getLastFullyVisibleRow()},this.$getVisibleRowCount=function(){return this.renderer.getScrollBottomRow()-this.renderer.getScrollTopRow()+1},this.$moveByPage=function(t,e){var i=this.renderer,l=this.renderer.layerConfig,a=t*Math.floor(l.height/l.lineHeight);this.$blockScrolling++,!0===e?this.selection.$moveSelection((function(){this.moveCursorBy(a,0)})):!1===e&&(this.selection.moveCursorBy(a,0),this.selection.clearSelection()),this.$blockScrolling--;var n=i.scrollTop;i.scrollBy(0,a*l.lineHeight),null!=e&&i.scrollCursorIntoView(null,.5),i.animateScrolling(n)},this.selectPageDown=function(){this.$moveByPage(1,!0)},this.selectPageUp=function(){this.$moveByPage(-1,!0)},this.gotoPageDown=function(){this.$moveByPage(1,!1)},this.gotoPageUp=function(){this.$moveByPage(-1,!1)},this.scrollPageDown=function(){this.$moveByPage(1)},this.scrollPageUp=function(){this.$moveByPage(-1)},this.scrollToRow=function(t){this.renderer.scrollToRow(t)},this.scrollToLine=function(t,e,i,l){this.renderer.scrollToLine(t,e,i,l)},this.centerSelection=function(){var t=this.getSelectionRange(),e={row:Math.floor(t.start.row+(t.end.row-t.start.row)/2),column:Math.floor(t.start.column+(t.end.column-t.start.column)/2)};this.renderer.alignCursor(e,.5)},this.getCursorPosition=function(){return this.selection.getCursor()},this.getCursorPositionScreen=function(){return this.session.documentToScreenPosition(this.getCursorPosition())},this.getSelectionRange=function(){return this.selection.getRange()},this.selectAll=function(){this.$blockScrolling+=1,this.selection.selectAll(),this.$blockScrolling-=1},this.clearSelection=function(){this.selection.clearSelection()},this.moveCursorTo=function(t,e){this.selection.moveCursorTo(t,e)},this.moveCursorToPosition=function(t){this.selection.moveCursorToPosition(t)},this.jumpToMatching=function(t,e){var i=this.getCursorPosition(),l=new y(this.session,i.row,i.column),a=l.getCurrentToken(),n=a||l.stepForward();if(n){var s,d,c=!1,o={},m=i.column-n.start,r={")":"(","(":"(","]":"[","[":"[","{":"{","}":"{"};do{if(n.value.match(/[{}()\[\]]/g)){for(;m=0;--n)this.$tryReplace(i[n],t)&&l++;return this.selection.setSelectionRange(a),this.$blockScrolling-=1,l},this.$tryReplace=function(t,e){var i=this.session.getTextRange(t);return null!==(e=this.$search.replace(i,e))?(t.end=this.session.replace(t,e),t):null},this.getLastSearchOptions=function(){return this.$search.getOptions()},this.find=function(t,e,i){e||(e={}),"string"==typeof t||t instanceof RegExp?e.needle=t:"object"==typeof t&&l.mixin(e,t);var a=this.selection.getRange();null==e.needle&&((t=this.session.getTextRange(a)||this.$search.$options.needle)||(a=this.session.getWordRange(a.start.row,a.start.column),t=this.session.getTextRange(a)),this.$search.set({needle:t})),this.$search.set(e),e.start||this.$search.set({start:a});var n=this.$search.find(this.session);return e.preventScroll?n:n?(this.revealRange(n,i),n):(e.backwards?a.start=a.end:a.end=a.start,void this.selection.setRange(a))},this.findNext=function(t,e){this.find({skipCurrent:!0,backwards:!1},t,e)},this.findPrevious=function(t,e){this.find(t,{skipCurrent:!0,backwards:!0},e)},this.revealRange=function(t,e){this.$blockScrolling+=1,this.session.unfold(t),this.selection.setSelectionRange(t),this.$blockScrolling-=1;var i=this.renderer.scrollTop;this.renderer.scrollSelectionIntoView(t.start,t.end,.5),!1!==e&&this.renderer.animateScrolling(i)},this.undo=function(){this.$blockScrolling++,this.session.getUndoManager().undo(),this.$blockScrolling--,this.renderer.scrollCursorIntoView(null,.5)},this.redo=function(){this.$blockScrolling++,this.session.getUndoManager().redo(),this.$blockScrolling--,this.renderer.scrollCursorIntoView(null,.5)},this.destroy=function(){this.renderer.destroy(),this._signal("destroy",this),this.session&&this.session.destroy()},this.setAutoScrollEditorIntoView=function(t){if(t){var e,i=this,l=!1;this.$scrollAnchor||(this.$scrollAnchor=document.createElement("div"));var a=this.$scrollAnchor;a.style.cssText="position:absolute",this.container.insertBefore(a,this.container.firstChild);var n=this.on("changeSelection",(function(){l=!0})),s=this.renderer.on("beforeRender",(function(){l&&(e=i.renderer.container.getBoundingClientRect())})),d=this.renderer.on("afterRender",(function(){if(l&&e&&(i.isFocused()||i.searchBox&&i.searchBox.isFocused())){var t=i.renderer,n=t.$cursorLayer.$pixelPos,s=t.layerConfig,d=n.top-s.offset;null!=(l=n.top>=0&&d+e.top<0||!(n.topwindow.innerHeight)&&null)&&(a.style.top=d+"px",a.style.left=n.left+"px",a.style.height=s.lineHeight+"px",a.scrollIntoView(l)),l=e=null}}));this.setAutoScrollEditorIntoView=function(t){t||(delete this.setAutoScrollEditorIntoView,this.off("changeSelection",n),this.renderer.off("afterRender",d),this.renderer.off("beforeRender",s))}}},this.$resetCursorStyle=function(){var t=this.$cursorStyle||"ace",e=this.renderer.$cursorLayer;e&&(e.setSmoothBlinking(/smooth/.test(t)),e.isBlinking=!this.$readOnly&&"wide"!=t,a.setCssClass(e.element,"ace_slim-cursors",/slim/.test(t)))}}).call(u.prototype),N.defineOptions(u.prototype,"editor",{selectionStyle:{set:function(t){this.onSelectionChange(),this._signal("changeSelectionStyle",{data:t})},initialValue:"line"},highlightActiveLine:{set:function(){this.$updateHighlightActiveLine()},initialValue:!0},highlightSelectedWord:{set:function(t){this.$onSelectionChange()},initialValue:!0},readOnly:{set:function(t){this.$resetCursorStyle()},initialValue:!1},cursorStyle:{set:function(t){this.$resetCursorStyle()},values:["ace","slim","smooth","wide"],initialValue:"ace"},mergeUndoDeltas:{values:[!1,!0,"always"],initialValue:!0},behavioursEnabled:{initialValue:!0},wrapBehavioursEnabled:{initialValue:!0},autoScrollEditorIntoView:{set:function(t){this.setAutoScrollEditorIntoView(t)}},keyboardHandler:{set:function(t){this.setKeyboardHandler(t)},get:function(){return this.keybindingId},handlesSet:!0},hScrollBarAlwaysVisible:"renderer",vScrollBarAlwaysVisible:"renderer",highlightGutterLine:"renderer",animatedScroll:"renderer",showInvisibles:"renderer",showPrintMargin:"renderer",printMarginColumn:"renderer",printMargin:"renderer",fadeFoldWidgets:"renderer",showFoldWidgets:"renderer",showLineNumbers:"renderer",showGutter:"renderer",displayIndentGuides:"renderer",fontSize:"renderer",fontFamily:"renderer",maxLines:"renderer",minLines:"renderer",scrollPastEnd:"renderer",fixedWidthGutter:"renderer",theme:"renderer",scrollSpeed:"$mouseHandler",dragDelay:"$mouseHandler",dragEnabled:"$mouseHandler",focusTimout:"$mouseHandler",tooltipFollowsMouse:"$mouseHandler",firstLineNumber:"session",overwrite:"session",newLineMode:"session",useWorker:"session",useSoftTabs:"session",tabSize:"session",wrap:"session",indentedSoftWrap:"session",foldStyle:"session",mode:"session"}),e.Editor=u})),ace.define("ace/undomanager",["require","exports","module"],(function(t,e,i){"use strict";var l=function(){this.reset()};(function(){function t(t){return{action:t.action,start:t.start,end:t.end,lines:1==t.lines.length?null:t.lines,text:1==t.lines.length?t.lines[0]:null}}function e(t){return{action:t.action,start:t.start,end:t.end,lines:t.lines||[t.text]}}function i(t,e){for(var i=new Array(t.length),l=0;l0},this.hasRedo=function(){return this.$redoStack.length>0},this.markClean=function(){this.dirtyCounter=0},this.isClean=function(){return 0===this.dirtyCounter},this.$serializeDeltas=function(e){return i(e,t)},this.$deserializeDeltas=function(t){return i(t,e)}}).call(l.prototype),e.UndoManager=l})),ace.define("ace/layer/gutter",["require","exports","module","ace/lib/dom","ace/lib/oop","ace/lib/lang","ace/lib/event_emitter"],(function(t,e,i){"use strict";var l=t("../lib/dom"),a=t("../lib/oop"),n=t("../lib/lang"),s=t("../lib/event_emitter").EventEmitter,d=function(t){this.element=l.createElement("div"),this.element.className="ace_layer ace_gutter-layer",t.appendChild(this.element),this.setShowFoldWidgets(this.$showFoldWidgets),this.gutterWidth=0,this.$annotations=[],this.$updateAnnotations=this.$updateAnnotations.bind(this),this.$cells=[]};(function(){a.implement(this,s),this.setSession=function(t){this.session&&this.session.removeEventListener("change",this.$updateAnnotations),this.session=t,t&&t.on("change",this.$updateAnnotations)},this.addGutterDecoration=function(t,e){window.console&&console.warn&&console.warn("deprecated use session.addGutterDecoration"),this.session.addGutterDecoration(t,e)},this.removeGutterDecoration=function(t,e){window.console&&console.warn&&console.warn("deprecated use session.removeGutterDecoration"),this.session.removeGutterDecoration(t,e)},this.setAnnotations=function(t){this.$annotations=[];for(var e=0;es&&(h=n.end.row+1,s=(n=e.getNextFoldLine(h,n))?n.start.row:1/0),h>a){for(;this.$cells.length>Z+1;)g=this.$cells.pop(),this.element.removeChild(g.element);break}(g=this.$cells[++Z])||((g={element:null,textNode:null,foldWidget:null}).element=l.createElement("div"),g.textNode=document.createTextNode(""),g.element.appendChild(g.textNode),this.element.appendChild(g.element),this.$cells[Z]=g);var W="ace_gutter-cell ";if(c[h]&&(W+=c[h]),o[h]&&(W+=o[h]),this.$annotations[h]&&(W+=this.$annotations[h].className),g.element.className!=W&&(g.element.className=W),(y=e.getRowLength(h)*t.lineHeight+"px")!=g.element.style.height&&(g.element.style.height=y),d){var N=d[h];null==N&&(N=d[h]=e.getFoldWidget(h))}if(N){g.foldWidget||(g.foldWidget=l.createElement("span"),g.element.appendChild(g.foldWidget)),W="ace_fold-widget ace_"+N,"start"==N&&h==s&&hi.right-e.right?"foldWidgets":void 0}}).call(d.prototype),e.Gutter=d})),ace.define("ace/layer/marker",["require","exports","module","ace/range","ace/lib/dom"],(function(t,e,i){"use strict";var l=t("../range").Range,a=t("../lib/dom"),n=function(t){this.element=a.createElement("div"),this.element.className="ace_layer ace_marker-layer",t.appendChild(this.element)};(function(){this.$padding=0,this.setPadding=function(t){this.$padding=t},this.setSession=function(t){this.session=t},this.setMarkers=function(t){this.markers=t},this.update=function(t){if(t=t||this.config){this.config=t;var e=[];for(var i in this.markers){var l=this.markers[i];if(l.range){var a=l.range.clipRows(t.firstRow,t.lastRow);if(!a.isEmpty())if(a=a.toScreenRange(this.session),l.renderer){var n=this.$getTop(a.start.row,t),s=this.$padding+a.start.column*t.characterWidth;l.renderer(e,a,s,n,t)}else"fullLine"==l.type?this.drawFullLineMarker(e,a,l.clazz,t):"screenLine"==l.type?this.drawScreenLineMarker(e,a,l.clazz,t):a.isMultiLine()?"text"==l.type?this.drawTextMarker(e,a,l.clazz,t):this.drawMultiLineMarker(e,a,l.clazz,t):this.drawSingleLineMarker(e,a,l.clazz+" ace_start ace_br15",t)}else l.update(e,this,this.session,t)}this.element.innerHTML=e.join("")}},this.$getTop=function(t,e){return(t-e.firstRowScreen)*e.lineHeight},this.drawTextMarker=function(t,e,i,a,n){for(var s=this.session,d=e.start.row,c=e.end.row,o=d,m=0,r=0,b=s.getScreenLastRowColumn(o),g=new l(o,e.start.column,o,r);o<=c;o++)g.start.row=g.end.row=o,g.start.column=o==d?e.start.column:s.getRowWrapIndent(o),g.end.column=b,m=r,r=b,b=o+1b?4:0)|(o==c?8:0)),a,o==c?0:1,n)},this.drawMultiLineMarker=function(t,e,i,l,a){var n=this.$padding,s=l.lineHeight,d=this.$getTop(e.start.row,l),c=n+e.start.column*l.characterWidth;a=a||"",t.push("
"),d=this.$getTop(e.end.row,l);var o=e.end.column*l.characterWidth;if(t.push("
"),!((s=(e.end.row-e.start.row-1)*l.lineHeight)<=0)){d=this.$getTop(e.start.row+1,l);var m=(e.start.column?1:0)|(e.end.column?0:8);t.push("
")}},this.drawSingleLineMarker=function(t,e,i,l,a,n){var s=l.lineHeight,d=(e.end.column+(a||0)-e.start.column)*l.characterWidth,c=this.$getTop(e.start.row,l),o=this.$padding+e.start.column*l.characterWidth;t.push("
")},this.drawFullLineMarker=function(t,e,i,l,a){var n=this.$getTop(e.start.row,l),s=l.lineHeight;e.start.row!=e.end.row&&(s+=this.$getTop(e.end.row,l)-n),t.push("
")},this.drawScreenLineMarker=function(t,e,i,l,a){var n=this.$getTop(e.start.row,l),s=l.lineHeight;t.push("
")}}).call(n.prototype),e.Marker=n})),ace.define("ace/layer/text",["require","exports","module","ace/lib/oop","ace/lib/dom","ace/lib/lang","ace/lib/useragent","ace/lib/event_emitter"],(function(t,e,i){"use strict";var l=t("../lib/oop"),a=t("../lib/dom"),n=t("../lib/lang"),s=(t("../lib/useragent"),t("../lib/event_emitter").EventEmitter),d=function(t){this.element=a.createElement("div"),this.element.className="ace_layer ace_text-layer",t.appendChild(this.element),this.$updateEolChar=this.$updateEolChar.bind(this)};(function(){l.implement(this,s),this.EOF_CHAR="¶",this.EOL_CHAR_LF="¬",this.EOL_CHAR_CRLF="¤",this.EOL_CHAR=this.EOL_CHAR_LF,this.TAB_CHAR="—",this.SPACE_CHAR="·",this.$padding=0,this.$updateEolChar=function(){var t="\n"==this.session.doc.getNewLineCharacter()?this.EOL_CHAR_LF:this.EOL_CHAR_CRLF;if(this.EOL_CHAR!=t)return this.EOL_CHAR=t,!0},this.setPadding=function(t){this.$padding=t,this.element.style.padding="0 "+t+"px"},this.getLineHeight=function(){return this.$fontMetrics.$characterSize.height||0},this.getCharacterWidth=function(){return this.$fontMetrics.$characterSize.width||0},this.$setFontMetrics=function(t){this.$fontMetrics=t,this.$fontMetrics.on("changeCharacterSize",function(t){this._signal("changeCharacterSize",t)}.bind(this)),this.$pollSizeChanges()},this.checkForSizeChanges=function(){this.$fontMetrics.checkForSizeChanges()},this.$pollSizeChanges=function(){return this.$pollSizeChangesTimer=this.$fontMetrics.$pollSizeChanges()},this.setSession=function(t){this.session=t,t&&this.$computeTabString()},this.showInvisibles=!1,this.setShowInvisibles=function(t){return this.showInvisibles!=t&&(this.showInvisibles=t,this.$computeTabString(),!0)},this.displayIndentGuides=!0,this.setDisplayIndentGuides=function(t){return this.displayIndentGuides!=t&&(this.displayIndentGuides=t,this.$computeTabString(),!0)},this.$tabStrings=[],this.onChangeTabSize=this.$computeTabString=function(){var t=this.session.getTabSize();this.tabSize=t;for(var e=this.$tabStrings=[0],i=1;i"+n.stringRepeat(this.TAB_CHAR,i)+""):e.push(n.stringRepeat(" ",i));if(this.displayIndentGuides){this.$indentGuideRe=/\s\S| \t|\t |\s$/;var l="ace_indent-guide",a="",s="";if(this.showInvisibles){l+=" ace_invisible",a=" ace_invisible_space",s=" ace_invisible_tab";var d=n.stringRepeat(this.SPACE_CHAR,this.tabSize),c=n.stringRepeat(this.TAB_CHAR,this.tabSize)}else c=d=n.stringRepeat(" ",this.tabSize);this.$tabStrings[" "]=""+d+"",this.$tabStrings["\t"]=""+c+""}},this.updateLines=function(t,e,i){this.config.lastRow==t.lastRow&&this.config.firstRow==t.firstRow||this.scrollLines(t),this.config=t;for(var l=Math.max(e,t.firstRow),a=Math.min(i,t.lastRow),n=this.element.childNodes,s=0,d=t.firstRow;do&&(d=c.end.row+1,o=(c=this.session.getNextFoldLine(d,c))?c.start.row:1/0),!(d>a);){var m=n[s++];if(m){var r=[];this.$renderLine(r,d,!this.$useLineGroups(),d==o&&c),m.style.height=t.lineHeight*this.session.getRowLength(d)+"px",m.innerHTML=r.join("")}d++}},this.scrollLines=function(t){var e=this.config;if(this.config=t,!e||e.lastRow0;l--)i.removeChild(i.firstChild);if(e.lastRow>t.lastRow)for(l=this.session.getFoldedRowCount(t.lastRow+1,e.lastRow);l>0;l--)i.removeChild(i.lastChild);if(t.firstRowe.lastRow&&(a=this.$renderLinesFragment(t,e.lastRow+1,t.lastRow),i.appendChild(a))},this.$renderLinesFragment=function(t,e,i){for(var l=this.element.ownerDocument.createDocumentFragment(),n=e,s=this.session.getNextFoldLine(n),d=s?s.start.row:1/0;n>d&&(n=s.end.row+1,d=(s=this.session.getNextFoldLine(n,s))?s.start.row:1/0),!(n>i);){var c=a.createElement("div"),o=[];if(this.$renderLine(o,n,!1,n==d&&s),c.innerHTML=o.join(""),this.$useLineGroups())c.className="ace_line_group",l.appendChild(c),c.style.height=t.lineHeight*this.session.getRowLength(n)+"px";else for(;c.firstChild;)l.appendChild(c.firstChild);n++}return l},this.update=function(t){this.config=t;for(var e=[],i=t.firstRow,l=t.lastRow,a=i,n=this.session.getNextFoldLine(a),s=n?n.start.row:1/0;a>s&&(a=n.end.row+1,s=(n=this.session.getNextFoldLine(a,n))?n.start.row:1/0),!(a>l);)this.$useLineGroups()&&e.push("
"),this.$renderLine(e,a,!1,a==s&&n),this.$useLineGroups()&&e.push("
"),a++;this.element.innerHTML=e.join("")},this.$textToken={text:!0,rparen:!0,lparen:!0},this.$renderToken=function(t,e,i,l){var a=this,s=l.replace(/\t|&|<|>|( +)|([\x00-\x1f\x80-\xa0\xad\u1680\u180E\u2000-\u200f\u2028\u2029\u202F\u205F\u3000\uFEFF\uFFF9-\uFFFC])|[\u1100-\u115F\u11A3-\u11A7\u11FA-\u11FF\u2329-\u232A\u2E80-\u2E99\u2E9B-\u2EF3\u2F00-\u2FD5\u2FF0-\u2FFB\u3000-\u303E\u3041-\u3096\u3099-\u30FF\u3105-\u312D\u3131-\u318E\u3190-\u31BA\u31C0-\u31E3\u31F0-\u321E\u3220-\u3247\u3250-\u32FE\u3300-\u4DBF\u4E00-\uA48C\uA490-\uA4C6\uA960-\uA97C\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFAFF\uFE10-\uFE19\uFE30-\uFE52\uFE54-\uFE66\uFE68-\uFE6B\uFF01-\uFF60\uFFE0-\uFFE6]/g,(function(t,i,l,s,d){if(i)return a.showInvisibles?""+n.stringRepeat(a.SPACE_CHAR,t.length)+"":t;if("&"==t)return"&";if("<"==t)return"<";if(">"==t)return">";if("\t"==t){var c=a.session.getScreenTabSize(e+s);return e+=c-1,a.$tabStrings[c]}if(" "==t){var o=a.showInvisibles?"ace_cjk ace_invisible ace_invisible_space":"ace_cjk",m=a.showInvisibles?a.SPACE_CHAR:"";return e+=1,""+m+""}return l?""+a.SPACE_CHAR+"":(e+=1,""+t+"")}));if(this.$textToken[i.type])t.push(s);else{var d="ace_"+i.type.replace(/\./g," ace_"),c="";"fold"==i.type&&(c=" style='width:"+i.value.length*this.config.characterWidth+"px;' "),t.push("",s,"")}return e+l.length},this.renderIndentGuide=function(t,e,i){var l=e.search(this.$indentGuideRe);return l<=0||l>=i?e:" "==e[0]?(l-=l%this.tabSize,t.push(n.stringRepeat(this.$tabStrings[" "],l/this.tabSize)),e.substr(l)):"\t"==e[0]?(t.push(n.stringRepeat(this.$tabStrings["\t"],l)),e.substr(l)):e},this.$renderWrappedLine=function(t,e,i,l){for(var a=0,s=0,d=i[0],c=0,o=0;o=d;)c=this.$renderToken(t,c,m,r.substring(0,d-a)),r=r.substring(d-a),a=d,l||t.push("","
"),t.push(n.stringRepeat(" ",i.indent)),c=0,d=i[++s]||Number.MAX_VALUE;0!=r.length&&(a+=r.length,c=this.$renderToken(t,c,m,r))}}},this.$renderSimpleLine=function(t,e){var i=0,l=e[0],a=l.value;this.displayIndentGuides&&(a=this.renderIndentGuide(t,a)),a&&(i=this.$renderToken(t,i,l,a));for(var n=1;n"),a.length){var n=this.session.getRowSplitData(e);n&&n.length?this.$renderWrappedLine(t,a,n,i):this.$renderSimpleLine(t,a)}this.showInvisibles&&(l&&(e=l.end.row),t.push("",e==this.session.getLength()-1?this.EOF_CHAR:this.EOL_CHAR,"")),i||t.push("
")},this.$getFoldLineTokens=function(t,e){var i=this.session,l=[],a=i.getTokens(t);return e.walk((function(t,e,n,s,d){null!=t?l.push({type:"fold",value:t}):(d&&(a=i.getTokens(e)),a.length&&function(t,e,i){for(var a=0,n=0;n+t[a].value.lengthi-e&&(s=s.substring(0,i-e)),l.push({type:t[a].type,value:s}),n=e+s.length,a+=1);ni?l.push({type:t[a].type,value:s.substring(0,i-n)}):l.push(t[a]),n+=s.length,a+=1}}(a,s,n))}),e.end.row,this.session.getLine(e.end.row).length),l},this.$useLineGroups=function(){return this.session.getUseWrapMode()},this.destroy=function(){clearInterval(this.$pollSizeChangesTimer),this.$measureNode&&this.$measureNode.parentNode.removeChild(this.$measureNode),delete this.$measureNode}}).call(d.prototype),e.Text=d})),ace.define("ace/layer/cursor",["require","exports","module","ace/lib/dom"],(function(t,e,i){"use strict";var l,a=t("../lib/dom"),n=function(t){this.element=a.createElement("div"),this.element.className="ace_layer ace_cursor-layer",t.appendChild(this.element),void 0===l&&(l=!("opacity"in this.element.style)),this.isVisible=!1,this.isBlinking=!0,this.blinkInterval=1e3,this.smoothBlinking=!1,this.cursors=[],this.cursor=this.addCursor(),a.addCssClass(this.element,"ace_hidden-cursors"),this.$updateCursors=(l?this.$updateVisibility:this.$updateOpacity).bind(this)};(function(){this.$updateVisibility=function(t){for(var e=this.cursors,i=e.length;i--;)e[i].style.visibility=t?"":"hidden"},this.$updateOpacity=function(t){for(var e=this.cursors,i=e.length;i--;)e[i].style.opacity=t?"":"0"},this.$padding=0,this.setPadding=function(t){this.$padding=t},this.setSession=function(t){this.session=t},this.setBlinking=function(t){t!=this.isBlinking&&(this.isBlinking=t,this.restartTimer())},this.setBlinkInterval=function(t){t!=this.blinkInterval&&(this.blinkInterval=t,this.restartTimer())},this.setSmoothBlinking=function(t){t==this.smoothBlinking||l||(this.smoothBlinking=t,a.setCssClass(this.element,"ace_smooth-blinking",t),this.$updateCursors(!0),this.$updateCursors=this.$updateOpacity.bind(this),this.restartTimer())},this.addCursor=function(){var t=a.createElement("div");return t.className="ace_cursor",this.element.appendChild(t),this.cursors.push(t),t},this.removeCursor=function(){if(this.cursors.length>1){var t=this.cursors.pop();return t.parentNode.removeChild(t),t}},this.hideCursor=function(){this.isVisible=!1,a.addCssClass(this.element,"ace_hidden-cursors"),this.restartTimer()},this.showCursor=function(){this.isVisible=!0,a.removeCssClass(this.element,"ace_hidden-cursors"),this.restartTimer()},this.restartTimer=function(){var t=this.$updateCursors;if(clearInterval(this.intervalId),clearTimeout(this.timeoutId),this.smoothBlinking&&a.removeCssClass(this.element,"ace_smooth-blinking"),t(!0),this.isBlinking&&this.blinkInterval&&this.isVisible){this.smoothBlinking&&setTimeout(function(){a.addCssClass(this.element,"ace_smooth-blinking")}.bind(this));var e=function(){this.timeoutId=setTimeout((function(){t(!1)}),.6*this.blinkInterval)}.bind(this);this.intervalId=setInterval((function(){t(!0),e()}),this.blinkInterval),e()}},this.getPixelPosition=function(t,e){if(!this.config||!this.session)return{left:0,top:0};t||(t=this.session.selection.getCursor());var i=this.session.documentToScreenPosition(t);return{left:this.$padding+i.column*this.config.characterWidth,top:(i.row-(e?this.config.firstRowScreen:0))*this.config.lineHeight}},this.update=function(t){this.config=t;var e=this.session.$selectionMarkers,i=0,l=0;void 0!==e&&0!==e.length||(e=[{cursor:null}]),i=0;for(var a=e.length;it.height+t.offset||n.top<0)&&i>1)){var s=(this.cursors[l++]||this.addCursor()).style;this.drawCursor?this.drawCursor(s,n,t,e[i],this.session):(s.left=n.left+"px",s.top=n.top+"px",s.width=t.characterWidth+"px",s.height=t.lineHeight+"px")}}for(;this.cursors.length>l;)this.removeCursor();var d=this.session.getOverwrite();this.$setOverwrite(d),this.$pixelPos=n,this.restartTimer()},this.drawCursor=null,this.$setOverwrite=function(t){t!=this.overwrite&&(this.overwrite=t,t?a.addCssClass(this.element,"ace_overwrite-cursors"):a.removeCssClass(this.element,"ace_overwrite-cursors"))},this.destroy=function(){clearInterval(this.intervalId),clearTimeout(this.timeoutId)}}).call(n.prototype),e.Cursor=n})),ace.define("ace/scrollbar",["require","exports","module","ace/lib/oop","ace/lib/dom","ace/lib/event","ace/lib/event_emitter"],(function(t,e,i){"use strict";var l=t("./lib/oop"),a=t("./lib/dom"),n=t("./lib/event"),s=t("./lib/event_emitter").EventEmitter,d=function(t){this.element=a.createElement("div"),this.element.className="ace_scrollbar ace_scrollbar"+this.classSuffix,this.inner=a.createElement("div"),this.inner.className="ace_scrollbar-inner",this.element.appendChild(this.inner),t.appendChild(this.element),this.setVisible(!1),this.skipEvent=!1,n.addListener(this.element,"scroll",this.onScroll.bind(this)),n.addListener(this.element,"mousedown",n.preventDefault)};(function(){l.implement(this,s),this.setVisible=function(t){this.element.style.display=t?"":"none",this.isVisible=t}}).call(d.prototype);var c=function(t,e){d.call(this,t),this.scrollTop=0,e.$scrollbarWidth=this.width=a.scrollbarWidth(t.ownerDocument),this.inner.style.width=this.element.style.width=(this.width||15)+5+"px"};l.inherits(c,d),function(){this.classSuffix="-v",this.onScroll=function(){this.skipEvent||(this.scrollTop=this.element.scrollTop,this._emit("scroll",{data:this.scrollTop})),this.skipEvent=!1},this.getWidth=function(){return this.isVisible?this.width:0},this.setHeight=function(t){this.element.style.height=t+"px"},this.setInnerHeight=function(t){this.inner.style.height=t+"px"},this.setScrollHeight=function(t){this.inner.style.height=t+"px"},this.setScrollTop=function(t){this.scrollTop!=t&&(this.skipEvent=!0,this.scrollTop=this.element.scrollTop=t)}}.call(c.prototype);var o=function(t,e){d.call(this,t),this.scrollLeft=0,this.height=e.$scrollbarWidth,this.inner.style.height=this.element.style.height=(this.height||15)+5+"px"};l.inherits(o,d),function(){this.classSuffix="-h",this.onScroll=function(){this.skipEvent||(this.scrollLeft=this.element.scrollLeft,this._emit("scroll",{data:this.scrollLeft})),this.skipEvent=!1},this.getHeight=function(){return this.isVisible?this.height:0},this.setWidth=function(t){this.element.style.width=t+"px"},this.setInnerWidth=function(t){this.inner.style.width=t+"px"},this.setScrollWidth=function(t){this.inner.style.width=t+"px"},this.setScrollLeft=function(t){this.scrollLeft!=t&&(this.skipEvent=!0,this.scrollLeft=this.element.scrollLeft=t)}}.call(o.prototype),e.ScrollBar=c,e.ScrollBarV=c,e.ScrollBarH=o,e.VScrollBar=c,e.HScrollBar=o})),ace.define("ace/renderloop",["require","exports","module","ace/lib/event"],(function(t,e,i){"use strict";var l=t("./lib/event"),a=function(t,e){this.onRender=t,this.pending=!1,this.changes=0,this.window=e||window};(function(){this.schedule=function(t){if(this.changes=this.changes|t,!this.pending&&this.changes){this.pending=!0;var e=this;l.nextFrame((function(){var t;for(e.pending=!1;t=e.changes;)e.changes=0,e.onRender(t)}),this.window)}}}).call(a.prototype),e.RenderLoop=a})),ace.define("ace/layer/font_metrics",["require","exports","module","ace/lib/oop","ace/lib/dom","ace/lib/lang","ace/lib/useragent","ace/lib/event_emitter"],(function(t,e,i){var l=t("../lib/oop"),a=t("../lib/dom"),n=t("../lib/lang"),s=t("../lib/useragent"),d=t("../lib/event_emitter").EventEmitter,c=0,o=e.FontMetrics=function(t){this.el=a.createElement("div"),this.$setMeasureNodeStyles(this.el.style,!0),this.$main=a.createElement("div"),this.$setMeasureNodeStyles(this.$main.style),this.$measureNode=a.createElement("div"),this.$setMeasureNodeStyles(this.$measureNode.style),this.el.appendChild(this.$main),this.el.appendChild(this.$measureNode),t.appendChild(this.el),c||this.$testFractionalRect(),this.$measureNode.innerHTML=n.stringRepeat("X",c),this.$characterSize={width:0,height:0},this.checkForSizeChanges()};(function(){l.implement(this,d),this.$characterSize={width:0,height:0},this.$testFractionalRect=function(){var t=a.createElement("div");this.$setMeasureNodeStyles(t.style),t.style.width="0.2px",document.documentElement.appendChild(t);var e=t.getBoundingClientRect().width;c=e>0&&e<1?50:100,t.parentNode.removeChild(t)},this.$setMeasureNodeStyles=function(t,e){t.width=t.height="auto",t.left=t.top="0px",t.visibility="hidden",t.position="absolute",t.whiteSpace="pre",s.isIE<8?t["font-family"]="inherit":t.font="inherit",t.overflow=e?"hidden":"visible"},this.checkForSizeChanges=function(){var t=this.$measureSizes();if(t&&(this.$characterSize.width!==t.width||this.$characterSize.height!==t.height)){this.$measureNode.style.fontWeight="bold";var e=this.$measureSizes();this.$measureNode.style.fontWeight="",this.$characterSize=t,this.charSizes=Object.create(null),this.allowBoldFonts=e&&e.width===t.width&&e.height===t.height,this._emit("changeCharacterSize",{data:t})}},this.$pollSizeChanges=function(){if(this.$pollSizeChangesTimer)return this.$pollSizeChangesTimer;var t=this;return this.$pollSizeChangesTimer=setInterval((function(){t.checkForSizeChanges()}),500)},this.setPolling=function(t){t?this.$pollSizeChanges():this.$pollSizeChangesTimer&&(clearInterval(this.$pollSizeChangesTimer),this.$pollSizeChangesTimer=0)},this.$measureSizes=function(){if(50===c){var t=null;try{t=this.$measureNode.getBoundingClientRect()}catch(e){t={width:0,height:0}}var e={height:t.height,width:t.width/c}}else e={height:this.$measureNode.clientHeight,width:this.$measureNode.clientWidth/c};return 0===e.width||0===e.height?null:e},this.$measureCharWidth=function(t){return this.$main.innerHTML=n.stringRepeat(t,c),this.$main.getBoundingClientRect().width/c},this.getCharacterWidth=function(t){var e=this.charSizes[t];return void 0===e&&(e=this.charSizes[t]=this.$measureCharWidth(t)/this.$characterSize.width),e},this.destroy=function(){clearInterval(this.$pollSizeChangesTimer),this.el&&this.el.parentNode&&this.el.parentNode.removeChild(this.el)}}).call(o.prototype)})),ace.define("ace/virtual_renderer",["require","exports","module","ace/lib/oop","ace/lib/dom","ace/config","ace/lib/useragent","ace/layer/gutter","ace/layer/marker","ace/layer/text","ace/layer/cursor","ace/scrollbar","ace/scrollbar","ace/renderloop","ace/layer/font_metrics","ace/lib/event_emitter"],(function(t,e,i){"use strict";var l=t("./lib/oop"),a=t("./lib/dom"),n=t("./config"),s=t("./lib/useragent"),d=t("./layer/gutter").Gutter,c=t("./layer/marker").Marker,o=t("./layer/text").Text,m=t("./layer/cursor").Cursor,r=t("./scrollbar").HScrollBar,b=t("./scrollbar").VScrollBar,g=t("./renderloop").RenderLoop,Z=t("./layer/font_metrics").FontMetrics,h=t("./lib/event_emitter").EventEmitter;a.importCssString('.ace_editor {\tposition: relative;\toverflow: hidden;\tfont: 12px/normal \'Monaco\', \'Menlo\', \'Ubuntu Mono\', \'Consolas\', \'source-code-pro\', monospace;\tdirection: ltr;\t}\t.ace_scroller {\tposition: absolute;\toverflow: hidden;\ttop: 0;\tbottom: 0;\tbackground-color: inherit;\t-ms-user-select: none;\t-moz-user-select: none;\t-webkit-user-select: none;\tuser-select: none;\tcursor: text;\t}\t.ace_content {\tposition: absolute;\t-moz-box-sizing: border-box;\t-webkit-box-sizing: border-box;\tbox-sizing: border-box;\tmin-width: 100%;\t}\t.ace_dragging .ace_scroller:before{\tposition: absolute;\ttop: 0;\tleft: 0;\tright: 0;\tbottom: 0;\tcontent: \'\';\tbackground: rgba(250, 250, 250, 0.01);\tz-index: 1000;\t}\t.ace_dragging.ace_dark .ace_scroller:before{\tbackground: rgba(0, 0, 0, 0.01);\t}\t.ace_selecting, .ace_selecting * {\tcursor: text !important;\t}\t.ace_gutter {\tposition: absolute;\toverflow : hidden;\twidth: auto;\ttop: 0;\tbottom: 0;\tleft: 0;\tcursor: default;\tz-index: 4;\t-ms-user-select: none;\t-moz-user-select: none;\t-webkit-user-select: none;\tuser-select: none;\t}\t.ace_gutter-active-line {\tposition: absolute;\tleft: 0;\tright: 0;\t}\t.ace_scroller.ace_scroll-left {\tbox-shadow: 17px 0 16px -16px rgba(0, 0, 0, 0.4) inset;\t}\t.ace_gutter-cell {\tpadding-left: 19px;\tpadding-right: 6px;\tbackground-repeat: no-repeat;\t}\t.ace_gutter-cell.ace_error {\tbackground-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAABOFBMVEX/////////QRswFAb/Ui4wFAYwFAYwFAaWGAfDRymzOSH/PxswFAb/SiUwFAYwFAbUPRvjQiDllog5HhHdRybsTi3/Tyv9Tir+Syj/UC3////XurebMBIwFAb/RSHbPx/gUzfdwL3kzMivKBAwFAbbvbnhPx66NhowFAYwFAaZJg8wFAaxKBDZurf/RB6mMxb/SCMwFAYwFAbxQB3+RB4wFAb/Qhy4Oh+4QifbNRcwFAYwFAYwFAb/QRzdNhgwFAYwFAbav7v/Uy7oaE68MBK5LxLewr/r2NXewLswFAaxJw4wFAbkPRy2PyYwFAaxKhLm1tMwFAazPiQwFAaUGAb/QBrfOx3bvrv/VC/maE4wFAbRPBq6MRO8Qynew8Dp2tjfwb0wFAbx6eju5+by6uns4uH9/f36+vr/GkHjAAAAYnRSTlMAGt+64rnWu/bo8eAA4InH3+DwoN7j4eLi4xP99Nfg4+b+/u9B/eDs1MD1mO7+4PHg2MXa347g7vDizMLN4eG+Pv7i5evs/v79yu7S3/DV7/498Yv24eH+4ufQ3Ozu/v7+y13sRqwAAADLSURBVHjaZc/XDsFgGIBhtDrshlitmk2IrbHFqL2pvXf/+78DPokj7+Fz9qpU/9UXJIlhmPaTaQ6QPaz0mm+5gwkgovcV6GZzd5JtCQwgsxoHOvJO15kleRLAnMgHFIESUEPmawB9ngmelTtipwwfASilxOLyiV5UVUyVAfbG0cCPHig+GBkzAENHS0AstVF6bacZIOzgLmxsHbt2OecNgJC83JERmePUYq8ARGkJx6XtFsdddBQgZE2nPR6CICZhawjA4Fb/chv+399kfR+MMMDGOQAAAABJRU5ErkJggg==");\tbackground-repeat: no-repeat;\tbackground-position: 2px center;\t}\t.ace_gutter-cell.ace_warning {\tbackground-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAmVBMVEX///8AAAD///8AAAAAAABPSzb/5sAAAAB/blH/73z/ulkAAAAAAAD85pkAAAAAAAACAgP/vGz/rkDerGbGrV7/pkQICAf////e0IsAAAD/oED/qTvhrnUAAAD/yHD/njcAAADuv2r/nz//oTj/p064oGf/zHAAAAA9Nir/tFIAAAD/tlTiuWf/tkIAAACynXEAAAAAAAAtIRW7zBpBAAAAM3RSTlMAABR1m7RXO8Ln31Z36zT+neXe5OzooRDfn+TZ4p3h2hTf4t3k3ucyrN1K5+Xaks52Sfs9CXgrAAAAjklEQVR42o3PbQ+CIBQFYEwboPhSYgoYunIqqLn6/z8uYdH8Vmdnu9vz4WwXgN/xTPRD2+sgOcZjsge/whXZgUaYYvT8QnuJaUrjrHUQreGczuEafQCO/SJTufTbroWsPgsllVhq3wJEk2jUSzX3CUEDJC84707djRc5MTAQxoLgupWRwW6UB5fS++NV8AbOZgnsC7BpEAAAAABJRU5ErkJggg==");\tbackground-position: 2px center;\t}\t.ace_gutter-cell.ace_info {\tbackground-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAAAAAA6mKC9AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAAJ0Uk5TAAB2k804AAAAPklEQVQY02NgIB68QuO3tiLznjAwpKTgNyDbMegwisCHZUETUZV0ZqOquBpXj2rtnpSJT1AEnnRmL2OgGgAAIKkRQap2htgAAAAASUVORK5CYII=");\tbackground-position: 2px center;\t}\t.ace_dark .ace_gutter-cell.ace_info {\tbackground-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAJFBMVEUAAAChoaGAgIAqKiq+vr6tra1ZWVmUlJSbm5s8PDxubm56enrdgzg3AAAAAXRSTlMAQObYZgAAAClJREFUeNpjYMAPdsMYHegyJZFQBlsUlMFVCWUYKkAZMxZAGdxlDMQBAG+TBP4B6RyJAAAAAElFTkSuQmCC");\t}\t.ace_scrollbar {\tposition: absolute;\tright: 0;\tbottom: 0;\tz-index: 6;\t}\t.ace_scrollbar-inner {\tposition: absolute;\tcursor: text;\tleft: 0;\ttop: 0;\t}\t.ace_scrollbar-v{\toverflow-x: hidden;\toverflow-y: scroll;\ttop: 0;\t}\t.ace_scrollbar-h {\toverflow-x: scroll;\toverflow-y: hidden;\tleft: 0;\t}\t.ace_print-margin {\tposition: absolute;\theight: 100%;\t}\t.ace_text-input {\tposition: absolute;\tz-index: 0;\twidth: 0.5em;\theight: 1em;\topacity: 0;\tbackground: transparent;\t-moz-appearance: none;\tappearance: none;\tborder: none;\tresize: none;\toutline: none;\toverflow: hidden;\tfont: inherit;\tpadding: 0 1px;\tmargin: 0 -1px;\ttext-indent: -1em;\t-ms-user-select: text;\t-moz-user-select: text;\t-webkit-user-select: text;\tuser-select: text;\twhite-space: pre!important;\t}\t.ace_text-input.ace_composition {\tbackground: inherit;\tcolor: inherit;\tz-index: 1000;\topacity: 1;\ttext-indent: 0;\t}\t.ace_layer {\tz-index: 1;\tposition: absolute;\toverflow: hidden;\tword-wrap: normal;\twhite-space: pre;\theight: 100%;\twidth: 100%;\t-moz-box-sizing: border-box;\t-webkit-box-sizing: border-box;\tbox-sizing: border-box;\tpointer-events: none;\t}\t.ace_gutter-layer {\tposition: relative;\twidth: auto;\ttext-align: right;\tpointer-events: auto;\t}\t.ace_text-layer {\tfont: inherit !important;\t}\t.ace_cjk {\tdisplay: inline-block;\ttext-align: center;\t}\t.ace_cursor-layer {\tz-index: 4;\t}\t.ace_cursor {\tz-index: 4;\tposition: absolute;\t-moz-box-sizing: border-box;\t-webkit-box-sizing: border-box;\tbox-sizing: border-box;\tborder-left: 2px solid;\ttransform: translatez(0);\t}\t.ace_slim-cursors .ace_cursor {\tborder-left-width: 1px;\t}\t.ace_overwrite-cursors .ace_cursor {\tborder-left-width: 0;\tborder-bottom: 1px solid;\t}\t.ace_hidden-cursors .ace_cursor {\topacity: 0.2;\t}\t.ace_smooth-blinking .ace_cursor {\t-webkit-transition: opacity 0.18s;\ttransition: opacity 0.18s;\t}\t.ace_editor.ace_multiselect .ace_cursor {\tborder-left-width: 1px;\t}\t.ace_marker-layer .ace_step, .ace_marker-layer .ace_stack {\tposition: absolute;\tz-index: 3;\t}\t.ace_marker-layer .ace_selection {\tposition: absolute;\tz-index: 5;\t}\t.ace_marker-layer .ace_bracket {\tposition: absolute;\tz-index: 6;\t}\t.ace_marker-layer .ace_active-line {\tposition: absolute;\tz-index: 2;\t}\t.ace_marker-layer .ace_selected-word {\tposition: absolute;\tz-index: 4;\t-moz-box-sizing: border-box;\t-webkit-box-sizing: border-box;\tbox-sizing: border-box;\t}\t.ace_line .ace_fold {\t-moz-box-sizing: border-box;\t-webkit-box-sizing: border-box;\tbox-sizing: border-box;\tdisplay: inline-block;\theight: 11px;\tmargin-top: -2px;\tvertical-align: middle;\tbackground-image:\turl("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAAJCAYAAADU6McMAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAJpJREFUeNpi/P//PwOlgAXGYGRklAVSokD8GmjwY1wasKljQpYACtpCFeADcHVQfQyMQAwzwAZI3wJKvCLkfKBaMSClBlR7BOQikCFGQEErIH0VqkabiGCAqwUadAzZJRxQr/0gwiXIal8zQQPnNVTgJ1TdawL0T5gBIP1MUJNhBv2HKoQHHjqNrA4WO4zY0glyNKLT2KIfIMAAQsdgGiXvgnYAAAAASUVORK5CYII="),\turl("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAA3CAYAAADNNiA5AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACJJREFUeNpi+P//fxgTAwPDBxDxD078RSX+YeEyDFMCIMAAI3INmXiwf2YAAAAASUVORK5CYII=");\tbackground-repeat: no-repeat, repeat-x;\tbackground-position: center center, top left;\tcolor: transparent;\tborder: 1px solid black;\tborder-radius: 2px;\tcursor: pointer;\tpointer-events: auto;\t}\t.ace_dark .ace_fold {\t}\t.ace_fold:hover{\tbackground-image:\turl("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAAJCAYAAADU6McMAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAJpJREFUeNpi/P//PwOlgAXGYGRklAVSokD8GmjwY1wasKljQpYACtpCFeADcHVQfQyMQAwzwAZI3wJKvCLkfKBaMSClBlR7BOQikCFGQEErIH0VqkabiGCAqwUadAzZJRxQr/0gwiXIal8zQQPnNVTgJ1TdawL0T5gBIP1MUJNhBv2HKoQHHjqNrA4WO4zY0glyNKLT2KIfIMAAQsdgGiXvgnYAAAAASUVORK5CYII="),\turl("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAA3CAYAAADNNiA5AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACBJREFUeNpi+P//fz4TAwPDZxDxD5X4i5fLMEwJgAADAEPVDbjNw87ZAAAAAElFTkSuQmCC");\t}\t.ace_tooltip {\tbackground-color: #FFF;\tbackground-image: -webkit-linear-gradient(top, transparent, rgba(0, 0, 0, 0.1));\tbackground-image: linear-gradient(to bottom, transparent, rgba(0, 0, 0, 0.1));\tborder: 1px solid gray;\tborder-radius: 1px;\tbox-shadow: 0 1px 2px rgba(0, 0, 0, 0.3);\tcolor: black;\tmax-width: 100%;\tpadding: 3px 4px;\tposition: fixed;\tz-index: 999999;\t-moz-box-sizing: border-box;\t-webkit-box-sizing: border-box;\tbox-sizing: border-box;\tcursor: default;\twhite-space: pre;\tword-wrap: break-word;\tline-height: normal;\tfont-style: normal;\tfont-weight: normal;\tletter-spacing: normal;\tpointer-events: none;\t}\t.ace_folding-enabled > .ace_gutter-cell {\tpadding-right: 13px;\t}\t.ace_fold-widget {\t-moz-box-sizing: border-box;\t-webkit-box-sizing: border-box;\tbox-sizing: border-box;\tmargin: 0 -12px 0 1px;\tdisplay: none;\twidth: 11px;\tvertical-align: top;\tbackground-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAANElEQVR42mWKsQ0AMAzC8ixLlrzQjzmBiEjp0A6WwBCSPgKAXoLkqSot7nN3yMwR7pZ32NzpKkVoDBUxKAAAAABJRU5ErkJggg==");\tbackground-repeat: no-repeat;\tbackground-position: center;\tborder-radius: 3px;\tborder: 1px solid transparent;\tcursor: pointer;\t}\t.ace_folding-enabled .ace_fold-widget {\tdisplay: inline-block; \t}\t.ace_fold-widget.ace_end {\tbackground-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAANElEQVR42m3HwQkAMAhD0YzsRchFKI7sAikeWkrxwScEB0nh5e7KTPWimZki4tYfVbX+MNl4pyZXejUO1QAAAABJRU5ErkJggg==");\t}\t.ace_fold-widget.ace_closed {\tbackground-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAGCAYAAAAG5SQMAAAAOUlEQVR42jXKwQkAMAgDwKwqKD4EwQ26sSOkVWjgIIHAzPiCgaqiqnJHZnKICBERHN194O5b9vbLuAVRL+l0YWnZAAAAAElFTkSuQmCCXA==");\t}\t.ace_fold-widget:hover {\tborder: 1px solid rgba(0, 0, 0, 0.3);\tbackground-color: rgba(255, 255, 255, 0.2);\tbox-shadow: 0 1px 1px rgba(255, 255, 255, 0.7);\t}\t.ace_fold-widget:active {\tborder: 1px solid rgba(0, 0, 0, 0.4);\tbackground-color: rgba(0, 0, 0, 0.05);\tbox-shadow: 0 1px 1px rgba(255, 255, 255, 0.8);\t}\t.ace_dark .ace_fold-widget {\tbackground-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHklEQVQIW2P4//8/AzoGEQ7oGCaLLAhWiSwB146BAQCSTPYocqT0AAAAAElFTkSuQmCC");\t}\t.ace_dark .ace_fold-widget.ace_end {\tbackground-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAH0lEQVQIW2P4//8/AxQ7wNjIAjDMgC4AxjCVKBirIAAF0kz2rlhxpAAAAABJRU5ErkJggg==");\t}\t.ace_dark .ace_fold-widget.ace_closed {\tbackground-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAFCAYAAACAcVaiAAAAHElEQVQIW2P4//+/AxAzgDADlOOAznHAKgPWAwARji8UIDTfQQAAAABJRU5ErkJggg==");\t}\t.ace_dark .ace_fold-widget:hover {\tbox-shadow: 0 1px 1px rgba(255, 255, 255, 0.2);\tbackground-color: rgba(255, 255, 255, 0.1);\t}\t.ace_dark .ace_fold-widget:active {\tbox-shadow: 0 1px 1px rgba(255, 255, 255, 0.2);\t}\t.ace_fold-widget.ace_invalid {\tbackground-color: #FFB4B4;\tborder-color: #DE5555;\t}\t.ace_fade-fold-widgets .ace_fold-widget {\t-webkit-transition: opacity 0.4s ease 0.05s;\ttransition: opacity 0.4s ease 0.05s;\topacity: 0;\t}\t.ace_fade-fold-widgets:hover .ace_fold-widget {\t-webkit-transition: opacity 0.05s ease 0.05s;\ttransition: opacity 0.05s ease 0.05s;\topacity:1;\t}\t.ace_underline {\ttext-decoration: underline;\t}\t.ace_bold {\tfont-weight: bold;\t}\t.ace_nobold .ace_bold {\tfont-weight: normal;\t}\t.ace_italic {\tfont-style: italic;\t}\t.ace_error-marker {\tbackground-color: rgba(255, 0, 0,0.2);\tposition: absolute;\tz-index: 9;\t}\t.ace_highlight-marker {\tbackground-color: rgba(255, 255, 0,0.2);\tposition: absolute;\tz-index: 8;\t}\t.ace_br1 {border-top-left-radius : 3px;}\t.ace_br2 {border-top-right-radius : 3px;}\t.ace_br3 {border-top-left-radius : 3px; border-top-right-radius: 3px;}\t.ace_br4 {border-bottom-right-radius: 3px;}\t.ace_br5 {border-top-left-radius : 3px; border-bottom-right-radius: 3px;}\t.ace_br6 {border-top-right-radius : 3px; border-bottom-right-radius: 3px;}\t.ace_br7 {border-top-left-radius : 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px;}\t.ace_br8 {border-bottom-left-radius : 3px;}\t.ace_br9 {border-top-left-radius : 3px; border-bottom-left-radius: 3px;}\t.ace_br10{border-top-right-radius : 3px; border-bottom-left-radius: 3px;}\t.ace_br11{border-top-left-radius : 3px; border-top-right-radius: 3px; border-bottom-left-radius: 3px;}\t.ace_br12{border-bottom-right-radius: 3px; border-bottom-left-radius: 3px;}\t.ace_br13{border-top-left-radius : 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px;}\t.ace_br14{border-top-right-radius : 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px;}\t.ace_br15{border-top-left-radius : 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px;}\t',"ace_editor.css");var W=function(t,e){var i=this;this.container=t||a.createElement("div"),this.$keepTextAreaAtCursor=!s.isOldIE,a.addCssClass(this.container,"ace_editor"),this.setTheme(e),this.$gutter=a.createElement("div"),this.$gutter.className="ace_gutter",this.container.appendChild(this.$gutter),this.scroller=a.createElement("div"),this.scroller.className="ace_scroller",this.container.appendChild(this.scroller),this.content=a.createElement("div"),this.content.className="ace_content",this.scroller.appendChild(this.content),this.$gutterLayer=new d(this.$gutter),this.$gutterLayer.on("changeGutterWidth",this.onGutterResize.bind(this)),this.$markerBack=new c(this.content);var l=this.$textLayer=new o(this.content);this.canvas=l.element,this.$markerFront=new c(this.content),this.$cursorLayer=new m(this.content),this.$horizScroll=!1,this.$vScroll=!1,this.scrollBar=this.scrollBarV=new b(this.container,this),this.scrollBarH=new r(this.container,this),this.scrollBarV.addEventListener("scroll",(function(t){i.$scrollAnimation||i.session.setScrollTop(t.data-i.scrollMargin.top)})),this.scrollBarH.addEventListener("scroll",(function(t){i.$scrollAnimation||i.session.setScrollLeft(t.data-i.scrollMargin.left)})),this.scrollTop=0,this.scrollLeft=0,this.cursorPos={row:0,column:0},this.$fontMetrics=new Z(this.container),this.$textLayer.$setFontMetrics(this.$fontMetrics),this.$textLayer.addEventListener("changeCharacterSize",(function(t){i.updateCharacterSize(),i.onResize(!0,i.gutterWidth,i.$size.width,i.$size.height),i._signal("changeCharacterSize",t)})),this.$size={width:0,height:0,scrollerHeight:0,scrollerWidth:0,$dirty:!0},this.layerConfig={width:1,padding:0,firstRow:0,firstRowScreen:0,lastRow:0,lineHeight:0,characterWidth:0,minHeight:1,maxHeight:1,offset:0,height:1,gutterOffset:1},this.scrollMargin={left:0,right:0,top:0,bottom:0,v:0,h:0},this.$loop=new g(this.$renderChanges.bind(this),this.container.ownerDocument.defaultView),this.$loop.schedule(this.CHANGE_FULL),this.updateCharacterSize(),this.setPadding(4),n.resetOptions(this),n._emit("renderer",this)};(function(){this.CHANGE_CURSOR=1,this.CHANGE_MARKER=2,this.CHANGE_GUTTER=4,this.CHANGE_SCROLL=8,this.CHANGE_LINES=16,this.CHANGE_TEXT=32,this.CHANGE_SIZE=64,this.CHANGE_MARKER_BACK=128,this.CHANGE_MARKER_FRONT=256,this.CHANGE_FULL=512,this.CHANGE_H_SCROLL=1024,l.implement(this,h),this.updateCharacterSize=function(){this.$textLayer.allowBoldFonts!=this.$allowBoldFonts&&(this.$allowBoldFonts=this.$textLayer.allowBoldFonts,this.setStyle("ace_nobold",!this.$allowBoldFonts)),this.layerConfig.characterWidth=this.characterWidth=this.$textLayer.getCharacterWidth(),this.layerConfig.lineHeight=this.lineHeight=this.$textLayer.getLineHeight(),this.$updatePrintMargin()},this.setSession=function(t){this.session&&this.session.doc.off("changeNewLineMode",this.onChangeNewLineMode),this.session=t,t&&this.scrollMargin.top&&t.getScrollTop()<=0&&t.setScrollTop(-this.scrollMargin.top),this.$cursorLayer.setSession(t),this.$markerBack.setSession(t),this.$markerFront.setSession(t),this.$gutterLayer.setSession(t),this.$textLayer.setSession(t),t&&(this.$loop.schedule(this.CHANGE_FULL),this.session.$setFontMetrics(this.$fontMetrics),this.onChangeNewLineMode=this.onChangeNewLineMode.bind(this),this.onChangeNewLineMode(),this.session.doc.on("changeNewLineMode",this.onChangeNewLineMode))},this.updateLines=function(t,e,i){if(void 0===e&&(e=1/0),this.$changedLines?(this.$changedLines.firstRow>t&&(this.$changedLines.firstRow=t),this.$changedLines.lastRowthis.layerConfig.lastRow||this.$loop.schedule(this.CHANGE_LINES)},this.onChangeNewLineMode=function(){this.$loop.schedule(this.CHANGE_TEXT),this.$textLayer.$updateEolChar()},this.onChangeTabSize=function(){this.$loop.schedule(this.CHANGE_TEXT|this.CHANGE_MARKER),this.$textLayer.onChangeTabSize()},this.updateText=function(){this.$loop.schedule(this.CHANGE_TEXT)},this.updateFull=function(t){t?this.$renderChanges(this.CHANGE_FULL,!0):this.$loop.schedule(this.CHANGE_FULL)},this.updateFontSize=function(){this.$textLayer.checkForSizeChanges()},this.$changes=0,this.$updateSizeAsync=function(){this.$loop.pending?this.$size.$dirty=!0:this.onResize()},this.onResize=function(t,e,i,l){if(!(this.resizing>2)){this.resizing>0?this.resizing++:this.resizing=t?1:0;var a=this.container;l||(l=a.clientHeight||a.scrollHeight),i||(i=a.clientWidth||a.scrollWidth);var n=this.$updateCachedSize(t,e,i,l);if(!this.$size.scrollerHeight||!i&&!l)return this.resizing=0;t&&(this.$gutterLayer.$padding=null),t?this.$renderChanges(n|this.$changes,!0):this.$loop.schedule(n|this.$changes),this.resizing&&(this.resizing=0),this.scrollBarV.scrollLeft=this.scrollBarV.scrollTop=null}},this.$updateCachedSize=function(t,e,i,l){l-=this.$extraHeight||0;var a=0,n=this.$size,s={width:n.width,height:n.height,scrollerHeight:n.scrollerHeight,scrollerWidth:n.scrollerWidth};return l&&(t||n.height!=l)&&(n.height=l,a|=this.CHANGE_SIZE,n.scrollerHeight=n.height,this.$horizScroll&&(n.scrollerHeight-=this.scrollBarH.getHeight()),this.scrollBarV.element.style.bottom=this.scrollBarH.getHeight()+"px",a|=this.CHANGE_SCROLL),i&&(t||n.width!=i)&&(a|=this.CHANGE_SIZE,n.width=i,null==e&&(e=this.$showGutter?this.$gutter.offsetWidth:0),this.gutterWidth=e,this.scrollBarH.element.style.left=this.scroller.style.left=e+"px",n.scrollerWidth=Math.max(0,i-e-this.scrollBarV.getWidth()),this.scrollBarH.element.style.right=this.scroller.style.right=this.scrollBarV.getWidth()+"px",this.scroller.style.bottom=this.scrollBarH.getHeight()+"px",(this.session&&this.session.getUseWrapMode()&&this.adjustWrapLimit()||t)&&(a|=this.CHANGE_FULL)),n.$dirty=!i||!l,a&&this._signal("resize",s),a},this.onGutterResize=function(){var t=this.$showGutter?this.$gutter.offsetWidth:0;t!=this.gutterWidth&&(this.$changes|=this.$updateCachedSize(!0,t,this.$size.width,this.$size.height)),this.session.getUseWrapMode()&&this.adjustWrapLimit()||this.$size.$dirty?this.$loop.schedule(this.CHANGE_FULL):(this.$computeLayerConfig(),this.$loop.schedule(this.CHANGE_MARKER))},this.adjustWrapLimit=function(){var t=this.$size.scrollerWidth-2*this.$padding,e=Math.floor(t/this.characterWidth);return this.session.adjustWrapLimit(e,this.$showPrintMargin&&this.$printMarginColumn)},this.setAnimatedScroll=function(t){this.setOption("animatedScroll",t)},this.getAnimatedScroll=function(){return this.$animatedScroll},this.setShowInvisibles=function(t){this.setOption("showInvisibles",t)},this.getShowInvisibles=function(){return this.getOption("showInvisibles")},this.getDisplayIndentGuides=function(){return this.getOption("displayIndentGuides")},this.setDisplayIndentGuides=function(t){this.setOption("displayIndentGuides",t)},this.setShowPrintMargin=function(t){this.setOption("showPrintMargin",t)},this.getShowPrintMargin=function(){return this.getOption("showPrintMargin")},this.setPrintMarginColumn=function(t){this.setOption("printMarginColumn",t)},this.getPrintMarginColumn=function(){return this.getOption("printMarginColumn")},this.getShowGutter=function(){return this.getOption("showGutter")},this.setShowGutter=function(t){return this.setOption("showGutter",t)},this.getFadeFoldWidgets=function(){return this.getOption("fadeFoldWidgets")},this.setFadeFoldWidgets=function(t){this.setOption("fadeFoldWidgets",t)},this.setHighlightGutterLine=function(t){this.setOption("highlightGutterLine",t)},this.getHighlightGutterLine=function(){return this.getOption("highlightGutterLine")},this.$updateGutterLineHighlight=function(){var t=this.$cursorLayer.$pixelPos,e=this.layerConfig.lineHeight;if(this.session.getUseWrapMode()){var i=this.session.selection.getCursor();i.column=0,t=this.$cursorLayer.getPixelPosition(i,!0),e*=this.session.getRowLength(i.row)}this.$gutterLineHighlight.style.top=t.top-this.layerConfig.offset+"px",this.$gutterLineHighlight.style.height=e+"px"},this.$updatePrintMargin=function(){if(this.$showPrintMargin||this.$printMarginEl){if(!this.$printMarginEl){var t=a.createElement("div");t.className="ace_layer ace_print-margin-layer",this.$printMarginEl=a.createElement("div"),this.$printMarginEl.className="ace_print-margin",t.appendChild(this.$printMarginEl),this.content.insertBefore(t,this.content.firstChild)}var e=this.$printMarginEl.style;e.left=this.characterWidth*this.$printMarginColumn+this.$padding+"px",e.visibility=this.$showPrintMargin?"visible":"hidden",this.session&&-1==this.session.$wrap&&this.adjustWrapLimit()}},this.getContainerElement=function(){return this.container},this.getMouseEventTarget=function(){return this.scroller},this.getTextAreaContainer=function(){return this.container},this.$moveTextAreaToCursor=function(){if(this.$keepTextAreaAtCursor){var t=this.layerConfig,e=this.$cursorLayer.$pixelPos.top,i=this.$cursorLayer.$pixelPos.left;e-=t.offset;var l=this.textarea.style,a=this.lineHeight;if(e<0||e>t.height-a)l.top=l.left="0";else{var n=this.characterWidth;if(this.$composition){var s=this.textarea.value.replace(/^\x01+/,"");n*=this.session.$getStringScreenWidth(s)[0]+2,a+=2}(i-=this.scrollLeft)>this.$size.scrollerWidth-n&&(i=this.$size.scrollerWidth-n),i+=this.gutterWidth,l.height=a+"px",l.width=n+"px",l.left=Math.min(i,this.$size.scrollerWidth-n)+"px",l.top=Math.min(e,this.$size.height-a)+"px"}}},this.getFirstVisibleRow=function(){return this.layerConfig.firstRow},this.getFirstFullyVisibleRow=function(){return this.layerConfig.firstRow+(0===this.layerConfig.offset?0:1)},this.getLastFullyVisibleRow=function(){var t=this.layerConfig,e=t.lastRow;return this.session.documentToScreenRow(e,0)*t.lineHeight-this.session.getScrollTop()>t.height-t.lineHeight?e-1:e},this.getLastVisibleRow=function(){return this.layerConfig.lastRow},this.$padding=null,this.setPadding=function(t){this.$padding=t,this.$textLayer.setPadding(t),this.$cursorLayer.setPadding(t),this.$markerFront.setPadding(t),this.$markerBack.setPadding(t),this.$loop.schedule(this.CHANGE_FULL),this.$updatePrintMargin()},this.setScrollMargin=function(t,e,i,l){var a=this.scrollMargin;a.top=0|t,a.bottom=0|e,a.right=0|l,a.left=0|i,a.v=a.top+a.bottom,a.h=a.left+a.right,a.top&&this.scrollTop<=0&&this.session&&this.session.setScrollTop(-a.top),this.updateFull()},this.getHScrollBarAlwaysVisible=function(){return this.$hScrollBarAlwaysVisible},this.setHScrollBarAlwaysVisible=function(t){this.setOption("hScrollBarAlwaysVisible",t)},this.getVScrollBarAlwaysVisible=function(){return this.$vScrollBarAlwaysVisible},this.setVScrollBarAlwaysVisible=function(t){this.setOption("vScrollBarAlwaysVisible",t)},this.$updateScrollBarV=function(){var t=this.layerConfig.maxHeight,e=this.$size.scrollerHeight;!this.$maxLines&&this.$scrollPastEnd&&(t-=(e-this.lineHeight)*this.$scrollPastEnd,this.scrollTop>t-e&&(t=this.scrollTop+e,this.scrollBarV.scrollTop=null)),this.scrollBarV.setScrollHeight(t+this.scrollMargin.v),this.scrollBarV.setScrollTop(this.scrollTop+this.scrollMargin.top)},this.$updateScrollBarH=function(){this.scrollBarH.setScrollWidth(this.layerConfig.width+2*this.$padding+this.scrollMargin.h),this.scrollBarH.setScrollLeft(this.scrollLeft+this.scrollMargin.left)},this.$frozen=!1,this.freeze=function(){this.$frozen=!0},this.unfreeze=function(){this.$frozen=!1},this.$renderChanges=function(t,e){if(this.$changes&&(t|=this.$changes,this.$changes=0),this.session&&this.container.offsetWidth&&!this.$frozen&&(t||e)){if(this.$size.$dirty)return this.$changes|=t,this.onResize(!0);this.lineHeight||this.$textLayer.checkForSizeChanges(),this._signal("beforeRender");var i=this.layerConfig;if(t&this.CHANGE_FULL||t&this.CHANGE_SIZE||t&this.CHANGE_TEXT||t&this.CHANGE_LINES||t&this.CHANGE_SCROLL||t&this.CHANGE_H_SCROLL){if(t|=this.$computeLayerConfig(),i.firstRow!=this.layerConfig.firstRow&&i.firstRowScreen==this.layerConfig.firstRowScreen){var l=this.scrollTop+(i.firstRow-this.layerConfig.firstRow)*this.lineHeight;l>0&&(this.scrollTop=l,t|=this.CHANGE_SCROLL,t|=this.$computeLayerConfig())}i=this.layerConfig,this.$updateScrollBarV(),t&this.CHANGE_H_SCROLL&&this.$updateScrollBarH(),this.$gutterLayer.element.style.marginTop=-i.offset+"px",this.content.style.marginTop=-i.offset+"px",this.content.style.width=i.width+2*this.$padding+"px",this.content.style.height=i.minHeight+"px"}if(t&this.CHANGE_H_SCROLL&&(this.content.style.marginLeft=-this.scrollLeft+"px",this.scroller.className=this.scrollLeft<=0?"ace_scroller":"ace_scroller ace_scroll-left"),t&this.CHANGE_FULL)return this.$textLayer.update(i),this.$showGutter&&this.$gutterLayer.update(i),this.$markerBack.update(i),this.$markerFront.update(i),this.$cursorLayer.update(i),this.$moveTextAreaToCursor(),this.$highlightGutterLine&&this.$updateGutterLineHighlight(),void this._signal("afterRender");if(t&this.CHANGE_SCROLL)return t&this.CHANGE_TEXT||t&this.CHANGE_LINES?this.$textLayer.update(i):this.$textLayer.scrollLines(i),this.$showGutter&&this.$gutterLayer.update(i),this.$markerBack.update(i),this.$markerFront.update(i),this.$cursorLayer.update(i),this.$highlightGutterLine&&this.$updateGutterLineHighlight(),this.$moveTextAreaToCursor(),void this._signal("afterRender");t&this.CHANGE_TEXT?(this.$textLayer.update(i),this.$showGutter&&this.$gutterLayer.update(i)):t&this.CHANGE_LINES?(this.$updateLines()||t&this.CHANGE_GUTTER&&this.$showGutter)&&this.$gutterLayer.update(i):(t&this.CHANGE_TEXT||t&this.CHANGE_GUTTER)&&this.$showGutter&&this.$gutterLayer.update(i),t&this.CHANGE_CURSOR&&(this.$cursorLayer.update(i),this.$moveTextAreaToCursor(),this.$highlightGutterLine&&this.$updateGutterLineHighlight()),t&(this.CHANGE_MARKER|this.CHANGE_MARKER_FRONT)&&this.$markerFront.update(i),t&(this.CHANGE_MARKER|this.CHANGE_MARKER_BACK)&&this.$markerBack.update(i),this._signal("afterRender")}else this.$changes|=t},this.$autosize=function(){var t=this.session.getScreenLength()*this.lineHeight,e=this.$maxLines*this.lineHeight,i=Math.max((this.$minLines||1)*this.lineHeight,Math.min(e,t))+this.scrollMargin.v+(this.$extraHeight||0);this.$horizScroll&&(i+=this.scrollBarH.getHeight());var l=t>e;if(i!=this.desiredHeight||this.$size.height!=this.desiredHeight||l!=this.$vScroll){l!=this.$vScroll&&(this.$vScroll=l,this.scrollBarV.setVisible(l));var a=this.container.clientWidth;this.container.style.height=i+"px",this.$updateCachedSize(!0,this.$gutterWidth,a,i),this.desiredHeight=i,this._signal("autosize")}},this.$computeLayerConfig=function(){var t=this.session,e=this.$size,i=e.height<=2*this.lineHeight,l=this.session.getScreenLength()*this.lineHeight,a=this.$getLongestLine(),n=!i&&(this.$hScrollBarAlwaysVisible||e.scrollerWidth-a-2*this.$padding<0),s=this.$horizScroll!==n;s&&(this.$horizScroll=n,this.scrollBarH.setVisible(n));var d=this.$vScroll;this.$maxLines&&this.lineHeight>1&&this.$autosize();var c=this.scrollTop%this.lineHeight,o=e.scrollerHeight+this.lineHeight,m=!this.$maxLines&&this.$scrollPastEnd?(e.scrollerHeight-this.lineHeight)*this.$scrollPastEnd:0;l+=m;var r=this.scrollMargin;this.session.setScrollTop(Math.max(-r.top,Math.min(this.scrollTop,l-e.scrollerHeight+r.bottom))),this.session.setScrollLeft(Math.max(-r.left,Math.min(this.scrollLeft,a+2*this.$padding-e.scrollerWidth+r.right)));var b=!i&&(this.$vScrollBarAlwaysVisible||e.scrollerHeight-l+m<0||this.scrollTop>r.top),g=d!==b;g&&(this.$vScroll=b,this.scrollBarV.setVisible(b));var Z,h,W=Math.ceil(o/this.lineHeight)-1,N=Math.max(0,Math.round((this.scrollTop-c)/this.lineHeight)),y=N+W,u=this.lineHeight;N=t.screenToDocumentRow(N,0);var I=t.getFoldLine(N);I&&(N=I.start.row),Z=t.documentToScreenRow(N,0),h=t.getRowLength(N)*u,y=Math.min(t.screenToDocumentRow(y,0),t.getLength()-1),o=e.scrollerHeight+t.getRowLength(y)*u+h,c=this.scrollTop-Z*u;var G=0;return this.layerConfig.width!=a&&(G=this.CHANGE_H_SCROLL),(s||g)&&(G=this.$updateCachedSize(!0,this.gutterWidth,e.width,e.height),this._signal("scrollbarVisibilityChanged"),g&&(a=this.$getLongestLine())),this.layerConfig={width:a,padding:this.$padding,firstRow:N,firstRowScreen:Z,lastRow:y,lineHeight:u,characterWidth:this.characterWidth,minHeight:o,maxHeight:l,offset:c,gutterOffset:Math.max(0,Math.ceil((c+e.height-e.scrollerHeight)/u)),height:this.$size.scrollerHeight},G},this.$updateLines=function(){var t=this.$changedLines.firstRow,e=this.$changedLines.lastRow;this.$changedLines=null;var i=this.layerConfig;if(!(t>i.lastRow+1||en?(e&&c+s>n+this.lineHeight&&(n-=e*this.$size.scrollerHeight),0===n&&(n=-this.scrollMargin.top),this.session.setScrollTop(n)):c+this.$size.scrollerHeight-da?(a=1-this.scrollMargin.top||e>0&&this.session.getScrollTop()+this.$size.scrollerHeight-this.layerConfig.maxHeight<-1+this.scrollMargin.bottom||t<0&&this.session.getScrollLeft()>=1-this.scrollMargin.left||t>0&&this.session.getScrollLeft()+this.$size.scrollerWidth-this.layerConfig.width<-1+this.scrollMargin.right||void 0},this.pixelToScreenCoordinates=function(t,e){var i=this.scroller.getBoundingClientRect(),l=(t+this.scrollLeft-i.left-this.$padding)/this.characterWidth,a=Math.floor((e+this.scrollTop-i.top)/this.lineHeight),n=Math.round(l);return{row:a,column:n,side:l-n>0?1:-1}},this.screenToTextCoordinates=function(t,e){var i=this.scroller.getBoundingClientRect(),l=Math.round((t+this.scrollLeft-i.left-this.$padding)/this.characterWidth),a=(e+this.scrollTop-i.top)/this.lineHeight;return this.session.screenToDocumentPosition(a,Math.max(l,0))},this.textToScreenCoordinates=function(t,e){var i=this.scroller.getBoundingClientRect(),l=this.session.documentToScreenPosition(t,e),a=this.$padding+Math.round(l.column*this.characterWidth),n=l.row*this.lineHeight;return{pageX:i.left+a-this.scrollLeft,pageY:i.top+n-this.scrollTop}},this.visualizeFocus=function(){a.addCssClass(this.container,"ace_focus")},this.visualizeBlur=function(){a.removeCssClass(this.container,"ace_focus")},this.showComposition=function(t){this.$composition||(this.$composition={keepTextAreaAtCursor:this.$keepTextAreaAtCursor,cssText:this.textarea.style.cssText}),this.$keepTextAreaAtCursor=!0,a.addCssClass(this.textarea,"ace_composition"),this.textarea.style.cssText="",this.$moveTextAreaToCursor()},this.setCompositionText=function(t){this.$moveTextAreaToCursor()},this.hideComposition=function(){this.$composition&&(a.removeCssClass(this.textarea,"ace_composition"),this.$keepTextAreaAtCursor=this.$composition.keepTextAreaAtCursor,this.textarea.style.cssText=this.$composition.cssText,this.$composition=null)},this.setTheme=function(t,e){var i=this;if(this.$themeId=t,i._dispatchEvent("themeChange",{theme:t}),t&&"string"!=typeof t)s(t);else{var l=t||this.$options.theme.initialValue;n.loadModule(["theme",l],s)}function s(l){if(i.$themeId!=t)return e&&e();if(l.cssClass){a.importCssString(l.cssText,l.cssClass,i.container.ownerDocument),i.theme&&a.removeCssClass(i.container,i.theme.cssClass);var n="padding"in l?l.padding:"padding"in(i.theme||{})?4:i.$padding;i.$padding&&n!=i.$padding&&i.setPadding(n),i.$theme=l.cssClass,i.theme=l,a.addCssClass(i.container,l.cssClass),a.setCssClass(i.container,"ace_dark",l.isDark),i.$size&&(i.$size.width=0,i.$updateSizeAsync()),i._dispatchEvent("themeLoaded",{theme:l}),e&&e()}}},this.getTheme=function(){return this.$themeId},this.setStyle=function(t,e){a.setCssClass(this.container,t,!1!==e)},this.unsetStyle=function(t){a.removeCssClass(this.container,t)},this.setCursorStyle=function(t){this.scroller.style.cursor!=t&&(this.scroller.style.cursor=t)},this.setMouseCursor=function(t){this.scroller.style.cursor=t},this.destroy=function(){this.$textLayer.destroy(),this.$cursorLayer.destroy()}}).call(W.prototype),n.defineOptions(W.prototype,"renderer",{animatedScroll:{initialValue:!1},showInvisibles:{set:function(t){this.$textLayer.setShowInvisibles(t)&&this.$loop.schedule(this.CHANGE_TEXT)},initialValue:!1},showPrintMargin:{set:function(){this.$updatePrintMargin()},initialValue:!0},printMarginColumn:{set:function(){this.$updatePrintMargin()},initialValue:80},printMargin:{set:function(t){"number"==typeof t&&(this.$printMarginColumn=t),this.$showPrintMargin=!!t,this.$updatePrintMargin()},get:function(){return this.$showPrintMargin&&this.$printMarginColumn}},showGutter:{set:function(t){this.$gutter.style.display=t?"block":"none",this.$loop.schedule(this.CHANGE_FULL),this.onGutterResize()},initialValue:!0},fadeFoldWidgets:{set:function(t){a.setCssClass(this.$gutter,"ace_fade-fold-widgets",t)},initialValue:!1},showFoldWidgets:{set:function(t){this.$gutterLayer.setShowFoldWidgets(t)},initialValue:!0},showLineNumbers:{set:function(t){this.$gutterLayer.setShowLineNumbers(t),this.$loop.schedule(this.CHANGE_GUTTER)},initialValue:!0},displayIndentGuides:{set:function(t){this.$textLayer.setDisplayIndentGuides(t)&&this.$loop.schedule(this.CHANGE_TEXT)},initialValue:!0},highlightGutterLine:{set:function(t){if(!this.$gutterLineHighlight)return this.$gutterLineHighlight=a.createElement("div"),this.$gutterLineHighlight.className="ace_gutter-active-line",void this.$gutter.appendChild(this.$gutterLineHighlight);this.$gutterLineHighlight.style.display=t?"":"none",this.$cursorLayer.$pixelPos&&this.$updateGutterLineHighlight()},initialValue:!1,value:!0},hScrollBarAlwaysVisible:{set:function(t){this.$hScrollBarAlwaysVisible&&this.$horizScroll||this.$loop.schedule(this.CHANGE_SCROLL)},initialValue:!1},vScrollBarAlwaysVisible:{set:function(t){this.$vScrollBarAlwaysVisible&&this.$vScroll||this.$loop.schedule(this.CHANGE_SCROLL)},initialValue:!1},fontSize:{set:function(t){"number"==typeof t&&(t+="px"),this.container.style.fontSize=t,this.updateFontSize()},initialValue:12},fontFamily:{set:function(t){this.container.style.fontFamily=t,this.updateFontSize()}},maxLines:{set:function(t){this.updateFull()}},minLines:{set:function(t){this.updateFull()}},scrollPastEnd:{set:function(t){t=+t||0,this.$scrollPastEnd!=t&&(this.$scrollPastEnd=t,this.$loop.schedule(this.CHANGE_SCROLL))},initialValue:0,handlesSet:!0},fixedWidthGutter:{set:function(t){this.$gutterLayer.$fixedWidth=!!t,this.$loop.schedule(this.CHANGE_GUTTER)}},theme:{set:function(t){this.setTheme(t)},get:function(){return this.$themeId||this.theme},initialValue:"./theme/textmate",handlesSet:!0}}),e.VirtualRenderer=W})),ace.define("ace/worker/worker_client",["require","exports","module","ace/lib/oop","ace/lib/net","ace/lib/event_emitter","ace/config"],(function(t,e,l){"use strict";var a=t("../lib/oop"),n=t("../lib/net"),s=t("../lib/event_emitter").EventEmitter,d=t("../config"),c=function(e,l,a,n){if(this.$sendDeltaQueue=this.$sendDeltaQueue.bind(this),this.changeListener=this.changeListener.bind(this),this.onMessage=this.onMessage.bind(this),t.nameToUrl&&!t.toUrl&&(t.toUrl=t.nameToUrl),d.get("packaged")||!t.toUrl)n=n||d.moduleUrl(l.id,"worker");else{var s=this.$normalizePath;n=n||s(t.toUrl("ace/worker/worker.js",null,"_"));var c={};e.forEach((function(e){c[e]=s(t.toUrl(e,null,"_").replace(/(\.js)?(\?.*)?$/,""))}))}try{var o=l.src,m=new(i(66))([o],{type:"application/javascript"}),r=(window.URL||window.webkitURL).createObjectURL(m);this.$worker=new Worker(r)}catch(t){if(!(t instanceof window.DOMException))throw t;m=this.$workerBlob(n);var b=window.URL||window.webkitURL,g=b.createObjectURL(m);this.$worker=new Worker(g),b.revokeObjectURL(g)}this.$worker.postMessage({init:!0,tlns:c,module:l.id,classname:a}),this.callbackId=1,this.callbacks={},this.$worker.onmessage=this.onMessage};(function(){a.implement(this,s),this.onMessage=function(t){var e=t.data;switch(e.type){case"event":this._signal(e.name,{data:e.data});break;case"call":var i=this.callbacks[e.id];i&&(i(e.data),delete this.callbacks[e.id]);break;case"error":this.reportError(e.data);break;case"log":window.console&&console.log&&console.log.apply(console,e.data)}},this.reportError=function(t){window.console&&console.error&&console.error(t)},this.$normalizePath=function(t){return n.qualifyURL(t)},this.terminate=function(){this._signal("terminate",{}),this.deltaQueue=null,this.$worker.terminate(),this.$worker=null,this.$doc&&this.$doc.off("change",this.changeListener),this.$doc=null},this.send=function(t,e){this.$worker.postMessage({command:t,args:e})},this.call=function(t,e,i){if(i){var l=this.callbackId++;this.callbacks[l]=i,e.push(l)}this.send(t,e)},this.emit=function(t,e){try{this.$worker.postMessage({event:t,data:{data:e.data}})}catch(t){console.error(t.stack)}},this.attachToDocument=function(t){this.$doc&&this.terminate(),this.$doc=t,this.call("setValue",[t.getValue()]),t.on("change",this.changeListener)},this.changeListener=function(t){this.deltaQueue||(this.deltaQueue=[],setTimeout(this.$sendDeltaQueue,0)),"insert"==t.action?this.deltaQueue.push(t.start,t.lines):this.deltaQueue.push(t.start,t.end)},this.$sendDeltaQueue=function(){var t=this.deltaQueue;t&&(this.deltaQueue=null,t.length>50&&t.length>this.$doc.getLength()>>1?this.call("setValue",[this.$doc.getValue()]):this.emit("change",{data:t}))},this.$workerBlob=function(t){var e="importScripts('"+n.qualifyURL(t)+"');";try{return new Blob([e],{type:"application/javascript"})}catch(t){var i=new(window.BlobBuilder||window.WebKitBlobBuilder||window.MozBlobBuilder);return i.append(e),i.getBlob("application/javascript")}}}).call(c.prototype);var o=function(t,e,i){this.$sendDeltaQueue=this.$sendDeltaQueue.bind(this),this.changeListener=this.changeListener.bind(this),this.callbackId=1,this.callbacks={},this.messageBuffer=[];var l=null,a=!1,n=Object.create(s),c=this;this.$worker={},this.$worker.terminate=function(){},this.$worker.postMessage=function(t){c.messageBuffer.push(t),l&&(a?setTimeout(o):o())},this.setEmitSync=function(t){a=t};var o=function(){var t=c.messageBuffer.shift();t.command?l[t.command].apply(l,t.args):t.event&&n._signal(t.event,t.data)};n.postMessage=function(t){c.onMessage({data:t})},n.callback=function(t,e){this.postMessage({type:"call",id:e,data:t})},n.emit=function(t,e){this.postMessage({type:"event",name:t,data:e})},d.loadModule(["worker",e],(function(t){for(l=new t[i](n);c.messageBuffer.length;)o()}))};o.prototype=c.prototype,e.UIWorkerClient=o,e.WorkerClient=c})),ace.define("ace/placeholder",["require","exports","module","ace/range","ace/lib/event_emitter","ace/lib/oop"],(function(t,e,i){"use strict";var l=t("./range").Range,a=t("./lib/event_emitter").EventEmitter,n=t("./lib/oop"),s=function(t,e,i,l,a,n){var s=this;this.length=e,this.session=t,this.doc=t.getDocument(),this.mainClass=a,this.othersClass=n,this.$onUpdate=this.onUpdate.bind(this),this.doc.on("change",this.$onUpdate),this.$others=l,this.$onCursorChange=function(){setTimeout((function(){s.onCursorChange()}))},this.$pos=i;var d=t.getUndoManager().$undoStack||t.getUndoManager().$undostack||{length:-1};this.$undoStackDepth=d.length,this.setup(),t.selection.on("changeCursor",this.$onCursorChange)};(function(){n.implement(this,a),this.setup=function(){var t=this,e=this.doc,i=this.session;this.selectionBefore=i.selection.toJSON(),i.selection.inMultiSelectMode&&i.selection.toSingleRange(),this.pos=e.createAnchor(this.$pos.row,this.$pos.column);var a=this.pos;a.$insertRight=!0,a.detach(),a.markerId=i.addMarker(new l(a.row,a.column,a.row,a.column+this.length),this.mainClass,null,!1),this.others=[],this.$others.forEach((function(i){var l=e.createAnchor(i.row,i.column);l.$insertRight=!0,l.detach(),t.others.push(l)})),i.setUndoSelect(!1)},this.showOtherMarkers=function(){if(!this.othersActive){var t=this.session,e=this;this.othersActive=!0,this.others.forEach((function(i){i.markerId=t.addMarker(new l(i.row,i.column,i.row,i.column+e.length),e.othersClass,null,!1)}))}},this.hideOtherMarkers=function(){if(this.othersActive){this.othersActive=!1;for(var t=0;t=this.pos.column&&e.start.column<=this.pos.column+this.length+1,n=e.start.column-this.pos.column;if(this.updateAnchors(t),a&&(this.length+=i),a&&!this.session.$fromUndo)if("insert"===t.action)for(var s=this.others.length-1;s>=0;s--){var d={row:(c=this.others[s]).row,column:c.column+n};this.doc.insertMergedLines(d,t.lines)}else if("remove"===t.action)for(s=this.others.length-1;s>=0;s--){var c;d={row:(c=this.others[s]).row,column:c.column+n},this.doc.remove(new l(d.row,d.column,d.row,d.column-i))}this.$updating=!1,this.updateMarkers()}},this.updateAnchors=function(t){this.pos.onChange(t);for(var e=this.others.length;e--;)this.others[e].onChange(t);this.updateMarkers()},this.updateMarkers=function(){if(!this.$updating){var t=this,e=this.session,i=function(i,a){e.removeMarker(i.markerId),i.markerId=e.addMarker(new l(i.row,i.column,i.row,i.column+t.length),a,null,!1)};i(this.pos,this.mainClass);for(var a=this.others.length;a--;)i(this.others[a],this.othersClass)}},this.onCursorChange=function(t){if(!this.$updating&&this.session){var e=this.session.selection.getCursor();e.row===this.pos.row&&e.column>=this.pos.column&&e.column<=this.pos.column+this.length?(this.showOtherMarkers(),this._emit("cursorEnter",t)):(this.hideOtherMarkers(),this._emit("cursorLeave",t))}},this.detach=function(){this.session.removeMarker(this.pos&&this.pos.markerId),this.hideOtherMarkers(),this.doc.removeEventListener("change",this.$onUpdate),this.session.selection.removeEventListener("changeCursor",this.$onCursorChange),this.session.setUndoSelect(!0),this.session=null},this.cancel=function(){if(-1!==this.$undoStackDepth){for(var t=this.session.getUndoManager(),e=(t.$undoStack||t.$undostack).length-this.$undoStackDepth,i=0;i1&&!this.inMultiSelectMode&&(this._signal("multiSelect"),this.inMultiSelectMode=!0,this.session.$undoSelect=!1,this.rangeList.attach(this.session)),e||this.fromOrientedRange(t)}},this.toSingleRange=function(t){t=t||this.ranges[0];var e=this.rangeList.removeAll();e.length&&this.$onRemoveRange(e),t&&this.fromOrientedRange(t)},this.substractPoint=function(t){var e=this.rangeList.substractPoint(t);if(e)return this.$onRemoveRange(e),e[0]},this.mergeOverlappingRanges=function(){var t=this.rangeList.merge();t.length?this.$onRemoveRange(t):this.ranges[0]&&this.fromOrientedRange(this.ranges[0])},this.$onAddRange=function(t){this.rangeCount=this.rangeList.ranges.length,this.ranges.unshift(t),this._signal("addRange",{range:t})},this.$onRemoveRange=function(t){if(this.rangeCount=this.rangeList.ranges.length,1==this.rangeCount&&this.inMultiSelectMode){var e=this.rangeList.ranges.pop();t.push(e),this.rangeCount=0}for(var i=t.length;i--;){var l=this.ranges.indexOf(t[i]);this.ranges.splice(l,1)}this._signal("removeRange",{ranges:t}),0===this.rangeCount&&this.inMultiSelectMode&&(this.inMultiSelectMode=!1,this._signal("singleSelect"),this.session.$undoSelect=!0,this.rangeList.detach(this.session)),(e=e||this.ranges[0])&&!e.isEqual(this.getRange())&&this.fromOrientedRange(e)},this.$initRangeList=function(){this.rangeList||(this.rangeList=new l,this.ranges=[],this.rangeCount=0)},this.getAllRanges=function(){return this.rangeCount?this.rangeList.ranges.concat():[this.getRange()]},this.splitIntoLines=function(){if(this.rangeCount>1){var t=this.rangeList.ranges,e=t[t.length-1],i=a.fromPoints(t[0].start,e.end);this.toSingleRange(),this.setSelectionRange(i,e.cursor==e.start)}else{i=this.getRange();var l=this.isBackwards(),n=i.start.row,s=i.end.row;if(n==s){if(l)var d=i.end,c=i.start;else d=i.start,c=i.end;return this.addRange(a.fromPoints(c,c)),void this.addRange(a.fromPoints(d,d))}var o=[],m=this.getLineRange(n,!0);m.start.column=i.start.column,o.push(m);for(var r=n+1;r1){var t=this.rangeList.ranges,e=t[t.length-1],i=a.fromPoints(t[0].start,e.end);this.toSingleRange(),this.setSelectionRange(i,e.cursor==e.start)}else{var l=this.session.documentToScreenPosition(this.selectionLead),n=this.session.documentToScreenPosition(this.selectionAnchor);this.rectangularRangeBlock(l,n).forEach(this.addRange,this)}},this.rectangularRangeBlock=function(t,e,i){var l=[],n=t.column0;)W--;if(W>0)for(var N=0;l[N].isEmpty();)N++;for(var y=W;y>=N;y--)l[y].isEmpty()&&l.splice(y,1)}return l}}.call(n.prototype);var b=t("./editor").Editor;function g(t){t.$multiselectOnSessionChange||(t.$onAddRange=t.$onAddRange.bind(t),t.$onRemoveRange=t.$onRemoveRange.bind(t),t.$onMultiSelect=t.$onMultiSelect.bind(t),t.$onSingleSelect=t.$onSingleSelect.bind(t),t.$multiselectOnSessionChange=e.onSessionChange.bind(t),t.$checkMultiselectChange=t.$checkMultiselectChange.bind(t),t.$multiselectOnSessionChange(t),t.on("changeSession",t.$multiselectOnSessionChange),t.on("mousedown",s),t.commands.addCommands(o.defaultCommands),function(t){var e=t.textInput.getElement(),i=!1;function l(e){i&&(t.renderer.setMouseCursor(""),i=!1)}d.addListener(e,"keydown",(function(e){var a=18==e.keyCode&&!(e.ctrlKey||e.shiftKey||e.metaKey);t.$blockSelectEnabled&&a?i||(t.renderer.setMouseCursor("crosshair"),i=!0):i&&l()})),d.addListener(e,"keyup",l),d.addListener(e,"blur",l)}(t))}(function(){this.updateSelectionMarkers=function(){this.renderer.updateCursor(),this.renderer.updateBackMarkers()},this.addSelectionMarker=function(t){t.cursor||(t.cursor=t.end);var e=this.getSelectionStyle();return t.marker=this.session.addMarker(t,"ace_selection",e),this.session.$selectionMarkers.push(t),this.session.selectionMarkerCount=this.session.$selectionMarkers.length,t},this.removeSelectionMarker=function(t){if(t.marker){this.session.removeMarker(t.marker);var e=this.session.$selectionMarkers.indexOf(t);-1!=e&&this.session.$selectionMarkers.splice(e,1),this.session.selectionMarkerCount=this.session.$selectionMarkers.length}},this.removeSelectionMarkers=function(t){for(var e=this.session.$selectionMarkers,i=t.length;i--;){var l=t[i];if(l.marker){this.session.removeMarker(l.marker);var a=e.indexOf(l);-1!=a&&e.splice(a,1)}}this.session.selectionMarkerCount=e.length},this.$onAddRange=function(t){this.addSelectionMarker(t.range),this.renderer.updateCursor(),this.renderer.updateBackMarkers()},this.$onRemoveRange=function(t){this.removeSelectionMarkers(t.ranges),this.renderer.updateCursor(),this.renderer.updateBackMarkers()},this.$onMultiSelect=function(t){this.inMultiSelectMode||(this.inMultiSelectMode=!0,this.setStyle("ace_multiselect"),this.keyBinding.addKeyboardHandler(o.keyboardHandler),this.commands.setDefaultHandler("exec",this.$onMultiSelectExec),this.renderer.updateCursor(),this.renderer.updateBackMarkers())},this.$onSingleSelect=function(t){this.session.multiSelect.inVirtualMode||(this.inMultiSelectMode=!1,this.unsetStyle("ace_multiselect"),this.keyBinding.removeKeyboardHandler(o.keyboardHandler),this.commands.removeDefaultHandler("exec",this.$onMultiSelectExec),this.renderer.updateCursor(),this.renderer.updateBackMarkers(),this._emit("changeSelection"))},this.$onMultiSelectExec=function(t){var e=t.command,i=t.editor;if(i.multiSelect){if(e.multiSelectAction)"forEach"==e.multiSelectAction?l=i.forEachSelection(e,t.args):"forEachLine"==e.multiSelectAction?l=i.forEachSelection(e,t.args,!0):"single"==e.multiSelectAction?(i.exitMultiSelectMode(),l=e.exec(i,t.args||{})):l=e.multiSelectAction(i,t.args||{});else{var l=e.exec(i,t.args||{});i.multiSelect.addRange(i.multiSelect.toOrientedRange()),i.multiSelect.mergeOverlappingRanges()}return l}},this.forEachSelection=function(t,e,i){if(!this.inVirtualSelectionMode){var l,a=i&&i.keepOrder,s=1==i||i&&i.$byLines,d=this.session,c=this.selection,o=c.rangeList,m=(a?c:o).ranges;if(!m.length)return t.exec?t.exec(this,e||{}):t(this,e||{});var r=c._eventRegistry;c._eventRegistry={};var b=new n(d);this.inVirtualSelectionMode=!0;for(var g=m.length;g--;){if(s)for(;g>0&&m[g].start.row==m[g-1].end.row;)g--;b.fromOrientedRange(m[g]),b.index=g,this.selection=d.selection=b;var Z=t.exec?t.exec(this,e||{}):t(this,e||{});l||void 0===Z||(l=Z),b.toOrientedRange(m[g])}b.detach(),this.selection=d.selection=c,this.inVirtualSelectionMode=!1,c._eventRegistry=r,c.mergeOverlappingRanges();var h=this.renderer.$scrollAnimation;return this.onCursorChange(),this.onSelectionChange(),h&&h.from==h.to&&this.renderer.animateScrolling(h.from),l}},this.exitMultiSelectMode=function(){this.inMultiSelectMode&&!this.inVirtualSelectionMode&&this.multiSelect.toSingleRange()},this.getSelectedText=function(){var t="";if(this.inMultiSelectMode&&!this.inVirtualSelectionMode){for(var e=this.multiSelect.rangeList.ranges,i=[],l=0;ls&&(s=i.column),lm?t.insert(l,c.stringRepeat(" ",n-m)):t.remove(new a(l.row,l.column,l.row,l.column-n+m)),e.start.column=e.end.column=s,e.start.row=e.end.row=l.row,e.cursor=e.end})),e.fromOrientedRange(i[0]),this.renderer.updateCursor(),this.renderer.updateBackMarkers()}else{var m=this.selection.getRange(),r=m.start.row,b=m.end.row,g=r==b;if(g){var Z,h=this.session.getLength();do{Z=this.session.getLine(b)}while(/[=:]/.test(Z)&&++b0);r<0&&(r=0),b>=h&&(b=h-1)}var W=this.session.removeFullLines(r,b);W=this.$reAlignText(W,g),this.session.insert({row:r,column:0},W.join("\n")+"\n"),g||(m.start.column=0,m.end.column=W[W.length-1].length),this.selection.setRange(m)}},this.$reAlignText=function(t,e){var i,l,a,n=!0,s=!0;return t.map((function(t){var e=t.match(/(\s*)(.*?)(\s*)([=:].*)/);return e?null==i?(i=e[1].length,l=e[2].length,a=e[3].length,e):(i+l+a!=e[1].length+e[2].length+e[3].length&&(s=!1),i!=e[1].length&&(n=!1),i>e[1].length&&(i=e[1].length),le[3].length&&(a=e[3].length),e):[t]})).map(e?o:n?s?function(t){return t[2]?d(i+l-t[2].length)+t[2]+d(a)+t[4].replace(/^([=:])\s+/,"$1 "):t[0]}:o:function(t){return t[2]?d(i)+t[2]+d(a)+t[4].replace(/^([=:])\s+/,"$1 "):t[0]});function d(t){return c.stringRepeat(" ",t)}function o(t){return t[2]?d(i)+t[2]+d(l-t[2].length+a)+t[4].replace(/^([=:])\s+/,"$1 "):t[0]}}}).call(b.prototype),e.onSessionChange=function(t){var e=t.session;e&&!e.multiSelect&&(e.$selectionMarkers=[],e.selection.$initRangeList(),e.multiSelect=e.selection),this.multiSelect=e&&e.multiSelect;var i=t.oldSession;i&&(i.multiSelect.off("addRange",this.$onAddRange),i.multiSelect.off("removeRange",this.$onRemoveRange),i.multiSelect.off("multiSelect",this.$onMultiSelect),i.multiSelect.off("singleSelect",this.$onSingleSelect),i.multiSelect.lead.off("change",this.$checkMultiselectChange),i.multiSelect.anchor.off("change",this.$checkMultiselectChange)),e&&(e.multiSelect.on("addRange",this.$onAddRange),e.multiSelect.on("removeRange",this.$onRemoveRange),e.multiSelect.on("multiSelect",this.$onMultiSelect),e.multiSelect.on("singleSelect",this.$onSingleSelect),e.multiSelect.lead.on("change",this.$checkMultiselectChange),e.multiSelect.anchor.on("change",this.$checkMultiselectChange)),e&&this.inMultiSelectMode!=e.selection.inMultiSelectMode&&(e.selection.inMultiSelectMode?this.$onMultiSelect():this.$onSingleSelect())},e.MultiSelect=g,t("./config").defineOptions(b.prototype,"editor",{enableMultiselect:{set:function(t){g(this),t?(this.on("changeSession",this.$multiselectOnSessionChange),this.on("mousedown",s)):(this.off("changeSession",this.$multiselectOnSessionChange),this.off("mousedown",s))},value:!0},enableBlockSelect:{set:function(t){this.$blockSelectEnabled=t},value:!0}})})),ace.define("ace/mode/folding/fold_mode",["require","exports","module","ace/range"],(function(t,e,i){"use strict";var l=t("../../range").Range,a=e.FoldMode=function(){};(function(){this.foldingStartMarker=null,this.foldingStopMarker=null,this.getFoldWidget=function(t,e,i){var l=t.getLine(i);return this.foldingStartMarker.test(l)?"start":"markbeginend"==e&&this.foldingStopMarker&&this.foldingStopMarker.test(l)?"end":""},this.getFoldWidgetRange=function(t,e,i){return null},this.indentationBlock=function(t,e,i){var a=/\S/,n=t.getLine(e),s=n.search(a);if(-1!=s){for(var d=i||n.length,c=t.getLength(),o=e,m=e;++eo){var b=t.getLine(m).length;return new l(o,d,m,b)}}},this.openingBracketBlock=function(t,e,i,a,n){var s={row:i,column:a+1},d=t.$findClosingBracket(e,s,n);if(d){var c=t.foldWidgets[d.row];return null==c&&(c=t.getFoldWidget(d.row)),"start"==c&&d.row>s.row&&(d.row--,d.column=t.getLine(d.row).length),l.fromPoints(s,d)}},this.closingBracketBlock=function(t,e,i,a,n){var s={row:i,column:a},d=t.$findOpeningBracket(e,s);if(d)return d.column++,s.column--,l.fromPoints(d,s)}}).call(a.prototype)})),ace.define("ace/theme/textmate",["require","exports","module","ace/lib/dom"],(function(t,e,i){"use strict";e.isDark=!1,e.cssClass="ace-tm",e.cssText='.ace-tm .ace_gutter {\tbackground: #f0f0f0;\tcolor: #333;\t}\t.ace-tm .ace_print-margin {\twidth: 1px;\tbackground: #e8e8e8;\t}\t.ace-tm .ace_fold {\tbackground-color: #6B72E6;\t}\t.ace-tm {\tbackground-color: #FFFFFF;\tcolor: black;\t}\t.ace-tm .ace_cursor {\tcolor: black;\t}\t.ace-tm .ace_invisible {\tcolor: rgb(191, 191, 191);\t}\t.ace-tm .ace_storage,\t.ace-tm .ace_keyword {\tcolor: blue;\t}\t.ace-tm .ace_constant {\tcolor: rgb(197, 6, 11);\t}\t.ace-tm .ace_constant.ace_buildin {\tcolor: rgb(88, 72, 246);\t}\t.ace-tm .ace_constant.ace_language {\tcolor: rgb(88, 92, 246);\t}\t.ace-tm .ace_constant.ace_library {\tcolor: rgb(6, 150, 14);\t}\t.ace-tm .ace_invalid {\tbackground-color: rgba(255, 0, 0, 0.1);\tcolor: red;\t}\t.ace-tm .ace_support.ace_function {\tcolor: rgb(60, 76, 114);\t}\t.ace-tm .ace_support.ace_constant {\tcolor: rgb(6, 150, 14);\t}\t.ace-tm .ace_support.ace_type,\t.ace-tm .ace_support.ace_class {\tcolor: rgb(109, 121, 222);\t}\t.ace-tm .ace_keyword.ace_operator {\tcolor: rgb(104, 118, 135);\t}\t.ace-tm .ace_string {\tcolor: rgb(3, 106, 7);\t}\t.ace-tm .ace_comment {\tcolor: rgb(76, 136, 107);\t}\t.ace-tm .ace_comment.ace_doc {\tcolor: rgb(0, 102, 255);\t}\t.ace-tm .ace_comment.ace_doc.ace_tag {\tcolor: rgb(128, 159, 191);\t}\t.ace-tm .ace_constant.ace_numeric {\tcolor: rgb(0, 0, 205);\t}\t.ace-tm .ace_variable {\tcolor: rgb(49, 132, 149);\t}\t.ace-tm .ace_xml-pe {\tcolor: rgb(104, 104, 91);\t}\t.ace-tm .ace_entity.ace_name.ace_function {\tcolor: #0000A2;\t}\t.ace-tm .ace_heading {\tcolor: rgb(12, 7, 255);\t}\t.ace-tm .ace_list {\tcolor:rgb(185, 6, 144);\t}\t.ace-tm .ace_meta.ace_tag {\tcolor:rgb(0, 22, 142);\t}\t.ace-tm .ace_string.ace_regex {\tcolor: rgb(255, 0, 0)\t}\t.ace-tm .ace_marker-layer .ace_selection {\tbackground: rgb(181, 213, 255);\t}\t.ace-tm.ace_multiselect .ace_selection.ace_start {\tbox-shadow: 0 0 3px 0px white;\t}\t.ace-tm .ace_marker-layer .ace_step {\tbackground: rgb(252, 255, 0);\t}\t.ace-tm .ace_marker-layer .ace_stack {\tbackground: rgb(164, 229, 101);\t}\t.ace-tm .ace_marker-layer .ace_bracket {\tmargin: -1px 0 0 -1px;\tborder: 1px solid rgb(192, 192, 192);\t}\t.ace-tm .ace_marker-layer .ace_active-line {\tbackground: rgba(0, 0, 0, 0.07);\t}\t.ace-tm .ace_gutter-active-line {\tbackground-color : #dcdcdc;\t}\t.ace-tm .ace_marker-layer .ace_selected-word {\tbackground: rgb(250, 250, 255);\tborder: 1px solid rgb(200, 200, 250);\t}\t.ace-tm .ace_indent-guide {\tbackground: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAE0lEQVQImWP4////f4bLly//BwAmVgd1/w11/gAAAABJRU5ErkJggg==") right repeat-y;\t}\t',t("../lib/dom").importCssString(e.cssText,e.cssClass)})),ace.define("ace/line_widgets",["require","exports","module","ace/lib/oop","ace/lib/dom","ace/range"],(function(t,e,i){"use strict";t("./lib/oop");var l=t("./lib/dom");function a(t){this.session=t,this.session.widgetManager=this,this.session.getRowLength=this.getRowLength,this.session.$getWidgetScreenLength=this.$getWidgetScreenLength,this.updateOnChange=this.updateOnChange.bind(this),this.renderWidgets=this.renderWidgets.bind(this),this.measureWidgets=this.measureWidgets.bind(this),this.session._changedWidgets=[],this.$onChangeEditor=this.$onChangeEditor.bind(this),this.session.on("change",this.updateOnChange),this.session.on("changeFold",this.updateOnFold),this.session.on("changeEditor",this.$onChangeEditor)}t("./range").Range,function(){this.getRowLength=function(t){var e;return e=this.lineWidgets&&this.lineWidgets[t]&&this.lineWidgets[t].rowCount||0,this.$useWrapMode&&this.$wrapData[t]?this.$wrapData[t].length+1+e:1+e},this.$getWidgetScreenLength=function(){var t=0;return this.lineWidgets.forEach((function(e){e&&e.rowCount&&!e.hidden&&(t+=e.rowCount)})),t},this.$onChangeEditor=function(t){this.attach(t.editor)},this.attach=function(t){t&&t.widgetManager&&t.widgetManager!=this&&t.widgetManager.detach(),this.editor!=t&&(this.detach(),this.editor=t,t&&(t.widgetManager=this,t.renderer.on("beforeRender",this.measureWidgets),t.renderer.on("afterRender",this.renderWidgets)))},this.detach=function(t){var e=this.editor;if(e){this.editor=null,e.widgetManager=null,e.renderer.off("beforeRender",this.measureWidgets),e.renderer.off("afterRender",this.renderWidgets);var i=this.session.lineWidgets;i&&i.forEach((function(t){t&&t.el&&t.el.parentNode&&(t._inDocument=!1,t.el.parentNode.removeChild(t.el))}))}},this.updateOnFold=function(t,e){var i=e.lineWidgets;if(i&&t.action){for(var l=t.data,a=l.start.row,n=l.end.row,s="add"==t.action,d=a+1;d0&&!l[a];)a--;this.firstRow=i.firstRow,this.lastRow=i.lastRow,e.$cursorLayer.config=i;for(var s=a;s<=n;s++){var d=l[s];if(d&&d.el)if(d.hidden)d.el.style.top=-100-(d.pixelHeight||0)+"px";else{d._inDocument||(d._inDocument=!0,e.container.appendChild(d.el));var c=e.$cursorLayer.getPixelPosition({row:s,column:0},!0).top;d.coverLine||(c+=i.lineHeight*this.session.getRowLineCount(d.row)),d.el.style.top=c-i.offset+"px";var o=d.coverGutter?0:e.gutterWidth;d.fixedWidth||(o-=e.scrollLeft),d.el.style.left=o+"px",d.fullWidth&&d.screenWidth&&(d.el.style.minWidth=i.width+2*i.padding+"px"),d.fixedWidth?d.el.style.right=e.scrollBar.getWidth()+"px":d.el.style.right=""}}}}}.call(a.prototype),e.LineWidgets=a})),ace.define("ace/ext/error_marker",["require","exports","module","ace/line_widgets","ace/lib/dom","ace/range"],(function(t,e,i){"use strict";var l=t("../line_widgets").LineWidgets,a=t("../lib/dom"),n=t("../range").Range;e.showErrorMarker=function(t,e){var i=t.session;i.widgetManager||(i.widgetManager=new l(i),i.widgetManager.attach(t));var s=t.getCursorPosition(),d=s.row,c=i.widgetManager.getWidgetsAtRow(d).filter((function(t){return"errorMarker"==t.type}))[0];c?c.destroy():d-=e;var o,m=function(t,e,i){var l=t.getAnnotations().sort(n.comparePoints);if(l.length){var a=function(t,e,i){for(var l=0,a=t.length-1;l<=a;){var n=l+a>>1,s=i(e,t[n]);if(s>0)l=n+1;else{if(!(s<0))return n;a=n-1}}return-(l+1)}(l,{row:e,column:-1},n.comparePoints);a<0&&(a=-a-1),a>=l.length?a=i>0?0:l.length-1:0===a&&i<0&&(a=l.length-1);var s=l[a];if(s&&i){if(s.row===e){do{s=l[a+=i]}while(s&&s.row===e);if(!s)return l.slice()}var d=[];e=s.row;do{d[i<0?"unshift":"push"](s),s=l[a+=i]}while(s&&s.row==e);return d.length&&d}}}(i,d,e);if(m){var r=m[0];s.column=(r.pos&&"number"!=typeof r.column?r.pos.sc:r.column)||0,s.row=r.row,o=t.renderer.$gutterLayer.$annotations[s.row]}else{if(c)return;o={text:["Looks good!"],className:"ace_ok"}}t.session.unfold(s.row),t.selection.moveToPosition(s);var b={row:s.row,fixedWidth:!0,coverGutter:!0,el:a.createElement("div"),type:"errorMarker"},g=b.el.appendChild(a.createElement("div")),Z=b.el.appendChild(a.createElement("div"));Z.className="error_widget_arrow "+o.className;var h=t.renderer.$cursorLayer.getPixelPosition(s).left;Z.style.left=h+t.renderer.gutterWidth-5+"px",b.el.className="error_widget_wrapper",g.className="error_widget "+o.className,g.innerHTML=o.text.join("
"),g.appendChild(a.createElement("div"));var W=function(t,e,i){if(0===e&&("esc"===i||"return"===i))return b.destroy(),{command:"null"}};b.destroy=function(){t.$mouseHandler.isMousePressed||(t.keyBinding.removeKeyboardHandler(W),i.widgetManager.removeLineWidget(b),t.off("changeSelection",b.destroy),t.off("changeSession",b.destroy),t.off("mouseup",b.destroy),t.off("change",b.destroy))},t.keyBinding.addKeyboardHandler(W),t.on("changeSelection",b.destroy),t.on("changeSession",b.destroy),t.on("mouseup",b.destroy),t.on("change",b.destroy),t.session.widgetManager.addLineWidget(b),b.el.onmousedown=t.focus.bind(t),t.renderer.scrollCursorIntoView(null,.5,{bottom:b.el.offsetHeight})},a.importCssString("\t .error_widget_wrapper {\t background: inherit;\t color: inherit;\t border:none\t }\t .error_widget {\t border-top: solid 2px;\t border-bottom: solid 2px;\t margin: 5px 0;\t padding: 10px 40px;\t white-space: pre-wrap;\t }\t .error_widget.ace_error, .error_widget_arrow.ace_error{\t border-color: #ff5a5a\t }\t .error_widget.ace_warning, .error_widget_arrow.ace_warning{\t border-color: #F1D817\t }\t .error_widget.ace_info, .error_widget_arrow.ace_info{\t border-color: #5a5a5a\t }\t .error_widget.ace_ok, .error_widget_arrow.ace_ok{\t border-color: #5aaa5a\t }\t .error_widget_arrow {\t position: absolute;\t border: solid 5px;\t border-top-color: transparent!important;\t border-right-color: transparent!important;\t border-left-color: transparent!important;\t top: -5px;\t }\t","")})),ace.define("ace/ace",["require","exports","module","ace/lib/fixoldbrowsers","ace/lib/dom","ace/lib/event","ace/editor","ace/edit_session","ace/undomanager","ace/virtual_renderer","ace/worker/worker_client","ace/keyboard/hash_handler","ace/placeholder","ace/multi_select","ace/mode/folding/fold_mode","ace/theme/textmate","ace/ext/error_marker","ace/config"],(function(t,e,i){"use strict";t("./lib/fixoldbrowsers");var l=t("./lib/dom"),a=t("./lib/event"),n=t("./editor").Editor,s=t("./edit_session").EditSession,d=t("./undomanager").UndoManager,c=t("./virtual_renderer").VirtualRenderer;t("./worker/worker_client"),t("./keyboard/hash_handler"),t("./placeholder"),t("./multi_select"),t("./mode/folding/fold_mode"),t("./theme/textmate"),t("./ext/error_marker"),e.config=t("./config"),e.acequire=t,e.edit=function(t){if("string"==typeof t){var i=t;if(!(t=document.getElementById(i)))throw new Error("ace.edit can't find div #"+i)}if(t&&t.env&&t.env.editor instanceof n)return t.env.editor;var s="";if(t&&/input|textarea/i.test(t.tagName)){var d=t;s=d.value,t=l.createElement("pre"),d.parentNode.replaceChild(t,d)}else t&&(s=l.getInnerText(t),t.innerHTML="");var o=e.createEditSession(s),m=new n(new c(t));m.setSession(o);var r={document:o,editor:m,onResize:m.resize.bind(m,null)};return d&&(r.textarea=d),a.addListener(window,"resize",r.onResize),m.on("destroy",(function(){a.removeListener(window,"resize",r.onResize),r.editor.container.env=null})),m.container.env=m.env=r,m},e.createEditSession=function(t,e){var i=new s(t,e);return i.setUndoManager(new d),i},e.EditSession=s,e.UndoManager=d,e.version="1.2.3"})),ace.acequire(["ace/ace"],(function(t){for(var e in t&&t.config.init(!0),window.ace||(window.ace=t),t)t.hasOwnProperty(e)&&(window.ace[e]=t[e])})),t.exports=window.ace.acequire("ace/ace")},function(t,e){t.exports=function(){throw new Error("define cannot be used indirect")}},function(t,e){(function(e){t.exports=function(){if(e.Blob)try{return new Blob(["asdf"],{type:"text/plain"}),Blob}catch(t){}var t=e.WebKitBlobBuilder||e.MozBlobBuilder||e.MSBlobBuilder;return function(e,i){var l=new t,a=i.endings,n=i.type;if(a)for(var s=0,d=e.length;s-1},g.recordAutoInsert=function(t,e,i){var a=t.getCursorPosition(),n=e.doc.getLine(a.row);this.isAutoInsertedClosing(a,n,l.autoInsertedLineEnd[0])||(l.autoInsertedBrackets=0),l.autoInsertedRow=a.row,l.autoInsertedLineEnd=i+n.substr(a.column),l.autoInsertedBrackets++},g.recordMaybeInsert=function(t,e,i){var a=t.getCursorPosition(),n=e.doc.getLine(a.row);this.isMaybeInsertedClosing(a,n)||(l.maybeInsertedBrackets=0),l.maybeInsertedRow=a.row,l.maybeInsertedLineStart=n.substr(0,a.column)+i,l.maybeInsertedLineEnd=n.substr(a.column),l.maybeInsertedBrackets++},g.isAutoInsertedClosing=function(t,e,i){return l.autoInsertedBrackets>0&&t.row===l.autoInsertedRow&&i===l.autoInsertedLineEnd[0]&&e.substr(t.column)===l.autoInsertedLineEnd},g.isMaybeInsertedClosing=function(t,e){return l.maybeInsertedBrackets>0&&t.row===l.maybeInsertedRow&&e.substr(t.column)===l.maybeInsertedLineEnd&&e.substr(0,t.column)==l.maybeInsertedLineStart},g.popAutoInsertedClosing=function(){l.autoInsertedLineEnd=l.autoInsertedLineEnd.substr(1),l.autoInsertedBrackets--},g.clearMaybeInsertedClosing=function(){l&&(l.maybeInsertedBrackets=0,l.maybeInsertedRow=-1)},a.inherits(g,n),e.CstyleBehaviour=g})),ace.define("ace/mode/folding/cstyle",["require","exports","module","ace/lib/oop","ace/range","ace/mode/folding/fold_mode"],(function(t,e,i){"use strict";var l=t("../../lib/oop"),a=t("../../range").Range,n=t("./fold_mode").FoldMode,s=e.FoldMode=function(t){t&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\|[^|]*?$/,"|"+t.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\|[^|]*?$/,"|"+t.end)))};l.inherits(s,n),function(){this.foldingStartMarker=/(\{|\[)[^\}\]]*$|^\s*(\/\*)/,this.foldingStopMarker=/^[^\[\{]*(\}|\])|^[\s\*]*(\*\/)/,this.singleLineBlockCommentRe=/^\s*(\/\*).*\*\/\s*$/,this.tripleStarBlockCommentRe=/^\s*(\/\*\*\*).*\*\/\s*$/,this.startRegionRe=/^\s*(\/\*|\/\/)#?region\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(t,e,i){var l=t.getLine(i);if(this.singleLineBlockCommentRe.test(l)&&!this.startRegionRe.test(l)&&!this.tripleStarBlockCommentRe.test(l))return"";var a=this._getFoldWidgetBase(t,e,i);return!a&&this.startRegionRe.test(l)?"start":a},this.getFoldWidgetRange=function(t,e,i,l){var a,n=t.getLine(i);if(this.startRegionRe.test(n))return this.getCommentRegionBlock(t,n,i);if(a=n.match(this.foldingStartMarker)){var s=a.index;if(a[1])return this.openingBracketBlock(t,a[1],i,s);var d=t.getCommentFoldRange(i,s+a[0].length,1);return d&&!d.isMultiLine()&&(l?d=this.getSectionRange(t,i):"all"!=e&&(d=null)),d}return"markbegin"!==e&&(a=n.match(this.foldingStopMarker))?(s=a.index+a[0].length,a[1]?this.closingBracketBlock(t,a[1],i,s):t.getCommentFoldRange(i,s,-1)):void 0},this.getSectionRange=function(t,e){for(var i=t.getLine(e),l=i.search(/\S/),n=e,s=i.length,d=e+=1,c=t.getLength();++eo)break;var m=this.getFoldWidgetRange(t,"all",e);if(m){if(m.start.row<=n)break;if(m.isMultiLine())e=m.end.row;else if(l==o)break}d=e}}return new a(n,s,d,t.getLine(d).length)},this.getCommentRegionBlock=function(t,e,i){for(var l=e.search(/\s*$/),n=t.getLength(),s=i,d=/^\s*(?:\/\*|\/\/|--)#?(end)?region\b/,c=1;++is)return new a(s,l,i,e.length)}}.call(s.prototype)})),ace.define("ace/mode/json",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/json_highlight_rules","ace/mode/matching_brace_outdent","ace/mode/behaviour/cstyle","ace/mode/folding/cstyle","ace/worker/worker_client"],(function(t,e,l){"use strict";var a=t("../lib/oop"),n=t("./text").Mode,s=t("./json_highlight_rules").JsonHighlightRules,d=t("./matching_brace_outdent").MatchingBraceOutdent,c=t("./behaviour/cstyle").CstyleBehaviour,o=t("./folding/cstyle").FoldMode,m=t("../worker/worker_client").WorkerClient,r=function(){this.HighlightRules=s,this.$outdent=new d,this.$behaviour=new c,this.foldingRules=new o};a.inherits(r,n),function(){this.getNextLineIndent=function(t,e,i){var l=this.$getIndent(e);return"start"==t&&e.match(/^.*[\{\(\[]\s*$/)&&(l+=i),l},this.checkOutdent=function(t,e,i){return this.$outdent.checkOutdent(e,i)},this.autoOutdent=function(t,e,i){this.$outdent.autoOutdent(e,i)},this.createWorker=function(t){var e=new m(["ace"],i(68),"JsonWorker");return e.attachToDocument(t.getDocument()),e.on("annotate",(function(e){t.setAnnotations(e.data)})),e.on("terminate",(function(){t.clearAnnotations()})),e},this.$id="ace/mode/json"}.call(r.prototype),e.Mode=r}))},function(t,e){t.exports.id="ace/mode/json_worker",t.exports.src='"no use strict";(function(window){function resolveModuleId(id,paths){for(var testPath=id,tail="";testPath;){var alias=paths[testPath];if("string"==typeof alias)return alias+tail;if(alias)return alias.location.replace(/\\/*$/,"/")+(tail||alias.main||alias.name);if(alias===!1)return"";var i=testPath.lastIndexOf("/");if(-1===i)break;tail=testPath.substr(i)+tail,testPath=testPath.slice(0,i)}return id}if(!(void 0!==window.window&&window.document||window.acequire&&window.define)){window.console||(window.console=function(){var msgs=Array.prototype.slice.call(arguments,0);postMessage({type:"log",data:msgs})},window.console.error=window.console.warn=window.console.log=window.console.trace=window.console),window.window=window,window.ace=window,window.onerror=function(message,file,line,col,err){postMessage({type:"error",data:{message:message,data:err.data,file:file,line:line,col:col,stack:err.stack}})},window.normalizeModule=function(parentId,moduleName){if(-1!==moduleName.indexOf("!")){var chunks=moduleName.split("!");return window.normalizeModule(parentId,chunks[0])+"!"+window.normalizeModule(parentId,chunks[1])}if("."==moduleName.charAt(0)){var base=parentId.split("/").slice(0,-1).join("/");for(moduleName=(base?base+"/":"")+moduleName;-1!==moduleName.indexOf(".")&&previous!=moduleName;){var previous=moduleName;moduleName=moduleName.replace(/^\\.\\//,"").replace(/\\/\\.\\//,"/").replace(/[^\\/]+\\/\\.\\.\\//,"")}}return moduleName},window.acequire=function acequire(parentId,id){if(id||(id=parentId,parentId=null),!id.charAt)throw Error("worker.js acequire() accepts only (parentId, id) as arguments");id=window.normalizeModule(parentId,id);var module=window.acequire.modules[id];if(module)return module.initialized||(module.initialized=!0,module.exports=module.factory().exports),module.exports;if(!window.acequire.tlns)return console.log("unable to load "+id);var path=resolveModuleId(id,window.acequire.tlns);return".js"!=path.slice(-3)&&(path+=".js"),window.acequire.id=id,window.acequire.modules[id]={},importScripts(path),window.acequire(parentId,id)},window.acequire.modules={},window.acequire.tlns={},window.define=function(id,deps,factory){if(2==arguments.length?(factory=deps,"string"!=typeof id&&(deps=id,id=window.acequire.id)):1==arguments.length&&(factory=id,deps=[],id=window.acequire.id),"function"!=typeof factory)return window.acequire.modules[id]={exports:factory,initialized:!0},void 0;deps.length||(deps=["require","exports","module"]);var req=function(childId){return window.acequire(id,childId)};window.acequire.modules[id]={exports:{},factory:function(){var module=this,returnExports=factory.apply(this,deps.map(function(dep){switch(dep){case"require":return req;case"exports":return module.exports;case"module":return module;default:return req(dep)}}));return returnExports&&(module.exports=returnExports),module}}},window.define.amd={},acequire.tlns={},window.initBaseUrls=function(topLevelNamespaces){for(var i in topLevelNamespaces)acequire.tlns[i]=topLevelNamespaces[i]},window.initSender=function(){var EventEmitter=window.acequire("ace/lib/event_emitter").EventEmitter,oop=window.acequire("ace/lib/oop"),Sender=function(){};return function(){oop.implement(this,EventEmitter),this.callback=function(data,callbackId){postMessage({type:"call",id:callbackId,data:data})},this.emit=function(name,data){postMessage({type:"event",name:name,data:data})}}.call(Sender.prototype),new Sender};var main=window.main=null,sender=window.sender=null;window.onmessage=function(e){var msg=e.data;if(msg.event&&sender)sender._signal(msg.event,msg.data);else if(msg.command)if(main[msg.command])main[msg.command].apply(main,msg.args);else{if(!window[msg.command])throw Error("Unknown command:"+msg.command);window[msg.command].apply(window,msg.args)}else if(msg.init){window.initBaseUrls(msg.tlns),acequire("ace/lib/es5-shim"),sender=window.sender=window.initSender();var clazz=acequire(msg.module)[msg.classname];main=window.main=new clazz(sender)}}}})(this),ace.define("ace/lib/oop",["require","exports","module"],function(acequire,exports){"use strict";exports.inherits=function(ctor,superCtor){ctor.super_=superCtor,ctor.prototype=Object.create(superCtor.prototype,{constructor:{value:ctor,enumerable:!1,writable:!0,configurable:!0}})},exports.mixin=function(obj,mixin){for(var key in mixin)obj[key]=mixin[key];return obj},exports.implement=function(proto,mixin){exports.mixin(proto,mixin)}}),ace.define("ace/range",["require","exports","module"],function(acequire,exports){"use strict";var comparePoints=function(p1,p2){return p1.row-p2.row||p1.column-p2.column},Range=function(startRow,startColumn,endRow,endColumn){this.start={row:startRow,column:startColumn},this.end={row:endRow,column:endColumn}};(function(){this.isEqual=function(range){return this.start.row===range.start.row&&this.end.row===range.end.row&&this.start.column===range.start.column&&this.end.column===range.end.column},this.toString=function(){return"Range: ["+this.start.row+"/"+this.start.column+"] -> ["+this.end.row+"/"+this.end.column+"]"},this.contains=function(row,column){return 0==this.compare(row,column)},this.compareRange=function(range){var cmp,end=range.end,start=range.start;return cmp=this.compare(end.row,end.column),1==cmp?(cmp=this.compare(start.row,start.column),1==cmp?2:0==cmp?1:0):-1==cmp?-2:(cmp=this.compare(start.row,start.column),-1==cmp?-1:1==cmp?42:0)},this.comparePoint=function(p){return this.compare(p.row,p.column)},this.containsRange=function(range){return 0==this.comparePoint(range.start)&&0==this.comparePoint(range.end)},this.intersects=function(range){var cmp=this.compareRange(range);return-1==cmp||0==cmp||1==cmp},this.isEnd=function(row,column){return this.end.row==row&&this.end.column==column},this.isStart=function(row,column){return this.start.row==row&&this.start.column==column},this.setStart=function(row,column){"object"==typeof row?(this.start.column=row.column,this.start.row=row.row):(this.start.row=row,this.start.column=column)},this.setEnd=function(row,column){"object"==typeof row?(this.end.column=row.column,this.end.row=row.row):(this.end.row=row,this.end.column=column)},this.inside=function(row,column){return 0==this.compare(row,column)?this.isEnd(row,column)||this.isStart(row,column)?!1:!0:!1},this.insideStart=function(row,column){return 0==this.compare(row,column)?this.isEnd(row,column)?!1:!0:!1},this.insideEnd=function(row,column){return 0==this.compare(row,column)?this.isStart(row,column)?!1:!0:!1},this.compare=function(row,column){return this.isMultiLine()||row!==this.start.row?this.start.row>row?-1:row>this.end.row?1:this.start.row===row?column>=this.start.column?0:-1:this.end.row===row?this.end.column>=column?0:1:0:this.start.column>column?-1:column>this.end.column?1:0},this.compareStart=function(row,column){return this.start.row==row&&this.start.column==column?-1:this.compare(row,column)},this.compareEnd=function(row,column){return this.end.row==row&&this.end.column==column?1:this.compare(row,column)},this.compareInside=function(row,column){return this.end.row==row&&this.end.column==column?1:this.start.row==row&&this.start.column==column?-1:this.compare(row,column)},this.clipRows=function(firstRow,lastRow){if(this.end.row>lastRow)var end={row:lastRow+1,column:0};else if(firstRow>this.end.row)var end={row:firstRow,column:0};if(this.start.row>lastRow)var start={row:lastRow+1,column:0};else if(firstRow>this.start.row)var start={row:firstRow,column:0};return Range.fromPoints(start||this.start,end||this.end)},this.extend=function(row,column){var cmp=this.compare(row,column);if(0==cmp)return this;if(-1==cmp)var start={row:row,column:column};else var end={row:row,column:column};return Range.fromPoints(start||this.start,end||this.end)},this.isEmpty=function(){return this.start.row===this.end.row&&this.start.column===this.end.column},this.isMultiLine=function(){return this.start.row!==this.end.row},this.clone=function(){return Range.fromPoints(this.start,this.end)},this.collapseRows=function(){return 0==this.end.column?new Range(this.start.row,0,Math.max(this.start.row,this.end.row-1),0):new Range(this.start.row,0,this.end.row,0)},this.toScreenRange=function(session){var screenPosStart=session.documentToScreenPosition(this.start),screenPosEnd=session.documentToScreenPosition(this.end);return new Range(screenPosStart.row,screenPosStart.column,screenPosEnd.row,screenPosEnd.column)},this.moveBy=function(row,column){this.start.row+=row,this.start.column+=column,this.end.row+=row,this.end.column+=column}}).call(Range.prototype),Range.fromPoints=function(start,end){return new Range(start.row,start.column,end.row,end.column)},Range.comparePoints=comparePoints,Range.comparePoints=function(p1,p2){return p1.row-p2.row||p1.column-p2.column},exports.Range=Range}),ace.define("ace/apply_delta",["require","exports","module"],function(acequire,exports){"use strict";exports.applyDelta=function(docLines,delta){var row=delta.start.row,startColumn=delta.start.column,line=docLines[row]||"";switch(delta.action){case"insert":var lines=delta.lines;if(1===lines.length)docLines[row]=line.substring(0,startColumn)+delta.lines[0]+line.substring(startColumn);else{var args=[row,1].concat(delta.lines);docLines.splice.apply(docLines,args),docLines[row]=line.substring(0,startColumn)+docLines[row],docLines[row+delta.lines.length-1]+=line.substring(startColumn)}break;case"remove":var endColumn=delta.end.column,endRow=delta.end.row;row===endRow?docLines[row]=line.substring(0,startColumn)+line.substring(endColumn):docLines.splice(row,endRow-row+1,line.substring(0,startColumn)+docLines[endRow].substring(endColumn))}}}),ace.define("ace/lib/event_emitter",["require","exports","module"],function(acequire,exports){"use strict";var EventEmitter={},stopPropagation=function(){this.propagationStopped=!0},preventDefault=function(){this.defaultPrevented=!0};EventEmitter._emit=EventEmitter._dispatchEvent=function(eventName,e){this._eventRegistry||(this._eventRegistry={}),this._defaultHandlers||(this._defaultHandlers={});var listeners=this._eventRegistry[eventName]||[],defaultHandler=this._defaultHandlers[eventName];if(listeners.length||defaultHandler){"object"==typeof e&&e||(e={}),e.type||(e.type=eventName),e.stopPropagation||(e.stopPropagation=stopPropagation),e.preventDefault||(e.preventDefault=preventDefault),listeners=listeners.slice();for(var i=0;listeners.length>i&&(listeners[i](e,this),!e.propagationStopped);i++);return defaultHandler&&!e.defaultPrevented?defaultHandler(e,this):void 0}},EventEmitter._signal=function(eventName,e){var listeners=(this._eventRegistry||{})[eventName];if(listeners){listeners=listeners.slice();for(var i=0;listeners.length>i;i++)listeners[i](e,this)}},EventEmitter.once=function(eventName,callback){var _self=this;callback&&this.addEventListener(eventName,function newCallback(){_self.removeEventListener(eventName,newCallback),callback.apply(null,arguments)})},EventEmitter.setDefaultHandler=function(eventName,callback){var handlers=this._defaultHandlers;if(handlers||(handlers=this._defaultHandlers={_disabled_:{}}),handlers[eventName]){var old=handlers[eventName],disabled=handlers._disabled_[eventName];disabled||(handlers._disabled_[eventName]=disabled=[]),disabled.push(old);var i=disabled.indexOf(callback);-1!=i&&disabled.splice(i,1)}handlers[eventName]=callback},EventEmitter.removeDefaultHandler=function(eventName,callback){var handlers=this._defaultHandlers;if(handlers){var disabled=handlers._disabled_[eventName];if(handlers[eventName]==callback)handlers[eventName],disabled&&this.setDefaultHandler(eventName,disabled.pop());else if(disabled){var i=disabled.indexOf(callback);-1!=i&&disabled.splice(i,1)}}},EventEmitter.on=EventEmitter.addEventListener=function(eventName,callback,capturing){this._eventRegistry=this._eventRegistry||{};var listeners=this._eventRegistry[eventName];return listeners||(listeners=this._eventRegistry[eventName]=[]),-1==listeners.indexOf(callback)&&listeners[capturing?"unshift":"push"](callback),callback},EventEmitter.off=EventEmitter.removeListener=EventEmitter.removeEventListener=function(eventName,callback){this._eventRegistry=this._eventRegistry||{};var listeners=this._eventRegistry[eventName];if(listeners){var index=listeners.indexOf(callback);-1!==index&&listeners.splice(index,1)}},EventEmitter.removeAllListeners=function(eventName){this._eventRegistry&&(this._eventRegistry[eventName]=[])},exports.EventEmitter=EventEmitter}),ace.define("ace/anchor",["require","exports","module","ace/lib/oop","ace/lib/event_emitter"],function(acequire,exports){"use strict";var oop=acequire("./lib/oop"),EventEmitter=acequire("./lib/event_emitter").EventEmitter,Anchor=exports.Anchor=function(doc,row,column){this.$onChange=this.onChange.bind(this),this.attach(doc),column===void 0?this.setPosition(row.row,row.column):this.setPosition(row,column)};(function(){function $pointsInOrder(point1,point2,equalPointsInOrder){var bColIsAfter=equalPointsInOrder?point1.column<=point2.column:point1.columnthis.row)){var point=$getTransformedPoint(delta,{row:this.row,column:this.column},this.$insertRight);this.setPosition(point.row,point.column,!0)}},this.setPosition=function(row,column,noClip){var pos;if(pos=noClip?{row:row,column:column}:this.$clipPositionToDocument(row,column),this.row!=pos.row||this.column!=pos.column){var old={row:this.row,column:this.column};this.row=pos.row,this.column=pos.column,this._signal("change",{old:old,value:pos})}},this.detach=function(){this.document.removeEventListener("change",this.$onChange)},this.attach=function(doc){this.document=doc||this.document,this.document.on("change",this.$onChange)},this.$clipPositionToDocument=function(row,column){var pos={};return row>=this.document.getLength()?(pos.row=Math.max(0,this.document.getLength()-1),pos.column=this.document.getLine(pos.row).length):0>row?(pos.row=0,pos.column=0):(pos.row=row,pos.column=Math.min(this.document.getLine(pos.row).length,Math.max(0,column))),0>column&&(pos.column=0),pos}}).call(Anchor.prototype)}),ace.define("ace/document",["require","exports","module","ace/lib/oop","ace/apply_delta","ace/lib/event_emitter","ace/range","ace/anchor"],function(acequire,exports){"use strict";var oop=acequire("./lib/oop"),applyDelta=acequire("./apply_delta").applyDelta,EventEmitter=acequire("./lib/event_emitter").EventEmitter,Range=acequire("./range").Range,Anchor=acequire("./anchor").Anchor,Document=function(textOrLines){this.$lines=[""],0===textOrLines.length?this.$lines=[""]:Array.isArray(textOrLines)?this.insertMergedLines({row:0,column:0},textOrLines):this.insert({row:0,column:0},textOrLines)};(function(){oop.implement(this,EventEmitter),this.setValue=function(text){var len=this.getLength()-1;this.remove(new Range(0,0,len,this.getLine(len).length)),this.insert({row:0,column:0},text)},this.getValue=function(){return this.getAllLines().join(this.getNewLineCharacter())},this.createAnchor=function(row,column){return new Anchor(this,row,column)},this.$split=0==="aaa".split(/a/).length?function(text){return text.replace(/\\r\\n|\\r/g,"\\n").split("\\n")}:function(text){return text.split(/\\r\\n|\\r|\\n/)},this.$detectNewLine=function(text){var match=text.match(/^.*?(\\r\\n|\\r|\\n)/m);this.$autoNewLine=match?match[1]:"\\n",this._signal("changeNewLineMode")},this.getNewLineCharacter=function(){switch(this.$newLineMode){case"windows":return"\\r\\n";case"unix":return"\\n";default:return this.$autoNewLine||"\\n"}},this.$autoNewLine="",this.$newLineMode="auto",this.setNewLineMode=function(newLineMode){this.$newLineMode!==newLineMode&&(this.$newLineMode=newLineMode,this._signal("changeNewLineMode"))},this.getNewLineMode=function(){return this.$newLineMode},this.isNewLine=function(text){return"\\r\\n"==text||"\\r"==text||"\\n"==text},this.getLine=function(row){return this.$lines[row]||""},this.getLines=function(firstRow,lastRow){return this.$lines.slice(firstRow,lastRow+1)},this.getAllLines=function(){return this.getLines(0,this.getLength())},this.getLength=function(){return this.$lines.length},this.getTextRange=function(range){return this.getLinesForRange(range).join(this.getNewLineCharacter())},this.getLinesForRange=function(range){var lines;if(range.start.row===range.end.row)lines=[this.getLine(range.start.row).substring(range.start.column,range.end.column)];else{lines=this.getLines(range.start.row,range.end.row),lines[0]=(lines[0]||"").substring(range.start.column);var l=lines.length-1;range.end.row-range.start.row==l&&(lines[l]=lines[l].substring(0,range.end.column))}return lines},this.insertLines=function(row,lines){return console.warn("Use of document.insertLines is deprecated. Use the insertFullLines method instead."),this.insertFullLines(row,lines)},this.removeLines=function(firstRow,lastRow){return console.warn("Use of document.removeLines is deprecated. Use the removeFullLines method instead."),this.removeFullLines(firstRow,lastRow)},this.insertNewLine=function(position){return console.warn("Use of document.insertNewLine is deprecated. Use insertMergedLines(position, [\'\', \'\']) instead."),this.insertMergedLines(position,["",""])},this.insert=function(position,text){return 1>=this.getLength()&&this.$detectNewLine(text),this.insertMergedLines(position,this.$split(text))},this.insertInLine=function(position,text){var start=this.clippedPos(position.row,position.column),end=this.pos(position.row,position.column+text.length);return this.applyDelta({start:start,end:end,action:"insert",lines:[text]},!0),this.clonePos(end)},this.clippedPos=function(row,column){var length=this.getLength();void 0===row?row=length:0>row?row=0:row>=length&&(row=length-1,column=void 0);var line=this.getLine(row);return void 0==column&&(column=line.length),column=Math.min(Math.max(column,0),line.length),{row:row,column:column}},this.clonePos=function(pos){return{row:pos.row,column:pos.column}},this.pos=function(row,column){return{row:row,column:column}},this.$clipPosition=function(position){var length=this.getLength();return position.row>=length?(position.row=Math.max(0,length-1),position.column=this.getLine(length-1).length):(position.row=Math.max(0,position.row),position.column=Math.min(Math.max(position.column,0),this.getLine(position.row).length)),position},this.insertFullLines=function(row,lines){row=Math.min(Math.max(row,0),this.getLength());var column=0;this.getLength()>row?(lines=lines.concat([""]),column=0):(lines=[""].concat(lines),row--,column=this.$lines[row].length),this.insertMergedLines({row:row,column:column},lines)},this.insertMergedLines=function(position,lines){var start=this.clippedPos(position.row,position.column),end={row:start.row+lines.length-1,column:(1==lines.length?start.column:0)+lines[lines.length-1].length};return this.applyDelta({start:start,end:end,action:"insert",lines:lines}),this.clonePos(end)},this.remove=function(range){var start=this.clippedPos(range.start.row,range.start.column),end=this.clippedPos(range.end.row,range.end.column);return this.applyDelta({start:start,end:end,action:"remove",lines:this.getLinesForRange({start:start,end:end})}),this.clonePos(start)},this.removeInLine=function(row,startColumn,endColumn){var start=this.clippedPos(row,startColumn),end=this.clippedPos(row,endColumn);return this.applyDelta({start:start,end:end,action:"remove",lines:this.getLinesForRange({start:start,end:end})},!0),this.clonePos(start)},this.removeFullLines=function(firstRow,lastRow){firstRow=Math.min(Math.max(0,firstRow),this.getLength()-1),lastRow=Math.min(Math.max(0,lastRow),this.getLength()-1);var deleteFirstNewLine=lastRow==this.getLength()-1&&firstRow>0,deleteLastNewLine=this.getLength()-1>lastRow,startRow=deleteFirstNewLine?firstRow-1:firstRow,startCol=deleteFirstNewLine?this.getLine(startRow).length:0,endRow=deleteLastNewLine?lastRow+1:lastRow,endCol=deleteLastNewLine?0:this.getLine(endRow).length,range=new Range(startRow,startCol,endRow,endCol),deletedLines=this.$lines.slice(firstRow,lastRow+1);return this.applyDelta({start:range.start,end:range.end,action:"remove",lines:this.getLinesForRange(range)}),deletedLines},this.removeNewLine=function(row){this.getLength()-1>row&&row>=0&&this.applyDelta({start:this.pos(row,this.getLine(row).length),end:this.pos(row+1,0),action:"remove",lines:["",""]})},this.replace=function(range,text){if(range instanceof Range||(range=Range.fromPoints(range.start,range.end)),0===text.length&&range.isEmpty())return range.start;if(text==this.getTextRange(range))return range.end;this.remove(range);var end;return end=text?this.insert(range.start,text):range.start},this.applyDeltas=function(deltas){for(var i=0;deltas.length>i;i++)this.applyDelta(deltas[i])},this.revertDeltas=function(deltas){for(var i=deltas.length-1;i>=0;i--)this.revertDelta(deltas[i])},this.applyDelta=function(delta,doNotValidate){var isInsert="insert"==delta.action;(isInsert?1>=delta.lines.length&&!delta.lines[0]:!Range.comparePoints(delta.start,delta.end))||(isInsert&&delta.lines.length>2e4&&this.$splitAndapplyLargeDelta(delta,2e4),applyDelta(this.$lines,delta,doNotValidate),this._signal("change",delta))},this.$splitAndapplyLargeDelta=function(delta,MAX){for(var lines=delta.lines,l=lines.length,row=delta.start.row,column=delta.start.column,from=0,to=0;;){from=to,to+=MAX-1;var chunk=lines.slice(from,to);if(to>l){delta.lines=chunk,delta.start.row=row+from,delta.start.column=column;break}chunk.push(""),this.applyDelta({start:this.pos(row+from,column),end:this.pos(row+to,column=0),action:delta.action,lines:chunk},!0)}},this.revertDelta=function(delta){this.applyDelta({start:this.clonePos(delta.start),end:this.clonePos(delta.end),action:"insert"==delta.action?"remove":"insert",lines:delta.lines.slice()})},this.indexToPosition=function(index,startRow){for(var lines=this.$lines||this.getAllLines(),newlineLength=this.getNewLineCharacter().length,i=startRow||0,l=lines.length;l>i;i++)if(index-=lines[i].length+newlineLength,0>index)return{row:i,column:index+lines[i].length+newlineLength};return{row:l-1,column:lines[l-1].length}},this.positionToIndex=function(pos,startRow){for(var lines=this.$lines||this.getAllLines(),newlineLength=this.getNewLineCharacter().length,index=0,row=Math.min(pos.row,lines.length),i=startRow||0;row>i;++i)index+=lines[i].length+newlineLength;return index+pos.column}}).call(Document.prototype),exports.Document=Document}),ace.define("ace/lib/lang",["require","exports","module"],function(acequire,exports){"use strict";exports.last=function(a){return a[a.length-1]},exports.stringReverse=function(string){return string.split("").reverse().join("")},exports.stringRepeat=function(string,count){for(var result="";count>0;)1&count&&(result+=string),(count>>=1)&&(string+=string);return result};var trimBeginRegexp=/^\\s\\s*/,trimEndRegexp=/\\s\\s*$/;exports.stringTrimLeft=function(string){return string.replace(trimBeginRegexp,"")},exports.stringTrimRight=function(string){return string.replace(trimEndRegexp,"")},exports.copyObject=function(obj){var copy={};for(var key in obj)copy[key]=obj[key];return copy},exports.copyArray=function(array){for(var copy=[],i=0,l=array.length;l>i;i++)copy[i]=array[i]&&"object"==typeof array[i]?this.copyObject(array[i]):array[i];return copy},exports.deepCopy=function deepCopy(obj){if("object"!=typeof obj||!obj)return obj;var copy;if(Array.isArray(obj)){copy=[];for(var key=0;obj.length>key;key++)copy[key]=deepCopy(obj[key]);return copy}var cons=obj.constructor;if(cons===RegExp)return obj;copy=cons();for(var key in obj)copy[key]=deepCopy(obj[key]);return copy},exports.arrayToMap=function(arr){for(var map={},i=0;arr.length>i;i++)map[arr[i]]=1;return map},exports.createMap=function(props){var map=Object.create(null);for(var i in props)map[i]=props[i];return map},exports.arrayRemove=function(array,value){for(var i=0;array.length>=i;i++)value===array[i]&&array.splice(i,1)},exports.escapeRegExp=function(str){return str.replace(/([.*+?^${}()|[\\]\\/\\\\])/g,"\\\\$1")},exports.escapeHTML=function(str){return str.replace(/&/g,"&").replace(/"/g,""").replace(/\'/g,"'").replace(/i;i+=2){if(Array.isArray(data[i+1]))var d={action:"insert",start:data[i],lines:data[i+1]};else var d={action:"remove",start:data[i],end:data[i+1]};doc.applyDelta(d,!0)}return _self.$timeout?deferredUpdate.schedule(_self.$timeout):(_self.onUpdate(),void 0)})};(function(){this.$timeout=500,this.setTimeout=function(timeout){this.$timeout=timeout},this.setValue=function(value){this.doc.setValue(value),this.deferredUpdate.schedule(this.$timeout)},this.getValue=function(callbackId){this.sender.callback(this.doc.getValue(),callbackId)},this.onUpdate=function(){},this.isPending=function(){return this.deferredUpdate.isPending()}}).call(Mirror.prototype)}),ace.define("ace/mode/json/json_parse",["require","exports","module"],function(){"use strict";var at,ch,text,value,escapee={\'"\':\'"\',"\\\\":"\\\\","/":"/",b:"\\b",f:"\\f",n:"\\n",r:"\\r",t:"\t"},error=function(m){throw{name:"SyntaxError",message:m,at:at,text:text}},next=function(c){return c&&c!==ch&&error("Expected \'"+c+"\' instead of \'"+ch+"\'"),ch=text.charAt(at),at+=1,ch},number=function(){var number,string="";for("-"===ch&&(string="-",next("-"));ch>="0"&&"9">=ch;)string+=ch,next();if("."===ch)for(string+=".";next()&&ch>="0"&&"9">=ch;)string+=ch;if("e"===ch||"E"===ch)for(string+=ch,next(),("-"===ch||"+"===ch)&&(string+=ch,next());ch>="0"&&"9">=ch;)string+=ch,next();return number=+string,isNaN(number)?(error("Bad number"),void 0):number},string=function(){var hex,i,uffff,string="";if(\'"\'===ch)for(;next();){if(\'"\'===ch)return next(),string;if("\\\\"===ch)if(next(),"u"===ch){for(uffff=0,i=0;4>i&&(hex=parseInt(next(),16),isFinite(hex));i+=1)uffff=16*uffff+hex;string+=String.fromCharCode(uffff)}else{if("string"!=typeof escapee[ch])break;string+=escapee[ch]}else string+=ch}error("Bad string")},white=function(){for(;ch&&" ">=ch;)next()},word=function(){switch(ch){case"t":return next("t"),next("r"),next("u"),next("e"),!0;case"f":return next("f"),next("a"),next("l"),next("s"),next("e"),!1;case"n":return next("n"),next("u"),next("l"),next("l"),null}error("Unexpected \'"+ch+"\'")},array=function(){var array=[];if("["===ch){if(next("["),white(),"]"===ch)return next("]"),array;for(;ch;){if(array.push(value()),white(),"]"===ch)return next("]"),array;next(","),white()}}error("Bad array")},object=function(){var key,object={};if("{"===ch){if(next("{"),white(),"}"===ch)return next("}"),object;for(;ch;){if(key=string(),white(),next(":"),Object.hasOwnProperty.call(object,key)&&error(\'Duplicate key "\'+key+\'"\'),object[key]=value(),white(),"}"===ch)return next("}"),object;next(","),white()}}error("Bad object")};return value=function(){switch(white(),ch){case"{":return object();case"[":return array();case\'"\':return string();case"-":return number();default:return ch>="0"&&"9">=ch?number():word()}},function(source,reviver){var result;return text=source,at=0,ch=" ",result=value(),white(),ch&&error("Syntax error"),"function"==typeof reviver?function walk(holder,key){var k,v,value=holder[key];if(value&&"object"==typeof value)for(k in value)Object.hasOwnProperty.call(value,k)&&(v=walk(value,k),void 0!==v?value[k]=v:delete value[k]);return reviver.call(holder,key,value)}({"":result},""):result}}),ace.define("ace/mode/json_worker",["require","exports","module","ace/lib/oop","ace/worker/mirror","ace/mode/json/json_parse"],function(acequire,exports){"use strict";var oop=acequire("../lib/oop"),Mirror=acequire("../worker/mirror").Mirror,parse=acequire("./json/json_parse"),JsonWorker=exports.JsonWorker=function(sender){Mirror.call(this,sender),this.setTimeout(200)};oop.inherits(JsonWorker,Mirror),function(){this.onUpdate=function(){var value=this.doc.getValue(),errors=[];try{value&&parse(value)}catch(e){var pos=this.doc.indexToPosition(e.at-1);errors.push({row:pos.row,column:pos.column,text:e.message,type:"error"})}this.sender.emit("annotate",errors)}}.call(JsonWorker.prototype)}),ace.define("ace/lib/es5-shim",["require","exports","module"],function(){function Empty(){}function doesDefinePropertyWork(object){try{return Object.defineProperty(object,"sentinel",{}),"sentinel"in object}catch(exception){}}function toInteger(n){return n=+n,n!==n?n=0:0!==n&&n!==1/0&&n!==-(1/0)&&(n=(n>0||-1)*Math.floor(Math.abs(n))),n}Function.prototype.bind||(Function.prototype.bind=function(that){var target=this;if("function"!=typeof target)throw new TypeError("Function.prototype.bind called on incompatible "+target);var args=slice.call(arguments,1),bound=function(){if(this instanceof bound){var result=target.apply(this,args.concat(slice.call(arguments)));return Object(result)===result?result:this}return target.apply(that,args.concat(slice.call(arguments)))};return target.prototype&&(Empty.prototype=target.prototype,bound.prototype=new Empty,Empty.prototype=null),bound});var defineGetter,defineSetter,lookupGetter,lookupSetter,supportsAccessors,call=Function.prototype.call,prototypeOfArray=Array.prototype,prototypeOfObject=Object.prototype,slice=prototypeOfArray.slice,_toString=call.bind(prototypeOfObject.toString),owns=call.bind(prototypeOfObject.hasOwnProperty);if((supportsAccessors=owns(prototypeOfObject,"__defineGetter__"))&&(defineGetter=call.bind(prototypeOfObject.__defineGetter__),defineSetter=call.bind(prototypeOfObject.__defineSetter__),lookupGetter=call.bind(prototypeOfObject.__lookupGetter__),lookupSetter=call.bind(prototypeOfObject.__lookupSetter__)),2!=[1,2].splice(0).length)if(function(){function makeArray(l){var a=Array(l+2);return a[0]=a[1]=0,a}var lengthBefore,array=[];return array.splice.apply(array,makeArray(20)),array.splice.apply(array,makeArray(26)),lengthBefore=array.length,array.splice(5,0,"XXX"),lengthBefore+1==array.length,lengthBefore+1==array.length?!0:void 0\n}()){var array_splice=Array.prototype.splice;Array.prototype.splice=function(start,deleteCount){return arguments.length?array_splice.apply(this,[void 0===start?0:start,void 0===deleteCount?this.length-start:deleteCount].concat(slice.call(arguments,2))):[]}}else Array.prototype.splice=function(pos,removeCount){var length=this.length;pos>0?pos>length&&(pos=length):void 0==pos?pos=0:0>pos&&(pos=Math.max(length+pos,0)),length>pos+removeCount||(removeCount=length-pos);var removed=this.slice(pos,pos+removeCount),insert=slice.call(arguments,2),add=insert.length;if(pos===length)add&&this.push.apply(this,insert);else{var remove=Math.min(removeCount,length-pos),tailOldPos=pos+remove,tailNewPos=tailOldPos+add-remove,tailCount=length-tailOldPos,lengthAfterRemove=length-remove;if(tailOldPos>tailNewPos)for(var i=0;tailCount>i;++i)this[tailNewPos+i]=this[tailOldPos+i];else if(tailNewPos>tailOldPos)for(i=tailCount;i--;)this[tailNewPos+i]=this[tailOldPos+i];if(add&&pos===lengthAfterRemove)this.length=lengthAfterRemove,this.push.apply(this,insert);else for(this.length=lengthAfterRemove+add,i=0;add>i;++i)this[pos+i]=insert[i]}return removed};Array.isArray||(Array.isArray=function(obj){return"[object Array]"==_toString(obj)});var boxedString=Object("a"),splitString="a"!=boxedString[0]||!(0 in boxedString);if(Array.prototype.forEach||(Array.prototype.forEach=function(fun){var object=toObject(this),self=splitString&&"[object String]"==_toString(this)?this.split(""):object,thisp=arguments[1],i=-1,length=self.length>>>0;if("[object Function]"!=_toString(fun))throw new TypeError;for(;length>++i;)i in self&&fun.call(thisp,self[i],i,object)}),Array.prototype.map||(Array.prototype.map=function(fun){var object=toObject(this),self=splitString&&"[object String]"==_toString(this)?this.split(""):object,length=self.length>>>0,result=Array(length),thisp=arguments[1];if("[object Function]"!=_toString(fun))throw new TypeError(fun+" is not a function");for(var i=0;length>i;i++)i in self&&(result[i]=fun.call(thisp,self[i],i,object));return result}),Array.prototype.filter||(Array.prototype.filter=function(fun){var value,object=toObject(this),self=splitString&&"[object String]"==_toString(this)?this.split(""):object,length=self.length>>>0,result=[],thisp=arguments[1];if("[object Function]"!=_toString(fun))throw new TypeError(fun+" is not a function");for(var i=0;length>i;i++)i in self&&(value=self[i],fun.call(thisp,value,i,object)&&result.push(value));return result}),Array.prototype.every||(Array.prototype.every=function(fun){var object=toObject(this),self=splitString&&"[object String]"==_toString(this)?this.split(""):object,length=self.length>>>0,thisp=arguments[1];if("[object Function]"!=_toString(fun))throw new TypeError(fun+" is not a function");for(var i=0;length>i;i++)if(i in self&&!fun.call(thisp,self[i],i,object))return!1;return!0}),Array.prototype.some||(Array.prototype.some=function(fun){var object=toObject(this),self=splitString&&"[object String]"==_toString(this)?this.split(""):object,length=self.length>>>0,thisp=arguments[1];if("[object Function]"!=_toString(fun))throw new TypeError(fun+" is not a function");for(var i=0;length>i;i++)if(i in self&&fun.call(thisp,self[i],i,object))return!0;return!1}),Array.prototype.reduce||(Array.prototype.reduce=function(fun){var object=toObject(this),self=splitString&&"[object String]"==_toString(this)?this.split(""):object,length=self.length>>>0;if("[object Function]"!=_toString(fun))throw new TypeError(fun+" is not a function");if(!length&&1==arguments.length)throw new TypeError("reduce of empty array with no initial value");var result,i=0;if(arguments.length>=2)result=arguments[1];else for(;;){if(i in self){result=self[i++];break}if(++i>=length)throw new TypeError("reduce of empty array with no initial value")}for(;length>i;i++)i in self&&(result=fun.call(void 0,result,self[i],i,object));return result}),Array.prototype.reduceRight||(Array.prototype.reduceRight=function(fun){var object=toObject(this),self=splitString&&"[object String]"==_toString(this)?this.split(""):object,length=self.length>>>0;if("[object Function]"!=_toString(fun))throw new TypeError(fun+" is not a function");if(!length&&1==arguments.length)throw new TypeError("reduceRight of empty array with no initial value");var result,i=length-1;if(arguments.length>=2)result=arguments[1];else for(;;){if(i in self){result=self[i--];break}if(0>--i)throw new TypeError("reduceRight of empty array with no initial value")}do i in this&&(result=fun.call(void 0,result,self[i],i,object));while(i--);return result}),Array.prototype.indexOf&&-1==[0,1].indexOf(1,2)||(Array.prototype.indexOf=function(sought){var self=splitString&&"[object String]"==_toString(this)?this.split(""):toObject(this),length=self.length>>>0;if(!length)return-1;var i=0;for(arguments.length>1&&(i=toInteger(arguments[1])),i=i>=0?i:Math.max(0,length+i);length>i;i++)if(i in self&&self[i]===sought)return i;return-1}),Array.prototype.lastIndexOf&&-1==[0,1].lastIndexOf(0,-3)||(Array.prototype.lastIndexOf=function(sought){var self=splitString&&"[object String]"==_toString(this)?this.split(""):toObject(this),length=self.length>>>0;if(!length)return-1;var i=length-1;for(arguments.length>1&&(i=Math.min(i,toInteger(arguments[1]))),i=i>=0?i:length-Math.abs(i);i>=0;i--)if(i in self&&sought===self[i])return i;return-1}),Object.getPrototypeOf||(Object.getPrototypeOf=function(object){return object.__proto__||(object.constructor?object.constructor.prototype:prototypeOfObject)}),!Object.getOwnPropertyDescriptor){var ERR_NON_OBJECT="Object.getOwnPropertyDescriptor called on a non-object: ";Object.getOwnPropertyDescriptor=function(object,property){if("object"!=typeof object&&"function"!=typeof object||null===object)throw new TypeError(ERR_NON_OBJECT+object);if(owns(object,property)){var descriptor,getter,setter;if(descriptor={enumerable:!0,configurable:!0},supportsAccessors){var prototype=object.__proto__;object.__proto__=prototypeOfObject;var getter=lookupGetter(object,property),setter=lookupSetter(object,property);if(object.__proto__=prototype,getter||setter)return getter&&(descriptor.get=getter),setter&&(descriptor.set=setter),descriptor}return descriptor.value=object[property],descriptor}}}if(Object.getOwnPropertyNames||(Object.getOwnPropertyNames=function(object){return Object.keys(object)}),!Object.create){var createEmpty;createEmpty=null===Object.prototype.__proto__?function(){return{__proto__:null}}:function(){var empty={};for(var i in empty)empty[i]=null;return empty.constructor=empty.hasOwnProperty=empty.propertyIsEnumerable=empty.isPrototypeOf=empty.toLocaleString=empty.toString=empty.valueOf=empty.__proto__=null,empty},Object.create=function(prototype,properties){var object;if(null===prototype)object=createEmpty();else{if("object"!=typeof prototype)throw new TypeError("typeof prototype["+typeof prototype+"] != \'object\'");var Type=function(){};Type.prototype=prototype,object=new Type,object.__proto__=prototype}return void 0!==properties&&Object.defineProperties(object,properties),object}}if(Object.defineProperty){var definePropertyWorksOnObject=doesDefinePropertyWork({}),definePropertyWorksOnDom="undefined"==typeof document||doesDefinePropertyWork(document.createElement("div"));if(!definePropertyWorksOnObject||!definePropertyWorksOnDom)var definePropertyFallback=Object.defineProperty}if(!Object.defineProperty||definePropertyFallback){var ERR_NON_OBJECT_DESCRIPTOR="Property description must be an object: ",ERR_NON_OBJECT_TARGET="Object.defineProperty called on non-object: ",ERR_ACCESSORS_NOT_SUPPORTED="getters & setters can not be defined on this javascript engine";Object.defineProperty=function(object,property,descriptor){if("object"!=typeof object&&"function"!=typeof object||null===object)throw new TypeError(ERR_NON_OBJECT_TARGET+object);if("object"!=typeof descriptor&&"function"!=typeof descriptor||null===descriptor)throw new TypeError(ERR_NON_OBJECT_DESCRIPTOR+descriptor);if(definePropertyFallback)try{return definePropertyFallback.call(Object,object,property,descriptor)}catch(exception){}if(owns(descriptor,"value"))if(supportsAccessors&&(lookupGetter(object,property)||lookupSetter(object,property))){var prototype=object.__proto__;object.__proto__=prototypeOfObject,delete object[property],object[property]=descriptor.value,object.__proto__=prototype}else object[property]=descriptor.value;else{if(!supportsAccessors)throw new TypeError(ERR_ACCESSORS_NOT_SUPPORTED);owns(descriptor,"get")&&defineGetter(object,property,descriptor.get),owns(descriptor,"set")&&defineSetter(object,property,descriptor.set)}return object}}Object.defineProperties||(Object.defineProperties=function(object,properties){for(var property in properties)owns(properties,property)&&Object.defineProperty(object,property,properties[property]);return object}),Object.seal||(Object.seal=function(object){return object}),Object.freeze||(Object.freeze=function(object){return object});try{Object.freeze(function(){})}catch(exception){Object.freeze=function(freezeObject){return function(object){return"function"==typeof object?object:freezeObject(object)}}(Object.freeze)}if(Object.preventExtensions||(Object.preventExtensions=function(object){return object}),Object.isSealed||(Object.isSealed=function(){return!1}),Object.isFrozen||(Object.isFrozen=function(){return!1}),Object.isExtensible||(Object.isExtensible=function(object){if(Object(object)===object)throw new TypeError;for(var name="";owns(object,name);)name+="?";object[name]=!0;var returnValue=owns(object,name);return delete object[name],returnValue}),!Object.keys){var hasDontEnumBug=!0,dontEnums=["toString","toLocaleString","valueOf","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","constructor"],dontEnumsLength=dontEnums.length;for(var key in{toString:null})hasDontEnumBug=!1;Object.keys=function(object){if("object"!=typeof object&&"function"!=typeof object||null===object)throw new TypeError("Object.keys called on a non-object");var keys=[];for(var name in object)owns(object,name)&&keys.push(name);if(hasDontEnumBug)for(var i=0,ii=dontEnumsLength;ii>i;i++){var dontEnum=dontEnums[i];owns(object,dontEnum)&&keys.push(dontEnum)}return keys}}Date.now||(Date.now=function(){return(new Date).getTime()});var ws="\t\\n\v\\f\\r   ᠎              \\u2028\\u2029\ufeff";if(!String.prototype.trim||ws.trim()){ws="["+ws+"]";var trimBeginRegexp=RegExp("^"+ws+ws+"*"),trimEndRegexp=RegExp(ws+ws+"*$");String.prototype.trim=function(){return(this+"").replace(trimBeginRegexp,"").replace(trimEndRegexp,"")}}var toObject=function(o){if(null==o)throw new TypeError("can\'t convert "+o+" to object");return Object(o)}});'},function(t,e){ace.define("ace/ext/searchbox",["require","exports","module","ace/lib/dom","ace/lib/lang","ace/lib/event","ace/keyboard/hash_handler","ace/lib/keys"],(function(t,e,i){"use strict";var l=t("../lib/dom"),a=t("../lib/lang"),n=t("../lib/event"),s=t("../keyboard/hash_handler").HashHandler,d=t("../lib/keys");l.importCssString("\t.ace_search {\tbackground-color: #ddd;\tborder: 1px solid #cbcbcb;\tborder-top: 0 none;\tmax-width: 325px;\toverflow: hidden;\tmargin: 0;\tpadding: 4px;\tpadding-right: 6px;\tpadding-bottom: 0;\tposition: absolute;\ttop: 0px;\tz-index: 99;\twhite-space: normal;\t}\t.ace_search.left {\tborder-left: 0 none;\tborder-radius: 0px 0px 5px 0px;\tleft: 0;\t}\t.ace_search.right {\tborder-radius: 0px 0px 0px 5px;\tborder-right: 0 none;\tright: 0;\t}\t.ace_search_form, .ace_replace_form {\tborder-radius: 3px;\tborder: 1px solid #cbcbcb;\tfloat: left;\tmargin-bottom: 4px;\toverflow: hidden;\t}\t.ace_search_form.ace_nomatch {\toutline: 1px solid red;\t}\t.ace_search_field {\tbackground-color: white;\tborder-right: 1px solid #cbcbcb;\tborder: 0 none;\t-webkit-box-sizing: border-box;\t-moz-box-sizing: border-box;\tbox-sizing: border-box;\tfloat: left;\theight: 22px;\toutline: 0;\tpadding: 0 7px;\twidth: 214px;\tmargin: 0;\t}\t.ace_searchbtn,\t.ace_replacebtn {\tbackground: #fff;\tborder: 0 none;\tborder-left: 1px solid #dcdcdc;\tcursor: pointer;\tfloat: left;\theight: 22px;\tmargin: 0;\tposition: relative;\t}\t.ace_searchbtn:last-child,\t.ace_replacebtn:last-child {\tborder-top-right-radius: 3px;\tborder-bottom-right-radius: 3px;\t}\t.ace_searchbtn:disabled {\tbackground: none;\tcursor: default;\t}\t.ace_searchbtn {\tbackground-position: 50% 50%;\tbackground-repeat: no-repeat;\twidth: 27px;\t}\t.ace_searchbtn.prev {\tbackground-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAFCAYAAAB4ka1VAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAADFJREFUeNpiSU1NZUAC/6E0I0yACYskCpsJiySKIiY0SUZk40FyTEgCjGgKwTRAgAEAQJUIPCE+qfkAAAAASUVORK5CYII=); \t}\t.ace_searchbtn.next {\tbackground-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAFCAYAAAB4ka1VAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAADRJREFUeNpiTE1NZQCC/0DMyIAKwGJMUAYDEo3M/s+EpvM/mkKwCQxYjIeLMaELoLMBAgwAU7UJObTKsvAAAAAASUVORK5CYII=); \t}\t.ace_searchbtn_close {\tbackground: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAcCAYAAABRVo5BAAAAZ0lEQVR42u2SUQrAMAhDvazn8OjZBilCkYVVxiis8H4CT0VrAJb4WHT3C5xU2a2IQZXJjiQIRMdkEoJ5Q2yMqpfDIo+XY4k6h+YXOyKqTIj5REaxloNAd0xiKmAtsTHqW8sR2W5f7gCu5nWFUpVjZwAAAABJRU5ErkJggg==) no-repeat 50% 0;\tborder-radius: 50%;\tborder: 0 none;\tcolor: #656565;\tcursor: pointer;\tfloat: right;\tfont: 16px/16px Arial;\theight: 14px;\tmargin: 5px 1px 9px 5px;\tpadding: 0;\ttext-align: center;\twidth: 14px;\t}\t.ace_searchbtn_close:hover {\tbackground-color: #656565;\tbackground-position: 50% 100%;\tcolor: white;\t}\t.ace_replacebtn.prev {\twidth: 54px\t}\t.ace_replacebtn.next {\twidth: 27px\t}\t.ace_button {\tmargin-left: 2px;\tcursor: pointer;\t-webkit-user-select: none;\t-moz-user-select: none;\t-o-user-select: none;\t-ms-user-select: none;\tuser-select: none;\toverflow: hidden;\topacity: 0.7;\tborder: 1px solid rgba(100,100,100,0.23);\tpadding: 1px;\t-moz-box-sizing: border-box;\tbox-sizing: border-box;\tcolor: black;\t}\t.ace_button:hover {\tbackground-color: #eee;\topacity:1;\t}\t.ace_button:active {\tbackground-color: #ddd;\t}\t.ace_button.checked {\tborder-color: #3399ff;\topacity:1;\t}\t.ace_search_options{\tmargin-bottom: 3px;\ttext-align: right;\t-webkit-user-select: none;\t-moz-user-select: none;\t-o-user-select: none;\t-ms-user-select: none;\tuser-select: none;\t}","ace_searchbox");var c=''.replace(/>\s+/g,">"),o=function(t,e,i){var a=l.createElement("div");a.innerHTML=c,this.element=a.firstChild,this.$init(),this.setEditor(t)};(function(){this.setEditor=function(t){t.searchBox=this,t.container.appendChild(this.element),this.editor=t},this.$initElements=function(t){this.searchBox=t.querySelector(".ace_search_form"),this.replaceBox=t.querySelector(".ace_replace_form"),this.searchOptions=t.querySelector(".ace_search_options"),this.regExpOption=t.querySelector("[action=toggleRegexpMode]"),this.caseSensitiveOption=t.querySelector("[action=toggleCaseSensitive]"),this.wholeWordOption=t.querySelector("[action=toggleWholeWords]"),this.searchInput=this.searchBox.querySelector(".ace_search_field"),this.replaceInput=this.replaceBox.querySelector(".ace_search_field")},this.$init=function(){var t=this.element;this.$initElements(t);var e=this;n.addListener(t,"mousedown",(function(t){setTimeout((function(){e.activeInput.focus()}),0),n.stopPropagation(t)})),n.addListener(t,"click",(function(t){var i=(t.target||t.srcElement).getAttribute("action");i&&e[i]?e[i]():e.$searchBarKb.commands[i]&&e.$searchBarKb.commands[i].exec(e),n.stopPropagation(t)})),n.addCommandKeyListener(t,(function(t,i,l){var a=d.keyCodeToString(l),s=e.$searchBarKb.findKeyCommand(i,a);s&&s.exec&&(s.exec(e),n.stopEvent(t))})),this.$onChange=a.delayedCall((function(){e.find(!1,!1)})),n.addListener(this.searchInput,"input",(function(){e.$onChange.schedule(20)})),n.addListener(this.searchInput,"focus",(function(){e.activeInput=e.searchInput,e.searchInput.value&&e.highlight()})),n.addListener(this.replaceInput,"focus",(function(){e.activeInput=e.replaceInput,e.searchInput.value&&e.highlight()}))},this.$closeSearchBarKb=new s([{bindKey:"Esc",name:"closeSearchBar",exec:function(t){t.searchBox.hide()}}]),this.$searchBarKb=new s,this.$searchBarKb.bindKeys({"Ctrl-f|Command-f":function(t){var e=t.isReplace=!t.isReplace;t.replaceBox.style.display=e?"":"none",t.searchInput.focus()},"Ctrl-H|Command-Option-F":function(t){t.replaceBox.style.display="",t.replaceInput.focus()},"Ctrl-G|Command-G":function(t){t.findNext()},"Ctrl-Shift-G|Command-Shift-G":function(t){t.findPrev()},esc:function(t){setTimeout((function(){t.hide()}))},Return:function(t){t.activeInput==t.replaceInput&&t.replace(),t.findNext()},"Shift-Return":function(t){t.activeInput==t.replaceInput&&t.replace(),t.findPrev()},"Alt-Return":function(t){t.activeInput==t.replaceInput&&t.replaceAll(),t.findAll()},Tab:function(t){(t.activeInput==t.replaceInput?t.searchInput:t.replaceInput).focus()}}),this.$searchBarKb.addCommands([{name:"toggleRegexpMode",bindKey:{win:"Alt-R|Alt-/",mac:"Ctrl-Alt-R|Ctrl-Alt-/"},exec:function(t){t.regExpOption.checked=!t.regExpOption.checked,t.$syncOptions()}},{name:"toggleCaseSensitive",bindKey:{win:"Alt-C|Alt-I",mac:"Ctrl-Alt-R|Ctrl-Alt-I"},exec:function(t){t.caseSensitiveOption.checked=!t.caseSensitiveOption.checked,t.$syncOptions()}},{name:"toggleWholeWords",bindKey:{win:"Alt-B|Alt-W",mac:"Ctrl-Alt-B|Ctrl-Alt-W"},exec:function(t){t.wholeWordOption.checked=!t.wholeWordOption.checked,t.$syncOptions()}}]),this.$syncOptions=function(){l.setCssClass(this.regExpOption,"checked",this.regExpOption.checked),l.setCssClass(this.wholeWordOption,"checked",this.wholeWordOption.checked),l.setCssClass(this.caseSensitiveOption,"checked",this.caseSensitiveOption.checked),this.find(!1,!1)},this.highlight=function(t){this.editor.session.highlight(t||this.editor.$search.$options.re),this.editor.renderer.updateBackMarkers()},this.find=function(t,e,i){var a=!this.editor.find(this.searchInput.value,{skipCurrent:t,backwards:e,wrap:!0,regExp:this.regExpOption.checked,caseSensitive:this.caseSensitiveOption.checked,wholeWord:this.wholeWordOption.checked,preventScroll:i})&&this.searchInput.value;l.setCssClass(this.searchBox,"ace_nomatch",a),this.editor._emit("findSearchBox",{match:!a}),this.highlight()},this.findNext=function(){this.find(!0,!1)},this.findPrev=function(){this.find(!0,!0)},this.findAll=function(){var t=!this.editor.findAll(this.searchInput.value,{regExp:this.regExpOption.checked,caseSensitive:this.caseSensitiveOption.checked,wholeWord:this.wholeWordOption.checked})&&this.searchInput.value;l.setCssClass(this.searchBox,"ace_nomatch",t),this.editor._emit("findSearchBox",{match:!t}),this.highlight(),this.hide()},this.replace=function(){this.editor.getReadOnly()||this.editor.replace(this.replaceInput.value)},this.replaceAndFindNext=function(){this.editor.getReadOnly()||(this.editor.replace(this.replaceInput.value),this.findNext())},this.replaceAll=function(){this.editor.getReadOnly()||this.editor.replaceAll(this.replaceInput.value)},this.hide=function(){this.element.style.display="none",this.editor.keyBinding.removeKeyboardHandler(this.$closeSearchBarKb),this.editor.focus()},this.show=function(t,e){this.element.style.display="",this.replaceBox.style.display=e?"":"none",this.isReplace=e,t&&(this.searchInput.value=t),this.find(!1,!1,!0),this.searchInput.focus(),this.searchInput.select(),this.editor.keyBinding.addKeyboardHandler(this.$closeSearchBarKb)},this.isFocused=function(){var t=document.activeElement;return t==this.searchInput||t==this.replaceInput}}).call(o.prototype),e.SearchBox=o,e.Search=function(t,e){(t.searchBox||new o(t)).show(t.session.getTextRange(),e)}})),ace.acequire(["ace/ext/searchbox"],(function(){}))},function(t,e){ace.define("ace/theme/jsoneditor",["require","exports","module","ace/lib/dom"],(function(t,e,i){e.isDark=!1,e.cssClass="ace-jsoneditor",e.cssText='.ace-jsoneditor .ace_gutter {\tbackground: #ebebeb;\tcolor: #333\t}\t\t.ace-jsoneditor.ace_editor {\tfont-family: droid sans mono, consolas, monospace, courier new, courier, sans-serif;\tline-height: 1.3;\t}\t.ace-jsoneditor .ace_print-margin {\twidth: 1px;\tbackground: #e8e8e8\t}\t.ace-jsoneditor .ace_scroller {\tbackground-color: #FFFFFF\t}\t.ace-jsoneditor .ace_text-layer {\tcolor: gray\t}\t.ace-jsoneditor .ace_variable {\tcolor: #1a1a1a\t}\t.ace-jsoneditor .ace_cursor {\tborder-left: 2px solid #000000\t}\t.ace-jsoneditor .ace_overwrite-cursors .ace_cursor {\tborder-left: 0px;\tborder-bottom: 1px solid #000000\t}\t.ace-jsoneditor .ace_marker-layer .ace_selection {\tbackground: lightgray\t}\t.ace-jsoneditor.ace_multiselect .ace_selection.ace_start {\tbox-shadow: 0 0 3px 0px #FFFFFF;\tborder-radius: 2px\t}\t.ace-jsoneditor .ace_marker-layer .ace_step {\tbackground: rgb(255, 255, 0)\t}\t.ace-jsoneditor .ace_marker-layer .ace_bracket {\tmargin: -1px 0 0 -1px;\tborder: 1px solid #BFBFBF\t}\t.ace-jsoneditor .ace_marker-layer .ace_active-line {\tbackground: #FFFBD1\t}\t.ace-jsoneditor .ace_gutter-active-line {\tbackground-color : #dcdcdc\t}\t.ace-jsoneditor .ace_marker-layer .ace_selected-word {\tborder: 1px solid lightgray\t}\t.ace-jsoneditor .ace_invisible {\tcolor: #BFBFBF\t}\t.ace-jsoneditor .ace_keyword,\t.ace-jsoneditor .ace_meta,\t.ace-jsoneditor .ace_support.ace_constant.ace_property-value {\tcolor: #AF956F\t}\t.ace-jsoneditor .ace_keyword.ace_operator {\tcolor: #484848\t}\t.ace-jsoneditor .ace_keyword.ace_other.ace_unit {\tcolor: #96DC5F\t}\t.ace-jsoneditor .ace_constant.ace_language {\tcolor: darkorange\t}\t.ace-jsoneditor .ace_constant.ace_numeric {\tcolor: red\t}\t.ace-jsoneditor .ace_constant.ace_character.ace_entity {\tcolor: #BF78CC\t}\t.ace-jsoneditor .ace_invalid {\tcolor: #FFFFFF;\tbackground-color: #FF002A;\t}\t.ace-jsoneditor .ace_fold {\tbackground-color: #AF956F;\tborder-color: #000000\t}\t.ace-jsoneditor .ace_storage,\t.ace-jsoneditor .ace_support.ace_class,\t.ace-jsoneditor .ace_support.ace_function,\t.ace-jsoneditor .ace_support.ace_other,\t.ace-jsoneditor .ace_support.ace_type {\tcolor: #C52727\t}\t.ace-jsoneditor .ace_string {\tcolor: green\t}\t.ace-jsoneditor .ace_comment {\tcolor: #BCC8BA\t}\t.ace-jsoneditor .ace_entity.ace_name.ace_tag,\t.ace-jsoneditor .ace_entity.ace_other.ace_attribute-name {\tcolor: #606060\t}\t.ace-jsoneditor .ace_markup.ace_underline {\ttext-decoration: underline\t}\t.ace-jsoneditor .ace_indent-guide {\tbackground: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAE0lEQVQImWP4////f4bLly//BwAmVgd1/w11/gAAAABJRU5ErkJggg==") right repeat-y\t}',t("../lib/dom").importCssString(e.cssText,e.cssClass)}))}])},module.exports=factory()},function(t,e,i){"use strict";const l=i(25);i(28);const{IView:a}=i(2),n=new l({el:".app",components:{mainContent:i(33),topbar:i(106),bottomBar:i(110)},data:()=>({view:a.home}),methods:{changeView(t){this.view=a[t]},checkIfInView(){if(window.location.search){const t=decodeURIComponent(window.location.search.match(/(\?|&)show\=([^&]*)/)[2]);a[t]&&(this.view=a[t])}}},created(){this.checkIfInView()}});t.exports=n},function(t,e,i){(function(e,i){ /*! * Vue.js v2.6.14 * (c) 2014-2021 Evan You * Released under the MIT License. */ -t.exports=function(){"use strict";var t=Object.freeze({});function i(t){return null==t}function n(t){return null!=t}function a(t){return!0===t}function d(t){return"string"==typeof t||"number"==typeof t||"symbol"==typeof t||"boolean"==typeof t}function s(t){return null!==t&&"object"==typeof t}var c=Object.prototype.toString;function o(t){return"[object Object]"===c.call(t)}function b(t){var e=parseFloat(String(t));return e>=0&&Math.floor(e)===e&&isFinite(t)}function r(t){return n(t)&&"function"==typeof t.then&&"function"==typeof t.catch}function m(t){return null==t?"":Array.isArray(t)||o(t)&&t.toString===c?JSON.stringify(t,null,2):String(t)}function Z(t){var e=parseFloat(t);return isNaN(e)?t:e}function g(t,e){for(var l=Object.create(null),i=t.split(","),n=0;n-1)return t.splice(l,1)}}var y=Object.prototype.hasOwnProperty;function I(t,e){return y.call(t,e)}function G(t){var e=Object.create(null);return function(l){return e[l]||(e[l]=t(l))}}var M=/-(\w)/g,u=G((function(t){return t.replace(M,(function(t,e){return e?e.toUpperCase():""}))})),V=G((function(t){return t.charAt(0).toUpperCase()+t.slice(1)})),p=/\B([A-Z])/g,Y=G((function(t){return t.replace(p,"-$1").toLowerCase()})),R=Function.prototype.bind?function(t,e){return t.bind(e)}:function(t,e){function l(l){var i=arguments.length;return i?i>1?t.apply(e,arguments):t.call(e,l):t.call(e)}return l._length=t.length,l};function B(t,e){e=e||0;for(var l=t.length-e,i=new Array(l);l--;)i[l]=t[l+e];return i}function O(t,e){for(var l in e)t[l]=e[l];return t}function D(t){for(var e={},l=0;l0,$=f&&f.indexOf("edge/")>0,_=(f&&f.indexOf("android"),f&&/iphone|ipad|ipod|ios/.test(f)||"ios"===E),q=(f&&/chrome\/\d+/.test(f),f&&/phantomjs/.test(f),f&&f.match(/firefox\/(\d+)/)),tt={}.watch,et=!1;if(A)try{var lt={};Object.defineProperty(lt,"passive",{get:function(){et=!0}}),window.addEventListener("test-passive",null,lt)}catch(t){}var it=function(){return void 0===x&&(x=!A&&!S&&void 0!==e&&e.process&&"server"===e.process.env.VUE_ENV),x},nt=A&&window.__VUE_DEVTOOLS_GLOBAL_HOOK__;function at(t){return"function"==typeof t&&/native code/.test(t.toString())}var dt,st="undefined"!=typeof Symbol&&at(Symbol)&&"undefined"!=typeof Reflect&&at(Reflect.ownKeys);dt="undefined"!=typeof Set&&at(Set)?Set:function(){function t(){this.set=Object.create(null)}return t.prototype.has=function(t){return!0===this.set[t]},t.prototype.add=function(t){this.set[t]=!0},t.prototype.clear=function(){this.set=Object.create(null)},t}();var ct=U,ot=0,bt=function(){this.id=ot++,this.subs=[]};bt.prototype.addSub=function(t){this.subs.push(t)},bt.prototype.removeSub=function(t){N(this.subs,t)},bt.prototype.depend=function(){bt.target&&bt.target.addDep(this)},bt.prototype.notify=function(){for(var t=this.subs.slice(),e=0,l=t.length;e-1)if(a&&!I(n,"default"))d=!1;else if(""===d||d===Y(t)){var c=Ct(String,n.type);(c<0||s0&&(be((c=t(c,(l||"")+"_"+s))[0])&&be(b)&&(r[o]=Nt(b.text+c[0].text),c.shift()),r.push.apply(r,c)):d(c)?be(b)?r[o]=Nt(b.text+c):""!==c&&r.push(Nt(c)):be(c)&&be(b)?r[o]=Nt(b.text+c.text):(a(e._isVList)&&n(c.tag)&&i(c.key)&&n(l)&&(c.key="__vlist"+l+"_"+s+"__"),r.push(c)));return r}(t):void 0}function be(t){return n(t)&&n(t.text)&&!1===t.isComment}function re(t,e){if(t){for(var l=Object.create(null),i=st?Reflect.ownKeys(t):Object.keys(t),n=0;n0,d=e?!!e.$stable:!a,s=e&&e.$key;if(e){if(e._normalized)return e._normalized;if(d&&i&&i!==t&&s===i.$key&&!a&&!i.$hasNormal)return i;for(var c in n={},e)e[c]&&"$"!==c[0]&&(n[c]=he(l,c,e[c]))}else n={};for(var o in l)o in n||(n[o]=Ne(l,o));return e&&Object.isExtensible(e)&&(e._normalized=n),C(n,"$stable",d),C(n,"$key",s),C(n,"$hasNormal",a),n}function he(t,e,l){var i=function(){var t=arguments.length?l.apply(null,arguments):l({}),e=(t=t&&"object"==typeof t&&!Array.isArray(t)?[t]:oe(t))&&t[0];return t&&(!e||1===t.length&&e.isComment&&!ge(e))?void 0:t};return l.proxy&&Object.defineProperty(t,e,{get:i,enumerable:!0,configurable:!0}),i}function Ne(t,e){return function(){return t[e]}}function ye(t,e){var l,i,a,d,c;if(Array.isArray(t)||"string"==typeof t)for(l=new Array(t.length),i=0,a=t.length;idocument.createEvent("Event").timeStamp&&(sl=function(){return cl.now()})}function ol(){var t,e;for(dl=sl(),nl=!0,tl.sort((function(t,e){return t.id-e.id})),al=0;alal&&tl[l].id>t.id;)l--;tl.splice(l+1,0,t)}else tl.push(t);il||(il=!0,ee(ol))}}(this)},rl.prototype.run=function(){if(this.active){var t=this.get();if(t!==this.value||s(t)||this.deep){var e=this.value;if(this.value=t,this.user){var l='callback for watcher "'+this.expression+'"';Qt(this.cb,this.vm,[t,e],this.vm,l)}else this.cb.call(this.vm,t,e)}}},rl.prototype.evaluate=function(){this.value=this.get(),this.dirty=!1},rl.prototype.depend=function(){for(var t=this.deps.length;t--;)this.deps[t].depend()},rl.prototype.teardown=function(){if(this.active){this.vm._isBeingDestroyed||N(this.vm._watchers,this);for(var t=this.deps.length;t--;)this.deps[t].removeSub(this);this.active=!1}};var ml={enumerable:!0,configurable:!0,get:U,set:U};function Zl(t,e,l){ml.get=function(){return this[e][l]},ml.set=function(t){this[e][l]=t},Object.defineProperty(t,l,ml)}var gl={lazy:!0};function Wl(t,e,l){var i=!it();"function"==typeof l?(ml.get=i?hl(e):Nl(l),ml.set=U):(ml.get=l.get?i&&!1!==l.cache?hl(e):Nl(l.get):U,ml.set=l.set||U),Object.defineProperty(t,e,ml)}function hl(t){return function(){var e=this._computedWatchers&&this._computedWatchers[t];if(e)return e.dirty&&e.evaluate(),bt.target&&e.depend(),e.value}}function Nl(t){return function(){return t.call(this,this)}}function yl(t,e,l,i){return o(l)&&(i=l,l=l.handler),"string"==typeof l&&(l=t[l]),t.$watch(e,l,i)}var Il=0;function Gl(t){var e=t.options;if(t.super){var l=Gl(t.super);if(l!==t.superOptions){t.superOptions=l;var i=function(t){var e,l=t.options,i=t.sealedOptions;for(var n in l)l[n]!==i[n]&&(e||(e={}),e[n]=l[n]);return e}(t);i&&O(t.extendOptions,i),(e=t.options=vt(l,t.extendOptions)).name&&(e.components[e.name]=t)}}return e}function Ml(t){this._init(t)}function ul(t){return t&&(t.Ctor.options.name||t.tag)}function Vl(t,e){return Array.isArray(t)?t.indexOf(e)>-1:"string"==typeof t?t.split(",").indexOf(e)>-1:(l=t,"[object RegExp]"===c.call(l)&&t.test(e));var l}function pl(t,e){var l=t.cache,i=t.keys,n=t._vnode;for(var a in l){var d=l[a];if(d){var s=d.name;s&&!e(s)&&Yl(l,a,i,n)}}}function Yl(t,e,l,i){var n=t[e];!n||i&&n.tag===i.tag||n.componentInstance.$destroy(),t[e]=null,N(l,e)}!function(e){e.prototype._init=function(e){var l=this;l._uid=Il++,l._isVue=!0,e&&e._isComponent?function(t,e){var l=t.$options=Object.create(t.constructor.options),i=e._parentVnode;l.parent=e.parent,l._parentVnode=i;var n=i.componentOptions;l.propsData=n.propsData,l._parentListeners=n.listeners,l._renderChildren=n.children,l._componentTag=n.tag,e.render&&(l.render=e.render,l.staticRenderFns=e.staticRenderFns)}(l,e):l.$options=vt(Gl(l.constructor),e||{},l),l._renderProxy=l,l._self=l,function(t){var e=t.$options,l=e.parent;if(l&&!e.abstract){for(;l.$options.abstract&&l.$parent;)l=l.$parent;l.$children.push(t)}t.$parent=l,t.$root=l?l.$root:t,t.$children=[],t.$refs={},t._watcher=null,t._inactive=null,t._directInactive=!1,t._isMounted=!1,t._isDestroyed=!1,t._isBeingDestroyed=!1}(l),function(t){t._events=Object.create(null),t._hasHookEvent=!1;var e=t.$options._parentListeners;e&&fe(t,e)}(l),function(e){e._vnode=null,e._staticTrees=null;var l=e.$options,i=e.$vnode=l._parentVnode,n=i&&i.context;e.$slots=me(l._renderChildren,n),e.$scopedSlots=t,e._c=function(t,l,i,n){return ke(e,t,l,i,n,!1)},e.$createElement=function(t,l,i,n){return ke(e,t,l,i,n,!0)};var a=i&&i.data;Rt(e,"$attrs",a&&a.attrs||t,null,!0),Rt(e,"$listeners",l._parentListeners||t,null,!0)}(l),qe(l,"beforeCreate"),function(t){var e=re(t.$options.inject,t);e&&(Vt(!1),Object.keys(e).forEach((function(l){Rt(t,l,e[l])})),Vt(!0))}(l),function(t){t._watchers=[];var e=t.$options;e.props&&function(t,e){var l=t.$options.propsData||{},i=t._props={},n=t.$options._propKeys=[];t.$parent&&Vt(!1);var a=function(a){n.push(a);var d=jt(a,e,l,t);Rt(i,a,d),a in t||Zl(t,"_props",a)};for(var d in e)a(d);Vt(!0)}(t,e.props),e.methods&&function(t,e){for(var l in t.$options.props,e)t[l]="function"!=typeof e[l]?U:R(e[l],t)}(t,e.methods),e.data?function(t){var e=t.$options.data;o(e=t._data="function"==typeof e?function(t,e){mt();try{return t.call(e,e)}catch(t){return xt(t,e,"data()"),{}}finally{Zt()}}(e,t):e||{})||(e={});for(var l,i=Object.keys(e),n=t.$options.props,a=(t.$options.methods,i.length);a--;){var d=i[a];n&&I(n,d)||36!==(l=(d+"").charCodeAt(0))&&95!==l&&Zl(t,"_data",d)}Yt(e,!0)}(t):Yt(t._data={},!0),e.computed&&function(t,e){var l=t._computedWatchers=Object.create(null),i=it();for(var n in e){var a=e[n],d="function"==typeof a?a:a.get;i||(l[n]=new rl(t,d||U,U,gl)),n in t||Wl(t,n,a)}}(t,e.computed),e.watch&&e.watch!==tt&&function(t,e){for(var l in e){var i=e[l];if(Array.isArray(i))for(var n=0;n1?B(e):e;for(var l=B(arguments,1),i='event handler for "'+t+'"',n=0,a=e.length;nparseInt(this.max)&&Yl(t,e[0],e,this._vnode),this.vnodeToCache=null}}},created:function(){this.cache=Object.create(null),this.keys=[]},destroyed:function(){for(var t in this.cache)Yl(this.cache,t,this.keys)},mounted:function(){var t=this;this.cacheVNode(),this.$watch("include",(function(e){pl(t,(function(t){return Vl(e,t)}))})),this.$watch("exclude",(function(e){pl(t,(function(t){return!Vl(e,t)}))}))},updated:function(){this.cacheVNode()},render:function(){var t=this.$slots.default,e=He(t),l=e&&e.componentOptions;if(l){var i=ul(l),n=this.include,a=this.exclude;if(n&&(!i||!Vl(n,i))||a&&i&&Vl(a,i))return e;var d=this.cache,s=this.keys,c=null==e.key?l.Ctor.cid+(l.tag?"::"+l.tag:""):e.key;d[c]?(e.componentInstance=d[c].componentInstance,N(s,c),s.push(c)):(this.vnodeToCache=e,this.keyToCache=c),e.data.keepAlive=!0}return e||t&&t[0]}}};!function(t){var e={get:function(){return J}};Object.defineProperty(t,"config",e),t.util={warn:ct,extend:O,mergeOptions:vt,defineReactive:Rt},t.set=Bt,t.delete=Ot,t.nextTick=ee,t.observable=function(t){return Yt(t),t},t.options=Object.create(null),j.forEach((function(e){t.options[e+"s"]=Object.create(null)})),t.options._base=t,O(t.options.components,Bl),function(t){t.use=function(t){var e=this._installedPlugins||(this._installedPlugins=[]);if(e.indexOf(t)>-1)return this;var l=B(arguments,1);return l.unshift(this),"function"==typeof t.install?t.install.apply(t,l):"function"==typeof t&&t.apply(null,l),e.push(t),this}}(t),function(t){t.mixin=function(t){return this.options=vt(this.options,t),this}}(t),function(t){t.cid=0;var e=1;t.extend=function(t){t=t||{};var l=this,i=l.cid,n=t._Ctor||(t._Ctor={});if(n[i])return n[i];var a=t.name||l.options.name,d=function(t){this._init(t)};return(d.prototype=Object.create(l.prototype)).constructor=d,d.cid=e++,d.options=vt(l.options,t),d.super=l,d.options.props&&function(t){var e=t.options.props;for(var l in e)Zl(t.prototype,"_props",l)}(d),d.options.computed&&function(t){var e=t.options.computed;for(var l in e)Wl(t.prototype,l,e[l])}(d),d.extend=l.extend,d.mixin=l.mixin,d.use=l.use,j.forEach((function(t){d[t]=l[t]})),a&&(d.options.components[a]=d),d.superOptions=l.options,d.extendOptions=t,d.sealedOptions=O({},d.options),n[i]=d,d}}(t),function(t){j.forEach((function(e){t[e]=function(t,l){return l?("component"===e&&o(l)&&(l.name=l.name||t,l=this.options._base.extend(l)),"directive"===e&&"function"==typeof l&&(l={bind:l,update:l}),this.options[e+"s"][t]=l,l):this.options[e+"s"][t]}}))}(t)}(Ml),Object.defineProperty(Ml.prototype,"$isServer",{get:it}),Object.defineProperty(Ml.prototype,"$ssrContext",{get:function(){return this.$vnode&&this.$vnode.ssrContext}}),Object.defineProperty(Ml,"FunctionalRenderContext",{value:ze}),Ml.version="2.6.14";var Ol=g("style,class"),Dl=g("input,textarea,option,select,progress"),Ul=function(t,e,l){return"value"===l&&Dl(t)&&"button"!==e||"selected"===l&&"option"===t||"checked"===l&&"input"===t||"muted"===l&&"video"===t},Tl=g("contenteditable,draggable,spellcheck"),Xl=g("events,caret,typing,plaintext-only"),zl=g("allowfullscreen,async,autofocus,autoplay,checked,compact,controls,declare,default,defaultchecked,defaultmuted,defaultselected,defer,disabled,enabled,formnovalidate,hidden,indeterminate,inert,ismap,itemscope,loop,multiple,muted,nohref,noresize,noshade,novalidate,nowrap,open,pauseonexit,readonly,required,reversed,scoped,seamless,selected,sortable,truespeed,typemustmatch,visible"),Fl="http://www.w3.org/1999/xlink",vl=function(t){return":"===t.charAt(5)&&"xlink"===t.slice(0,5)},wl=function(t){return vl(t)?t.slice(6,t.length):""},jl=function(t){return null==t||!1===t};function Ll(t,e){return{staticClass:Jl(t.staticClass,e.staticClass),class:n(t.class)?[t.class,e.class]:e.class}}function Jl(t,e){return t?e?t+" "+e:t:e||""}function kl(t){return Array.isArray(t)?function(t){for(var e,l="",i=0,a=t.length;i-1?ri(t,e,l):zl(e)?jl(l)?t.removeAttribute(e):(l="allowfullscreen"===e&&"EMBED"===t.tagName?"true":e,t.setAttribute(e,l)):Tl(e)?t.setAttribute(e,function(t,e){return jl(e)||"false"===e?"false":"contenteditable"===t&&Xl(e)?e:"true"}(e,l)):vl(e)?jl(l)?t.removeAttributeNS(Fl,wl(e)):t.setAttributeNS(Fl,e,l):ri(t,e,l)}function ri(t,e,l){if(jl(l))t.removeAttribute(e);else{if(K&&!P&&"TEXTAREA"===t.tagName&&"placeholder"===e&&""!==l&&!t.__ieph){var i=function(e){e.stopImmediatePropagation(),t.removeEventListener("input",i)};t.addEventListener("input",i),t.__ieph=!0}t.setAttribute(e,l)}}var mi={create:oi,update:oi};function Zi(t,e){var l=e.elm,a=e.data,d=t.data;if(!(i(a.staticClass)&&i(a.class)&&(i(d)||i(d.staticClass)&&i(d.class)))){var s=function(t){for(var e=t.data,l=t,i=t;n(i.componentInstance);)(i=i.componentInstance._vnode)&&i.data&&(e=Ll(i.data,e));for(;n(l=l.parent);)l&&l.data&&(e=Ll(e,l.data));return function(t,e){return n(t)||n(e)?Jl(t,kl(e)):""}(e.staticClass,e.class)}(e),c=l._transitionClasses;n(c)&&(s=Jl(s,kl(c))),s!==l._prevClass&&(l.setAttribute("class",s),l._prevClass=s)}}var gi,Wi,hi,Ni,yi,Ii,Gi={create:Zi,update:Zi},Mi=/[\w).+\-_$\]]/;function ui(t){var e,l,i,n,a,d=!1,s=!1,c=!1,o=!1,b=0,r=0,m=0,Z=0;for(i=0;i=0&&" "===(W=t.charAt(g));g--);W&&Mi.test(W)||(o=!0)}}else void 0===n?(Z=i+1,n=t.slice(0,i).trim()):h();function h(){(a||(a=[])).push(t.slice(Z,i).trim()),Z=i+1}if(void 0===n?n=t.slice(0,i).trim():0!==Z&&h(),a)for(i=0;i-1?{exp:t.slice(0,Ni),key:'"'+t.slice(Ni+1)+'"'}:{exp:t,key:null};for(Wi=t,Ni=yi=Ii=0;!Ji();)ki(hi=Li())?xi(hi):91===hi&&Ci(hi);return{exp:t.slice(0,yi),key:t.slice(yi+1,Ii)}}(t);return null===l.key?t+"="+e:"$set("+l.exp+", "+l.key+", "+e+")"}function Li(){return Wi.charCodeAt(++Ni)}function Ji(){return Ni>=gi}function ki(t){return 34===t||39===t}function Ci(t){var e=1;for(yi=Ni;!Ji();)if(ki(t=Li()))xi(t);else if(91===t&&e++,93===t&&e--,0===e){Ii=Ni;break}}function xi(t){for(var e=t;!Ji()&&(t=Li())!==e;);}var Qi,Hi="__r";function Ai(t,e,l){var i=Qi;return function n(){null!==e.apply(null,arguments)&&fi(t,n,l,i)}}var Si=Et&&!(q&&Number(q[1])<=53);function Ei(t,e,l,i){if(Si){var n=dl,a=e;e=a._wrapper=function(t){if(t.target===t.currentTarget||t.timeStamp>=n||t.timeStamp<=0||t.target.ownerDocument!==document)return a.apply(this,arguments)}}Qi.addEventListener(t,e,et?{capture:l,passive:i}:l)}function fi(t,e,l,i){(i||Qi).removeEventListener(t,e._wrapper||e,l)}function Ki(t,e){if(!i(t.data.on)||!i(e.data.on)){var l=e.data.on||{},a=t.data.on||{};Qi=e.elm,function(t){if(n(t.__r)){var e=K?"change":"input";t[e]=[].concat(t.__r,t[e]||[]),delete t.__r}n(t.__c)&&(t.change=[].concat(t.__c,t.change||[]),delete t.__c)}(l),de(l,a,Ei,fi,Ai,e.context),Qi=void 0}}var Pi,$i={create:Ki,update:Ki};function _i(t,e){if(!i(t.data.domProps)||!i(e.data.domProps)){var l,a,d=e.elm,s=t.data.domProps||{},c=e.data.domProps||{};for(l in n(c.__ob__)&&(c=e.data.domProps=O({},c)),s)l in c||(d[l]="");for(l in c){if(a=c[l],"textContent"===l||"innerHTML"===l){if(e.children&&(e.children.length=0),a===s[l])continue;1===d.childNodes.length&&d.removeChild(d.childNodes[0])}if("value"===l&&"PROGRESS"!==d.tagName){d._value=a;var o=i(a)?"":String(a);qi(d,o)&&(d.value=o)}else if("innerHTML"===l&&Ql(d.tagName)&&i(d.innerHTML)){(Pi=Pi||document.createElement("div")).innerHTML=""+a+"";for(var b=Pi.firstChild;d.firstChild;)d.removeChild(d.firstChild);for(;b.firstChild;)d.appendChild(b.firstChild)}else if(a!==s[l])try{d[l]=a}catch(t){}}}}function qi(t,e){return!t.composing&&("OPTION"===t.tagName||function(t,e){var l=!0;try{l=document.activeElement!==t}catch(t){}return l&&t.value!==e}(t,e)||function(t,e){var l=t.value,i=t._vModifiers;if(n(i)){if(i.number)return Z(l)!==Z(e);if(i.trim)return l.trim()!==e.trim()}return l!==e}(t,e))}var tn={create:_i,update:_i},en=G((function(t){var e={},l=/:(.+)/;return t.split(/;(?![^(]*\))/g).forEach((function(t){if(t){var i=t.split(l);i.length>1&&(e[i[0].trim()]=i[1].trim())}})),e}));function ln(t){var e=nn(t.style);return t.staticStyle?O(t.staticStyle,e):e}function nn(t){return Array.isArray(t)?D(t):"string"==typeof t?en(t):t}var an,dn=/^--/,sn=/\s*!important$/,cn=function(t,e,l){if(dn.test(e))t.style.setProperty(e,l);else if(sn.test(l))t.style.setProperty(Y(e),l.replace(sn,""),"important");else{var i=bn(e);if(Array.isArray(l))for(var n=0,a=l.length;n-1?e.split(Zn).forEach((function(e){return t.classList.add(e)})):t.classList.add(e);else{var l=" "+(t.getAttribute("class")||"")+" ";l.indexOf(" "+e+" ")<0&&t.setAttribute("class",(l+e).trim())}}function Wn(t,e){if(e&&(e=e.trim()))if(t.classList)e.indexOf(" ")>-1?e.split(Zn).forEach((function(e){return t.classList.remove(e)})):t.classList.remove(e),t.classList.length||t.removeAttribute("class");else{for(var l=" "+(t.getAttribute("class")||"")+" ",i=" "+e+" ";l.indexOf(i)>=0;)l=l.replace(i," ");(l=l.trim())?t.setAttribute("class",l):t.removeAttribute("class")}}function hn(t){if(t){if("object"==typeof t){var e={};return!1!==t.css&&O(e,Nn(t.name||"v")),O(e,t),e}return"string"==typeof t?Nn(t):void 0}}var Nn=G((function(t){return{enterClass:t+"-enter",enterToClass:t+"-enter-to",enterActiveClass:t+"-enter-active",leaveClass:t+"-leave",leaveToClass:t+"-leave-to",leaveActiveClass:t+"-leave-active"}})),yn=A&&!P,In="transition",Gn="animation",Mn="transition",un="transitionend",Vn="animation",pn="animationend";yn&&(void 0===window.ontransitionend&&void 0!==window.onwebkittransitionend&&(Mn="WebkitTransition",un="webkitTransitionEnd"),void 0===window.onanimationend&&void 0!==window.onwebkitanimationend&&(Vn="WebkitAnimation",pn="webkitAnimationEnd"));var Yn=A?window.requestAnimationFrame?window.requestAnimationFrame.bind(window):setTimeout:function(t){return t()};function Rn(t){Yn((function(){Yn(t)}))}function Bn(t,e){var l=t._transitionClasses||(t._transitionClasses=[]);l.indexOf(e)<0&&(l.push(e),gn(t,e))}function On(t,e){t._transitionClasses&&N(t._transitionClasses,e),Wn(t,e)}function Dn(t,e,l){var i=Tn(t,e),n=i.type,a=i.timeout,d=i.propCount;if(!n)return l();var s=n===In?un:pn,c=0,o=function(){t.removeEventListener(s,b),l()},b=function(e){e.target===t&&++c>=d&&o()};setTimeout((function(){c0&&(l=In,b=d,r=a.length):e===Gn?o>0&&(l=Gn,b=o,r=c.length):r=(l=(b=Math.max(d,o))>0?d>o?In:Gn:null)?l===In?a.length:c.length:0,{type:l,timeout:b,propCount:r,hasTransform:l===In&&Un.test(i[Mn+"Property"])}}function Xn(t,e){for(;t.length1}function Ln(t,e){!0!==e.data.show&&Fn(e)}var Jn=function(t){var e,l,s={},c=t.modules,o=t.nodeOps;for(e=0;eg?I(t,i(l[N+1])?null:l[N+1].elm,l,Z,N,a):Z>N&&M(e,m,g)}(m,W,N,l,b):n(N)?(n(t.text)&&o.setTextContent(m,""),I(m,null,N,0,N.length-1,l)):n(W)?M(W,0,W.length-1):n(t.text)&&o.setTextContent(m,""):t.text!==e.text&&o.setTextContent(m,e.text),n(g)&&n(Z=g.hook)&&n(Z=Z.postpatch)&&Z(t,e)}}}function Y(t,e,l){if(a(l)&&n(t.parent))t.parent.data.pendingInsert=e;else for(var i=0;i-1,d.selected!==a&&(d.selected=a);else if(z(Hn(d),i))return void(t.selectedIndex!==s&&(t.selectedIndex=s));n||(t.selectedIndex=-1)}}function Qn(t,e){return e.every((function(e){return!z(e,t)}))}function Hn(t){return"_value"in t?t._value:t.value}function An(t){t.target.composing=!0}function Sn(t){t.target.composing&&(t.target.composing=!1,En(t.target,"input"))}function En(t,e){var l=document.createEvent("HTMLEvents");l.initEvent(e,!0,!0),t.dispatchEvent(l)}function fn(t){return!t.componentInstance||t.data&&t.data.transition?t:fn(t.componentInstance._vnode)}var Kn={model:kn,show:{bind:function(t,e,l){var i=e.value,n=(l=fn(l)).data&&l.data.transition,a=t.__vOriginalDisplay="none"===t.style.display?"":t.style.display;i&&n?(l.data.show=!0,Fn(l,(function(){t.style.display=a}))):t.style.display=i?a:"none"},update:function(t,e,l){var i=e.value;!i!=!e.oldValue&&((l=fn(l)).data&&l.data.transition?(l.data.show=!0,i?Fn(l,(function(){t.style.display=t.__vOriginalDisplay})):vn(l,(function(){t.style.display="none"}))):t.style.display=i?t.__vOriginalDisplay:"none")},unbind:function(t,e,l,i,n){n||(t.style.display=t.__vOriginalDisplay)}}},Pn={name:String,appear:Boolean,css:Boolean,mode:String,type:String,enterClass:String,leaveClass:String,enterToClass:String,leaveToClass:String,enterActiveClass:String,leaveActiveClass:String,appearClass:String,appearActiveClass:String,appearToClass:String,duration:[Number,String,Object]};function $n(t){var e=t&&t.componentOptions;return e&&e.Ctor.options.abstract?$n(He(e.children)):t}function _n(t){var e={},l=t.$options;for(var i in l.propsData)e[i]=t[i];var n=l._parentListeners;for(var a in n)e[u(a)]=n[a];return e}function qn(t,e){if(/\d-keep-alive$/.test(e.tag))return t("keep-alive",{props:e.componentOptions.propsData})}var ta=function(t){return t.tag||ge(t)},ea=function(t){return"show"===t.name},la={name:"transition",props:Pn,abstract:!0,render:function(t){var e=this,l=this.$slots.default;if(l&&(l=l.filter(ta)).length){var i=this.mode,n=l[0];if(function(t){for(;t=t.parent;)if(t.data.transition)return!0}(this.$vnode))return n;var a=$n(n);if(!a)return n;if(this._leaving)return qn(t,n);var s="__transition-"+this._uid+"-";a.key=null==a.key?a.isComment?s+"comment":s+a.tag:d(a.key)?0===String(a.key).indexOf(s)?a.key:s+a.key:a.key;var c=(a.data||(a.data={})).transition=_n(this),o=this._vnode,b=$n(o);if(a.data.directives&&a.data.directives.some(ea)&&(a.data.show=!0),b&&b.data&&!function(t,e){return e.key===t.key&&e.tag===t.tag}(a,b)&&!ge(b)&&(!b.componentInstance||!b.componentInstance._vnode.isComment)){var r=b.data.transition=O({},c);if("out-in"===i)return this._leaving=!0,se(r,"afterLeave",(function(){e._leaving=!1,e.$forceUpdate()})),qn(t,n);if("in-out"===i){if(ge(a))return o;var m,Z=function(){m()};se(c,"afterEnter",Z),se(c,"enterCancelled",Z),se(r,"delayLeave",(function(t){m=t}))}}return n}}},ia=O({tag:String,moveClass:String},Pn);function na(t){t.elm._moveCb&&t.elm._moveCb(),t.elm._enterCb&&t.elm._enterCb()}function aa(t){t.data.newPos=t.elm.getBoundingClientRect()}function da(t){var e=t.data.pos,l=t.data.newPos,i=e.left-l.left,n=e.top-l.top;if(i||n){t.data.moved=!0;var a=t.elm.style;a.transform=a.WebkitTransform="translate("+i+"px,"+n+"px)",a.transitionDuration="0s"}}delete ia.mode;var sa={Transition:la,TransitionGroup:{props:ia,beforeMount:function(){var t=this,e=this._update;this._update=function(l,i){var n=Pe(t);t.__patch__(t._vnode,t.kept,!1,!0),t._vnode=t.kept,n(),e.call(t,l,i)}},render:function(t){for(var e=this.tag||this.$vnode.data.tag||"span",l=Object.create(null),i=this.prevChildren=this.children,n=this.$slots.default||[],a=this.children=[],d=_n(this),s=0;s-1?Sl[t]=e.constructor===window.HTMLUnknownElement||e.constructor===window.HTMLElement:Sl[t]=/HTMLUnknownElement/.test(e.toString())},O(Ml.options.directives,Kn),O(Ml.options.components,sa),Ml.prototype.__patch__=A?Jn:U,Ml.prototype.$mount=function(t,e){return function(t,e,l){var i;return t.$el=e,t.$options.render||(t.$options.render=ht),qe(t,"beforeMount"),i=function(){t._update(t._render(),l)},new rl(t,i,U,{before:function(){t._isMounted&&!t._isDestroyed&&qe(t,"beforeUpdate")}},!0),l=!1,null==t.$vnode&&(t._isMounted=!0,qe(t,"mounted")),t}(this,t=t&&A?fl(t):void 0,e)},A&&setTimeout((function(){J.devtools&&nt&&nt.emit("init",Ml)}),0);var ca,oa=/\{\{((?:.|\r?\n)+?)\}\}/g,ba=/[-.*+?^${}()|[\]\/\\]/g,ra=G((function(t){var e=t[0].replace(ba,"\\$&"),l=t[1].replace(ba,"\\$&");return new RegExp(e+"((?:.|\\n)+?)"+l,"g")})),ma={staticKeys:["staticClass"],transformNode:function(t,e){e.warn;var l=zi(t,"class");l&&(t.staticClass=JSON.stringify(l));var i=Xi(t,"class",!1);i&&(t.classBinding=i)},genData:function(t){var e="";return t.staticClass&&(e+="staticClass:"+t.staticClass+","),t.classBinding&&(e+="class:"+t.classBinding+","),e}},Za={staticKeys:["staticStyle"],transformNode:function(t,e){e.warn;var l=zi(t,"style");l&&(t.staticStyle=JSON.stringify(en(l)));var i=Xi(t,"style",!1);i&&(t.styleBinding=i)},genData:function(t){var e="";return t.staticStyle&&(e+="staticStyle:"+t.staticStyle+","),t.styleBinding&&(e+="style:("+t.styleBinding+"),"),e}},ga=g("area,base,br,col,embed,frame,hr,img,input,isindex,keygen,link,meta,param,source,track,wbr"),Wa=g("colgroup,dd,dt,li,options,p,td,tfoot,th,thead,tr,source"),ha=g("address,article,aside,base,blockquote,body,caption,col,colgroup,dd,details,dialog,div,dl,dt,fieldset,figcaption,figure,footer,form,h1,h2,h3,h4,h5,h6,head,header,hgroup,hr,html,legend,li,menuitem,meta,optgroup,option,param,rp,rt,source,style,summary,tbody,td,tfoot,th,thead,title,tr,track"),Na=/^\s*([^\s"'<>\/=]+)(?:\s*(=)\s*(?:"([^"]*)"+|'([^']*)'+|([^\s"'=<>`]+)))?/,ya=/^\s*((?:v-[\w-]+:|@|:|#)\[[^=]+?\][^\s"'<>\/=]*)(?:\s*(=)\s*(?:"([^"]*)"+|'([^']*)'+|([^\s"'=<>`]+)))?/,Ia="[a-zA-Z_][\\-\\.0-9_a-zA-Z"+k.source+"]*",Ga="((?:"+Ia+"\\:)?"+Ia+")",Ma=new RegExp("^<"+Ga),ua=/^\s*(\/?)>/,Va=new RegExp("^<\\/"+Ga+"[^>]*>"),pa=/^]+>/i,Ya=/^",""":'"',"&":"&"," ":"\n"," ":"\t","'":"'"},Ua=/&(?:lt|gt|quot|amp|#39);/g,Ta=/&(?:lt|gt|quot|amp|#39|#10|#9);/g,Xa=g("pre,textarea",!0),za=function(t,e){return t&&Xa(t)&&"\n"===e[0]};function Fa(t,e){var l=e?Ta:Ua;return t.replace(l,(function(t){return Da[t]}))}var va,wa,ja,La,Ja,ka,Ca,xa,Qa=/^@|^v-on:/,Ha=/^v-|^@|^:|^#/,Aa=/([\s\S]*?)\s+(?:in|of)\s+([\s\S]*)/,Sa=/,([^,\}\]]*)(?:,([^,\}\]]*))?$/,Ea=/^\(|\)$/g,fa=/^\[.*\]$/,Ka=/:(.*)$/,Pa=/^:|^\.|^v-bind:/,$a=/\.[^.\]]+(?=[^\]]*$)/g,_a=/^v-slot(:|$)|^#/,qa=/[\r\n]/,td=/[ \f\t\r\n]+/g,ed=G((function(t){return(ca=ca||document.createElement("div")).innerHTML=t,ca.textContent})),ld="_empty_";function id(t,e,l){return{type:1,tag:t,attrsList:e,attrsMap:od(e),rawAttrsMap:{},parent:l,children:[]}}function nd(t,e){var l,i;(i=Xi(l=t,"key"))&&(l.key=i),t.plain=!t.key&&!t.scopedSlots&&!t.attrsList.length,function(t){var e=Xi(t,"ref");e&&(t.ref=e,t.refInFor=function(t){for(var e=t;e;){if(void 0!==e.for)return!0;e=e.parent}return!1}(t))}(t),function(t){var e;"template"===t.tag?(e=zi(t,"scope"),t.slotScope=e||zi(t,"slot-scope")):(e=zi(t,"slot-scope"))&&(t.slotScope=e);var l=Xi(t,"slot");if(l&&(t.slotTarget='""'===l?'"default"':l,t.slotTargetDynamic=!(!t.attrsMap[":slot"]&&!t.attrsMap["v-bind:slot"]),"template"===t.tag||t.slotScope||Bi(t,"slot",l,function(t,e){return t.rawAttrsMap[":"+e]||t.rawAttrsMap["v-bind:"+e]||t.rawAttrsMap[e]}(t,"slot"))),"template"===t.tag){var i=Fi(t,_a);if(i){var n=sd(i),a=n.name,d=n.dynamic;t.slotTarget=a,t.slotTargetDynamic=d,t.slotScope=i.value||ld}}else{var s=Fi(t,_a);if(s){var c=t.scopedSlots||(t.scopedSlots={}),o=sd(s),b=o.name,r=o.dynamic,m=c[b]=id("template",[],t);m.slotTarget=b,m.slotTargetDynamic=r,m.children=t.children.filter((function(t){if(!t.slotScope)return t.parent=m,!0})),m.slotScope=s.value||ld,t.children=[],t.plain=!1}}}(t),function(t){"slot"===t.tag&&(t.slotName=Xi(t,"name"))}(t),function(t){var e;(e=Xi(t,"is"))&&(t.component=e),null!=zi(t,"inline-template")&&(t.inlineTemplate=!0)}(t);for(var n=0;n-1"+("true"===a?":("+e+")":":_q("+e+","+a+")")),Ti(t,"change","var $$a="+e+",$$el=$event.target,$$c=$$el.checked?("+a+"):("+d+");if(Array.isArray($$a)){var $$v="+(i?"_n("+n+")":n)+",$$i=_i($$a,$$v);if($$el.checked){$$i<0&&("+ji(e,"$$a.concat([$$v])")+")}else{$$i>-1&&("+ji(e,"$$a.slice(0,$$i).concat($$a.slice($$i+1))")+")}}else{"+ji(e,"$$c")+"}",null,!0)}(t,i,n);else if("input"===a&&"radio"===d)!function(t,e,l){var i=l&&l.number,n=Xi(t,"value")||"null";Ri(t,"checked","_q("+e+","+(n=i?"_n("+n+")":n)+")"),Ti(t,"change",ji(e,n),null,!0)}(t,i,n);else if("input"===a||"textarea"===a)!function(t,e,l){var i=t.attrsMap.type,n=l||{},a=n.lazy,d=n.number,s=n.trim,c=!a&&"range"!==i,o=a?"change":"range"===i?Hi:"input",b="$event.target.value";s&&(b="$event.target.value.trim()"),d&&(b="_n("+b+")");var r=ji(e,b);c&&(r="if($event.target.composing)return;"+r),Ri(t,"value","("+e+")"),Ti(t,o,r,null,!0),(s||d)&&Ti(t,"blur","$forceUpdate()")}(t,i,n);else if(!J.isReservedTag(a))return wi(t,i,n),!1;return!0},text:function(t,e){e.value&&Ri(t,"textContent","_s("+e.value+")",e)},html:function(t,e){e.value&&Ri(t,"innerHTML","_s("+e.value+")",e)}},isPreTag:function(t){return"pre"===t},isUnaryTag:ga,mustUseProp:Ul,canBeLeftOpenTag:Wa,isReservedTag:Hl,getTagNamespace:Al,staticKeys:function(t){return t.reduce((function(t,e){return t.concat(e.staticKeys||[])}),[]).join(",")}(Wd)},Nd=G((function(t){return g("type,tag,attrsList,attrsMap,plain,parent,children,attrs,start,end,rawAttrsMap"+(t?","+t:""))})),yd=/^([\w$_]+|\([^)]*?\))\s*=>|^function(?:\s+[\w$]+)?\s*\(/,Id=/\([^)]*?\);*$/,Gd=/^[A-Za-z_$][\w$]*(?:\.[A-Za-z_$][\w$]*|\['[^']*?']|\["[^"]*?"]|\[\d+]|\[[A-Za-z_$][\w$]*])*$/,Md={esc:27,tab:9,enter:13,space:32,up:38,left:37,right:39,down:40,delete:[8,46]},ud={esc:["Esc","Escape"],tab:"Tab",enter:"Enter",space:[" ","Spacebar"],up:["Up","ArrowUp"],left:["Left","ArrowLeft"],right:["Right","ArrowRight"],down:["Down","ArrowDown"],delete:["Backspace","Delete","Del"]},Vd=function(t){return"if("+t+")return null;"},pd={stop:"$event.stopPropagation();",prevent:"$event.preventDefault();",self:Vd("$event.target !== $event.currentTarget"),ctrl:Vd("!$event.ctrlKey"),shift:Vd("!$event.shiftKey"),alt:Vd("!$event.altKey"),meta:Vd("!$event.metaKey"),left:Vd("'button' in $event && $event.button !== 0"),middle:Vd("'button' in $event && $event.button !== 1"),right:Vd("'button' in $event && $event.button !== 2")};function Yd(t,e){var l=e?"nativeOn:":"on:",i="",n="";for(var a in t){var d=Rd(t[a]);t[a]&&t[a].dynamic?n+=a+","+d+",":i+='"'+a+'":'+d+","}return i="{"+i.slice(0,-1)+"}",n?l+"_d("+i+",["+n.slice(0,-1)+"])":l+i}function Rd(t){if(!t)return"function(){}";if(Array.isArray(t))return"["+t.map((function(t){return Rd(t)})).join(",")+"]";var e=Gd.test(t.value),l=yd.test(t.value),i=Gd.test(t.value.replace(Id,""));if(t.modifiers){var n="",a="",d=[];for(var s in t.modifiers)if(pd[s])a+=pd[s],Md[s]&&d.push(s);else if("exact"===s){var c=t.modifiers;a+=Vd(["ctrl","shift","alt","meta"].filter((function(t){return!c[t]})).map((function(t){return"$event."+t+"Key"})).join("||"))}else d.push(s);return d.length&&(n+=function(t){return"if(!$event.type.indexOf('key')&&"+t.map(Bd).join("&&")+")return null;"}(d)),a&&(n+=a),"function($event){"+n+(e?"return "+t.value+".apply(null, arguments)":l?"return ("+t.value+").apply(null, arguments)":i?"return "+t.value:t.value)+"}"}return e||l?t.value:"function($event){"+(i?"return "+t.value:t.value)+"}"}function Bd(t){var e=parseInt(t,10);if(e)return"$event.keyCode!=="+e;var l=Md[t],i=ud[t];return"_k($event.keyCode,"+JSON.stringify(t)+","+JSON.stringify(l)+",$event.key,"+JSON.stringify(i)+")"}var Od={on:function(t,e){t.wrapListeners=function(t){return"_g("+t+","+e.value+")"}},bind:function(t,e){t.wrapData=function(l){return"_b("+l+",'"+t.tag+"',"+e.value+","+(e.modifiers&&e.modifiers.prop?"true":"false")+(e.modifiers&&e.modifiers.sync?",true":"")+")"}},cloak:U},Dd=function(t){this.options=t,this.warn=t.warn||pi,this.transforms=Yi(t.modules,"transformCode"),this.dataGenFns=Yi(t.modules,"genData"),this.directives=O(O({},Od),t.directives);var e=t.isReservedTag||T;this.maybeComponent=function(t){return!!t.component||!e(t.tag)},this.onceId=0,this.staticRenderFns=[],this.pre=!1};function Ud(t,e){var l=new Dd(e);return{render:"with(this){return "+(t?"script"===t.tag?"null":Td(t,l):'_c("div")')+"}",staticRenderFns:l.staticRenderFns}}function Td(t,e){if(t.parent&&(t.pre=t.pre||t.parent.pre),t.staticRoot&&!t.staticProcessed)return Xd(t,e);if(t.once&&!t.onceProcessed)return zd(t,e);if(t.for&&!t.forProcessed)return vd(t,e);if(t.if&&!t.ifProcessed)return Fd(t,e);if("template"!==t.tag||t.slotTarget||e.pre){if("slot"===t.tag)return function(t,e){var l=t.slotName||'"default"',i=Jd(t,e),n="_t("+l+(i?",function(){return "+i+"}":""),a=t.attrs||t.dynamicAttrs?xd((t.attrs||[]).concat(t.dynamicAttrs||[]).map((function(t){return{name:u(t.name),value:t.value,dynamic:t.dynamic}}))):null,d=t.attrsMap["v-bind"];return!a&&!d||i||(n+=",null"),a&&(n+=","+a),d&&(n+=(a?"":",null")+","+d),n+")"}(t,e);var l;if(t.component)l=function(t,e,l){var i=e.inlineTemplate?null:Jd(e,l,!0);return"_c("+t+","+wd(e,l)+(i?","+i:"")+")"}(t.component,t,e);else{var i;(!t.plain||t.pre&&e.maybeComponent(t))&&(i=wd(t,e));var n=t.inlineTemplate?null:Jd(t,e,!0);l="_c('"+t.tag+"'"+(i?","+i:"")+(n?","+n:"")+")"}for(var a=0;a>>0}(d):"")+")"}(t,t.scopedSlots,e)+","),t.model&&(l+="model:{value:"+t.model.value+",callback:"+t.model.callback+",expression:"+t.model.expression+"},"),t.inlineTemplate){var a=function(t,e){var l=t.children[0];if(l&&1===l.type){var i=Ud(l,e.options);return"inlineTemplate:{render:function(){"+i.render+"},staticRenderFns:["+i.staticRenderFns.map((function(t){return"function(){"+t+"}"})).join(",")+"]}"}}(t,e);a&&(l+=a+",")}return l=l.replace(/,$/,"")+"}",t.dynamicAttrs&&(l="_b("+l+',"'+t.tag+'",'+xd(t.dynamicAttrs)+")"),t.wrapData&&(l=t.wrapData(l)),t.wrapListeners&&(l=t.wrapListeners(l)),l}function jd(t){return 1===t.type&&("slot"===t.tag||t.children.some(jd))}function Ld(t,e){var l=t.attrsMap["slot-scope"];if(t.if&&!t.ifProcessed&&!l)return Fd(t,e,Ld,"null");if(t.for&&!t.forProcessed)return vd(t,e,Ld);var i=t.slotScope===ld?"":String(t.slotScope),n="function("+i+"){return "+("template"===t.tag?t.if&&l?"("+t.if+")?"+(Jd(t,e)||"undefined")+":undefined":Jd(t,e)||"undefined":Td(t,e))+"}",a=i?"":",proxy:true";return"{key:"+(t.slotTarget||'"default"')+",fn:"+n+a+"}"}function Jd(t,e,l,i,n){var a=t.children;if(a.length){var d=a[0];if(1===a.length&&d.for&&"template"!==d.tag&&"slot"!==d.tag){var s=l?e.maybeComponent(d)?",1":",0":"";return""+(i||Td)(d,e)+s}var c=l?function(t,e){for(var l=0,i=0;i]*>)","i")),m=t.replace(r,(function(t,l,i){return o=i.length,Ba(b)||"noscript"===b||(l=l.replace(//g,"$1").replace(//g,"$1")),za(b,l)&&(l=l.slice(1)),e.chars&&e.chars(l),""}));c+=t.length-m.length,t=m,R(b,c-o,c)}else{var Z=t.indexOf("<");if(0===Z){if(Ya.test(t)){var g=t.indexOf("--\x3e");if(g>=0){e.shouldKeepComment&&e.comment(t.substring(4,g),c,c+g+3),V(g+3);continue}}if(Ra.test(t)){var W=t.indexOf("]>");if(W>=0){V(W+2);continue}}var h=t.match(pa);if(h){V(h[0].length);continue}var N=t.match(Va);if(N){var y=c;V(N[0].length),R(N[1],y,c);continue}var I=p();if(I){Y(I),za(I.tagName,t)&&V(1);continue}}var G=void 0,M=void 0,u=void 0;if(Z>=0){for(M=t.slice(Z);!(Va.test(M)||Ma.test(M)||Ya.test(M)||Ra.test(M)||(u=M.indexOf("<",1))<0);)Z+=u,M=t.slice(Z);G=t.substring(0,Z)}Z<0&&(G=t),G&&V(G.length),e.chars&&G&&e.chars(G,c-G.length,c)}if(t===l){e.chars&&e.chars(t);break}}function V(e){c+=e,t=t.substring(e)}function p(){var e=t.match(Ma);if(e){var l,i,n={tagName:e[1],attrs:[],start:c};for(V(e[0].length);!(l=t.match(ua))&&(i=t.match(ya)||t.match(Na));)i.start=c,V(i[0].length),i.end=c,n.attrs.push(i);if(l)return n.unarySlash=l[1],V(l[0].length),n.end=c,n}}function Y(t){var l=t.tagName,c=t.unarySlash;a&&("p"===i&&ha(l)&&R(i),s(l)&&i===l&&R(l));for(var o=d(l)||!!c,b=t.attrs.length,r=new Array(b),m=0;m=0&&n[d].lowerCasedTag!==s;d--);else d=0;if(d>=0){for(var o=n.length-1;o>=d;o--)e.end&&e.end(n[o].tag,l,a);n.length=d,i=d&&n[d-1].tag}else"br"===s?e.start&&e.start(t,[],!0,l,a):"p"===s&&(e.start&&e.start(t,[],!1,l,a),e.end&&e.end(t,l,a))}R()}(t,{warn:va,expectHTML:e.expectHTML,isUnaryTag:e.isUnaryTag,canBeLeftOpenTag:e.canBeLeftOpenTag,shouldDecodeNewlines:e.shouldDecodeNewlines,shouldDecodeNewlinesForHref:e.shouldDecodeNewlinesForHref,shouldKeepComment:e.comments,outputSourceRange:e.outputSourceRange,start:function(t,a,d,b,r){var m=i&&i.ns||xa(t);K&&"svg"===m&&(a=function(t){for(var e=[],l=0;lc&&(s.push(a=t.slice(c,n)),d.push(JSON.stringify(a)));var o=ui(i[1].trim());d.push("_s("+o+")"),s.push({"@binding":o}),c=n+i[0].length}return c':'
',Ed.innerHTML.indexOf(" ")>0}var $d=!!A&&Pd(!1),_d=!!A&&Pd(!0),qd=G((function(t){var e=fl(t);return e&&e.innerHTML})),ts=Ml.prototype.$mount;return Ml.prototype.$mount=function(t,e){if((t=t&&fl(t))===document.body||t===document.documentElement)return this;var l=this.$options;if(!l.render){var i=l.template;if(i)if("string"==typeof i)"#"===i.charAt(0)&&(i=qd(i));else{if(!i.nodeType)return this;i=i.innerHTML}else t&&(i=function(t){if(t.outerHTML)return t.outerHTML;var e=document.createElement("div");return e.appendChild(t.cloneNode(!0)),e.innerHTML}(t));if(i){var n=Kd(i,{outputSourceRange:!1,shouldDecodeNewlines:$d,shouldDecodeNewlinesForHref:_d,delimiters:l.delimiters,comments:l.comments},this),a=n.render,d=n.staticRenderFns;l.render=a,l.staticRenderFns=d}}return ts.call(this,t,e)},Ml.compile=Kd,Ml}()}).call(this,l(5),l(26).setImmediate)},function(t,e,l){(function(t){var i=void 0!==t&&t||"undefined"!=typeof self&&self||window,n=Function.prototype.apply;function a(t,e){this._id=t,this._clearFn=e}e.setTimeout=function(){return new a(n.call(setTimeout,i,arguments),clearTimeout)},e.setInterval=function(){return new a(n.call(setInterval,i,arguments),clearInterval)},e.clearTimeout=e.clearInterval=function(t){t&&t.close()},a.prototype.unref=a.prototype.ref=function(){},a.prototype.close=function(){this._clearFn.call(i,this._id)},e.enroll=function(t,e){clearTimeout(t._idleTimeoutId),t._idleTimeout=e},e.unenroll=function(t){clearTimeout(t._idleTimeoutId),t._idleTimeout=-1},e._unrefActive=e.active=function(t){clearTimeout(t._idleTimeoutId);var e=t._idleTimeout;e>=0&&(t._idleTimeoutId=setTimeout((function(){t._onTimeout&&t._onTimeout()}),e))},l(27),e.setImmediate="undefined"!=typeof self&&self.setImmediate||void 0!==t&&t.setImmediate||this&&this.setImmediate,e.clearImmediate="undefined"!=typeof self&&self.clearImmediate||void 0!==t&&t.clearImmediate||this&&this.clearImmediate}).call(this,l(5))},function(t,e,l){(function(t,e){!function(t,l){"use strict";if(!t.setImmediate){var i,n,a,d,s,c=1,o={},b=!1,r=t.document,m=Object.getPrototypeOf&&Object.getPrototypeOf(t);m=m&&m.setTimeout?m:t,"[object process]"==={}.toString.call(t.process)?i=function(t){e.nextTick((function(){g(t)}))}:!function(){if(t.postMessage&&!t.importScripts){var e=!0,l=t.onmessage;return t.onmessage=function(){e=!1},t.postMessage("","*"),t.onmessage=l,e}}()?t.MessageChannel?((a=new MessageChannel).port1.onmessage=function(t){g(t.data)},i=function(t){a.port2.postMessage(t)}):r&&"onreadystatechange"in r.createElement("script")?(n=r.documentElement,i=function(t){var e=r.createElement("script");e.onreadystatechange=function(){g(t),e.onreadystatechange=null,n.removeChild(e),e=null},n.appendChild(e)}):i=function(t){setTimeout(g,0,t)}:(d="setImmediate$"+Math.random()+"$",s=function(e){e.source===t&&"string"==typeof e.data&&0===e.data.indexOf(d)&&g(+e.data.slice(d.length))},t.addEventListener?t.addEventListener("message",s,!1):t.attachEvent("onmessage",s),i=function(e){t.postMessage(d+e,"*")}),m.setImmediate=function(t){"function"!=typeof t&&(t=new Function(""+t));for(var e=new Array(arguments.length-1),l=0;l({pantryID:null}),methods:{changeView(t){this.$emit("change-view",t)},displayOnboarding(t){this.pantryID=t,this.$emit("change-view",n.created)}}};t.exports=a},function(t,e){t.exports='
\n \n\n \n\n \n\n \n\n \n\n \n
\n'},function(t,e,l){"use strict";var i=this&&this.__awaiter||function(t,e,l,i){return new(l||(l=Promise))((function(n,a){function d(t){try{c(i.next(t))}catch(t){a(t)}}function s(t){try{c(i.throw(t))}catch(t){a(t)}}function c(t){var e;t.done?n(t.value):(e=t.value,e instanceof l?e:new l((function(t){t(e)}))).then(d,s)}c((i=i.apply(t,e||[])).next())}))};const n=l(4),a=l(3).apiPath,d={name:"dashboard",template:l(54),props:["pantryID"],components:{explorer:l(55),login:l(70),banner:l(21)},data:()=>({signedIn:!1,id:null,pantry:null,promo:{emoji:"🔥",snippet:"Free Stickers?",title:"Fill out our user survey and get free Pantry stickers!"}}),methods:{login(t){return i(this,void 0,void 0,(function*(){try{yield this.fetchPantry(t),this.createSession(),this.signedIn=!0}catch(t){alert("Login Failed. Is your PantryID correct?")}}))},refresh(){return i(this,void 0,void 0,(function*(){yield this.fetchPantry(this.id)}))},fetchPantry(t){return i(this,void 0,void 0,(function*(){const{data:e}=yield n({method:"GET",url:`${a}/pantry/${t}`});this.id=t,this.pantry=Object.assign(Object.assign({},e),{id:this.id})}))},loadFromSession(){return i(this,void 0,void 0,(function*(){null!==sessionStorage.getItem("pantry-id")&&(yield this.login(sessionStorage.getItem("pantry-id")))}))},createSession(){sessionStorage.setItem("pantry-id",this.id)},urlPantryID:()=>window.location.search.match(/(\?|&)pantryid\=([^&]*)/),loadFromURL(){return i(this,void 0,void 0,(function*(){if(null===this.urlPantryID())return;const t=decodeURIComponent(this.urlPantryID()[2]);yield this.login(t)}))},bannerCTAClicked(){window.location.href="https://tally.so/r/m6yPAn"}},mounted(){this.loadFromSession(),this.loadFromURL()}};t.exports=d},function(t,e,l){"use strict";var i=l(0),n=l(11),a=l(37),d=l(17);function s(t){var e=new a(t),l=n(a.prototype.request,e);return i.extend(l,a.prototype,e),i.extend(l,e),l}var c=s(l(8));c.Axios=a,c.create=function(t){return s(d(c.defaults,t))},c.Cancel=l(18),c.CancelToken=l(51),c.isCancel=l(16),c.all=function(t){return Promise.all(t)},c.spread=l(52),c.isAxiosError=l(53),t.exports=c,t.exports.default=c},function(t,e,l){"use strict";var i=l(0),n=l(12),a=l(38),d=l(39),s=l(17),c=l(49),o=c.validators;function b(t){this.defaults=t,this.interceptors={request:new a,response:new a}}b.prototype.request=function(t){"string"==typeof t?(t=arguments[1]||{}).url=arguments[0]:t=t||{},(t=s(this.defaults,t)).method?t.method=t.method.toLowerCase():this.defaults.method?t.method=this.defaults.method.toLowerCase():t.method="get";var e=t.transitional;void 0!==e&&c.assertOptions(e,{silentJSONParsing:o.transitional(o.boolean,"1.0.0"),forcedJSONParsing:o.transitional(o.boolean,"1.0.0"),clarifyTimeoutError:o.transitional(o.boolean,"1.0.0")},!1);var l=[],i=!0;this.interceptors.request.forEach((function(e){"function"==typeof e.runWhen&&!1===e.runWhen(t)||(i=i&&e.synchronous,l.unshift(e.fulfilled,e.rejected))}));var n,a=[];if(this.interceptors.response.forEach((function(t){a.push(t.fulfilled,t.rejected)})),!i){var b=[d,void 0];for(Array.prototype.unshift.apply(b,l),b=b.concat(a),n=Promise.resolve(t);b.length;)n=n.then(b.shift(),b.shift());return n}for(var r=t;l.length;){var m=l.shift(),Z=l.shift();try{r=m(r)}catch(t){Z(t);break}}try{n=d(r)}catch(t){return Promise.reject(t)}for(;a.length;)n=n.then(a.shift(),a.shift());return n},b.prototype.getUri=function(t){return t=s(this.defaults,t),n(t.url,t.params,t.paramsSerializer).replace(/^\?/,"")},i.forEach(["delete","get","head","options"],(function(t){b.prototype[t]=function(e,l){return this.request(s(l||{},{method:t,url:e,data:(l||{}).data}))}})),i.forEach(["post","put","patch"],(function(t){b.prototype[t]=function(e,l,i){return this.request(s(i||{},{method:t,url:e,data:l}))}})),t.exports=b},function(t,e,l){"use strict";var i=l(0);function n(){this.handlers=[]}n.prototype.use=function(t,e,l){return this.handlers.push({fulfilled:t,rejected:e,synchronous:!!l&&l.synchronous,runWhen:l?l.runWhen:null}),this.handlers.length-1},n.prototype.eject=function(t){this.handlers[t]&&(this.handlers[t]=null)},n.prototype.forEach=function(t){i.forEach(this.handlers,(function(e){null!==e&&t(e)}))},t.exports=n},function(t,e,l){"use strict";var i=l(0),n=l(40),a=l(16),d=l(8);function s(t){t.cancelToken&&t.cancelToken.throwIfRequested()}t.exports=function(t){return s(t),t.headers=t.headers||{},t.data=n.call(t,t.data,t.headers,t.transformRequest),t.headers=i.merge(t.headers.common||{},t.headers[t.method]||{},t.headers),i.forEach(["delete","get","head","post","put","patch","common"],(function(e){delete t.headers[e]})),(t.adapter||d.adapter)(t).then((function(e){return s(t),e.data=n.call(t,e.data,e.headers,t.transformResponse),e}),(function(e){return a(e)||(s(t),e&&e.response&&(e.response.data=n.call(t,e.response.data,e.response.headers,t.transformResponse))),Promise.reject(e)}))}},function(t,e,l){"use strict";var i=l(0),n=l(8);t.exports=function(t,e,l){var a=this||n;return i.forEach(l,(function(l){t=l.call(a,t,e)})),t}},function(t,e,l){"use strict";var i=l(0);t.exports=function(t,e){i.forEach(t,(function(l,i){i!==e&&i.toUpperCase()===e.toUpperCase()&&(t[e]=l,delete t[i])}))}},function(t,e,l){"use strict";var i=l(15);t.exports=function(t,e,l){var n=l.config.validateStatus;l.status&&n&&!n(l.status)?e(i("Request failed with status code "+l.status,l.config,null,l.request,l)):t(l)}},function(t,e,l){"use strict";var i=l(0);t.exports=i.isStandardBrowserEnv()?{write:function(t,e,l,n,a,d){var s=[];s.push(t+"="+encodeURIComponent(e)),i.isNumber(l)&&s.push("expires="+new Date(l).toGMTString()),i.isString(n)&&s.push("path="+n),i.isString(a)&&s.push("domain="+a),!0===d&&s.push("secure"),document.cookie=s.join("; ")},read:function(t){var e=document.cookie.match(new RegExp("(^|;\\s*)("+t+")=([^;]*)"));return e?decodeURIComponent(e[3]):null},remove:function(t){this.write(t,"",Date.now()-864e5)}}:{write:function(){},read:function(){return null},remove:function(){}}},function(t,e,l){"use strict";var i=l(45),n=l(46);t.exports=function(t,e){return t&&!i(e)?n(t,e):e}},function(t,e,l){"use strict";t.exports=function(t){return/^([a-z][a-z\d\+\-\.]*:)?\/\//i.test(t)}},function(t,e,l){"use strict";t.exports=function(t,e){return e?t.replace(/\/+$/,"")+"/"+e.replace(/^\/+/,""):t}},function(t,e,l){"use strict";var i=l(0),n=["age","authorization","content-length","content-type","etag","expires","from","host","if-modified-since","if-unmodified-since","last-modified","location","max-forwards","proxy-authorization","referer","retry-after","user-agent"];t.exports=function(t){var e,l,a,d={};return t?(i.forEach(t.split("\n"),(function(t){if(a=t.indexOf(":"),e=i.trim(t.substr(0,a)).toLowerCase(),l=i.trim(t.substr(a+1)),e){if(d[e]&&n.indexOf(e)>=0)return;d[e]="set-cookie"===e?(d[e]?d[e]:[]).concat([l]):d[e]?d[e]+", "+l:l}})),d):d}},function(t,e,l){"use strict";var i=l(0);t.exports=i.isStandardBrowserEnv()?function(){var t,e=/(msie|trident)/i.test(navigator.userAgent),l=document.createElement("a");function n(t){var i=t;return e&&(l.setAttribute("href",i),i=l.href),l.setAttribute("href",i),{href:l.href,protocol:l.protocol?l.protocol.replace(/:$/,""):"",host:l.host,search:l.search?l.search.replace(/^\?/,""):"",hash:l.hash?l.hash.replace(/^#/,""):"",hostname:l.hostname,port:l.port,pathname:"/"===l.pathname.charAt(0)?l.pathname:"/"+l.pathname}}return t=n(window.location.href),function(e){var l=i.isString(e)?n(e):e;return l.protocol===t.protocol&&l.host===t.host}}():function(){return!0}},function(t,e,l){"use strict";var i=l(50),n={};["object","boolean","number","function","string","symbol"].forEach((function(t,e){n[t]=function(l){return typeof l===t||"a"+(e<1?"n ":" ")+t}}));var a={},d=i.version.split(".");function s(t,e){for(var l=e?e.split("."):d,i=t.split("."),n=0;n<3;n++){if(l[n]>i[n])return!0;if(l[n]0;){var a=i[n],d=e[a];if(d){var s=t[a],c=void 0===s||d(s,a,t);if(!0!==c)throw new TypeError("option "+a+" must be "+c)}else if(!0!==l)throw Error("Unknown option "+a)}},validators:n}},function(t){t.exports=JSON.parse('{"name":"axios","version":"0.21.4","description":"Promise based HTTP client for the browser and node.js","main":"index.js","scripts":{"test":"grunt test","start":"node ./sandbox/server.js","build":"NODE_ENV=production grunt build","preversion":"npm test","version":"npm run build && grunt version && git add -A dist && git add CHANGELOG.md bower.json package.json","postversion":"git push && git push --tags","examples":"node ./examples/server.js","coveralls":"cat coverage/lcov.info | ./node_modules/coveralls/bin/coveralls.js","fix":"eslint --fix lib/**/*.js"},"repository":{"type":"git","url":"https://github.com/axios/axios.git"},"keywords":["xhr","http","ajax","promise","node"],"author":"Matt Zabriskie","license":"MIT","bugs":{"url":"https://github.com/axios/axios/issues"},"homepage":"https://axios-http.com","devDependencies":{"coveralls":"^3.0.0","es6-promise":"^4.2.4","grunt":"^1.3.0","grunt-banner":"^0.6.0","grunt-cli":"^1.2.0","grunt-contrib-clean":"^1.1.0","grunt-contrib-watch":"^1.0.0","grunt-eslint":"^23.0.0","grunt-karma":"^4.0.0","grunt-mocha-test":"^0.13.3","grunt-ts":"^6.0.0-beta.19","grunt-webpack":"^4.0.2","istanbul-instrumenter-loader":"^1.0.0","jasmine-core":"^2.4.1","karma":"^6.3.2","karma-chrome-launcher":"^3.1.0","karma-firefox-launcher":"^2.1.0","karma-jasmine":"^1.1.1","karma-jasmine-ajax":"^0.1.13","karma-safari-launcher":"^1.0.0","karma-sauce-launcher":"^4.3.6","karma-sinon":"^1.0.5","karma-sourcemap-loader":"^0.3.8","karma-webpack":"^4.0.2","load-grunt-tasks":"^3.5.2","minimist":"^1.2.0","mocha":"^8.2.1","sinon":"^4.5.0","terser-webpack-plugin":"^4.2.3","typescript":"^4.0.5","url-search-params":"^0.10.0","webpack":"^4.44.2","webpack-dev-server":"^3.11.0"},"browser":{"./lib/adapters/http.js":"./lib/adapters/xhr.js"},"jsdelivr":"dist/axios.min.js","unpkg":"dist/axios.min.js","typings":"./index.d.ts","dependencies":{"follow-redirects":"^1.14.0"},"bundlesize":[{"path":"./dist/axios.min.js","threshold":"5kB"}]}')},function(t,e,l){"use strict";var i=l(18);function n(t){if("function"!=typeof t)throw new TypeError("executor must be a function.");var e;this.promise=new Promise((function(t){e=t}));var l=this;t((function(t){l.reason||(l.reason=new i(t),e(l.reason))}))}n.prototype.throwIfRequested=function(){if(this.reason)throw this.reason},n.source=function(){var t;return{token:new n((function(e){t=e})),cancel:t}},t.exports=n},function(t,e,l){"use strict";t.exports=function(t){return function(e){return t.apply(null,e)}}},function(t,e,l){"use strict";t.exports=function(t){return"object"==typeof t&&!0===t.isAxiosError}},function(t,e){t.exports='
\n
\n \n
\n
\n
\n \n \n
\n
\n
\n'},function(t,e,l){"use strict";var i=this&&this.__awaiter||function(t,e,l,i){return new(l||(l=Promise))((function(n,a){function d(t){try{c(i.next(t))}catch(t){a(t)}}function s(t){try{c(i.throw(t))}catch(t){a(t)}}function c(t){var e;t.done?n(t.value):(e=t.value,e instanceof l?e:new l((function(t){t(e)}))).then(d,s)}c((i=i.apply(t,e||[])).next())}))};const n=l(4),a=l(22).default,d=l(3),s=l(60),c=d.apiPath,o={name:"explorer",props:["pantry"],template:s,components:{changelog:l(61),explorerEmpty:l(63),explorerOnboarding:l(65),basket:l(67),modal:l(20),"json-edit":a},data:()=>({basket:null,schemaModalVisible:!1,schemaExample:{_schema:{toppings:{type:"array"},size:{type:"string"},price:{type:"number"}},toppings:["pepperoni","mushrooms","hot peppers"],size:"large",price:19.99}}),computed:{errorsExist(){return this.pantry.errors&&this.pantry.errors.length>0},isPantryEmpty(){return this.pantry.baskets&&0===this.pantry.baskets.length},activeBasket(){return this.basket?this.basket.name:""}},methods:{daysToDeletion(t){const e=new Date;return e.setSeconds(t),this.getDiffOfDates(new Date,e)},getDiffOfDates(t,e){const l=Date.UTC(t.getFullYear(),t.getMonth(),t.getDate()),i=Date.UTC(e.getFullYear(),e.getMonth(),e.getDate());return Math.floor((i-l)/864e5)},refresh(){this.$emit("refresh"),this.basket=null},createBasket(){return i(this,void 0,void 0,(function*(){const t=Math.floor(100*Math.random()+1),e=prompt("What is the name of the new basket?","newBasket"+t);e&&(yield n({method:"POST",data:{key:"value"},url:`${c}/pantry/${this.pantry.id}/basket/${e}`}),this.refresh())}))},renamePantry(){return i(this,void 0,void 0,(function*(){const t=this.pantry.name,e=prompt("Pantry Name:",t);e&&(yield n({method:"PUT",data:{name:e},url:`${c}/pantry/${this.pantry.id}`}),this.refresh())}))},changePantryDescription(){return i(this,void 0,void 0,(function*(){const t=this.pantry.description,e=prompt("Pantry Description:",t);e&&(yield n({method:"PUT",data:{description:e},url:`${c}/pantry/${this.pantry.id}`}),this.refresh())}))},viewBasket(t){return i(this,void 0,void 0,(function*(){const{data:e}=yield n({method:"GET",url:`${c}/pantry/${this.pantry.id}/basket/${t}`});this.basket={data:e,name:t}}))},loadBasket(){if(this.pantry.baskets&&this.pantry.baskets.length>0){const{name:t}=this.pantry.baskets[0];this.viewBasket(t)}},toggleSchemaModal(){this.schemaModalVisible=!this.schemaModalVisible}}};t.exports=o},function(t,e,l){var i=l(57);"string"==typeof i&&(i=[[t.i,i,""]]);var n={hmr:!0,transform:void 0,insertInto:void 0};l(7)(i,n);i.locals&&(t.exports=i.locals)},function(t,e,l){var i=l(10);(t.exports=l(6)(!1)).push([t.i,'/* reset styling (prevent conflicts with bootstrap, materialize.css, etc.) */\r\n\r\ndiv.jsoneditor .jsoneditor-search input {\r\n height: auto;\r\n border: inherit;\r\n}\r\n\r\ndiv.jsoneditor .jsoneditor-search input:focus {\r\n border: none !important;\r\n box-shadow: none !important;\r\n}\r\n\r\ndiv.jsoneditor table {\r\n border-collapse: collapse;\r\n width: auto;\r\n}\r\n\r\ndiv.jsoneditor td,\r\ndiv.jsoneditor th {\r\n padding: 0;\r\n display: table-cell;\r\n text-align: left;\r\n vertical-align: inherit;\r\n border-radius: inherit;\r\n}\r\n\r\n\r\ndiv.jsoneditor-field,\r\ndiv.jsoneditor-value,\r\ndiv.jsoneditor-readonly {\r\n border: 1px solid transparent;\r\n min-height: 16px;\r\n min-width: 32px;\r\n padding: 2px;\r\n margin: 1px;\r\n word-wrap: break-word;\r\n float: left;\r\n}\r\n\r\n/* adjust margin of p elements inside editable divs, needed for Opera, IE */\r\n\r\ndiv.jsoneditor-field p,\r\ndiv.jsoneditor-value p {\r\n margin: 0;\r\n}\r\n\r\ndiv.jsoneditor-value {\r\n word-break: break-word;\r\n}\r\n\r\ndiv.jsoneditor-readonly {\r\n min-width: 16px;\r\n color: gray;\r\n}\r\n\r\ndiv.jsoneditor-empty {\r\n border-color: lightgray;\r\n border-style: dashed;\r\n border-radius: 2px;\r\n}\r\n\r\ndiv.jsoneditor-field.jsoneditor-empty::after,\r\ndiv.jsoneditor-value.jsoneditor-empty::after {\r\n pointer-events: none;\r\n color: lightgray;\r\n font-size: 8pt;\r\n}\r\n\r\ndiv.jsoneditor-field.jsoneditor-empty::after {\r\n content: "field";\r\n}\r\n\r\ndiv.jsoneditor-value.jsoneditor-empty::after {\r\n content: "value";\r\n}\r\n\r\ndiv.jsoneditor-value.jsoneditor-url,\r\na.jsoneditor-value.jsoneditor-url {\r\n color: green;\r\n text-decoration: underline;\r\n}\r\n\r\na.jsoneditor-value.jsoneditor-url {\r\n display: inline-block;\r\n padding: 2px;\r\n margin: 2px;\r\n}\r\n\r\na.jsoneditor-value.jsoneditor-url:hover,\r\na.jsoneditor-value.jsoneditor-url:focus {\r\n color: #ee422e;\r\n}\r\n\r\ndiv.jsoneditor td.jsoneditor-separator {\r\n padding: 3px 0;\r\n vertical-align: top;\r\n color: gray;\r\n}\r\n\r\ndiv.jsoneditor-field[contenteditable=true]:focus,\r\ndiv.jsoneditor-field[contenteditable=true]:hover,\r\ndiv.jsoneditor-value[contenteditable=true]:focus,\r\ndiv.jsoneditor-value[contenteditable=true]:hover,\r\ndiv.jsoneditor-field.jsoneditor-highlight,\r\ndiv.jsoneditor-value.jsoneditor-highlight {\r\n background-color: #FFFFAB;\r\n border: 1px solid yellow;\r\n border-radius: 2px;\r\n}\r\n\r\ndiv.jsoneditor-field.jsoneditor-highlight-active,\r\ndiv.jsoneditor-field.jsoneditor-highlight-active:focus,\r\ndiv.jsoneditor-field.jsoneditor-highlight-active:hover,\r\ndiv.jsoneditor-value.jsoneditor-highlight-active,\r\ndiv.jsoneditor-value.jsoneditor-highlight-active:focus,\r\ndiv.jsoneditor-value.jsoneditor-highlight-active:hover {\r\n background-color: #ffee00;\r\n border: 1px solid #ffc700;\r\n border-radius: 2px;\r\n}\r\n\r\ndiv.jsoneditor-value.jsoneditor-string {\r\n color: #008000;\r\n}\r\n\r\ndiv.jsoneditor-value.jsoneditor-object,\r\ndiv.jsoneditor-value.jsoneditor-array {\r\n min-width: 16px;\r\n color: #808080;\r\n}\r\n\r\ndiv.jsoneditor-value.jsoneditor-number {\r\n color: #ee422e;\r\n}\r\n\r\ndiv.jsoneditor-value.jsoneditor-boolean {\r\n color: #ff8c00;\r\n}\r\n\r\ndiv.jsoneditor-value.jsoneditor-null {\r\n color: #004ED0;\r\n}\r\n\r\ndiv.jsoneditor-value.jsoneditor-invalid {\r\n color: #000000;\r\n}\r\n\r\ndiv.jsoneditor-tree button {\r\n width: 24px;\r\n height: 24px;\r\n padding: 0;\r\n margin: 0;\r\n border: none;\r\n cursor: pointer;\r\n background: transparent url('+i(l(1))+");\r\n}\r\n\r\ndiv.jsoneditor-mode-view tr.jsoneditor-expandable td.jsoneditor-tree,\r\ndiv.jsoneditor-mode-form tr.jsoneditor-expandable td.jsoneditor-tree {\r\n cursor: pointer;\r\n}\r\n\r\ndiv.jsoneditor-tree button.jsoneditor-collapsed {\r\n background-position: 0 -48px;\r\n}\r\n\r\ndiv.jsoneditor-tree button.jsoneditor-expanded {\r\n background-position: 0 -72px;\r\n}\r\n\r\ndiv.jsoneditor-tree button.jsoneditor-contextmenu {\r\n background-position: -48px -72px;\r\n}\r\n\r\ndiv.jsoneditor-tree button.jsoneditor-contextmenu:hover,\r\ndiv.jsoneditor-tree button.jsoneditor-contextmenu:focus,\r\ndiv.jsoneditor-tree button.jsoneditor-contextmenu.jsoneditor-selected,\r\ntr.jsoneditor-selected.jsoneditor-first button.jsoneditor-contextmenu {\r\n background-position: -48px -48px;\r\n}\r\n\r\ndiv.jsoneditor-tree *:focus {\r\n outline: none;\r\n}\r\n\r\ndiv.jsoneditor-tree button:focus {\r\n /* TODO: nice outline for buttons with focus\r\n outline: #97B0F8 solid 2px;\r\n box-shadow: 0 0 8px #97B0F8;\r\n */\r\n background-color: #f5f5f5;\r\n outline: #e5e5e5 solid 1px;\r\n}\r\n\r\ndiv.jsoneditor-tree button.jsoneditor-invisible {\r\n visibility: hidden;\r\n background: none;\r\n}\r\n\r\ndiv.jsoneditor {\r\n color: #1A1A1A;\r\n border: 1px solid #3883fa;\r\n -moz-box-sizing: border-box;\r\n -webkit-box-sizing: border-box;\r\n box-sizing: border-box;\r\n width: 100%;\r\n height: 100%;\r\n overflow: hidden;\r\n position: relative;\r\n padding: 0;\r\n line-height: 100%;\r\n}\r\n\r\ndiv.jsoneditor-tree table.jsoneditor-tree {\r\n border-collapse: collapse;\r\n border-spacing: 0;\r\n width: 100%;\r\n margin: 0;\r\n}\r\n\r\ndiv.jsoneditor-outer {\r\n position: static;\r\n width: 100%;\r\n height: 100%;\r\n margin: -35px 0 0 0;\r\n padding: 35px 0 0 0;\r\n -moz-box-sizing: border-box;\r\n -webkit-box-sizing: border-box;\r\n box-sizing: border-box;\r\n}\r\n\r\ntextarea.jsoneditor-text,\r\n.ace-jsoneditor {\r\n min-height: 150px;\r\n}\r\n\r\ndiv.jsoneditor-tree {\r\n width: 100%;\r\n height: 100%;\r\n position: relative;\r\n overflow: auto;\r\n}\r\n\r\ntextarea.jsoneditor-text {\r\n width: 100%;\r\n height: 100%;\r\n margin: 0;\r\n -moz-box-sizing: border-box;\r\n -webkit-box-sizing: border-box;\r\n box-sizing: border-box;\r\n outline-width: 0;\r\n border: none;\r\n background-color: white;\r\n resize: none;\r\n}\r\n\r\ntr.jsoneditor-highlight,\r\ntr.jsoneditor-selected {\r\n background-color: #e6e6e6;\r\n}\r\n\r\ntr.jsoneditor-selected button.jsoneditor-dragarea,\r\ntr.jsoneditor-selected button.jsoneditor-contextmenu {\r\n visibility: hidden;\r\n}\r\n\r\ntr.jsoneditor-selected.jsoneditor-first button.jsoneditor-dragarea,\r\ntr.jsoneditor-selected.jsoneditor-first button.jsoneditor-contextmenu {\r\n visibility: visible;\r\n}\r\n\r\ndiv.jsoneditor-tree button.jsoneditor-dragarea {\r\n background: url("+i(l(1))+") -72px -72px;\r\n cursor: move;\r\n}\r\n\r\ndiv.jsoneditor-tree button.jsoneditor-dragarea:hover,\r\ndiv.jsoneditor-tree button.jsoneditor-dragarea:focus,\r\ntr.jsoneditor-selected.jsoneditor-first button.jsoneditor-dragarea {\r\n background-position: -72px -48px;\r\n}\r\n\r\ndiv.jsoneditor tr,\r\ndiv.jsoneditor th,\r\ndiv.jsoneditor td {\r\n padding: 0;\r\n margin: 0;\r\n}\r\n\r\ndiv.jsoneditor td {\r\n vertical-align: top;\r\n}\r\n\r\ndiv.jsoneditor td.jsoneditor-tree {\r\n vertical-align: top;\r\n}\r\n\r\ndiv.jsoneditor-field,\r\ndiv.jsoneditor-value,\r\ndiv.jsoneditor td,\r\ndiv.jsoneditor th,\r\ndiv.jsoneditor textarea,\r\n.jsoneditor-schema-error {\r\n font-family: droid sans mono, consolas, monospace, courier new, courier, sans-serif;\r\n font-size: 10pt;\r\n color: #1A1A1A;\r\n}\r\n\r\n/* popover */\r\n\r\n.jsoneditor-schema-error {\r\n cursor: default;\r\n display: inline-block;\r\n /*font-family: arial, sans-serif;*/\r\n height: 24px;\r\n line-height: 24px;\r\n position: relative;\r\n text-align: center;\r\n width: 24px;\r\n}\r\n\r\ndiv.jsoneditor-tree .jsoneditor-schema-error {\r\n width: 24px;\r\n height: 24px;\r\n padding: 0;\r\n margin: 0 4px 0 0;\r\n background: url("+i(l(1))+") -168px -48px;\r\n}\r\n\r\n.jsoneditor-schema-error .jsoneditor-popover {\r\n background-color: #4c4c4c;\r\n border-radius: 3px;\r\n box-shadow: 0 0 5px rgba(0,0,0,0.4);\r\n color: #fff;\r\n display: none;\r\n padding: 7px 10px;\r\n position: absolute;\r\n width: 200px;\r\n z-index: 4;\r\n}\r\n\r\n.jsoneditor-schema-error .jsoneditor-popover.jsoneditor-above {\r\n bottom: 32px;\r\n left: -98px;\r\n}\r\n\r\n.jsoneditor-schema-error .jsoneditor-popover.jsoneditor-below {\r\n top: 32px;\r\n left: -98px;\r\n}\r\n\r\n.jsoneditor-schema-error .jsoneditor-popover.jsoneditor-left {\r\n top: -7px;\r\n right: 32px;\r\n}\r\n\r\n.jsoneditor-schema-error .jsoneditor-popover.jsoneditor-right {\r\n top: -7px;\r\n left: 32px;\r\n}\r\n\r\n.jsoneditor-schema-error .jsoneditor-popover:before {\r\n border-right: 7px solid transparent;\r\n border-left: 7px solid transparent;\r\n content: '';\r\n display: block;\r\n left: 50%;\r\n margin-left: -7px;\r\n position: absolute;\r\n}\r\n\r\n.jsoneditor-schema-error .jsoneditor-popover.jsoneditor-above:before {\r\n border-top: 7px solid #4c4c4c;\r\n bottom: -7px;\r\n}\r\n\r\n.jsoneditor-schema-error .jsoneditor-popover.jsoneditor-below:before {\r\n border-bottom: 7px solid #4c4c4c;\r\n top: -7px;\r\n}\r\n\r\n.jsoneditor-schema-error .jsoneditor-popover.jsoneditor-left:before {\r\n border-left: 7px solid #4c4c4c;\r\n border-top: 7px solid transparent;\r\n border-bottom: 7px solid transparent;\r\n content: '';\r\n top: 19px;\r\n right: -14px;\r\n left: inherit;\r\n margin-left: inherit;\r\n margin-top: -7px;\r\n position: absolute;\r\n}\r\n\r\n.jsoneditor-schema-error .jsoneditor-popover.jsoneditor-right:before {\r\n border-right: 7px solid #4c4c4c;\r\n border-top: 7px solid transparent;\r\n border-bottom: 7px solid transparent;\r\n content: '';\r\n top: 19px;\r\n left: -14px;\r\n margin-left: inherit;\r\n margin-top: -7px;\r\n position: absolute;\r\n}\r\n\r\n.jsoneditor-schema-error:hover .jsoneditor-popover,\r\n.jsoneditor-schema-error:focus .jsoneditor-popover {\r\n display: block;\r\n -webkit-animation: fade-in .3s linear 1, move-up .3s linear 1;\r\n -moz-animation: fade-in .3s linear 1, move-up .3s linear 1;\r\n -ms-animation: fade-in .3s linear 1, move-up .3s linear 1;\r\n}\r\n\r\n@-webkit-keyframes fade-in {\r\n from {\r\n opacity: 0;\r\n }\r\n\r\n to {\r\n opacity: 1;\r\n }\r\n}\r\n\r\n@-moz-keyframes fade-in {\r\n from {\r\n opacity: 0;\r\n }\r\n\r\n to {\r\n opacity: 1;\r\n }\r\n}\r\n\r\n@-ms-keyframes fade-in {\r\n from {\r\n opacity: 0;\r\n }\r\n\r\n to {\r\n opacity: 1;\r\n }\r\n}\r\n\r\n/*@-webkit-keyframes move-up {*/\r\n\r\n/*from { bottom: 24px; }*/\r\n\r\n/*to { bottom: 32px; }*/\r\n\r\n/*}*/\r\n\r\n/*@-moz-keyframes move-up {*/\r\n\r\n/*from { bottom: 24px; }*/\r\n\r\n/*to { bottom: 32px; }*/\r\n\r\n/*}*/\r\n\r\n/*@-ms-keyframes move-up {*/\r\n\r\n/*from { bottom: 24px; }*/\r\n\r\n/*to { bottom: 32px; }*/\r\n\r\n/*}*/\r\n\r\n/* JSON schema errors displayed at the bottom of the editor in mode text and code */\r\n\r\n.jsoneditor .jsoneditor-text-errors {\r\n width: 100%;\r\n border-collapse: collapse;\r\n background-color: #ffef8b;\r\n border-top: 1px solid #ffd700;\r\n}\r\n\r\n.jsoneditor .jsoneditor-text-errors td {\r\n padding: 3px 6px;\r\n vertical-align: middle;\r\n}\r\n\r\n.jsoneditor-text-errors .jsoneditor-schema-error {\r\n border: none;\r\n width: 24px;\r\n height: 24px;\r\n padding: 0;\r\n margin: 0 4px 0 0;\r\n background: url("+i(l(1))+") -168px -48px;\r\n}\r\n/* ContextMenu - main menu */\r\n\r\ndiv.jsoneditor-contextmenu-root {\r\n position: relative;\r\n width: 0;\r\n height: 0;\r\n}\r\n\r\ndiv.jsoneditor-contextmenu {\r\n position: absolute;\r\n box-sizing: content-box;\r\n z-index: 99999;\r\n}\r\n\r\ndiv.jsoneditor-contextmenu ul,\r\ndiv.jsoneditor-contextmenu li {\r\n box-sizing: content-box;\r\n}\r\n\r\ndiv.jsoneditor-contextmenu ul {\r\n position: relative;\r\n left: 0;\r\n top: 0;\r\n width: 124px;\r\n background: white;\r\n border: 1px solid #d3d3d3;\r\n box-shadow: 2px 2px 12px rgba(128, 128, 128, 0.3);\r\n list-style: none;\r\n margin: 0;\r\n padding: 0;\r\n}\r\n\r\ndiv.jsoneditor-contextmenu ul li button {\r\n padding: 0;\r\n margin: 0;\r\n width: 124px;\r\n height: 24px;\r\n border: none;\r\n cursor: pointer;\r\n color: #4d4d4d;\r\n background: transparent;\r\n font-size: 10pt;\r\n font-family: arial, sans-serif;\r\n box-sizing: border-box;\r\n line-height: 26px;\r\n text-align: left;\r\n}\r\n\r\n/* Fix button padding in firefox */\r\n\r\ndiv.jsoneditor-contextmenu ul li button::-moz-focus-inner {\r\n padding: 0;\r\n border: 0;\r\n}\r\n\r\ndiv.jsoneditor-contextmenu ul li button:hover,\r\ndiv.jsoneditor-contextmenu ul li button:focus {\r\n color: #1a1a1a;\r\n background-color: #f5f5f5;\r\n outline: none;\r\n}\r\n\r\ndiv.jsoneditor-contextmenu ul li button.jsoneditor-default {\r\n width: 92px;\r\n}\r\n\r\ndiv.jsoneditor-contextmenu ul li button.jsoneditor-expand {\r\n float: right;\r\n width: 32px;\r\n height: 24px;\r\n border-left: 1px solid #e5e5e5;\r\n}\r\n\r\ndiv.jsoneditor-contextmenu div.jsoneditor-icon {\r\n float: left;\r\n width: 24px;\r\n height: 24px;\r\n border: none;\r\n padding: 0;\r\n margin: 0;\r\n background-image: url("+i(l(1))+");\r\n}\r\n\r\ndiv.jsoneditor-contextmenu ul li button div.jsoneditor-expand {\r\n float: right;\r\n width: 24px;\r\n height: 24px;\r\n padding: 0;\r\n margin: 0 4px 0 0;\r\n background: url("+i(l(1))+") 0 -72px;\r\n opacity: 0.4;\r\n}\r\n\r\ndiv.jsoneditor-contextmenu ul li button:hover div.jsoneditor-expand,\r\ndiv.jsoneditor-contextmenu ul li button:focus div.jsoneditor-expand,\r\ndiv.jsoneditor-contextmenu ul li.jsoneditor-selected div.jsoneditor-expand,\r\ndiv.jsoneditor-contextmenu ul li button.jsoneditor-expand:hover div.jsoneditor-expand,\r\ndiv.jsoneditor-contextmenu ul li button.jsoneditor-expand:focus div.jsoneditor-expand {\r\n opacity: 1;\r\n}\r\n\r\ndiv.jsoneditor-contextmenu div.jsoneditor-separator {\r\n height: 0;\r\n border-top: 1px solid #e5e5e5;\r\n padding-top: 5px;\r\n margin-top: 5px;\r\n}\r\n\r\ndiv.jsoneditor-contextmenu button.jsoneditor-remove > div.jsoneditor-icon {\r\n background-position: -24px -24px;\r\n}\r\n\r\ndiv.jsoneditor-contextmenu button.jsoneditor-remove:hover > div.jsoneditor-icon,\r\ndiv.jsoneditor-contextmenu button.jsoneditor-remove:focus > div.jsoneditor-icon {\r\n background-position: -24px 0;\r\n}\r\n\r\ndiv.jsoneditor-contextmenu button.jsoneditor-append > div.jsoneditor-icon {\r\n background-position: 0 -24px;\r\n}\r\n\r\ndiv.jsoneditor-contextmenu button.jsoneditor-append:hover > div.jsoneditor-icon,\r\ndiv.jsoneditor-contextmenu button.jsoneditor-append:focus > div.jsoneditor-icon {\r\n background-position: 0 0;\r\n}\r\n\r\ndiv.jsoneditor-contextmenu button.jsoneditor-insert > div.jsoneditor-icon {\r\n background-position: 0 -24px;\r\n}\r\n\r\ndiv.jsoneditor-contextmenu button.jsoneditor-insert:hover > div.jsoneditor-icon,\r\ndiv.jsoneditor-contextmenu button.jsoneditor-insert:focus > div.jsoneditor-icon {\r\n background-position: 0 0;\r\n}\r\n\r\ndiv.jsoneditor-contextmenu button.jsoneditor-duplicate > div.jsoneditor-icon {\r\n background-position: -48px -24px;\r\n}\r\n\r\ndiv.jsoneditor-contextmenu button.jsoneditor-duplicate:hover > div.jsoneditor-icon,\r\ndiv.jsoneditor-contextmenu button.jsoneditor-duplicate:focus > div.jsoneditor-icon {\r\n background-position: -48px 0;\r\n}\r\n\r\ndiv.jsoneditor-contextmenu button.jsoneditor-sort-asc > div.jsoneditor-icon {\r\n background-position: -168px -24px;\r\n}\r\n\r\ndiv.jsoneditor-contextmenu button.jsoneditor-sort-asc:hover > div.jsoneditor-icon,\r\ndiv.jsoneditor-contextmenu button.jsoneditor-sort-asc:focus > div.jsoneditor-icon {\r\n background-position: -168px 0;\r\n}\r\n\r\ndiv.jsoneditor-contextmenu button.jsoneditor-sort-desc > div.jsoneditor-icon {\r\n background-position: -192px -24px;\r\n}\r\n\r\ndiv.jsoneditor-contextmenu button.jsoneditor-sort-desc:hover > div.jsoneditor-icon,\r\ndiv.jsoneditor-contextmenu button.jsoneditor-sort-desc:focus > div.jsoneditor-icon {\r\n background-position: -192px 0;\r\n}\r\n\r\n/* ContextMenu - sub menu */\r\n\r\ndiv.jsoneditor-contextmenu ul li button.jsoneditor-selected,\r\ndiv.jsoneditor-contextmenu ul li button.jsoneditor-selected:hover,\r\ndiv.jsoneditor-contextmenu ul li button.jsoneditor-selected:focus {\r\n color: white;\r\n background-color: #ee422e;\r\n}\r\n\r\ndiv.jsoneditor-contextmenu ul li {\r\n overflow: hidden;\r\n}\r\n\r\ndiv.jsoneditor-contextmenu ul li ul {\r\n display: none;\r\n position: relative;\r\n left: -10px;\r\n top: 0;\r\n border: none;\r\n box-shadow: inset 0 0 10px rgba(128, 128, 128, 0.5);\r\n padding: 0 10px;\r\n /* TODO: transition is not supported on IE8-9 */\r\n -webkit-transition: all 0.3s ease-out;\r\n -moz-transition: all 0.3s ease-out;\r\n -o-transition: all 0.3s ease-out;\r\n transition: all 0.3s ease-out;\r\n}\r\n\r\n\r\n\r\ndiv.jsoneditor-contextmenu ul li ul li button {\r\n padding-left: 24px;\r\n animation: all ease-in-out 1s;\r\n}\r\n\r\ndiv.jsoneditor-contextmenu ul li ul li button:hover,\r\ndiv.jsoneditor-contextmenu ul li ul li button:focus {\r\n background-color: #f5f5f5;\r\n}\r\n\r\ndiv.jsoneditor-contextmenu button.jsoneditor-type-string > div.jsoneditor-icon {\r\n background-position: -144px -24px;\r\n}\r\n\r\ndiv.jsoneditor-contextmenu button.jsoneditor-type-string:hover > div.jsoneditor-icon,\r\ndiv.jsoneditor-contextmenu button.jsoneditor-type-string:focus > div.jsoneditor-icon,\r\ndiv.jsoneditor-contextmenu button.jsoneditor-type-string.jsoneditor-selected > div.jsoneditor-icon {\r\n background-position: -144px 0;\r\n}\r\n\r\ndiv.jsoneditor-contextmenu button.jsoneditor-type-auto > div.jsoneditor-icon {\r\n background-position: -120px -24px;\r\n}\r\n\r\ndiv.jsoneditor-contextmenu button.jsoneditor-type-auto:hover > div.jsoneditor-icon,\r\ndiv.jsoneditor-contextmenu button.jsoneditor-type-auto:focus > div.jsoneditor-icon,\r\ndiv.jsoneditor-contextmenu button.jsoneditor-type-auto.jsoneditor-selected > div.jsoneditor-icon {\r\n background-position: -120px 0;\r\n}\r\n\r\ndiv.jsoneditor-contextmenu button.jsoneditor-type-object > div.jsoneditor-icon {\r\n background-position: -72px -24px;\r\n}\r\n\r\ndiv.jsoneditor-contextmenu button.jsoneditor-type-object:hover > div.jsoneditor-icon,\r\ndiv.jsoneditor-contextmenu button.jsoneditor-type-object:focus > div.jsoneditor-icon,\r\ndiv.jsoneditor-contextmenu button.jsoneditor-type-object.jsoneditor-selected > div.jsoneditor-icon {\r\n background-position: -72px 0;\r\n}\r\n\r\ndiv.jsoneditor-contextmenu button.jsoneditor-type-array > div.jsoneditor-icon {\r\n background-position: -96px -24px;\r\n}\r\n\r\ndiv.jsoneditor-contextmenu button.jsoneditor-type-array:hover > div.jsoneditor-icon,\r\ndiv.jsoneditor-contextmenu button.jsoneditor-type-array:focus > div.jsoneditor-icon,\r\ndiv.jsoneditor-contextmenu button.jsoneditor-type-array.jsoneditor-selected > div.jsoneditor-icon {\r\n background-position: -96px 0;\r\n}\r\n\r\ndiv.jsoneditor-contextmenu button.jsoneditor-type-modes > div.jsoneditor-icon {\r\n background-image: none;\r\n width: 6px;\r\n}\r\ndiv.jsoneditor-menu {\r\n width: 100%;\r\n height: 35px;\r\n padding: 2px;\r\n margin: 0;\r\n -moz-box-sizing: border-box;\r\n -webkit-box-sizing: border-box;\r\n box-sizing: border-box;\r\n color: white;\r\n background-color: #3883fa;\r\n border-bottom: 1px solid #3883fa;\r\n}\r\n\r\ndiv.jsoneditor-menu > button,\r\ndiv.jsoneditor-menu > div.jsoneditor-modes > button {\r\n width: 26px;\r\n height: 26px;\r\n margin: 2px;\r\n padding: 0;\r\n border-radius: 2px;\r\n border: 1px solid transparent;\r\n background: transparent url("+i(l(1))+");\r\n color: white;\r\n opacity: 0.8;\r\n font-family: arial, sans-serif;\r\n font-size: 10pt;\r\n float: left;\r\n}\r\n\r\ndiv.jsoneditor-menu > button:hover,\r\ndiv.jsoneditor-menu > div.jsoneditor-modes > button:hover {\r\n background-color: rgba(255,255,255,0.2);\r\n border: 1px solid rgba(255,255,255,0.4);\r\n}\r\n\r\ndiv.jsoneditor-menu > button:focus,\r\ndiv.jsoneditor-menu > button:active,\r\ndiv.jsoneditor-menu > div.jsoneditor-modes > button:focus,\r\ndiv.jsoneditor-menu > div.jsoneditor-modes > button:active {\r\n background-color: rgba(255,255,255,0.3);\r\n}\r\n\r\ndiv.jsoneditor-menu > button:disabled,\r\ndiv.jsoneditor-menu > div.jsoneditor-modes > button:disabled {\r\n opacity: 0.5;\r\n}\r\n\r\ndiv.jsoneditor-menu > button.jsoneditor-collapse-all {\r\n background-position: 0 -96px;\r\n}\r\n\r\ndiv.jsoneditor-menu > button.jsoneditor-expand-all {\r\n background-position: 0 -120px;\r\n}\r\n\r\ndiv.jsoneditor-menu > button.jsoneditor-undo {\r\n background-position: -24px -96px;\r\n}\r\n\r\ndiv.jsoneditor-menu > button.jsoneditor-undo:disabled {\r\n background-position: -24px -120px;\r\n}\r\n\r\ndiv.jsoneditor-menu > button.jsoneditor-redo {\r\n background-position: -48px -96px;\r\n}\r\n\r\ndiv.jsoneditor-menu > button.jsoneditor-redo:disabled {\r\n background-position: -48px -120px;\r\n}\r\n\r\ndiv.jsoneditor-menu > button.jsoneditor-compact {\r\n background-position: -72px -96px;\r\n}\r\n\r\ndiv.jsoneditor-menu > button.jsoneditor-format {\r\n background-position: -72px -120px;\r\n}\r\n\r\ndiv.jsoneditor-menu > div.jsoneditor-modes {\r\n display: inline-block;\r\n float: left;\r\n}\r\n\r\ndiv.jsoneditor-menu > div.jsoneditor-modes > button {\r\n background-image: none;\r\n width: auto;\r\n padding-left: 6px;\r\n padding-right: 6px;\r\n}\r\n\r\ndiv.jsoneditor-menu > button.jsoneditor-separator,\r\ndiv.jsoneditor-menu > div.jsoneditor-modes > button.jsoneditor-separator {\r\n margin-left: 10px;\r\n}\r\n\r\ndiv.jsoneditor-menu a {\r\n font-family: arial, sans-serif;\r\n font-size: 10pt;\r\n color: white;\r\n opacity: 0.8;\r\n vertical-align: middle;\r\n}\r\n\r\ndiv.jsoneditor-menu a:hover {\r\n opacity: 1;\r\n}\r\n\r\ndiv.jsoneditor-menu a.jsoneditor-poweredBy {\r\n font-size: 8pt;\r\n position: absolute;\r\n right: 0;\r\n top: 0;\r\n padding: 10px;\r\n}\r\ntable.jsoneditor-search input,\r\ntable.jsoneditor-search div.jsoneditor-results {\r\n font-family: arial, sans-serif;\r\n font-size: 10pt;\r\n color: #1A1A1A;\r\n background: transparent;\r\n /* For Firefox */\r\n}\r\n\r\ntable.jsoneditor-search div.jsoneditor-results {\r\n color: white;\r\n padding-right: 5px;\r\n line-height: 24px;\r\n}\r\n\r\ntable.jsoneditor-search {\r\n position: absolute;\r\n right: 4px;\r\n top: 4px;\r\n border-collapse: collapse;\r\n border-spacing: 0;\r\n}\r\n\r\ntable.jsoneditor-search div.jsoneditor-frame {\r\n border: 1px solid transparent;\r\n background-color: white;\r\n padding: 0 2px;\r\n margin: 0;\r\n}\r\n\r\ntable.jsoneditor-search div.jsoneditor-frame table {\r\n border-collapse: collapse;\r\n}\r\n\r\ntable.jsoneditor-search input {\r\n width: 120px;\r\n border: none;\r\n outline: none;\r\n margin: 1px;\r\n line-height: 20px;\r\n}\r\n\r\ntable.jsoneditor-search button {\r\n width: 16px;\r\n height: 24px;\r\n padding: 0;\r\n margin: 0;\r\n border: none;\r\n background: url("+i(l(1))+");\r\n vertical-align: top;\r\n}\r\n\r\ntable.jsoneditor-search button:hover {\r\n background-color: transparent;\r\n}\r\n\r\ntable.jsoneditor-search button.jsoneditor-refresh {\r\n width: 18px;\r\n background-position: -99px -73px;\r\n}\r\n\r\ntable.jsoneditor-search button.jsoneditor-next {\r\n cursor: pointer;\r\n background-position: -124px -73px;\r\n}\r\n\r\ntable.jsoneditor-search button.jsoneditor-next:hover {\r\n background-position: -124px -49px;\r\n}\r\n\r\ntable.jsoneditor-search button.jsoneditor-previous {\r\n cursor: pointer;\r\n background-position: -148px -73px;\r\n margin-right: 2px;\r\n}\r\n\r\ntable.jsoneditor-search button.jsoneditor-previous:hover {\r\n background-position: -148px -49px;\r\n}",""])},function(t,e,l){"use strict";l(19)},function(t,e,l){(t.exports=l(6)(!1)).push([t.i,"\n.ace_line_group[data-v-551a97e0] {\n text-align: left;\n}\n.json-editor-container[data-v-551a97e0] {\n display: flex;\n width: 100%;\n}\n.json-editor-container .tree-mode[data-v-551a97e0] {\n width: 50%;\n}\n.json-editor-container .code-mode[data-v-551a97e0] {\n flex-grow: 1;\n}\n.jsoneditor-btns[data-v-551a97e0]{\n text-align: center;\n margin-top:10px;\n}\n.jsoneditor-vue .jsoneditor-outer[data-v-551a97e0]{\n min-height:150px;\n}\n.jsoneditor-vue div.jsoneditor-tree[data-v-551a97e0]{\n min-height: 350px;\n}\n.json-save-btn[data-v-551a97e0]{\n background-color: #20A0FF;\n border: none;\n color:#fff;\n padding:5px 10px;\n border-radius: 5px;\n cursor: pointer;\n}\n.json-save-btn[data-v-551a97e0]:focus{\n outline: none;\n}\n.json-save-btn[disabled][data-v-551a97e0]{\n background-color: #1D8CE0;\n cursor: not-allowed;\n}\ncode[data-v-551a97e0] {\n background-color: #f5f5f5;\n}\n",""])},function(t,e){t.exports='
\n
\n
\n
\n \n {{ pantry.name }}\n \n \n {{ pantry.percentFull}}% Full\n \n
\n
\n \n
\n
\n
\n
\n \n \n \n
\n \n
\n'},function(t,e,l){"use strict";const i={name:"changelog",template:l(62),data:()=>({items:[{description:"Add Metadata to Baskets"},{description:"Introduce Public Basket Endpoints"},{description:"Performance Improvements"},{description:"Added Nushell client"}]}),methods:{}};t.exports=i},function(t,e){t.exports='
\n\t

\n\t\tChangelog\n\t

\n\t\n
\n'},function(t,e,l){"use strict";const i=l(3).apiPath,n={name:"explorerEmpty",template:l(64),props:["pantryId"],data:()=>({apiPath:i})};t.exports=n},function(t,e){t.exports='
\n
\n
\n
\n

\n \n Welcome to Pantry\n \n \n Getting Started\n \n

\n\n

\n You can manage your data through our Web Dashboard or via the\n API. Every feature available in the dashboard is fully\n accessible through the API.\n

\n\n

\n Ready? Let’s create your first basket.\n

\n\n

\n The API is built on\n \n REST\n \n principles and accepts JSON-encoded request bodies. To get started, create\n your first basket in your pantry by following our\n \n API documentation.\n \n

\n\n

\n Alternatively, you can click on \'Create Basket\' from the sidebar\n to the left to create your first basket.\n

\n\n

\n TL;DR\n

\n\n

\n Paste a snippet from below to create your first basket using our API,\n and then\n \n read the docs.\n \n

\n\n
\n

\n Curl\n

\n

\n Unix/Linux\n

\n
\n

\n curl -XPOST -H "Content-type: application/json" -d \'{\n "key": "value"\n }\' \'{{apiPath}}/pantry/{{this.pantryId}}/basket/testBasket\'\n

\n\n
\n

\n Powershell\n

\n

\n Windows\n

\n
\n\n

\n Invoke-WebRequest -Uri \'{{apiPath}}/pantry/{{this.pantryId}}/basket/testBasket\' -Method POST -ContentType \'application/json\' -Body \'{\n "key": "value" \n }\'\n

\n\n \n
\n
\n
\n
\n'},function(t,e,l){"use strict";const i={name:"explorerOnboarding",template:l(66),data:()=>({}),methods:{loadBasket(){this.$emit("load-basket")}}};t.exports=i},function(t,e){t.exports='
\n \n
\n'},function(t,e,l){"use strict";var i=this&&this.__awaiter||function(t,e,l,i){return new(l||(l=Promise))((function(n,a){function d(t){try{c(i.next(t))}catch(t){a(t)}}function s(t){try{c(i.throw(t))}catch(t){a(t)}}function c(t){var e;t.done?n(t.value):(e=t.value,e instanceof l?e:new l((function(t){t(e)}))).then(d,s)}c((i=i.apply(t,e||[])).next())}))};const n=l(4),a=l(22).default,d=l(3),s=l(68),c=l(20),o=d.apiPath,b={props:["pantryId","basket"],name:"basket",components:{modal:c,"json-edit":a},template:s,data:()=>({apiPath:o,shareModalVisible:!1,publicBasketPath:null}),computed:{name(){return this.basket.name},data:{get(){return this.basket.data},set(t){this.basket.data=t}}},methods:{copyPath(t){return i(this,void 0,void 0,(function*(){yield navigator.clipboard.writeText(t),alert("Saved to clipboard")}))},refreshDashboard(){this.$emit("update")},basketPath(){return`${o}/pantry/${this.pantryId}/basket/${this.name}`},getPublicBasket(){return i(this,void 0,void 0,(function*(){const{data:t}=yield n({method:"GET",url:this.basketPath()+"/public"});this.publicBasketPath=`${o}/public/${t}`}))},deleteBasket(){return i(this,void 0,void 0,(function*(){confirm(`Are you sure you'd like to delete ${this.name}?`)&&(yield n({method:"DELETE",url:this.basketPath()}),this.refreshDashboard())}))},save(){return i(this,void 0,void 0,(function*(){yield n({method:"PUT",data:this.data,url:this.basketPath()}).then(t=>{const{data:e}=t;alert(this.name+" contents updated!"),this.data=e}).catch(t=>{const{data:e}=t.response,{error:l,details:i}=e;alert(`${l} - ${i}`)})}))},openShareModal(){this.getPublicBasket(),this.shareModalVisible=!0},closeShareModal(){this.shareModalVisible=!1}}};t.exports=b},function(t,e){t.exports='
\n
\n
\n
\n

\n {{ name }}\n

\n
\n \n \n
\n
\n
\n \n
\n
\n
\n \n
\n'},function(t,e){t.exports='\n
\n'},function(t,e,l){"use strict";const i={name:"login",template:l(71),data:()=>({id:null}),methods:{idInvalid(){return null===this.id},login(){this.$emit("login",this.id)}}};t.exports=i},function(t,e){t.exports='
\n

\n Login\n

\n
\n
\n
\n \n
\n \n
\n
\n\n
\n \n
\n
\n
\n
\n'},function(t,e){t.exports='
\n
\n
\n

\n \n {{ promo.emoji || \'👋 \'}}\n \n {{ promo.snippet }}\n \n \n \n \n

\n
\n
\n \n
\n
\n
\n'},function(t,e,l){"use strict";const i={name:"sdk",template:l(74),data:()=>({sdks:[{name:"pantry-node",platform:"Node.js",author:"Team Pantry",link:"https://github.com/imRohan/pantry-node",verified:!0},{name:"bash-client",platform:"Bash",author:"Team Pantry",link:"https://github.com/imRohan/Pantry/tree/master/client-libraries/Bash",verified:!0},{name:"pantryclient-esp",platform:"ESP32/ESP8266",author:"Zakrzewiaczek",link:"https://github.com/Zakrzewiaczek/pantryclient-esp",verified:!1},{name:"libPantryDotNet",platform:".Net",author:"Krutonium",link:"https://github.com/Krutonium/libPantryDotNet",verified:!1},{name:"pantry-cloud",platform:"Node.js",author:"rdarida",link:"https://github.com/rdarida/pantry-cloud",verified:!1},{name:"pantry_wrapper",platform:"Python",author:"alexmulligan",link:"https://github.com/alexmulligan/pantry_wrapper",verified:!1},{name:"pantry-nim",platform:"Nim",author:"Jake Leahy",link:"https://github.com/ire4ever1190/pantry-nim",verified:!1},{name:"JPantry",platform:"Java",author:"Magnus Gunnarsson",link:"https://github.com/EnderCrypt/JPantry",verified:!1},{name:"pantry-cloud",platform:"Python",author:"Sarvesh Kumar Dwivedi",link:"https://github.com/sarvesh4396/pantry-cloud",verified:!1},{name:"pantry-cloud",platform:"PHP",author:"Seba",link:"https://github.com/sebaOfficial/pantry-cloud/",verified:!1},{name:"pantry_client",platform:"GO",author:"Atoo35",link:"https://github.com/Atoo35/pantry_client/",verified:!1},{name:"pantry",platform:"Dart",author:"Georges",link:"https://github.com/georges-ph/pantry",verified:!1},{name:"pantry_client",platform:"Rust",author:"Atoo35",link:"https://github.com/Atoo35/pantry_client_rust/",verified:!1},{name:"UniPantry",platform:"Unity",author:"Dmitry Koleev",link:"https://github.com/dkoleev/UniPantry/",verified:!1},{name:"pantry",platform:"Common Lisp",author:"Aleksandar Simić",link:"https://github.com/dotemacs/pantry/",verified:!1},{name:"pantry",platform:"Nushell",author:"Shaoyan Ji",link:"https://gist.github.com/shaoyanji/dbc5d6e8fe8abb338226a28cd5f8d6cd",verified:!1}],defaultBadgeClasses:"flex-shrink-0 inline-block px-2 py-0.5\n text-xs font-medium\n rounded-full"}),methods:{getBadgeClass(t){var e;return null!==(e={"node.js":"bg-green-200",bash:"bg-gray-200",python:"bg-yellow-200",".net":"bg-blue-200",nim:"bg-yellow-400",java:"bg-red-400",dart:"bg-blue-500",nushell:"bg-green-200"}[t.trim().toLowerCase()])&&void 0!==e?e:"bg-gray-200"}}};t.exports=i},function(t,e){t.exports='
\n
\n
\n
\n
\n

\n \n Libraries and SDK\'s\n \n \n Developer Tools\n \n

\n

\n Pantry has official libraries which will be maintained and supported\n by the team going forward.\n\n There are also several third-party libraries built by kind\n developers (like yourself) that we\'d like to showcase.\n

\n\n \n
\n
\n
\n
\n
\n'},function(t,e,l){"use strict";var i=this&&this.__awaiter||function(t,e,l,i){return new(l||(l=Promise))((function(n,a){function d(t){try{c(i.next(t))}catch(t){a(t)}}function s(t){try{c(i.throw(t))}catch(t){a(t)}}function c(t){var e;t.done?n(t.value):(e=t.value,e instanceof l?e:new l((function(t){t(e)}))).then(d,s)}c((i=i.apply(t,e||[])).next())}))};const n=l(4),a=l(3),d=l(76),{IView:s}=l(2),c=l(77),o=l(79),b=l(81),r=l(83),m=l(85),Z=l(87),g=l(21),W=a.apiPath,h={name:"home",template:d,components:{initialSignup:c,finishSignup:o,features:b,example:r,stats:m,quote:Z,banner:g},data:()=>({email:null,name:null,finishOnboarding:!1,siteKey:"6Leqqt4aAAAAAFCxWwcRO3YB6zuKKR2CGm8ACRuJ",promo:{emoji:"💪",snippet:"Integrate Pantry using our SDK!",title:"Speed up your development by using one of our many SDKs!"}}),methods:{beginSignup(t){this.email=t,this.finishOnboarding=!0},beginRegistration(t){this.name=t,this.createNewPantry()},showReCaptcha(){window.grecaptcha.render("recaptcha",{sitekey:this.siteKey})},createNewPantry(){return i(this,void 0,void 0,(function*(){const t=window.grecaptcha.getResponse();this.accountCreationInProgress=!0;const{data:e}=yield n({method:"POST",data:{name:this.name,description:"defaultDescription",contactEmail:this.email,recaptchaResponse:t},url:W+"/pantry/create"});this.$emit("account-created",e)}))},bannerCTAClicked(){this.changeView(s.sdk)},changeView(t){this.$emit("change-view",t)}}};t.exports=h},function(t,e){t.exports='
\n \n
\n
\n
\n
\n
\n \n \n
\n
\n
\n \n
\n
\n \n \n \n \n
\n
\n'},function(t,e,l){"use strict";const i={name:"initialSignup",template:l(78),data:()=>({email:null}),methods:{showReCaptcha(){this.$emit("show-recaptcha")},storeEmail(){this.$emit("store-email",this.email)},signupValid(){return/^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/.test(String(this.email).toLowerCase())}}};t.exports=i},function(t,e){t.exports='
\n

\n Free\n yourself from\n data storage\n woes.\n

\n

\n Focus your efforts on building your next project and leave the\n data storage to us. We help speed up your development time,\n letting you build awesome things fast!\n

\n
\n
\n
\n
\n \n \n
\n
\n \n
\n
\n

\n Sorry, but that email is invalid.\n

\n

\n Don\'t worry, we\'ll only contact you if it\'s important.\n

\n
\n
\n
\n'},function(t,e,l){"use strict";const i={name:"finishSignup",template:l(80),data:()=>({name:null}),methods:{storeName(){this.$emit("store-name",this.name)}}};t.exports=i},function(t,e){t.exports='
\n

\n Almost there, just\n \n one more step!\n \n

\n

\n Let\'s give your pantry a name! This could be the name of your project\n or anything that means something to you.\n

\n
\n
\n
\n
\n \n \n
\n
\n \n
\n
\n

\n Give your Pantry a creative name\n

\n
\n
\n
\n'},function(t,e,l){"use strict";const i={name:"features",template:l(82),data:()=>({}),methods:{},mounted(){}};t.exports=i},function(t,e){t.exports='
\n
\n

Effortless

\n

A better JSON storage solution

\n

\n CRUD your data on the cloud in just 2 minutes either by using our\n API or dashboard. Perfect for small projects and hackathons!\n

\n
\n\n
\n
\n
\n
\n
\n \n \n \n \n \n
\n

\n Generous Storage Limit\n

\n
\n
\n Your Pantry can have 100 baskets (JSON objects), each with a max size\n of 1.44mb. That\'s a lot of JSON, and we think it\'s a great starting\n point for developers.\n
\n
\n\n
\n
\n
\n \n \n \n
\n

\n Supports JSON Schema\n

\n
\n
\n Data integrity is the backbone of any good project. So stop worrying\n about malformed data breaking your frontend by enabling\n optional JSON schema validation for each of your baskets.\n
\n
\n\n
\n
\n
\n \n \n \n
\n

\n Simple API\n

\n
\n
\n We\'ve built a very straightforward and easy-to-use API which you can\n use to CRUD your Pantry\'s baskets. Simple and intuitive - that\'s the\n goal.\n
\n
\n\n
\n
\n
\n \n \n \n
\n

\n Generate Public URLS\n

\n
\n
\n Expose your data to users by using public urls. These are\n "share anywhere" read only paths that protect your Pantry\'s ID and\n Basket details.\n
\n
\n\n
\n
\n
\n \n
\n

\n Powerful Dashboard \n

\n
\n
\n We also offer a slick dashboard which you can use to interact with\n your Pantry\'s baskets. This intuitive interface is especially helpful\n when debugging your application.\n
\n
\n\n
\n
\n
\n \n \n \n
\n

\n 100% Open Source\n

\n
\n
\n This project is open-source and supported by a wonderful group of\n developers who continue to improve the platform.\n
\n \n
\n
\n
\n
\n
\n
\n'},function(t,e,l){"use strict";const i=l(84),{IView:n}=l(2),a={name:"example",template:i,methods:{showSDK(){this.$emit("change-view",n.sdk)}}};t.exports=a},function(t,e){t.exports='
\n
\n
\n
\n
\n

\n Jump Right In\n

\n

\n Quickly add Pantry to your project using one of our\n easy-to-use client libraries.\n

\n
\n \n npm install pantry-node\n \n \n \n \n
\n
\n \n
\n
\n
\n
\n'},function(t,e,l){"use strict";const i={name:"stats",template:l(86),data:()=>({}),methods:{},mounted(){}};t.exports=i},function(t,e){t.exports='
\n
\n
\n

\n Trusted by developers from over 100 countries\n

\n

\n Here\'s a snapshot of what we\'ve accomplished in the last month\n

\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
Data Served
\n
23GB
\n
\n
\n
Active Projects
\n
1230+
\n
\n
\n
Requests Handled
\n
2.57M
\n
\n
\n
\n
\n
\n
\n
\n'},function(t,e,l){"use strict";const i={name:"quote",template:l(88),data:()=>({}),methods:{},mounted(){}};t.exports=i},function(t,e){t.exports='
\n
\n \n Workcation\n \n \n \n \n \n \n \n\n
\n
\n
\n

\n “\n If you have a simple application that needs a database - don\'t setup\n a database. Pantry let\'s you store 100mb of JSON, while attaching a\n CRUD interface to it. Kind of like TinyDB for Python.\n ”\n

\n
\n \n
\n
\n
\n

\n “\n I think Pantry is a great option for my project/for\n testing, I currently have a project with over 10,000 users alone!\n and I think Pantry is a nice way to get that sorted, it\'s free and\n uses basic JSON.\n ”\n

\n
\n
\n
\n
\n
\n SalmonStudios\n
\n\n \n\n
\n Game Studio\n
\n
\n
\n
\n
\n
\n
\n

\n “\n Pantry\'s simple design, and features have been instrumental in\n realizing [my] little project\n ”\n

\n
\n
\n
\n
\n
\n Somajit Dey\n
\n\n \n\n
\n Department of Physics, University of Calcutta\n
\n
\n
\n
\n
\n
\n
\n
\n'},function(t,e,l){"use strict";const i=l(90),{IView:n}=l(2),a={name:"onboarding",template:i,props:["pantryID"],data:()=>({}),methods:{getStarted(){this.$emit("change-view",n.dashboard)},createSession(){sessionStorage.setItem("pantry-id",this.pantryID)}},mounted(){this.createSession()}};t.exports=a},function(t,e){t.exports='
\n
\n
\n
\n
\n

\n \n Success!\n \n \n Save your PantryID\n \n

\n

\n Here is your PantryID! Think of this as your API key, and\n keep this safe as we won\'t be sharing it with you again. Once you\'ve \n saved it somewhere, hit the button below and we\'ll show you how to\n add items to your pantry.\n

\n\n

\n {{ pantryID }}\n

\n\n \n
\n
\n
\n
\n
\n'},function(t,e,l){"use strict";const i={name:"about",template:l(92),props:[],components:{faq:l(93)},data:()=>({questions:[{title:"What is Pantry?",answer:"Pantry is a free data storage service which allows users to manage\n a collection of JSON objects. It is great for small to medium sized projects,\n and can be interacted with through a RESTful API or via a dashboard."},{title:"What is a Basket?",answer:'A "Basket" is one JSON object. Each Pantry can have up to 100 baskets\n held within it, each with its own human-readable name.'},{title:"How is my data stored?",answer:"Every basket is encrypted using the AES-256 encryption scheme and is securely\n stored on our servers after being properly sanitized."},{title:"Who can access my Pantry & Baskets?",answer:'You can share direct links to your baskets (GET & POST), or\n a read-only (GET) "public". Public links are a great way to allow\n anyone to read the contents of a specific basket but not modify them.'},{title:"What are the limitations?",answer:"A Pantry can have up to 100 baskets (JSON objects), each with a max size\n of 1.44mb per basket. API requests are limited to 2 calls per second. That's it."},{title:"How long will my data be stored for?",answer:"Data is stored until you no longer need it. Users can choose to delete\n their data from Pantry at any time. However, inactive baskets will be removed after 30 days."}]}),methods:{}};t.exports=i},function(t,e){t.exports='
\n
\n
\n
\n
\n

\n \n Learn about Pantry\n \n \n Frequently Asked Questions\n \n

\n
\n \n
\n
\n
\n \n
\n'},function(t,e,l){"use strict";const i={name:"faq",template:l(94),props:["questions"],data:()=>({})};t.exports=i},function(t,e){t.exports='
\n
\n
\n

\n Contribute\n

\n

\n Pantry is open-source, and is maintained by\n \n Rohan Likhite.\n \n If you\'d like to help develop Pantry, or have an issue to report,\n please visit the\n \n GitHub repo\n .\n

\n

\n Sponsor\n

\n

\n To help with server costs, please consider sponsoring the project\n via\n \n GitHub Sponsors.\n \n

\n

\n Looking for more information?\n

\n

\n Can’t find the answer you’re looking for? Ask the developers directly\n by\n starting a \n discussion on GitHub.\n

\n
\n
\n
\n \n
\n
\n
\n
\n'},function(t,e,l){"use strict";const i=l(96),n=l(3),{IView:a}=l(2),d=l(97),s=n.docsPath,c={name:"topbar",template:i,props:["view"],components:{headerBar:d},methods:{showAbout(){this.$emit("change-view",a.about)},showDocs(){window.location.href=s},showDashboard(){this.$emit("change-view",a.dashboard)},goHome(){this.$emit("change-view",a.home)},showSDK(){this.$emit("change-view",a.sdk)},topbarClass(){return this.view!==a.home?"bg-orange-100 pb-52":""}}};t.exports=c},function(t,e){t.exports='
\n
\n \n
\n
\n\n'},function(t,e,l){"use strict";const i={name:"headerBar",template:l(98),props:["view"],data:()=>({}),methods:{}};t.exports=i},function(t,e){t.exports='\n'},function(t,e,l){"use strict";const i={name:"bottomBar",template:l(100),props:[],methods:{}};t.exports=i},function(t,e){t.exports='\n'}]); +t.exports=function(){"use strict";var t=Object.freeze({});function l(t){return null==t}function a(t){return null!=t}function n(t){return!0===t}function s(t){return"string"==typeof t||"number"==typeof t||"symbol"==typeof t||"boolean"==typeof t}function d(t){return null!==t&&"object"==typeof t}var c=Object.prototype.toString;function o(t){return"[object Object]"===c.call(t)}function m(t){var e=parseFloat(String(t));return e>=0&&Math.floor(e)===e&&isFinite(t)}function r(t){return a(t)&&"function"==typeof t.then&&"function"==typeof t.catch}function b(t){return null==t?"":Array.isArray(t)||o(t)&&t.toString===c?JSON.stringify(t,null,2):String(t)}function g(t){var e=parseFloat(t);return isNaN(e)?t:e}function Z(t,e){for(var i=Object.create(null),l=t.split(","),a=0;a-1)return t.splice(i,1)}}var y=Object.prototype.hasOwnProperty;function u(t,e){return y.call(t,e)}function I(t){var e=Object.create(null);return function(i){return e[i]||(e[i]=t(i))}}var G=/-(\w)/g,M=I((function(t){return t.replace(G,(function(t,e){return e?e.toUpperCase():""}))})),p=I((function(t){return t.charAt(0).toUpperCase()+t.slice(1)})),V=/\B([A-Z])/g,Y=I((function(t){return t.replace(V,"-$1").toLowerCase()})),R=Function.prototype.bind?function(t,e){return t.bind(e)}:function(t,e){function i(i){var l=arguments.length;return l?l>1?t.apply(e,arguments):t.call(e,i):t.call(e)}return i._length=t.length,i};function B(t,e){e=e||0;for(var i=t.length-e,l=new Array(i);i--;)l[i]=t[i+e];return l}function D(t,e){for(var i in e)t[i]=e[i];return t}function O(t){for(var e={},i=0;i0,$=f&&f.indexOf("edge/")>0,_=(f&&f.indexOf("android"),f&&/iphone|ipad|ipod|ios/.test(f)||"ios"===E),q=(f&&/chrome\/\d+/.test(f),f&&/phantomjs/.test(f),f&&f.match(/firefox\/(\d+)/)),tt={}.watch,et=!1;if(S)try{var it={};Object.defineProperty(it,"passive",{get:function(){et=!0}}),window.addEventListener("test-passive",null,it)}catch(t){}var lt=function(){return void 0===x&&(x=!S&&!A&&void 0!==e&&e.process&&"server"===e.process.env.VUE_ENV),x},at=S&&window.__VUE_DEVTOOLS_GLOBAL_HOOK__;function nt(t){return"function"==typeof t&&/native code/.test(t.toString())}var st,dt="undefined"!=typeof Symbol&&nt(Symbol)&&"undefined"!=typeof Reflect&&nt(Reflect.ownKeys);st="undefined"!=typeof Set&&nt(Set)?Set:function(){function t(){this.set=Object.create(null)}return t.prototype.has=function(t){return!0===this.set[t]},t.prototype.add=function(t){this.set[t]=!0},t.prototype.clear=function(){this.set=Object.create(null)},t}();var ct=T,ot=0,mt=function(){this.id=ot++,this.subs=[]};mt.prototype.addSub=function(t){this.subs.push(t)},mt.prototype.removeSub=function(t){N(this.subs,t)},mt.prototype.depend=function(){mt.target&&mt.target.addDep(this)},mt.prototype.notify=function(){for(var t=this.subs.slice(),e=0,i=t.length;e-1)if(n&&!u(a,"default"))s=!1;else if(""===s||s===Y(t)){var c=Ct(String,a.type);(c<0||d0&&(me((c=t(c,(i||"")+"_"+d))[0])&&me(m)&&(r[o]=Nt(m.text+c[0].text),c.shift()),r.push.apply(r,c)):s(c)?me(m)?r[o]=Nt(m.text+c):""!==c&&r.push(Nt(c)):me(c)&&me(m)?r[o]=Nt(m.text+c.text):(n(e._isVList)&&a(c.tag)&&l(c.key)&&a(i)&&(c.key="__vlist"+i+"_"+d+"__"),r.push(c)));return r}(t):void 0}function me(t){return a(t)&&a(t.text)&&!1===t.isComment}function re(t,e){if(t){for(var i=Object.create(null),l=dt?Reflect.ownKeys(t):Object.keys(t),a=0;a0,s=e?!!e.$stable:!n,d=e&&e.$key;if(e){if(e._normalized)return e._normalized;if(s&&l&&l!==t&&d===l.$key&&!n&&!l.$hasNormal)return l;for(var c in a={},e)e[c]&&"$"!==c[0]&&(a[c]=We(i,c,e[c]))}else a={};for(var o in i)o in a||(a[o]=Ne(i,o));return e&&Object.isExtensible(e)&&(e._normalized=a),C(a,"$stable",s),C(a,"$key",d),C(a,"$hasNormal",n),a}function We(t,e,i){var l=function(){var t=arguments.length?i.apply(null,arguments):i({}),e=(t=t&&"object"==typeof t&&!Array.isArray(t)?[t]:oe(t))&&t[0];return t&&(!e||1===t.length&&e.isComment&&!Ze(e))?void 0:t};return i.proxy&&Object.defineProperty(t,e,{get:l,enumerable:!0,configurable:!0}),l}function Ne(t,e){return function(){return t[e]}}function ye(t,e){var i,l,n,s,c;if(Array.isArray(t)||"string"==typeof t)for(i=new Array(t.length),l=0,n=t.length;ldocument.createEvent("Event").timeStamp&&(di=function(){return ci.now()})}function oi(){var t,e;for(si=di(),ai=!0,ti.sort((function(t,e){return t.id-e.id})),ni=0;nini&&ti[i].id>t.id;)i--;ti.splice(i+1,0,t)}else ti.push(t);li||(li=!0,ee(oi))}}(this)},ri.prototype.run=function(){if(this.active){var t=this.get();if(t!==this.value||d(t)||this.deep){var e=this.value;if(this.value=t,this.user){var i='callback for watcher "'+this.expression+'"';Ht(this.cb,this.vm,[t,e],this.vm,i)}else this.cb.call(this.vm,t,e)}}},ri.prototype.evaluate=function(){this.value=this.get(),this.dirty=!1},ri.prototype.depend=function(){for(var t=this.deps.length;t--;)this.deps[t].depend()},ri.prototype.teardown=function(){if(this.active){this.vm._isBeingDestroyed||N(this.vm._watchers,this);for(var t=this.deps.length;t--;)this.deps[t].removeSub(this);this.active=!1}};var bi={enumerable:!0,configurable:!0,get:T,set:T};function gi(t,e,i){bi.get=function(){return this[e][i]},bi.set=function(t){this[e][i]=t},Object.defineProperty(t,i,bi)}var Zi={lazy:!0};function hi(t,e,i){var l=!lt();"function"==typeof i?(bi.get=l?Wi(e):Ni(i),bi.set=T):(bi.get=i.get?l&&!1!==i.cache?Wi(e):Ni(i.get):T,bi.set=i.set||T),Object.defineProperty(t,e,bi)}function Wi(t){return function(){var e=this._computedWatchers&&this._computedWatchers[t];if(e)return e.dirty&&e.evaluate(),mt.target&&e.depend(),e.value}}function Ni(t){return function(){return t.call(this,this)}}function yi(t,e,i,l){return o(i)&&(l=i,i=i.handler),"string"==typeof i&&(i=t[i]),t.$watch(e,i,l)}var ui=0;function Ii(t){var e=t.options;if(t.super){var i=Ii(t.super);if(i!==t.superOptions){t.superOptions=i;var l=function(t){var e,i=t.options,l=t.sealedOptions;for(var a in i)i[a]!==l[a]&&(e||(e={}),e[a]=i[a]);return e}(t);l&&D(t.extendOptions,l),(e=t.options=vt(i,t.extendOptions)).name&&(e.components[e.name]=t)}}return e}function Gi(t){this._init(t)}function Mi(t){return t&&(t.Ctor.options.name||t.tag)}function pi(t,e){return Array.isArray(t)?t.indexOf(e)>-1:"string"==typeof t?t.split(",").indexOf(e)>-1:(i=t,"[object RegExp]"===c.call(i)&&t.test(e));var i}function Vi(t,e){var i=t.cache,l=t.keys,a=t._vnode;for(var n in i){var s=i[n];if(s){var d=s.name;d&&!e(d)&&Yi(i,n,l,a)}}}function Yi(t,e,i,l){var a=t[e];!a||l&&a.tag===l.tag||a.componentInstance.$destroy(),t[e]=null,N(i,e)}!function(e){e.prototype._init=function(e){var i=this;i._uid=ui++,i._isVue=!0,e&&e._isComponent?function(t,e){var i=t.$options=Object.create(t.constructor.options),l=e._parentVnode;i.parent=e.parent,i._parentVnode=l;var a=l.componentOptions;i.propsData=a.propsData,i._parentListeners=a.listeners,i._renderChildren=a.children,i._componentTag=a.tag,e.render&&(i.render=e.render,i.staticRenderFns=e.staticRenderFns)}(i,e):i.$options=vt(Ii(i.constructor),e||{},i),i._renderProxy=i,i._self=i,function(t){var e=t.$options,i=e.parent;if(i&&!e.abstract){for(;i.$options.abstract&&i.$parent;)i=i.$parent;i.$children.push(t)}t.$parent=i,t.$root=i?i.$root:t,t.$children=[],t.$refs={},t._watcher=null,t._inactive=null,t._directInactive=!1,t._isMounted=!1,t._isDestroyed=!1,t._isBeingDestroyed=!1}(i),function(t){t._events=Object.create(null),t._hasHookEvent=!1;var e=t.$options._parentListeners;e&&fe(t,e)}(i),function(e){e._vnode=null,e._staticTrees=null;var i=e.$options,l=e.$vnode=i._parentVnode,a=l&&l.context;e.$slots=be(i._renderChildren,a),e.$scopedSlots=t,e._c=function(t,i,l,a){return Je(e,t,i,l,a,!1)},e.$createElement=function(t,i,l,a){return Je(e,t,i,l,a,!0)};var n=l&&l.data;Rt(e,"$attrs",n&&n.attrs||t,null,!0),Rt(e,"$listeners",i._parentListeners||t,null,!0)}(i),qe(i,"beforeCreate"),function(t){var e=re(t.$options.inject,t);e&&(pt(!1),Object.keys(e).forEach((function(i){Rt(t,i,e[i])})),pt(!0))}(i),function(t){t._watchers=[];var e=t.$options;e.props&&function(t,e){var i=t.$options.propsData||{},l=t._props={},a=t.$options._propKeys=[];t.$parent&&pt(!1);var n=function(n){a.push(n);var s=jt(n,e,i,t);Rt(l,n,s),n in t||gi(t,"_props",n)};for(var s in e)n(s);pt(!0)}(t,e.props),e.methods&&function(t,e){for(var i in t.$options.props,e)t[i]="function"!=typeof e[i]?T:R(e[i],t)}(t,e.methods),e.data?function(t){var e=t.$options.data;o(e=t._data="function"==typeof e?function(t,e){bt();try{return t.call(e,e)}catch(t){return xt(t,e,"data()"),{}}finally{gt()}}(e,t):e||{})||(e={});for(var i,l=Object.keys(e),a=t.$options.props,n=(t.$options.methods,l.length);n--;){var s=l[n];a&&u(a,s)||36!==(i=(s+"").charCodeAt(0))&&95!==i&&gi(t,"_data",s)}Yt(e,!0)}(t):Yt(t._data={},!0),e.computed&&function(t,e){var i=t._computedWatchers=Object.create(null),l=lt();for(var a in e){var n=e[a],s="function"==typeof n?n:n.get;l||(i[a]=new ri(t,s||T,T,Zi)),a in t||hi(t,a,n)}}(t,e.computed),e.watch&&e.watch!==tt&&function(t,e){for(var i in e){var l=e[i];if(Array.isArray(l))for(var a=0;a1?B(e):e;for(var i=B(arguments,1),l='event handler for "'+t+'"',a=0,n=e.length;aparseInt(this.max)&&Yi(t,e[0],e,this._vnode),this.vnodeToCache=null}}},created:function(){this.cache=Object.create(null),this.keys=[]},destroyed:function(){for(var t in this.cache)Yi(this.cache,t,this.keys)},mounted:function(){var t=this;this.cacheVNode(),this.$watch("include",(function(e){Vi(t,(function(t){return pi(e,t)}))})),this.$watch("exclude",(function(e){Vi(t,(function(t){return!pi(e,t)}))}))},updated:function(){this.cacheVNode()},render:function(){var t=this.$slots.default,e=Qe(t),i=e&&e.componentOptions;if(i){var l=Mi(i),a=this.include,n=this.exclude;if(a&&(!l||!pi(a,l))||n&&l&&pi(n,l))return e;var s=this.cache,d=this.keys,c=null==e.key?i.Ctor.cid+(i.tag?"::"+i.tag:""):e.key;s[c]?(e.componentInstance=s[c].componentInstance,N(d,c),d.push(c)):(this.vnodeToCache=e,this.keyToCache=c),e.data.keepAlive=!0}return e||t&&t[0]}}};!function(t){var e={get:function(){return k}};Object.defineProperty(t,"config",e),t.util={warn:ct,extend:D,mergeOptions:vt,defineReactive:Rt},t.set=Bt,t.delete=Dt,t.nextTick=ee,t.observable=function(t){return Yt(t),t},t.options=Object.create(null),j.forEach((function(e){t.options[e+"s"]=Object.create(null)})),t.options._base=t,D(t.options.components,Bi),function(t){t.use=function(t){var e=this._installedPlugins||(this._installedPlugins=[]);if(e.indexOf(t)>-1)return this;var i=B(arguments,1);return i.unshift(this),"function"==typeof t.install?t.install.apply(t,i):"function"==typeof t&&t.apply(null,i),e.push(t),this}}(t),function(t){t.mixin=function(t){return this.options=vt(this.options,t),this}}(t),function(t){t.cid=0;var e=1;t.extend=function(t){t=t||{};var i=this,l=i.cid,a=t._Ctor||(t._Ctor={});if(a[l])return a[l];var n=t.name||i.options.name,s=function(t){this._init(t)};return(s.prototype=Object.create(i.prototype)).constructor=s,s.cid=e++,s.options=vt(i.options,t),s.super=i,s.options.props&&function(t){var e=t.options.props;for(var i in e)gi(t.prototype,"_props",i)}(s),s.options.computed&&function(t){var e=t.options.computed;for(var i in e)hi(t.prototype,i,e[i])}(s),s.extend=i.extend,s.mixin=i.mixin,s.use=i.use,j.forEach((function(t){s[t]=i[t]})),n&&(s.options.components[n]=s),s.superOptions=i.options,s.extendOptions=t,s.sealedOptions=D({},s.options),a[l]=s,s}}(t),function(t){j.forEach((function(e){t[e]=function(t,i){return i?("component"===e&&o(i)&&(i.name=i.name||t,i=this.options._base.extend(i)),"directive"===e&&"function"==typeof i&&(i={bind:i,update:i}),this.options[e+"s"][t]=i,i):this.options[e+"s"][t]}}))}(t)}(Gi),Object.defineProperty(Gi.prototype,"$isServer",{get:lt}),Object.defineProperty(Gi.prototype,"$ssrContext",{get:function(){return this.$vnode&&this.$vnode.ssrContext}}),Object.defineProperty(Gi,"FunctionalRenderContext",{value:ze}),Gi.version="2.6.14";var Di=Z("style,class"),Oi=Z("input,textarea,option,select,progress"),Ti=function(t,e,i){return"value"===i&&Oi(t)&&"button"!==e||"selected"===i&&"option"===t||"checked"===i&&"input"===t||"muted"===i&&"video"===t},Ui=Z("contenteditable,draggable,spellcheck"),Xi=Z("events,caret,typing,plaintext-only"),zi=Z("allowfullscreen,async,autofocus,autoplay,checked,compact,controls,declare,default,defaultchecked,defaultmuted,defaultselected,defer,disabled,enabled,formnovalidate,hidden,indeterminate,inert,ismap,itemscope,loop,multiple,muted,nohref,noresize,noshade,novalidate,nowrap,open,pauseonexit,readonly,required,reversed,scoped,seamless,selected,sortable,truespeed,typemustmatch,visible"),Fi="http://www.w3.org/1999/xlink",vi=function(t){return":"===t.charAt(5)&&"xlink"===t.slice(0,5)},wi=function(t){return vi(t)?t.slice(6,t.length):""},ji=function(t){return null==t||!1===t};function Li(t,e){return{staticClass:ki(t.staticClass,e.staticClass),class:a(t.class)?[t.class,e.class]:e.class}}function ki(t,e){return t?e?t+" "+e:t:e||""}function Ji(t){return Array.isArray(t)?function(t){for(var e,i="",l=0,n=t.length;l-1?rl(t,e,i):zi(e)?ji(i)?t.removeAttribute(e):(i="allowfullscreen"===e&&"EMBED"===t.tagName?"true":e,t.setAttribute(e,i)):Ui(e)?t.setAttribute(e,function(t,e){return ji(e)||"false"===e?"false":"contenteditable"===t&&Xi(e)?e:"true"}(e,i)):vi(e)?ji(i)?t.removeAttributeNS(Fi,wi(e)):t.setAttributeNS(Fi,e,i):rl(t,e,i)}function rl(t,e,i){if(ji(i))t.removeAttribute(e);else{if(K&&!P&&"TEXTAREA"===t.tagName&&"placeholder"===e&&""!==i&&!t.__ieph){var l=function(e){e.stopImmediatePropagation(),t.removeEventListener("input",l)};t.addEventListener("input",l),t.__ieph=!0}t.setAttribute(e,i)}}var bl={create:ol,update:ol};function gl(t,e){var i=e.elm,n=e.data,s=t.data;if(!(l(n.staticClass)&&l(n.class)&&(l(s)||l(s.staticClass)&&l(s.class)))){var d=function(t){for(var e=t.data,i=t,l=t;a(l.componentInstance);)(l=l.componentInstance._vnode)&&l.data&&(e=Li(l.data,e));for(;a(i=i.parent);)i&&i.data&&(e=Li(e,i.data));return function(t,e){return a(t)||a(e)?ki(t,Ji(e)):""}(e.staticClass,e.class)}(e),c=i._transitionClasses;a(c)&&(d=ki(d,Ji(c))),d!==i._prevClass&&(i.setAttribute("class",d),i._prevClass=d)}}var Zl,hl,Wl,Nl,yl,ul,Il={create:gl,update:gl},Gl=/[\w).+\-_$\]]/;function Ml(t){var e,i,l,a,n,s=!1,d=!1,c=!1,o=!1,m=0,r=0,b=0,g=0;for(l=0;l=0&&" "===(h=t.charAt(Z));Z--);h&&Gl.test(h)||(o=!0)}}else void 0===a?(g=l+1,a=t.slice(0,l).trim()):W();function W(){(n||(n=[])).push(t.slice(g,l).trim()),g=l+1}if(void 0===a?a=t.slice(0,l).trim():0!==g&&W(),n)for(l=0;l-1?{exp:t.slice(0,Nl),key:'"'+t.slice(Nl+1)+'"'}:{exp:t,key:null};for(hl=t,Nl=yl=ul=0;!kl();)Jl(Wl=Ll())?xl(Wl):91===Wl&&Cl(Wl);return{exp:t.slice(0,yl),key:t.slice(yl+1,ul)}}(t);return null===i.key?t+"="+e:"$set("+i.exp+", "+i.key+", "+e+")"}function Ll(){return hl.charCodeAt(++Nl)}function kl(){return Nl>=Zl}function Jl(t){return 34===t||39===t}function Cl(t){var e=1;for(yl=Nl;!kl();)if(Jl(t=Ll()))xl(t);else if(91===t&&e++,93===t&&e--,0===e){ul=Nl;break}}function xl(t){for(var e=t;!kl()&&(t=Ll())!==e;);}var Hl,Ql="__r";function Sl(t,e,i){var l=Hl;return function a(){null!==e.apply(null,arguments)&&fl(t,a,i,l)}}var Al=Et&&!(q&&Number(q[1])<=53);function El(t,e,i,l){if(Al){var a=si,n=e;e=n._wrapper=function(t){if(t.target===t.currentTarget||t.timeStamp>=a||t.timeStamp<=0||t.target.ownerDocument!==document)return n.apply(this,arguments)}}Hl.addEventListener(t,e,et?{capture:i,passive:l}:i)}function fl(t,e,i,l){(l||Hl).removeEventListener(t,e._wrapper||e,i)}function Kl(t,e){if(!l(t.data.on)||!l(e.data.on)){var i=e.data.on||{},n=t.data.on||{};Hl=e.elm,function(t){if(a(t.__r)){var e=K?"change":"input";t[e]=[].concat(t.__r,t[e]||[]),delete t.__r}a(t.__c)&&(t.change=[].concat(t.__c,t.change||[]),delete t.__c)}(i),se(i,n,El,fl,Sl,e.context),Hl=void 0}}var Pl,$l={create:Kl,update:Kl};function _l(t,e){if(!l(t.data.domProps)||!l(e.data.domProps)){var i,n,s=e.elm,d=t.data.domProps||{},c=e.data.domProps||{};for(i in a(c.__ob__)&&(c=e.data.domProps=D({},c)),d)i in c||(s[i]="");for(i in c){if(n=c[i],"textContent"===i||"innerHTML"===i){if(e.children&&(e.children.length=0),n===d[i])continue;1===s.childNodes.length&&s.removeChild(s.childNodes[0])}if("value"===i&&"PROGRESS"!==s.tagName){s._value=n;var o=l(n)?"":String(n);ql(s,o)&&(s.value=o)}else if("innerHTML"===i&&Hi(s.tagName)&&l(s.innerHTML)){(Pl=Pl||document.createElement("div")).innerHTML=""+n+"";for(var m=Pl.firstChild;s.firstChild;)s.removeChild(s.firstChild);for(;m.firstChild;)s.appendChild(m.firstChild)}else if(n!==d[i])try{s[i]=n}catch(t){}}}}function ql(t,e){return!t.composing&&("OPTION"===t.tagName||function(t,e){var i=!0;try{i=document.activeElement!==t}catch(t){}return i&&t.value!==e}(t,e)||function(t,e){var i=t.value,l=t._vModifiers;if(a(l)){if(l.number)return g(i)!==g(e);if(l.trim)return i.trim()!==e.trim()}return i!==e}(t,e))}var ta={create:_l,update:_l},ea=I((function(t){var e={},i=/:(.+)/;return t.split(/;(?![^(]*\))/g).forEach((function(t){if(t){var l=t.split(i);l.length>1&&(e[l[0].trim()]=l[1].trim())}})),e}));function ia(t){var e=la(t.style);return t.staticStyle?D(t.staticStyle,e):e}function la(t){return Array.isArray(t)?O(t):"string"==typeof t?ea(t):t}var aa,na=/^--/,sa=/\s*!important$/,da=function(t,e,i){if(na.test(e))t.style.setProperty(e,i);else if(sa.test(i))t.style.setProperty(Y(e),i.replace(sa,""),"important");else{var l=oa(e);if(Array.isArray(i))for(var a=0,n=i.length;a-1?e.split(ba).forEach((function(e){return t.classList.add(e)})):t.classList.add(e);else{var i=" "+(t.getAttribute("class")||"")+" ";i.indexOf(" "+e+" ")<0&&t.setAttribute("class",(i+e).trim())}}function Za(t,e){if(e&&(e=e.trim()))if(t.classList)e.indexOf(" ")>-1?e.split(ba).forEach((function(e){return t.classList.remove(e)})):t.classList.remove(e),t.classList.length||t.removeAttribute("class");else{for(var i=" "+(t.getAttribute("class")||"")+" ",l=" "+e+" ";i.indexOf(l)>=0;)i=i.replace(l," ");(i=i.trim())?t.setAttribute("class",i):t.removeAttribute("class")}}function ha(t){if(t){if("object"==typeof t){var e={};return!1!==t.css&&D(e,Wa(t.name||"v")),D(e,t),e}return"string"==typeof t?Wa(t):void 0}}var Wa=I((function(t){return{enterClass:t+"-enter",enterToClass:t+"-enter-to",enterActiveClass:t+"-enter-active",leaveClass:t+"-leave",leaveToClass:t+"-leave-to",leaveActiveClass:t+"-leave-active"}})),Na=S&&!P,ya="transition",ua="animation",Ia="transition",Ga="transitionend",Ma="animation",pa="animationend";Na&&(void 0===window.ontransitionend&&void 0!==window.onwebkittransitionend&&(Ia="WebkitTransition",Ga="webkitTransitionEnd"),void 0===window.onanimationend&&void 0!==window.onwebkitanimationend&&(Ma="WebkitAnimation",pa="webkitAnimationEnd"));var Va=S?window.requestAnimationFrame?window.requestAnimationFrame.bind(window):setTimeout:function(t){return t()};function Ya(t){Va((function(){Va(t)}))}function Ra(t,e){var i=t._transitionClasses||(t._transitionClasses=[]);i.indexOf(e)<0&&(i.push(e),ga(t,e))}function Ba(t,e){t._transitionClasses&&N(t._transitionClasses,e),Za(t,e)}function Da(t,e,i){var l=Ta(t,e),a=l.type,n=l.timeout,s=l.propCount;if(!a)return i();var d=a===ya?Ga:pa,c=0,o=function(){t.removeEventListener(d,m),i()},m=function(e){e.target===t&&++c>=s&&o()};setTimeout((function(){c0&&(i=ya,m=s,r=n.length):e===ua?o>0&&(i=ua,m=o,r=c.length):r=(i=(m=Math.max(s,o))>0?s>o?ya:ua:null)?i===ya?n.length:c.length:0,{type:i,timeout:m,propCount:r,hasTransform:i===ya&&Oa.test(l[Ia+"Property"])}}function Ua(t,e){for(;t.length1}function ja(t,e){!0!==e.data.show&&za(e)}var La=function(t){var e,i,d={},c=t.modules,o=t.nodeOps;for(e=0;eZ?u(t,l(i[N+1])?null:i[N+1].elm,i,g,N,n):g>N&&G(e,b,Z)}(b,h,N,i,m):a(N)?(a(t.text)&&o.setTextContent(b,""),u(b,null,N,0,N.length-1,i)):a(h)?G(h,0,h.length-1):a(t.text)&&o.setTextContent(b,""):t.text!==e.text&&o.setTextContent(b,e.text),a(Z)&&a(g=Z.hook)&&a(g=g.postpatch)&&g(t,e)}}}function Y(t,e,i){if(n(i)&&a(t.parent))t.parent.data.pendingInsert=e;else for(var l=0;l-1,s.selected!==n&&(s.selected=n);else if(z(Ha(s),l))return void(t.selectedIndex!==d&&(t.selectedIndex=d));a||(t.selectedIndex=-1)}}function xa(t,e){return e.every((function(e){return!z(e,t)}))}function Ha(t){return"_value"in t?t._value:t.value}function Qa(t){t.target.composing=!0}function Sa(t){t.target.composing&&(t.target.composing=!1,Aa(t.target,"input"))}function Aa(t,e){var i=document.createEvent("HTMLEvents");i.initEvent(e,!0,!0),t.dispatchEvent(i)}function Ea(t){return!t.componentInstance||t.data&&t.data.transition?t:Ea(t.componentInstance._vnode)}var fa={model:ka,show:{bind:function(t,e,i){var l=e.value,a=(i=Ea(i)).data&&i.data.transition,n=t.__vOriginalDisplay="none"===t.style.display?"":t.style.display;l&&a?(i.data.show=!0,za(i,(function(){t.style.display=n}))):t.style.display=l?n:"none"},update:function(t,e,i){var l=e.value;!l!=!e.oldValue&&((i=Ea(i)).data&&i.data.transition?(i.data.show=!0,l?za(i,(function(){t.style.display=t.__vOriginalDisplay})):Fa(i,(function(){t.style.display="none"}))):t.style.display=l?t.__vOriginalDisplay:"none")},unbind:function(t,e,i,l,a){a||(t.style.display=t.__vOriginalDisplay)}}},Ka={name:String,appear:Boolean,css:Boolean,mode:String,type:String,enterClass:String,leaveClass:String,enterToClass:String,leaveToClass:String,enterActiveClass:String,leaveActiveClass:String,appearClass:String,appearActiveClass:String,appearToClass:String,duration:[Number,String,Object]};function Pa(t){var e=t&&t.componentOptions;return e&&e.Ctor.options.abstract?Pa(Qe(e.children)):t}function $a(t){var e={},i=t.$options;for(var l in i.propsData)e[l]=t[l];var a=i._parentListeners;for(var n in a)e[M(n)]=a[n];return e}function _a(t,e){if(/\d-keep-alive$/.test(e.tag))return t("keep-alive",{props:e.componentOptions.propsData})}var qa=function(t){return t.tag||Ze(t)},tn=function(t){return"show"===t.name},en={name:"transition",props:Ka,abstract:!0,render:function(t){var e=this,i=this.$slots.default;if(i&&(i=i.filter(qa)).length){var l=this.mode,a=i[0];if(function(t){for(;t=t.parent;)if(t.data.transition)return!0}(this.$vnode))return a;var n=Pa(a);if(!n)return a;if(this._leaving)return _a(t,a);var d="__transition-"+this._uid+"-";n.key=null==n.key?n.isComment?d+"comment":d+n.tag:s(n.key)?0===String(n.key).indexOf(d)?n.key:d+n.key:n.key;var c=(n.data||(n.data={})).transition=$a(this),o=this._vnode,m=Pa(o);if(n.data.directives&&n.data.directives.some(tn)&&(n.data.show=!0),m&&m.data&&!function(t,e){return e.key===t.key&&e.tag===t.tag}(n,m)&&!Ze(m)&&(!m.componentInstance||!m.componentInstance._vnode.isComment)){var r=m.data.transition=D({},c);if("out-in"===l)return this._leaving=!0,de(r,"afterLeave",(function(){e._leaving=!1,e.$forceUpdate()})),_a(t,a);if("in-out"===l){if(Ze(n))return o;var b,g=function(){b()};de(c,"afterEnter",g),de(c,"enterCancelled",g),de(r,"delayLeave",(function(t){b=t}))}}return a}}},ln=D({tag:String,moveClass:String},Ka);function an(t){t.elm._moveCb&&t.elm._moveCb(),t.elm._enterCb&&t.elm._enterCb()}function nn(t){t.data.newPos=t.elm.getBoundingClientRect()}function sn(t){var e=t.data.pos,i=t.data.newPos,l=e.left-i.left,a=e.top-i.top;if(l||a){t.data.moved=!0;var n=t.elm.style;n.transform=n.WebkitTransform="translate("+l+"px,"+a+"px)",n.transitionDuration="0s"}}delete ln.mode;var dn={Transition:en,TransitionGroup:{props:ln,beforeMount:function(){var t=this,e=this._update;this._update=function(i,l){var a=Pe(t);t.__patch__(t._vnode,t.kept,!1,!0),t._vnode=t.kept,a(),e.call(t,i,l)}},render:function(t){for(var e=this.tag||this.$vnode.data.tag||"span",i=Object.create(null),l=this.prevChildren=this.children,a=this.$slots.default||[],n=this.children=[],s=$a(this),d=0;d-1?Ai[t]=e.constructor===window.HTMLUnknownElement||e.constructor===window.HTMLElement:Ai[t]=/HTMLUnknownElement/.test(e.toString())},D(Gi.options.directives,fa),D(Gi.options.components,dn),Gi.prototype.__patch__=S?La:T,Gi.prototype.$mount=function(t,e){return function(t,e,i){var l;return t.$el=e,t.$options.render||(t.$options.render=Wt),qe(t,"beforeMount"),l=function(){t._update(t._render(),i)},new ri(t,l,T,{before:function(){t._isMounted&&!t._isDestroyed&&qe(t,"beforeUpdate")}},!0),i=!1,null==t.$vnode&&(t._isMounted=!0,qe(t,"mounted")),t}(this,t=t&&S?fi(t):void 0,e)},S&&setTimeout((function(){k.devtools&&at&&at.emit("init",Gi)}),0);var cn,on=/\{\{((?:.|\r?\n)+?)\}\}/g,mn=/[-.*+?^${}()|[\]\/\\]/g,rn=I((function(t){var e=t[0].replace(mn,"\\$&"),i=t[1].replace(mn,"\\$&");return new RegExp(e+"((?:.|\\n)+?)"+i,"g")})),bn={staticKeys:["staticClass"],transformNode:function(t,e){e.warn;var i=zl(t,"class");i&&(t.staticClass=JSON.stringify(i));var l=Xl(t,"class",!1);l&&(t.classBinding=l)},genData:function(t){var e="";return t.staticClass&&(e+="staticClass:"+t.staticClass+","),t.classBinding&&(e+="class:"+t.classBinding+","),e}},gn={staticKeys:["staticStyle"],transformNode:function(t,e){e.warn;var i=zl(t,"style");i&&(t.staticStyle=JSON.stringify(ea(i)));var l=Xl(t,"style",!1);l&&(t.styleBinding=l)},genData:function(t){var e="";return t.staticStyle&&(e+="staticStyle:"+t.staticStyle+","),t.styleBinding&&(e+="style:("+t.styleBinding+"),"),e}},Zn=Z("area,base,br,col,embed,frame,hr,img,input,isindex,keygen,link,meta,param,source,track,wbr"),hn=Z("colgroup,dd,dt,li,options,p,td,tfoot,th,thead,tr,source"),Wn=Z("address,article,aside,base,blockquote,body,caption,col,colgroup,dd,details,dialog,div,dl,dt,fieldset,figcaption,figure,footer,form,h1,h2,h3,h4,h5,h6,head,header,hgroup,hr,html,legend,li,menuitem,meta,optgroup,option,param,rp,rt,source,style,summary,tbody,td,tfoot,th,thead,title,tr,track"),Nn=/^\s*([^\s"'<>\/=]+)(?:\s*(=)\s*(?:"([^"]*)"+|'([^']*)'+|([^\s"'=<>`]+)))?/,yn=/^\s*((?:v-[\w-]+:|@|:|#)\[[^=]+?\][^\s"'<>\/=]*)(?:\s*(=)\s*(?:"([^"]*)"+|'([^']*)'+|([^\s"'=<>`]+)))?/,un="[a-zA-Z_][\\-\\.0-9_a-zA-Z"+J.source+"]*",In="((?:"+un+"\\:)?"+un+")",Gn=new RegExp("^<"+In),Mn=/^\s*(\/?)>/,pn=new RegExp("^<\\/"+In+"[^>]*>"),Vn=/^]+>/i,Yn=/^",""":'"',"&":"&"," ":"\n"," ":"\t","'":"'"},Tn=/&(?:lt|gt|quot|amp|#39);/g,Un=/&(?:lt|gt|quot|amp|#39|#10|#9);/g,Xn=Z("pre,textarea",!0),zn=function(t,e){return t&&Xn(t)&&"\n"===e[0]};function Fn(t,e){var i=e?Un:Tn;return t.replace(i,(function(t){return On[t]}))}var vn,wn,jn,Ln,kn,Jn,Cn,xn,Hn=/^@|^v-on:/,Qn=/^v-|^@|^:|^#/,Sn=/([\s\S]*?)\s+(?:in|of)\s+([\s\S]*)/,An=/,([^,\}\]]*)(?:,([^,\}\]]*))?$/,En=/^\(|\)$/g,fn=/^\[.*\]$/,Kn=/:(.*)$/,Pn=/^:|^\.|^v-bind:/,$n=/\.[^.\]]+(?=[^\]]*$)/g,_n=/^v-slot(:|$)|^#/,qn=/[\r\n]/,ts=/[ \f\t\r\n]+/g,es=I((function(t){return(cn=cn||document.createElement("div")).innerHTML=t,cn.textContent})),is="_empty_";function ls(t,e,i){return{type:1,tag:t,attrsList:e,attrsMap:os(e),rawAttrsMap:{},parent:i,children:[]}}function as(t,e){var i,l;(l=Xl(i=t,"key"))&&(i.key=l),t.plain=!t.key&&!t.scopedSlots&&!t.attrsList.length,function(t){var e=Xl(t,"ref");e&&(t.ref=e,t.refInFor=function(t){for(var e=t;e;){if(void 0!==e.for)return!0;e=e.parent}return!1}(t))}(t),function(t){var e;"template"===t.tag?(e=zl(t,"scope"),t.slotScope=e||zl(t,"slot-scope")):(e=zl(t,"slot-scope"))&&(t.slotScope=e);var i=Xl(t,"slot");if(i&&(t.slotTarget='""'===i?'"default"':i,t.slotTargetDynamic=!(!t.attrsMap[":slot"]&&!t.attrsMap["v-bind:slot"]),"template"===t.tag||t.slotScope||Bl(t,"slot",i,function(t,e){return t.rawAttrsMap[":"+e]||t.rawAttrsMap["v-bind:"+e]||t.rawAttrsMap[e]}(t,"slot"))),"template"===t.tag){var l=Fl(t,_n);if(l){var a=ds(l),n=a.name,s=a.dynamic;t.slotTarget=n,t.slotTargetDynamic=s,t.slotScope=l.value||is}}else{var d=Fl(t,_n);if(d){var c=t.scopedSlots||(t.scopedSlots={}),o=ds(d),m=o.name,r=o.dynamic,b=c[m]=ls("template",[],t);b.slotTarget=m,b.slotTargetDynamic=r,b.children=t.children.filter((function(t){if(!t.slotScope)return t.parent=b,!0})),b.slotScope=d.value||is,t.children=[],t.plain=!1}}}(t),function(t){"slot"===t.tag&&(t.slotName=Xl(t,"name"))}(t),function(t){var e;(e=Xl(t,"is"))&&(t.component=e),null!=zl(t,"inline-template")&&(t.inlineTemplate=!0)}(t);for(var a=0;a-1"+("true"===n?":("+e+")":":_q("+e+","+n+")")),Ul(t,"change","var $$a="+e+",$$el=$event.target,$$c=$$el.checked?("+n+"):("+s+");if(Array.isArray($$a)){var $$v="+(l?"_n("+a+")":a)+",$$i=_i($$a,$$v);if($$el.checked){$$i<0&&("+jl(e,"$$a.concat([$$v])")+")}else{$$i>-1&&("+jl(e,"$$a.slice(0,$$i).concat($$a.slice($$i+1))")+")}}else{"+jl(e,"$$c")+"}",null,!0)}(t,l,a);else if("input"===n&&"radio"===s)!function(t,e,i){var l=i&&i.number,a=Xl(t,"value")||"null";Rl(t,"checked","_q("+e+","+(a=l?"_n("+a+")":a)+")"),Ul(t,"change",jl(e,a),null,!0)}(t,l,a);else if("input"===n||"textarea"===n)!function(t,e,i){var l=t.attrsMap.type,a=i||{},n=a.lazy,s=a.number,d=a.trim,c=!n&&"range"!==l,o=n?"change":"range"===l?Ql:"input",m="$event.target.value";d&&(m="$event.target.value.trim()"),s&&(m="_n("+m+")");var r=jl(e,m);c&&(r="if($event.target.composing)return;"+r),Rl(t,"value","("+e+")"),Ul(t,o,r,null,!0),(d||s)&&Ul(t,"blur","$forceUpdate()")}(t,l,a);else if(!k.isReservedTag(n))return wl(t,l,a),!1;return!0},text:function(t,e){e.value&&Rl(t,"textContent","_s("+e.value+")",e)},html:function(t,e){e.value&&Rl(t,"innerHTML","_s("+e.value+")",e)}},isPreTag:function(t){return"pre"===t},isUnaryTag:Zn,mustUseProp:Ti,canBeLeftOpenTag:hn,isReservedTag:Qi,getTagNamespace:Si,staticKeys:function(t){return t.reduce((function(t,e){return t.concat(e.staticKeys||[])}),[]).join(",")}(hs)},Ns=I((function(t){return Z("type,tag,attrsList,attrsMap,plain,parent,children,attrs,start,end,rawAttrsMap"+(t?","+t:""))})),ys=/^([\w$_]+|\([^)]*?\))\s*=>|^function(?:\s+[\w$]+)?\s*\(/,us=/\([^)]*?\);*$/,Is=/^[A-Za-z_$][\w$]*(?:\.[A-Za-z_$][\w$]*|\['[^']*?']|\["[^"]*?"]|\[\d+]|\[[A-Za-z_$][\w$]*])*$/,Gs={esc:27,tab:9,enter:13,space:32,up:38,left:37,right:39,down:40,delete:[8,46]},Ms={esc:["Esc","Escape"],tab:"Tab",enter:"Enter",space:[" ","Spacebar"],up:["Up","ArrowUp"],left:["Left","ArrowLeft"],right:["Right","ArrowRight"],down:["Down","ArrowDown"],delete:["Backspace","Delete","Del"]},ps=function(t){return"if("+t+")return null;"},Vs={stop:"$event.stopPropagation();",prevent:"$event.preventDefault();",self:ps("$event.target !== $event.currentTarget"),ctrl:ps("!$event.ctrlKey"),shift:ps("!$event.shiftKey"),alt:ps("!$event.altKey"),meta:ps("!$event.metaKey"),left:ps("'button' in $event && $event.button !== 0"),middle:ps("'button' in $event && $event.button !== 1"),right:ps("'button' in $event && $event.button !== 2")};function Ys(t,e){var i=e?"nativeOn:":"on:",l="",a="";for(var n in t){var s=Rs(t[n]);t[n]&&t[n].dynamic?a+=n+","+s+",":l+='"'+n+'":'+s+","}return l="{"+l.slice(0,-1)+"}",a?i+"_d("+l+",["+a.slice(0,-1)+"])":i+l}function Rs(t){if(!t)return"function(){}";if(Array.isArray(t))return"["+t.map((function(t){return Rs(t)})).join(",")+"]";var e=Is.test(t.value),i=ys.test(t.value),l=Is.test(t.value.replace(us,""));if(t.modifiers){var a="",n="",s=[];for(var d in t.modifiers)if(Vs[d])n+=Vs[d],Gs[d]&&s.push(d);else if("exact"===d){var c=t.modifiers;n+=ps(["ctrl","shift","alt","meta"].filter((function(t){return!c[t]})).map((function(t){return"$event."+t+"Key"})).join("||"))}else s.push(d);return s.length&&(a+=function(t){return"if(!$event.type.indexOf('key')&&"+t.map(Bs).join("&&")+")return null;"}(s)),n&&(a+=n),"function($event){"+a+(e?"return "+t.value+".apply(null, arguments)":i?"return ("+t.value+").apply(null, arguments)":l?"return "+t.value:t.value)+"}"}return e||i?t.value:"function($event){"+(l?"return "+t.value:t.value)+"}"}function Bs(t){var e=parseInt(t,10);if(e)return"$event.keyCode!=="+e;var i=Gs[t],l=Ms[t];return"_k($event.keyCode,"+JSON.stringify(t)+","+JSON.stringify(i)+",$event.key,"+JSON.stringify(l)+")"}var Ds={on:function(t,e){t.wrapListeners=function(t){return"_g("+t+","+e.value+")"}},bind:function(t,e){t.wrapData=function(i){return"_b("+i+",'"+t.tag+"',"+e.value+","+(e.modifiers&&e.modifiers.prop?"true":"false")+(e.modifiers&&e.modifiers.sync?",true":"")+")"}},cloak:T},Os=function(t){this.options=t,this.warn=t.warn||Vl,this.transforms=Yl(t.modules,"transformCode"),this.dataGenFns=Yl(t.modules,"genData"),this.directives=D(D({},Ds),t.directives);var e=t.isReservedTag||U;this.maybeComponent=function(t){return!!t.component||!e(t.tag)},this.onceId=0,this.staticRenderFns=[],this.pre=!1};function Ts(t,e){var i=new Os(e);return{render:"with(this){return "+(t?"script"===t.tag?"null":Us(t,i):'_c("div")')+"}",staticRenderFns:i.staticRenderFns}}function Us(t,e){if(t.parent&&(t.pre=t.pre||t.parent.pre),t.staticRoot&&!t.staticProcessed)return Xs(t,e);if(t.once&&!t.onceProcessed)return zs(t,e);if(t.for&&!t.forProcessed)return vs(t,e);if(t.if&&!t.ifProcessed)return Fs(t,e);if("template"!==t.tag||t.slotTarget||e.pre){if("slot"===t.tag)return function(t,e){var i=t.slotName||'"default"',l=ks(t,e),a="_t("+i+(l?",function(){return "+l+"}":""),n=t.attrs||t.dynamicAttrs?xs((t.attrs||[]).concat(t.dynamicAttrs||[]).map((function(t){return{name:M(t.name),value:t.value,dynamic:t.dynamic}}))):null,s=t.attrsMap["v-bind"];return!n&&!s||l||(a+=",null"),n&&(a+=","+n),s&&(a+=(n?"":",null")+","+s),a+")"}(t,e);var i;if(t.component)i=function(t,e,i){var l=e.inlineTemplate?null:ks(e,i,!0);return"_c("+t+","+ws(e,i)+(l?","+l:"")+")"}(t.component,t,e);else{var l;(!t.plain||t.pre&&e.maybeComponent(t))&&(l=ws(t,e));var a=t.inlineTemplate?null:ks(t,e,!0);i="_c('"+t.tag+"'"+(l?","+l:"")+(a?","+a:"")+")"}for(var n=0;n>>0}(s):"")+")"}(t,t.scopedSlots,e)+","),t.model&&(i+="model:{value:"+t.model.value+",callback:"+t.model.callback+",expression:"+t.model.expression+"},"),t.inlineTemplate){var n=function(t,e){var i=t.children[0];if(i&&1===i.type){var l=Ts(i,e.options);return"inlineTemplate:{render:function(){"+l.render+"},staticRenderFns:["+l.staticRenderFns.map((function(t){return"function(){"+t+"}"})).join(",")+"]}"}}(t,e);n&&(i+=n+",")}return i=i.replace(/,$/,"")+"}",t.dynamicAttrs&&(i="_b("+i+',"'+t.tag+'",'+xs(t.dynamicAttrs)+")"),t.wrapData&&(i=t.wrapData(i)),t.wrapListeners&&(i=t.wrapListeners(i)),i}function js(t){return 1===t.type&&("slot"===t.tag||t.children.some(js))}function Ls(t,e){var i=t.attrsMap["slot-scope"];if(t.if&&!t.ifProcessed&&!i)return Fs(t,e,Ls,"null");if(t.for&&!t.forProcessed)return vs(t,e,Ls);var l=t.slotScope===is?"":String(t.slotScope),a="function("+l+"){return "+("template"===t.tag?t.if&&i?"("+t.if+")?"+(ks(t,e)||"undefined")+":undefined":ks(t,e)||"undefined":Us(t,e))+"}",n=l?"":",proxy:true";return"{key:"+(t.slotTarget||'"default"')+",fn:"+a+n+"}"}function ks(t,e,i,l,a){var n=t.children;if(n.length){var s=n[0];if(1===n.length&&s.for&&"template"!==s.tag&&"slot"!==s.tag){var d=i?e.maybeComponent(s)?",1":",0":"";return""+(l||Us)(s,e)+d}var c=i?function(t,e){for(var i=0,l=0;l]*>)","i")),b=t.replace(r,(function(t,i,l){return o=l.length,Bn(m)||"noscript"===m||(i=i.replace(//g,"$1").replace(//g,"$1")),zn(m,i)&&(i=i.slice(1)),e.chars&&e.chars(i),""}));c+=t.length-b.length,t=b,R(m,c-o,c)}else{var g=t.indexOf("<");if(0===g){if(Yn.test(t)){var Z=t.indexOf("--\x3e");if(Z>=0){e.shouldKeepComment&&e.comment(t.substring(4,Z),c,c+Z+3),p(Z+3);continue}}if(Rn.test(t)){var h=t.indexOf("]>");if(h>=0){p(h+2);continue}}var W=t.match(Vn);if(W){p(W[0].length);continue}var N=t.match(pn);if(N){var y=c;p(N[0].length),R(N[1],y,c);continue}var u=V();if(u){Y(u),zn(u.tagName,t)&&p(1);continue}}var I=void 0,G=void 0,M=void 0;if(g>=0){for(G=t.slice(g);!(pn.test(G)||Gn.test(G)||Yn.test(G)||Rn.test(G)||(M=G.indexOf("<",1))<0);)g+=M,G=t.slice(g);I=t.substring(0,g)}g<0&&(I=t),I&&p(I.length),e.chars&&I&&e.chars(I,c-I.length,c)}if(t===i){e.chars&&e.chars(t);break}}function p(e){c+=e,t=t.substring(e)}function V(){var e=t.match(Gn);if(e){var i,l,a={tagName:e[1],attrs:[],start:c};for(p(e[0].length);!(i=t.match(Mn))&&(l=t.match(yn)||t.match(Nn));)l.start=c,p(l[0].length),l.end=c,a.attrs.push(l);if(i)return a.unarySlash=i[1],p(i[0].length),a.end=c,a}}function Y(t){var i=t.tagName,c=t.unarySlash;n&&("p"===l&&Wn(i)&&R(l),d(i)&&l===i&&R(i));for(var o=s(i)||!!c,m=t.attrs.length,r=new Array(m),b=0;b=0&&a[s].lowerCasedTag!==d;s--);else s=0;if(s>=0){for(var o=a.length-1;o>=s;o--)e.end&&e.end(a[o].tag,i,n);a.length=s,l=s&&a[s-1].tag}else"br"===d?e.start&&e.start(t,[],!0,i,n):"p"===d&&(e.start&&e.start(t,[],!1,i,n),e.end&&e.end(t,i,n))}R()}(t,{warn:vn,expectHTML:e.expectHTML,isUnaryTag:e.isUnaryTag,canBeLeftOpenTag:e.canBeLeftOpenTag,shouldDecodeNewlines:e.shouldDecodeNewlines,shouldDecodeNewlinesForHref:e.shouldDecodeNewlinesForHref,shouldKeepComment:e.comments,outputSourceRange:e.outputSourceRange,start:function(t,n,s,m,r){var b=l&&l.ns||xn(t);K&&"svg"===b&&(n=function(t){for(var e=[],i=0;ic&&(d.push(n=t.slice(c,a)),s.push(JSON.stringify(n)));var o=Ml(l[1].trim());s.push("_s("+o+")"),d.push({"@binding":o}),c=a+l[0].length}return c':'
',Es.innerHTML.indexOf(" ")>0}var $s=!!S&&Ps(!1),_s=!!S&&Ps(!0),qs=I((function(t){var e=fi(t);return e&&e.innerHTML})),td=Gi.prototype.$mount;return Gi.prototype.$mount=function(t,e){if((t=t&&fi(t))===document.body||t===document.documentElement)return this;var i=this.$options;if(!i.render){var l=i.template;if(l)if("string"==typeof l)"#"===l.charAt(0)&&(l=qs(l));else{if(!l.nodeType)return this;l=l.innerHTML}else t&&(l=function(t){if(t.outerHTML)return t.outerHTML;var e=document.createElement("div");return e.appendChild(t.cloneNode(!0)),e.innerHTML}(t));if(l){var a=Ks(l,{outputSourceRange:!1,shouldDecodeNewlines:$s,shouldDecodeNewlinesForHref:_s,delimiters:i.delimiters,comments:i.comments},this),n=a.render,s=a.staticRenderFns;i.render=n,i.staticRenderFns=s}}return td.call(this,t,e)},Gi.compile=Ks,Gi}()}).call(this,i(5),i(26).setImmediate)},function(t,e,i){(function(t){var l=void 0!==t&&t||"undefined"!=typeof self&&self||window,a=Function.prototype.apply;function n(t,e){this._id=t,this._clearFn=e}e.setTimeout=function(){return new n(a.call(setTimeout,l,arguments),clearTimeout)},e.setInterval=function(){return new n(a.call(setInterval,l,arguments),clearInterval)},e.clearTimeout=e.clearInterval=function(t){t&&t.close()},n.prototype.unref=n.prototype.ref=function(){},n.prototype.close=function(){this._clearFn.call(l,this._id)},e.enroll=function(t,e){clearTimeout(t._idleTimeoutId),t._idleTimeout=e},e.unenroll=function(t){clearTimeout(t._idleTimeoutId),t._idleTimeout=-1},e._unrefActive=e.active=function(t){clearTimeout(t._idleTimeoutId);var e=t._idleTimeout;e>=0&&(t._idleTimeoutId=setTimeout((function(){t._onTimeout&&t._onTimeout()}),e))},i(27),e.setImmediate="undefined"!=typeof self&&self.setImmediate||void 0!==t&&t.setImmediate||this&&this.setImmediate,e.clearImmediate="undefined"!=typeof self&&self.clearImmediate||void 0!==t&&t.clearImmediate||this&&this.clearImmediate}).call(this,i(5))},function(t,e,i){(function(t,e){!function(t,i){"use strict";if(!t.setImmediate){var l,a,n,s,d,c=1,o={},m=!1,r=t.document,b=Object.getPrototypeOf&&Object.getPrototypeOf(t);b=b&&b.setTimeout?b:t,"[object process]"==={}.toString.call(t.process)?l=function(t){e.nextTick((function(){Z(t)}))}:!function(){if(t.postMessage&&!t.importScripts){var e=!0,i=t.onmessage;return t.onmessage=function(){e=!1},t.postMessage("","*"),t.onmessage=i,e}}()?t.MessageChannel?((n=new MessageChannel).port1.onmessage=function(t){Z(t.data)},l=function(t){n.port2.postMessage(t)}):r&&"onreadystatechange"in r.createElement("script")?(a=r.documentElement,l=function(t){var e=r.createElement("script");e.onreadystatechange=function(){Z(t),e.onreadystatechange=null,a.removeChild(e),e=null},a.appendChild(e)}):l=function(t){setTimeout(Z,0,t)}:(s="setImmediate$"+Math.random()+"$",d=function(e){e.source===t&&"string"==typeof e.data&&0===e.data.indexOf(s)&&Z(+e.data.slice(s.length))},t.addEventListener?t.addEventListener("message",d,!1):t.attachEvent("onmessage",d),l=function(e){t.postMessage(s+e,"*")}),b.setImmediate=function(t){"function"!=typeof t&&(t=new Function(""+t));for(var e=new Array(arguments.length-1),i=0;i({pantryID:null}),methods:{changeView(t){this.$emit("change-view",t)},displayOnboarding(t){this.pantryID=t,this.$emit("change-view",a.created)}}};t.exports=n},function(t,e){t.exports='
\n \n\n \n\n \n\n \n\n \n\n \n
\n'},function(t,e,i){"use strict";var l=this&&this.__awaiter||function(t,e,i,l){return new(i||(i=Promise))((function(a,n){function s(t){try{c(l.next(t))}catch(t){n(t)}}function d(t){try{c(l.throw(t))}catch(t){n(t)}}function c(t){var e;t.done?a(t.value):(e=t.value,e instanceof i?e:new i((function(t){t(e)}))).then(s,d)}c((l=l.apply(t,e||[])).next())}))};const a=i(4),n=i(3).apiPath,s={name:"dashboard",template:i(54),props:["pantryID"],components:{explorer:i(55),login:i(81),banner:i(22)},data:()=>({signedIn:!1,id:null,pantry:null,promo:{emoji:"🔥",snippet:"Free Stickers?",title:"Fill out our user survey and get free Pantry stickers!"}}),methods:{login(t){return l(this,void 0,void 0,(function*(){try{yield this.fetchPantry(t),this.createSession(),this.signedIn=!0}catch(t){alert("Login Failed. Is your PantryID correct?")}}))},refresh(){return l(this,void 0,void 0,(function*(){yield this.fetchPantry(this.id)}))},fetchPantry(t){return l(this,void 0,void 0,(function*(){const{data:e}=yield a({method:"GET",url:`${n}/pantry/${t}`});this.id=t,this.pantry=Object.assign(Object.assign({},e),{id:this.id})}))},loadFromSession(){return l(this,void 0,void 0,(function*(){null!==sessionStorage.getItem("pantry-id")&&(yield this.login(sessionStorage.getItem("pantry-id")))}))},createSession(){sessionStorage.setItem("pantry-id",this.id)},urlPantryID:()=>window.location.search.match(/(\?|&)pantryid\=([^&]*)/),loadFromURL(){return l(this,void 0,void 0,(function*(){if(null===this.urlPantryID())return;const t=decodeURIComponent(this.urlPantryID()[2]);yield this.login(t)}))},bannerCTAClicked(){window.location.href="https://tally.so/r/m6yPAn"}},mounted(){this.loadFromSession(),this.loadFromURL()}};t.exports=s},function(t,e,i){"use strict";var l=i(0),a=i(13),n=i(37),s=i(19);function d(t){var e=new n(t),i=a(n.prototype.request,e);return l.extend(i,n.prototype,e),l.extend(i,e),i}var c=d(i(8));c.Axios=n,c.create=function(t){return d(s(c.defaults,t))},c.Cancel=i(20),c.CancelToken=i(51),c.isCancel=i(18),c.all=function(t){return Promise.all(t)},c.spread=i(52),c.isAxiosError=i(53),t.exports=c,t.exports.default=c},function(t,e,i){"use strict";var l=i(0),a=i(14),n=i(38),s=i(39),d=i(19),c=i(49),o=c.validators;function m(t){this.defaults=t,this.interceptors={request:new n,response:new n}}m.prototype.request=function(t){"string"==typeof t?(t=arguments[1]||{}).url=arguments[0]:t=t||{},(t=d(this.defaults,t)).method?t.method=t.method.toLowerCase():this.defaults.method?t.method=this.defaults.method.toLowerCase():t.method="get";var e=t.transitional;void 0!==e&&c.assertOptions(e,{silentJSONParsing:o.transitional(o.boolean,"1.0.0"),forcedJSONParsing:o.transitional(o.boolean,"1.0.0"),clarifyTimeoutError:o.transitional(o.boolean,"1.0.0")},!1);var i=[],l=!0;this.interceptors.request.forEach((function(e){"function"==typeof e.runWhen&&!1===e.runWhen(t)||(l=l&&e.synchronous,i.unshift(e.fulfilled,e.rejected))}));var a,n=[];if(this.interceptors.response.forEach((function(t){n.push(t.fulfilled,t.rejected)})),!l){var m=[s,void 0];for(Array.prototype.unshift.apply(m,i),m=m.concat(n),a=Promise.resolve(t);m.length;)a=a.then(m.shift(),m.shift());return a}for(var r=t;i.length;){var b=i.shift(),g=i.shift();try{r=b(r)}catch(t){g(t);break}}try{a=s(r)}catch(t){return Promise.reject(t)}for(;n.length;)a=a.then(n.shift(),n.shift());return a},m.prototype.getUri=function(t){return t=d(this.defaults,t),a(t.url,t.params,t.paramsSerializer).replace(/^\?/,"")},l.forEach(["delete","get","head","options"],(function(t){m.prototype[t]=function(e,i){return this.request(d(i||{},{method:t,url:e,data:(i||{}).data}))}})),l.forEach(["post","put","patch"],(function(t){m.prototype[t]=function(e,i,l){return this.request(d(l||{},{method:t,url:e,data:i}))}})),t.exports=m},function(t,e,i){"use strict";var l=i(0);function a(){this.handlers=[]}a.prototype.use=function(t,e,i){return this.handlers.push({fulfilled:t,rejected:e,synchronous:!!i&&i.synchronous,runWhen:i?i.runWhen:null}),this.handlers.length-1},a.prototype.eject=function(t){this.handlers[t]&&(this.handlers[t]=null)},a.prototype.forEach=function(t){l.forEach(this.handlers,(function(e){null!==e&&t(e)}))},t.exports=a},function(t,e,i){"use strict";var l=i(0),a=i(40),n=i(18),s=i(8);function d(t){t.cancelToken&&t.cancelToken.throwIfRequested()}t.exports=function(t){return d(t),t.headers=t.headers||{},t.data=a.call(t,t.data,t.headers,t.transformRequest),t.headers=l.merge(t.headers.common||{},t.headers[t.method]||{},t.headers),l.forEach(["delete","get","head","post","put","patch","common"],(function(e){delete t.headers[e]})),(t.adapter||s.adapter)(t).then((function(e){return d(t),e.data=a.call(t,e.data,e.headers,t.transformResponse),e}),(function(e){return n(e)||(d(t),e&&e.response&&(e.response.data=a.call(t,e.response.data,e.response.headers,t.transformResponse))),Promise.reject(e)}))}},function(t,e,i){"use strict";var l=i(0),a=i(8);t.exports=function(t,e,i){var n=this||a;return l.forEach(i,(function(i){t=i.call(n,t,e)})),t}},function(t,e,i){"use strict";var l=i(0);t.exports=function(t,e){l.forEach(t,(function(i,l){l!==e&&l.toUpperCase()===e.toUpperCase()&&(t[e]=i,delete t[l])}))}},function(t,e,i){"use strict";var l=i(17);t.exports=function(t,e,i){var a=i.config.validateStatus;i.status&&a&&!a(i.status)?e(l("Request failed with status code "+i.status,i.config,null,i.request,i)):t(i)}},function(t,e,i){"use strict";var l=i(0);t.exports=l.isStandardBrowserEnv()?{write:function(t,e,i,a,n,s){var d=[];d.push(t+"="+encodeURIComponent(e)),l.isNumber(i)&&d.push("expires="+new Date(i).toGMTString()),l.isString(a)&&d.push("path="+a),l.isString(n)&&d.push("domain="+n),!0===s&&d.push("secure"),document.cookie=d.join("; ")},read:function(t){var e=document.cookie.match(new RegExp("(^|;\\s*)("+t+")=([^;]*)"));return e?decodeURIComponent(e[3]):null},remove:function(t){this.write(t,"",Date.now()-864e5)}}:{write:function(){},read:function(){return null},remove:function(){}}},function(t,e,i){"use strict";var l=i(45),a=i(46);t.exports=function(t,e){return t&&!l(e)?a(t,e):e}},function(t,e,i){"use strict";t.exports=function(t){return/^([a-z][a-z\d\+\-\.]*:)?\/\//i.test(t)}},function(t,e,i){"use strict";t.exports=function(t,e){return e?t.replace(/\/+$/,"")+"/"+e.replace(/^\/+/,""):t}},function(t,e,i){"use strict";var l=i(0),a=["age","authorization","content-length","content-type","etag","expires","from","host","if-modified-since","if-unmodified-since","last-modified","location","max-forwards","proxy-authorization","referer","retry-after","user-agent"];t.exports=function(t){var e,i,n,s={};return t?(l.forEach(t.split("\n"),(function(t){if(n=t.indexOf(":"),e=l.trim(t.substr(0,n)).toLowerCase(),i=l.trim(t.substr(n+1)),e){if(s[e]&&a.indexOf(e)>=0)return;s[e]="set-cookie"===e?(s[e]?s[e]:[]).concat([i]):s[e]?s[e]+", "+i:i}})),s):s}},function(t,e,i){"use strict";var l=i(0);t.exports=l.isStandardBrowserEnv()?function(){var t,e=/(msie|trident)/i.test(navigator.userAgent),i=document.createElement("a");function a(t){var l=t;return e&&(i.setAttribute("href",l),l=i.href),i.setAttribute("href",l),{href:i.href,protocol:i.protocol?i.protocol.replace(/:$/,""):"",host:i.host,search:i.search?i.search.replace(/^\?/,""):"",hash:i.hash?i.hash.replace(/^#/,""):"",hostname:i.hostname,port:i.port,pathname:"/"===i.pathname.charAt(0)?i.pathname:"/"+i.pathname}}return t=a(window.location.href),function(e){var i=l.isString(e)?a(e):e;return i.protocol===t.protocol&&i.host===t.host}}():function(){return!0}},function(t,e,i){"use strict";var l=i(50),a={};["object","boolean","number","function","string","symbol"].forEach((function(t,e){a[t]=function(i){return typeof i===t||"a"+(e<1?"n ":" ")+t}}));var n={},s=l.version.split(".");function d(t,e){for(var i=e?e.split("."):s,l=t.split("."),a=0;a<3;a++){if(i[a]>l[a])return!0;if(i[a]0;){var n=l[a],s=e[n];if(s){var d=t[n],c=void 0===d||s(d,n,t);if(!0!==c)throw new TypeError("option "+n+" must be "+c)}else if(!0!==i)throw Error("Unknown option "+n)}},validators:a}},function(t){t.exports=JSON.parse('{"name":"axios","version":"0.21.4","description":"Promise based HTTP client for the browser and node.js","main":"index.js","scripts":{"test":"grunt test","start":"node ./sandbox/server.js","build":"NODE_ENV=production grunt build","preversion":"npm test","version":"npm run build && grunt version && git add -A dist && git add CHANGELOG.md bower.json package.json","postversion":"git push && git push --tags","examples":"node ./examples/server.js","coveralls":"cat coverage/lcov.info | ./node_modules/coveralls/bin/coveralls.js","fix":"eslint --fix lib/**/*.js"},"repository":{"type":"git","url":"https://github.com/axios/axios.git"},"keywords":["xhr","http","ajax","promise","node"],"author":"Matt Zabriskie","license":"MIT","bugs":{"url":"https://github.com/axios/axios/issues"},"homepage":"https://axios-http.com","devDependencies":{"coveralls":"^3.0.0","es6-promise":"^4.2.4","grunt":"^1.3.0","grunt-banner":"^0.6.0","grunt-cli":"^1.2.0","grunt-contrib-clean":"^1.1.0","grunt-contrib-watch":"^1.0.0","grunt-eslint":"^23.0.0","grunt-karma":"^4.0.0","grunt-mocha-test":"^0.13.3","grunt-ts":"^6.0.0-beta.19","grunt-webpack":"^4.0.2","istanbul-instrumenter-loader":"^1.0.0","jasmine-core":"^2.4.1","karma":"^6.3.2","karma-chrome-launcher":"^3.1.0","karma-firefox-launcher":"^2.1.0","karma-jasmine":"^1.1.1","karma-jasmine-ajax":"^0.1.13","karma-safari-launcher":"^1.0.0","karma-sauce-launcher":"^4.3.6","karma-sinon":"^1.0.5","karma-sourcemap-loader":"^0.3.8","karma-webpack":"^4.0.2","load-grunt-tasks":"^3.5.2","minimist":"^1.2.0","mocha":"^8.2.1","sinon":"^4.5.0","terser-webpack-plugin":"^4.2.3","typescript":"^4.0.5","url-search-params":"^0.10.0","webpack":"^4.44.2","webpack-dev-server":"^3.11.0"},"browser":{"./lib/adapters/http.js":"./lib/adapters/xhr.js"},"jsdelivr":"dist/axios.min.js","unpkg":"dist/axios.min.js","typings":"./index.d.ts","dependencies":{"follow-redirects":"^1.14.0"},"bundlesize":[{"path":"./dist/axios.min.js","threshold":"5kB"}]}')},function(t,e,i){"use strict";var l=i(20);function a(t){if("function"!=typeof t)throw new TypeError("executor must be a function.");var e;this.promise=new Promise((function(t){e=t}));var i=this;t((function(t){i.reason||(i.reason=new l(t),e(i.reason))}))}a.prototype.throwIfRequested=function(){if(this.reason)throw this.reason},a.source=function(){var t;return{token:new a((function(e){t=e})),cancel:t}},t.exports=a},function(t,e,i){"use strict";t.exports=function(t){return function(e){return t.apply(null,e)}}},function(t,e,i){"use strict";t.exports=function(t){return"object"==typeof t&&!0===t.isAxiosError}},function(t,e){t.exports='
\n
\n \n
\n
\n
\n \n \n
\n
\n
\n'},function(t,e,i){"use strict";var l=this&&this.__awaiter||function(t,e,i,l){return new(i||(i=Promise))((function(a,n){function s(t){try{c(l.next(t))}catch(t){n(t)}}function d(t){try{c(l.throw(t))}catch(t){n(t)}}function c(t){var e;t.done?a(t.value):(e=t.value,e instanceof i?e:new i((function(t){t(e)}))).then(s,d)}c((l=l.apply(t,e||[])).next())}))};const a=i(4),n=i(10).default,s=i(3),d=i(60),c=s.apiPath,o={name:"explorer",props:["pantry"],template:d,components:{changelog:i(61),explorerEmpty:i(63),explorerOnboarding:i(65),basket:i(67),modal:i(9),newBasketModal:i(70),"json-edit":n},data:()=>({basket:null,schemaModalVisible:!1,createBasketModalVisible:!1,schemaExample:{_schema:{toppings:{type:"array"},size:{type:"string"},price:{type:"number"}},toppings:["pepperoni","mushrooms","hot peppers"],size:"large",price:19.99}}),computed:{errorsExist(){return this.pantry.errors&&this.pantry.errors.length>0},isPantryEmpty(){return this.pantry.baskets&&0===this.pantry.baskets.length},activeBasket(){return this.basket?this.basket.name:""}},methods:{daysToDeletion(t){const e=new Date;return e.setSeconds(t),this.getDiffOfDates(new Date,e)},getDiffOfDates(t,e){const i=Date.UTC(t.getFullYear(),t.getMonth(),t.getDate()),l=Date.UTC(e.getFullYear(),e.getMonth(),e.getDate());return Math.floor((l-i)/864e5)},refresh(){this.$emit("refresh"),this.basket=null},createBasket(t,e){return l(this,void 0,void 0,(function*(){t?(yield a({method:"POST",data:e,url:`${c}/pantry/${this.pantry.id}/basket/${t}`}),this.refresh(),this.toggleCreateBasketModal()):alert("Please enter a basket name")}))},renamePantry(){return l(this,void 0,void 0,(function*(){const t=this.pantry.name,e=prompt("Pantry Name:",t);e&&(yield a({method:"PUT",data:{name:e},url:`${c}/pantry/${this.pantry.id}`}),this.refresh())}))},changePantryDescription(){return l(this,void 0,void 0,(function*(){const t=this.pantry.description,e=prompt("Pantry Description:",t);e&&(yield a({method:"PUT",data:{description:e},url:`${c}/pantry/${this.pantry.id}`}),this.refresh())}))},viewBasket(t){return l(this,void 0,void 0,(function*(){const{data:e}=yield a({method:"GET",url:`${c}/pantry/${this.pantry.id}/basket/${t}`});this.basket={data:e,name:t}}))},loadBasket(){if(this.pantry.baskets&&this.pantry.baskets.length>0){const{name:t}=this.pantry.baskets[0];this.viewBasket(t)}},toggleSchemaModal(){this.schemaModalVisible=!this.schemaModalVisible},toggleCreateBasketModal(){this.createBasketModalVisible=!this.createBasketModalVisible}}};t.exports=o},function(t,e,i){var l=i(57);"string"==typeof l&&(l=[[t.i,l,""]]);var a={hmr:!0,transform:void 0,insertInto:void 0};i(7)(l,a);l.locals&&(t.exports=l.locals)},function(t,e,i){var l=i(12);(t.exports=i(6)(!1)).push([t.i,'/* reset styling (prevent conflicts with bootstrap, materialize.css, etc.) */\r\n\r\ndiv.jsoneditor .jsoneditor-search input {\r\n height: auto;\r\n border: inherit;\r\n}\r\n\r\ndiv.jsoneditor .jsoneditor-search input:focus {\r\n border: none !important;\r\n box-shadow: none !important;\r\n}\r\n\r\ndiv.jsoneditor table {\r\n border-collapse: collapse;\r\n width: auto;\r\n}\r\n\r\ndiv.jsoneditor td,\r\ndiv.jsoneditor th {\r\n padding: 0;\r\n display: table-cell;\r\n text-align: left;\r\n vertical-align: inherit;\r\n border-radius: inherit;\r\n}\r\n\r\n\r\ndiv.jsoneditor-field,\r\ndiv.jsoneditor-value,\r\ndiv.jsoneditor-readonly {\r\n border: 1px solid transparent;\r\n min-height: 16px;\r\n min-width: 32px;\r\n padding: 2px;\r\n margin: 1px;\r\n word-wrap: break-word;\r\n float: left;\r\n}\r\n\r\n/* adjust margin of p elements inside editable divs, needed for Opera, IE */\r\n\r\ndiv.jsoneditor-field p,\r\ndiv.jsoneditor-value p {\r\n margin: 0;\r\n}\r\n\r\ndiv.jsoneditor-value {\r\n word-break: break-word;\r\n}\r\n\r\ndiv.jsoneditor-readonly {\r\n min-width: 16px;\r\n color: gray;\r\n}\r\n\r\ndiv.jsoneditor-empty {\r\n border-color: lightgray;\r\n border-style: dashed;\r\n border-radius: 2px;\r\n}\r\n\r\ndiv.jsoneditor-field.jsoneditor-empty::after,\r\ndiv.jsoneditor-value.jsoneditor-empty::after {\r\n pointer-events: none;\r\n color: lightgray;\r\n font-size: 8pt;\r\n}\r\n\r\ndiv.jsoneditor-field.jsoneditor-empty::after {\r\n content: "field";\r\n}\r\n\r\ndiv.jsoneditor-value.jsoneditor-empty::after {\r\n content: "value";\r\n}\r\n\r\ndiv.jsoneditor-value.jsoneditor-url,\r\na.jsoneditor-value.jsoneditor-url {\r\n color: green;\r\n text-decoration: underline;\r\n}\r\n\r\na.jsoneditor-value.jsoneditor-url {\r\n display: inline-block;\r\n padding: 2px;\r\n margin: 2px;\r\n}\r\n\r\na.jsoneditor-value.jsoneditor-url:hover,\r\na.jsoneditor-value.jsoneditor-url:focus {\r\n color: #ee422e;\r\n}\r\n\r\ndiv.jsoneditor td.jsoneditor-separator {\r\n padding: 3px 0;\r\n vertical-align: top;\r\n color: gray;\r\n}\r\n\r\ndiv.jsoneditor-field[contenteditable=true]:focus,\r\ndiv.jsoneditor-field[contenteditable=true]:hover,\r\ndiv.jsoneditor-value[contenteditable=true]:focus,\r\ndiv.jsoneditor-value[contenteditable=true]:hover,\r\ndiv.jsoneditor-field.jsoneditor-highlight,\r\ndiv.jsoneditor-value.jsoneditor-highlight {\r\n background-color: #FFFFAB;\r\n border: 1px solid yellow;\r\n border-radius: 2px;\r\n}\r\n\r\ndiv.jsoneditor-field.jsoneditor-highlight-active,\r\ndiv.jsoneditor-field.jsoneditor-highlight-active:focus,\r\ndiv.jsoneditor-field.jsoneditor-highlight-active:hover,\r\ndiv.jsoneditor-value.jsoneditor-highlight-active,\r\ndiv.jsoneditor-value.jsoneditor-highlight-active:focus,\r\ndiv.jsoneditor-value.jsoneditor-highlight-active:hover {\r\n background-color: #ffee00;\r\n border: 1px solid #ffc700;\r\n border-radius: 2px;\r\n}\r\n\r\ndiv.jsoneditor-value.jsoneditor-string {\r\n color: #008000;\r\n}\r\n\r\ndiv.jsoneditor-value.jsoneditor-object,\r\ndiv.jsoneditor-value.jsoneditor-array {\r\n min-width: 16px;\r\n color: #808080;\r\n}\r\n\r\ndiv.jsoneditor-value.jsoneditor-number {\r\n color: #ee422e;\r\n}\r\n\r\ndiv.jsoneditor-value.jsoneditor-boolean {\r\n color: #ff8c00;\r\n}\r\n\r\ndiv.jsoneditor-value.jsoneditor-null {\r\n color: #004ED0;\r\n}\r\n\r\ndiv.jsoneditor-value.jsoneditor-invalid {\r\n color: #000000;\r\n}\r\n\r\ndiv.jsoneditor-tree button {\r\n width: 24px;\r\n height: 24px;\r\n padding: 0;\r\n margin: 0;\r\n border: none;\r\n cursor: pointer;\r\n background: transparent url('+l(i(1))+");\r\n}\r\n\r\ndiv.jsoneditor-mode-view tr.jsoneditor-expandable td.jsoneditor-tree,\r\ndiv.jsoneditor-mode-form tr.jsoneditor-expandable td.jsoneditor-tree {\r\n cursor: pointer;\r\n}\r\n\r\ndiv.jsoneditor-tree button.jsoneditor-collapsed {\r\n background-position: 0 -48px;\r\n}\r\n\r\ndiv.jsoneditor-tree button.jsoneditor-expanded {\r\n background-position: 0 -72px;\r\n}\r\n\r\ndiv.jsoneditor-tree button.jsoneditor-contextmenu {\r\n background-position: -48px -72px;\r\n}\r\n\r\ndiv.jsoneditor-tree button.jsoneditor-contextmenu:hover,\r\ndiv.jsoneditor-tree button.jsoneditor-contextmenu:focus,\r\ndiv.jsoneditor-tree button.jsoneditor-contextmenu.jsoneditor-selected,\r\ntr.jsoneditor-selected.jsoneditor-first button.jsoneditor-contextmenu {\r\n background-position: -48px -48px;\r\n}\r\n\r\ndiv.jsoneditor-tree *:focus {\r\n outline: none;\r\n}\r\n\r\ndiv.jsoneditor-tree button:focus {\r\n /* TODO: nice outline for buttons with focus\r\n outline: #97B0F8 solid 2px;\r\n box-shadow: 0 0 8px #97B0F8;\r\n */\r\n background-color: #f5f5f5;\r\n outline: #e5e5e5 solid 1px;\r\n}\r\n\r\ndiv.jsoneditor-tree button.jsoneditor-invisible {\r\n visibility: hidden;\r\n background: none;\r\n}\r\n\r\ndiv.jsoneditor {\r\n color: #1A1A1A;\r\n border: 1px solid #3883fa;\r\n -moz-box-sizing: border-box;\r\n -webkit-box-sizing: border-box;\r\n box-sizing: border-box;\r\n width: 100%;\r\n height: 100%;\r\n overflow: hidden;\r\n position: relative;\r\n padding: 0;\r\n line-height: 100%;\r\n}\r\n\r\ndiv.jsoneditor-tree table.jsoneditor-tree {\r\n border-collapse: collapse;\r\n border-spacing: 0;\r\n width: 100%;\r\n margin: 0;\r\n}\r\n\r\ndiv.jsoneditor-outer {\r\n position: static;\r\n width: 100%;\r\n height: 100%;\r\n margin: -35px 0 0 0;\r\n padding: 35px 0 0 0;\r\n -moz-box-sizing: border-box;\r\n -webkit-box-sizing: border-box;\r\n box-sizing: border-box;\r\n}\r\n\r\ntextarea.jsoneditor-text,\r\n.ace-jsoneditor {\r\n min-height: 150px;\r\n}\r\n\r\ndiv.jsoneditor-tree {\r\n width: 100%;\r\n height: 100%;\r\n position: relative;\r\n overflow: auto;\r\n}\r\n\r\ntextarea.jsoneditor-text {\r\n width: 100%;\r\n height: 100%;\r\n margin: 0;\r\n -moz-box-sizing: border-box;\r\n -webkit-box-sizing: border-box;\r\n box-sizing: border-box;\r\n outline-width: 0;\r\n border: none;\r\n background-color: white;\r\n resize: none;\r\n}\r\n\r\ntr.jsoneditor-highlight,\r\ntr.jsoneditor-selected {\r\n background-color: #e6e6e6;\r\n}\r\n\r\ntr.jsoneditor-selected button.jsoneditor-dragarea,\r\ntr.jsoneditor-selected button.jsoneditor-contextmenu {\r\n visibility: hidden;\r\n}\r\n\r\ntr.jsoneditor-selected.jsoneditor-first button.jsoneditor-dragarea,\r\ntr.jsoneditor-selected.jsoneditor-first button.jsoneditor-contextmenu {\r\n visibility: visible;\r\n}\r\n\r\ndiv.jsoneditor-tree button.jsoneditor-dragarea {\r\n background: url("+l(i(1))+") -72px -72px;\r\n cursor: move;\r\n}\r\n\r\ndiv.jsoneditor-tree button.jsoneditor-dragarea:hover,\r\ndiv.jsoneditor-tree button.jsoneditor-dragarea:focus,\r\ntr.jsoneditor-selected.jsoneditor-first button.jsoneditor-dragarea {\r\n background-position: -72px -48px;\r\n}\r\n\r\ndiv.jsoneditor tr,\r\ndiv.jsoneditor th,\r\ndiv.jsoneditor td {\r\n padding: 0;\r\n margin: 0;\r\n}\r\n\r\ndiv.jsoneditor td {\r\n vertical-align: top;\r\n}\r\n\r\ndiv.jsoneditor td.jsoneditor-tree {\r\n vertical-align: top;\r\n}\r\n\r\ndiv.jsoneditor-field,\r\ndiv.jsoneditor-value,\r\ndiv.jsoneditor td,\r\ndiv.jsoneditor th,\r\ndiv.jsoneditor textarea,\r\n.jsoneditor-schema-error {\r\n font-family: droid sans mono, consolas, monospace, courier new, courier, sans-serif;\r\n font-size: 10pt;\r\n color: #1A1A1A;\r\n}\r\n\r\n/* popover */\r\n\r\n.jsoneditor-schema-error {\r\n cursor: default;\r\n display: inline-block;\r\n /*font-family: arial, sans-serif;*/\r\n height: 24px;\r\n line-height: 24px;\r\n position: relative;\r\n text-align: center;\r\n width: 24px;\r\n}\r\n\r\ndiv.jsoneditor-tree .jsoneditor-schema-error {\r\n width: 24px;\r\n height: 24px;\r\n padding: 0;\r\n margin: 0 4px 0 0;\r\n background: url("+l(i(1))+") -168px -48px;\r\n}\r\n\r\n.jsoneditor-schema-error .jsoneditor-popover {\r\n background-color: #4c4c4c;\r\n border-radius: 3px;\r\n box-shadow: 0 0 5px rgba(0,0,0,0.4);\r\n color: #fff;\r\n display: none;\r\n padding: 7px 10px;\r\n position: absolute;\r\n width: 200px;\r\n z-index: 4;\r\n}\r\n\r\n.jsoneditor-schema-error .jsoneditor-popover.jsoneditor-above {\r\n bottom: 32px;\r\n left: -98px;\r\n}\r\n\r\n.jsoneditor-schema-error .jsoneditor-popover.jsoneditor-below {\r\n top: 32px;\r\n left: -98px;\r\n}\r\n\r\n.jsoneditor-schema-error .jsoneditor-popover.jsoneditor-left {\r\n top: -7px;\r\n right: 32px;\r\n}\r\n\r\n.jsoneditor-schema-error .jsoneditor-popover.jsoneditor-right {\r\n top: -7px;\r\n left: 32px;\r\n}\r\n\r\n.jsoneditor-schema-error .jsoneditor-popover:before {\r\n border-right: 7px solid transparent;\r\n border-left: 7px solid transparent;\r\n content: '';\r\n display: block;\r\n left: 50%;\r\n margin-left: -7px;\r\n position: absolute;\r\n}\r\n\r\n.jsoneditor-schema-error .jsoneditor-popover.jsoneditor-above:before {\r\n border-top: 7px solid #4c4c4c;\r\n bottom: -7px;\r\n}\r\n\r\n.jsoneditor-schema-error .jsoneditor-popover.jsoneditor-below:before {\r\n border-bottom: 7px solid #4c4c4c;\r\n top: -7px;\r\n}\r\n\r\n.jsoneditor-schema-error .jsoneditor-popover.jsoneditor-left:before {\r\n border-left: 7px solid #4c4c4c;\r\n border-top: 7px solid transparent;\r\n border-bottom: 7px solid transparent;\r\n content: '';\r\n top: 19px;\r\n right: -14px;\r\n left: inherit;\r\n margin-left: inherit;\r\n margin-top: -7px;\r\n position: absolute;\r\n}\r\n\r\n.jsoneditor-schema-error .jsoneditor-popover.jsoneditor-right:before {\r\n border-right: 7px solid #4c4c4c;\r\n border-top: 7px solid transparent;\r\n border-bottom: 7px solid transparent;\r\n content: '';\r\n top: 19px;\r\n left: -14px;\r\n margin-left: inherit;\r\n margin-top: -7px;\r\n position: absolute;\r\n}\r\n\r\n.jsoneditor-schema-error:hover .jsoneditor-popover,\r\n.jsoneditor-schema-error:focus .jsoneditor-popover {\r\n display: block;\r\n -webkit-animation: fade-in .3s linear 1, move-up .3s linear 1;\r\n -moz-animation: fade-in .3s linear 1, move-up .3s linear 1;\r\n -ms-animation: fade-in .3s linear 1, move-up .3s linear 1;\r\n}\r\n\r\n@-webkit-keyframes fade-in {\r\n from {\r\n opacity: 0;\r\n }\r\n\r\n to {\r\n opacity: 1;\r\n }\r\n}\r\n\r\n@-moz-keyframes fade-in {\r\n from {\r\n opacity: 0;\r\n }\r\n\r\n to {\r\n opacity: 1;\r\n }\r\n}\r\n\r\n@-ms-keyframes fade-in {\r\n from {\r\n opacity: 0;\r\n }\r\n\r\n to {\r\n opacity: 1;\r\n }\r\n}\r\n\r\n/*@-webkit-keyframes move-up {*/\r\n\r\n/*from { bottom: 24px; }*/\r\n\r\n/*to { bottom: 32px; }*/\r\n\r\n/*}*/\r\n\r\n/*@-moz-keyframes move-up {*/\r\n\r\n/*from { bottom: 24px; }*/\r\n\r\n/*to { bottom: 32px; }*/\r\n\r\n/*}*/\r\n\r\n/*@-ms-keyframes move-up {*/\r\n\r\n/*from { bottom: 24px; }*/\r\n\r\n/*to { bottom: 32px; }*/\r\n\r\n/*}*/\r\n\r\n/* JSON schema errors displayed at the bottom of the editor in mode text and code */\r\n\r\n.jsoneditor .jsoneditor-text-errors {\r\n width: 100%;\r\n border-collapse: collapse;\r\n background-color: #ffef8b;\r\n border-top: 1px solid #ffd700;\r\n}\r\n\r\n.jsoneditor .jsoneditor-text-errors td {\r\n padding: 3px 6px;\r\n vertical-align: middle;\r\n}\r\n\r\n.jsoneditor-text-errors .jsoneditor-schema-error {\r\n border: none;\r\n width: 24px;\r\n height: 24px;\r\n padding: 0;\r\n margin: 0 4px 0 0;\r\n background: url("+l(i(1))+") -168px -48px;\r\n}\r\n/* ContextMenu - main menu */\r\n\r\ndiv.jsoneditor-contextmenu-root {\r\n position: relative;\r\n width: 0;\r\n height: 0;\r\n}\r\n\r\ndiv.jsoneditor-contextmenu {\r\n position: absolute;\r\n box-sizing: content-box;\r\n z-index: 99999;\r\n}\r\n\r\ndiv.jsoneditor-contextmenu ul,\r\ndiv.jsoneditor-contextmenu li {\r\n box-sizing: content-box;\r\n}\r\n\r\ndiv.jsoneditor-contextmenu ul {\r\n position: relative;\r\n left: 0;\r\n top: 0;\r\n width: 124px;\r\n background: white;\r\n border: 1px solid #d3d3d3;\r\n box-shadow: 2px 2px 12px rgba(128, 128, 128, 0.3);\r\n list-style: none;\r\n margin: 0;\r\n padding: 0;\r\n}\r\n\r\ndiv.jsoneditor-contextmenu ul li button {\r\n padding: 0;\r\n margin: 0;\r\n width: 124px;\r\n height: 24px;\r\n border: none;\r\n cursor: pointer;\r\n color: #4d4d4d;\r\n background: transparent;\r\n font-size: 10pt;\r\n font-family: arial, sans-serif;\r\n box-sizing: border-box;\r\n line-height: 26px;\r\n text-align: left;\r\n}\r\n\r\n/* Fix button padding in firefox */\r\n\r\ndiv.jsoneditor-contextmenu ul li button::-moz-focus-inner {\r\n padding: 0;\r\n border: 0;\r\n}\r\n\r\ndiv.jsoneditor-contextmenu ul li button:hover,\r\ndiv.jsoneditor-contextmenu ul li button:focus {\r\n color: #1a1a1a;\r\n background-color: #f5f5f5;\r\n outline: none;\r\n}\r\n\r\ndiv.jsoneditor-contextmenu ul li button.jsoneditor-default {\r\n width: 92px;\r\n}\r\n\r\ndiv.jsoneditor-contextmenu ul li button.jsoneditor-expand {\r\n float: right;\r\n width: 32px;\r\n height: 24px;\r\n border-left: 1px solid #e5e5e5;\r\n}\r\n\r\ndiv.jsoneditor-contextmenu div.jsoneditor-icon {\r\n float: left;\r\n width: 24px;\r\n height: 24px;\r\n border: none;\r\n padding: 0;\r\n margin: 0;\r\n background-image: url("+l(i(1))+");\r\n}\r\n\r\ndiv.jsoneditor-contextmenu ul li button div.jsoneditor-expand {\r\n float: right;\r\n width: 24px;\r\n height: 24px;\r\n padding: 0;\r\n margin: 0 4px 0 0;\r\n background: url("+l(i(1))+") 0 -72px;\r\n opacity: 0.4;\r\n}\r\n\r\ndiv.jsoneditor-contextmenu ul li button:hover div.jsoneditor-expand,\r\ndiv.jsoneditor-contextmenu ul li button:focus div.jsoneditor-expand,\r\ndiv.jsoneditor-contextmenu ul li.jsoneditor-selected div.jsoneditor-expand,\r\ndiv.jsoneditor-contextmenu ul li button.jsoneditor-expand:hover div.jsoneditor-expand,\r\ndiv.jsoneditor-contextmenu ul li button.jsoneditor-expand:focus div.jsoneditor-expand {\r\n opacity: 1;\r\n}\r\n\r\ndiv.jsoneditor-contextmenu div.jsoneditor-separator {\r\n height: 0;\r\n border-top: 1px solid #e5e5e5;\r\n padding-top: 5px;\r\n margin-top: 5px;\r\n}\r\n\r\ndiv.jsoneditor-contextmenu button.jsoneditor-remove > div.jsoneditor-icon {\r\n background-position: -24px -24px;\r\n}\r\n\r\ndiv.jsoneditor-contextmenu button.jsoneditor-remove:hover > div.jsoneditor-icon,\r\ndiv.jsoneditor-contextmenu button.jsoneditor-remove:focus > div.jsoneditor-icon {\r\n background-position: -24px 0;\r\n}\r\n\r\ndiv.jsoneditor-contextmenu button.jsoneditor-append > div.jsoneditor-icon {\r\n background-position: 0 -24px;\r\n}\r\n\r\ndiv.jsoneditor-contextmenu button.jsoneditor-append:hover > div.jsoneditor-icon,\r\ndiv.jsoneditor-contextmenu button.jsoneditor-append:focus > div.jsoneditor-icon {\r\n background-position: 0 0;\r\n}\r\n\r\ndiv.jsoneditor-contextmenu button.jsoneditor-insert > div.jsoneditor-icon {\r\n background-position: 0 -24px;\r\n}\r\n\r\ndiv.jsoneditor-contextmenu button.jsoneditor-insert:hover > div.jsoneditor-icon,\r\ndiv.jsoneditor-contextmenu button.jsoneditor-insert:focus > div.jsoneditor-icon {\r\n background-position: 0 0;\r\n}\r\n\r\ndiv.jsoneditor-contextmenu button.jsoneditor-duplicate > div.jsoneditor-icon {\r\n background-position: -48px -24px;\r\n}\r\n\r\ndiv.jsoneditor-contextmenu button.jsoneditor-duplicate:hover > div.jsoneditor-icon,\r\ndiv.jsoneditor-contextmenu button.jsoneditor-duplicate:focus > div.jsoneditor-icon {\r\n background-position: -48px 0;\r\n}\r\n\r\ndiv.jsoneditor-contextmenu button.jsoneditor-sort-asc > div.jsoneditor-icon {\r\n background-position: -168px -24px;\r\n}\r\n\r\ndiv.jsoneditor-contextmenu button.jsoneditor-sort-asc:hover > div.jsoneditor-icon,\r\ndiv.jsoneditor-contextmenu button.jsoneditor-sort-asc:focus > div.jsoneditor-icon {\r\n background-position: -168px 0;\r\n}\r\n\r\ndiv.jsoneditor-contextmenu button.jsoneditor-sort-desc > div.jsoneditor-icon {\r\n background-position: -192px -24px;\r\n}\r\n\r\ndiv.jsoneditor-contextmenu button.jsoneditor-sort-desc:hover > div.jsoneditor-icon,\r\ndiv.jsoneditor-contextmenu button.jsoneditor-sort-desc:focus > div.jsoneditor-icon {\r\n background-position: -192px 0;\r\n}\r\n\r\n/* ContextMenu - sub menu */\r\n\r\ndiv.jsoneditor-contextmenu ul li button.jsoneditor-selected,\r\ndiv.jsoneditor-contextmenu ul li button.jsoneditor-selected:hover,\r\ndiv.jsoneditor-contextmenu ul li button.jsoneditor-selected:focus {\r\n color: white;\r\n background-color: #ee422e;\r\n}\r\n\r\ndiv.jsoneditor-contextmenu ul li {\r\n overflow: hidden;\r\n}\r\n\r\ndiv.jsoneditor-contextmenu ul li ul {\r\n display: none;\r\n position: relative;\r\n left: -10px;\r\n top: 0;\r\n border: none;\r\n box-shadow: inset 0 0 10px rgba(128, 128, 128, 0.5);\r\n padding: 0 10px;\r\n /* TODO: transition is not supported on IE8-9 */\r\n -webkit-transition: all 0.3s ease-out;\r\n -moz-transition: all 0.3s ease-out;\r\n -o-transition: all 0.3s ease-out;\r\n transition: all 0.3s ease-out;\r\n}\r\n\r\n\r\n\r\ndiv.jsoneditor-contextmenu ul li ul li button {\r\n padding-left: 24px;\r\n animation: all ease-in-out 1s;\r\n}\r\n\r\ndiv.jsoneditor-contextmenu ul li ul li button:hover,\r\ndiv.jsoneditor-contextmenu ul li ul li button:focus {\r\n background-color: #f5f5f5;\r\n}\r\n\r\ndiv.jsoneditor-contextmenu button.jsoneditor-type-string > div.jsoneditor-icon {\r\n background-position: -144px -24px;\r\n}\r\n\r\ndiv.jsoneditor-contextmenu button.jsoneditor-type-string:hover > div.jsoneditor-icon,\r\ndiv.jsoneditor-contextmenu button.jsoneditor-type-string:focus > div.jsoneditor-icon,\r\ndiv.jsoneditor-contextmenu button.jsoneditor-type-string.jsoneditor-selected > div.jsoneditor-icon {\r\n background-position: -144px 0;\r\n}\r\n\r\ndiv.jsoneditor-contextmenu button.jsoneditor-type-auto > div.jsoneditor-icon {\r\n background-position: -120px -24px;\r\n}\r\n\r\ndiv.jsoneditor-contextmenu button.jsoneditor-type-auto:hover > div.jsoneditor-icon,\r\ndiv.jsoneditor-contextmenu button.jsoneditor-type-auto:focus > div.jsoneditor-icon,\r\ndiv.jsoneditor-contextmenu button.jsoneditor-type-auto.jsoneditor-selected > div.jsoneditor-icon {\r\n background-position: -120px 0;\r\n}\r\n\r\ndiv.jsoneditor-contextmenu button.jsoneditor-type-object > div.jsoneditor-icon {\r\n background-position: -72px -24px;\r\n}\r\n\r\ndiv.jsoneditor-contextmenu button.jsoneditor-type-object:hover > div.jsoneditor-icon,\r\ndiv.jsoneditor-contextmenu button.jsoneditor-type-object:focus > div.jsoneditor-icon,\r\ndiv.jsoneditor-contextmenu button.jsoneditor-type-object.jsoneditor-selected > div.jsoneditor-icon {\r\n background-position: -72px 0;\r\n}\r\n\r\ndiv.jsoneditor-contextmenu button.jsoneditor-type-array > div.jsoneditor-icon {\r\n background-position: -96px -24px;\r\n}\r\n\r\ndiv.jsoneditor-contextmenu button.jsoneditor-type-array:hover > div.jsoneditor-icon,\r\ndiv.jsoneditor-contextmenu button.jsoneditor-type-array:focus > div.jsoneditor-icon,\r\ndiv.jsoneditor-contextmenu button.jsoneditor-type-array.jsoneditor-selected > div.jsoneditor-icon {\r\n background-position: -96px 0;\r\n}\r\n\r\ndiv.jsoneditor-contextmenu button.jsoneditor-type-modes > div.jsoneditor-icon {\r\n background-image: none;\r\n width: 6px;\r\n}\r\ndiv.jsoneditor-menu {\r\n width: 100%;\r\n height: 35px;\r\n padding: 2px;\r\n margin: 0;\r\n -moz-box-sizing: border-box;\r\n -webkit-box-sizing: border-box;\r\n box-sizing: border-box;\r\n color: white;\r\n background-color: #3883fa;\r\n border-bottom: 1px solid #3883fa;\r\n}\r\n\r\ndiv.jsoneditor-menu > button,\r\ndiv.jsoneditor-menu > div.jsoneditor-modes > button {\r\n width: 26px;\r\n height: 26px;\r\n margin: 2px;\r\n padding: 0;\r\n border-radius: 2px;\r\n border: 1px solid transparent;\r\n background: transparent url("+l(i(1))+");\r\n color: white;\r\n opacity: 0.8;\r\n font-family: arial, sans-serif;\r\n font-size: 10pt;\r\n float: left;\r\n}\r\n\r\ndiv.jsoneditor-menu > button:hover,\r\ndiv.jsoneditor-menu > div.jsoneditor-modes > button:hover {\r\n background-color: rgba(255,255,255,0.2);\r\n border: 1px solid rgba(255,255,255,0.4);\r\n}\r\n\r\ndiv.jsoneditor-menu > button:focus,\r\ndiv.jsoneditor-menu > button:active,\r\ndiv.jsoneditor-menu > div.jsoneditor-modes > button:focus,\r\ndiv.jsoneditor-menu > div.jsoneditor-modes > button:active {\r\n background-color: rgba(255,255,255,0.3);\r\n}\r\n\r\ndiv.jsoneditor-menu > button:disabled,\r\ndiv.jsoneditor-menu > div.jsoneditor-modes > button:disabled {\r\n opacity: 0.5;\r\n}\r\n\r\ndiv.jsoneditor-menu > button.jsoneditor-collapse-all {\r\n background-position: 0 -96px;\r\n}\r\n\r\ndiv.jsoneditor-menu > button.jsoneditor-expand-all {\r\n background-position: 0 -120px;\r\n}\r\n\r\ndiv.jsoneditor-menu > button.jsoneditor-undo {\r\n background-position: -24px -96px;\r\n}\r\n\r\ndiv.jsoneditor-menu > button.jsoneditor-undo:disabled {\r\n background-position: -24px -120px;\r\n}\r\n\r\ndiv.jsoneditor-menu > button.jsoneditor-redo {\r\n background-position: -48px -96px;\r\n}\r\n\r\ndiv.jsoneditor-menu > button.jsoneditor-redo:disabled {\r\n background-position: -48px -120px;\r\n}\r\n\r\ndiv.jsoneditor-menu > button.jsoneditor-compact {\r\n background-position: -72px -96px;\r\n}\r\n\r\ndiv.jsoneditor-menu > button.jsoneditor-format {\r\n background-position: -72px -120px;\r\n}\r\n\r\ndiv.jsoneditor-menu > div.jsoneditor-modes {\r\n display: inline-block;\r\n float: left;\r\n}\r\n\r\ndiv.jsoneditor-menu > div.jsoneditor-modes > button {\r\n background-image: none;\r\n width: auto;\r\n padding-left: 6px;\r\n padding-right: 6px;\r\n}\r\n\r\ndiv.jsoneditor-menu > button.jsoneditor-separator,\r\ndiv.jsoneditor-menu > div.jsoneditor-modes > button.jsoneditor-separator {\r\n margin-left: 10px;\r\n}\r\n\r\ndiv.jsoneditor-menu a {\r\n font-family: arial, sans-serif;\r\n font-size: 10pt;\r\n color: white;\r\n opacity: 0.8;\r\n vertical-align: middle;\r\n}\r\n\r\ndiv.jsoneditor-menu a:hover {\r\n opacity: 1;\r\n}\r\n\r\ndiv.jsoneditor-menu a.jsoneditor-poweredBy {\r\n font-size: 8pt;\r\n position: absolute;\r\n right: 0;\r\n top: 0;\r\n padding: 10px;\r\n}\r\ntable.jsoneditor-search input,\r\ntable.jsoneditor-search div.jsoneditor-results {\r\n font-family: arial, sans-serif;\r\n font-size: 10pt;\r\n color: #1A1A1A;\r\n background: transparent;\r\n /* For Firefox */\r\n}\r\n\r\ntable.jsoneditor-search div.jsoneditor-results {\r\n color: white;\r\n padding-right: 5px;\r\n line-height: 24px;\r\n}\r\n\r\ntable.jsoneditor-search {\r\n position: absolute;\r\n right: 4px;\r\n top: 4px;\r\n border-collapse: collapse;\r\n border-spacing: 0;\r\n}\r\n\r\ntable.jsoneditor-search div.jsoneditor-frame {\r\n border: 1px solid transparent;\r\n background-color: white;\r\n padding: 0 2px;\r\n margin: 0;\r\n}\r\n\r\ntable.jsoneditor-search div.jsoneditor-frame table {\r\n border-collapse: collapse;\r\n}\r\n\r\ntable.jsoneditor-search input {\r\n width: 120px;\r\n border: none;\r\n outline: none;\r\n margin: 1px;\r\n line-height: 20px;\r\n}\r\n\r\ntable.jsoneditor-search button {\r\n width: 16px;\r\n height: 24px;\r\n padding: 0;\r\n margin: 0;\r\n border: none;\r\n background: url("+l(i(1))+");\r\n vertical-align: top;\r\n}\r\n\r\ntable.jsoneditor-search button:hover {\r\n background-color: transparent;\r\n}\r\n\r\ntable.jsoneditor-search button.jsoneditor-refresh {\r\n width: 18px;\r\n background-position: -99px -73px;\r\n}\r\n\r\ntable.jsoneditor-search button.jsoneditor-next {\r\n cursor: pointer;\r\n background-position: -124px -73px;\r\n}\r\n\r\ntable.jsoneditor-search button.jsoneditor-next:hover {\r\n background-position: -124px -49px;\r\n}\r\n\r\ntable.jsoneditor-search button.jsoneditor-previous {\r\n cursor: pointer;\r\n background-position: -148px -73px;\r\n margin-right: 2px;\r\n}\r\n\r\ntable.jsoneditor-search button.jsoneditor-previous:hover {\r\n background-position: -148px -49px;\r\n}",""])},function(t,e,i){"use strict";i(21)},function(t,e,i){(t.exports=i(6)(!1)).push([t.i,"\n.ace_line_group[data-v-551a97e0] {\n text-align: left;\n}\n.json-editor-container[data-v-551a97e0] {\n display: flex;\n width: 100%;\n}\n.json-editor-container .tree-mode[data-v-551a97e0] {\n width: 50%;\n}\n.json-editor-container .code-mode[data-v-551a97e0] {\n flex-grow: 1;\n}\n.jsoneditor-btns[data-v-551a97e0]{\n text-align: center;\n margin-top:10px;\n}\n.jsoneditor-vue .jsoneditor-outer[data-v-551a97e0]{\n min-height:150px;\n}\n.jsoneditor-vue div.jsoneditor-tree[data-v-551a97e0]{\n min-height: 350px;\n}\n.json-save-btn[data-v-551a97e0]{\n background-color: #20A0FF;\n border: none;\n color:#fff;\n padding:5px 10px;\n border-radius: 5px;\n cursor: pointer;\n}\n.json-save-btn[data-v-551a97e0]:focus{\n outline: none;\n}\n.json-save-btn[disabled][data-v-551a97e0]{\n background-color: #1D8CE0;\n cursor: not-allowed;\n}\ncode[data-v-551a97e0] {\n background-color: #f5f5f5;\n}\n",""])},function(t,e){t.exports='
\n
\n
\n
\n \n {{ pantry.name }}\n \n \n {{ pantry.percentFull}}% Full\n \n
\n
\n \n
\n
\n
\n
\n \n \n \n
\n \n \n
\n'},function(t,e,i){"use strict";const l={name:"changelog",template:i(62),data:()=>({items:[{description:"Add Metadata to Baskets"},{description:"Introduce Public Basket Endpoints"},{description:"Performance Improvements"},{description:"Added Nushell client"}]}),methods:{}};t.exports=l},function(t,e){t.exports='
\n\t

\n\t\tChangelog\n\t

\n\t\n
\n'},function(t,e,i){"use strict";const l=i(3).apiPath,a={name:"explorerEmpty",template:i(64),props:["pantryId"],data:()=>({apiPath:l})};t.exports=a},function(t,e){t.exports='
\n
\n
\n
\n

\n \n Welcome to Pantry\n \n \n Getting Started\n \n

\n\n

\n You can manage your data through our Web Dashboard or via the\n API. Every feature available in the dashboard is fully\n accessible through the API.\n

\n\n

\n Ready? Let’s create your first basket.\n

\n\n

\n The API is built on\n \n REST\n \n principles and accepts JSON-encoded request bodies. To get started, create\n your first basket in your pantry by following our\n \n API documentation.\n \n

\n\n

\n Alternatively, you can click on \'Create Basket\' from the sidebar\n to the left to create your first basket.\n

\n\n

\n TL;DR\n

\n\n

\n Paste a snippet from below to create your first basket using our API,\n and then\n \n read the docs.\n \n

\n\n
\n

\n Curl\n

\n

\n Unix/Linux\n

\n
\n

\n curl -XPOST -H "Content-type: application/json" -d \'{\n "key": "value"\n }\' \'{{apiPath}}/pantry/{{this.pantryId}}/basket/testBasket\'\n

\n\n
\n

\n Powershell\n

\n

\n Windows\n

\n
\n\n

\n Invoke-WebRequest -Uri \'{{apiPath}}/pantry/{{this.pantryId}}/basket/testBasket\' -Method POST -ContentType \'application/json\' -Body \'{\n "key": "value" \n }\'\n

\n\n \n Show Me The API Docs!\n \n
\n
\n
\n
\n'},function(t,e,i){"use strict";const l={name:"explorerOnboarding",template:i(66),data:()=>({}),methods:{loadBasket(){this.$emit("load-basket")}}};t.exports=l},function(t,e){t.exports='
\n \n
\n'},function(t,e,i){"use strict";var l=this&&this.__awaiter||function(t,e,i,l){return new(i||(i=Promise))((function(a,n){function s(t){try{c(l.next(t))}catch(t){n(t)}}function d(t){try{c(l.throw(t))}catch(t){n(t)}}function c(t){var e;t.done?a(t.value):(e=t.value,e instanceof i?e:new i((function(t){t(e)}))).then(s,d)}c((l=l.apply(t,e||[])).next())}))};const a=i(4),n=i(10).default,s=i(3),d=i(68),c=i(9),o=s.apiPath,m={props:["pantryId","basket"],name:"basket",components:{modal:c,"json-edit":n},template:d,data:()=>({apiPath:o,shareModalVisible:!1,publicBasketPath:null}),computed:{name(){return this.basket.name},data:{get(){return this.basket.data},set(t){this.basket.data=t}}},methods:{copyPath(t){return l(this,void 0,void 0,(function*(){yield navigator.clipboard.writeText(t),alert("Saved to clipboard")}))},refreshDashboard(){this.$emit("update")},basketPath(){return`${o}/pantry/${this.pantryId}/basket/${this.name}`},getPublicBasket(){return l(this,void 0,void 0,(function*(){const{data:t}=yield a({method:"GET",url:this.basketPath()+"/public"});this.publicBasketPath=`${o}/public/${t}`}))},deleteBasket(){return l(this,void 0,void 0,(function*(){confirm(`Are you sure you'd like to delete ${this.name}?`)&&(yield a({method:"DELETE",url:this.basketPath()}),this.refreshDashboard())}))},save(){return l(this,void 0,void 0,(function*(){yield a({method:"PUT",data:this.data,url:this.basketPath()}).then(t=>{const{data:e}=t;alert(this.name+" contents updated!"),this.data=e}).catch(t=>{const{data:e}=t.response,{error:i,details:l}=e;alert(`${i} - ${l}`)})}))},openShareModal(){this.getPublicBasket(),this.shareModalVisible=!0},closeShareModal(){this.shareModalVisible=!1}}};t.exports=m},function(t,e){t.exports='
\n
\n
\n
\n

\n {{ name }}\n

\n
\n \n \n
\n
\n
\n \n
\n
\n
\n \n
\n'},function(t,e){t.exports='\n
\n'},function(t,e,i){"use strict";var l=this&&this.__createBinding||(Object.create?function(t,e,i,l){void 0===l&&(l=i),Object.defineProperty(t,l,{enumerable:!0,get:function(){return e[i]}})}:function(t,e,i,l){void 0===l&&(l=i),t[l]=e[i]}),a=this&&this.__setModuleDefault||(Object.create?function(t,e){Object.defineProperty(t,"default",{enumerable:!0,value:e})}:function(t,e){t.default=e}),n=this&&this.__importStar||function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var i in t)"default"!==i&&Object.prototype.hasOwnProperty.call(t,i)&&l(e,t,i);return a(e,t),e},s=this&&this.__awaiter||function(t,e,i,l){return new(i||(i=Promise))((function(a,n){function s(t){try{c(l.next(t))}catch(t){n(t)}}function d(t){try{c(l.throw(t))}catch(t){n(t)}}function c(t){var e;t.done?a(t.value):(e=t.value,e instanceof i?e:new i((function(t){t(e)}))).then(s,d)}c((l=l.apply(t,e||[])).next())}))};const d=(this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}})(i(71)),c=i(10).default,o={name:"newBasketModal",template:i(72),props:["visible"],components:{modal:i(9),card:i(73),"json-edit":c},data:()=>({templates:d.default,basketName:"my-new-basket-name",pathToTemplates:"../assets/templates/",payload:null}),computed:{payloadIsNotEmpty(){return null!==this.payload},valid(){return this.payload&&this.basketName}},methods:{close(){this.$emit("close")},setTemplate(t){return s(this,void 0,void 0,(function*(){const e=yield Promise.resolve().then(()=>n(i(75)(`./${t}.json`)));this.payload=e.default}))},setBlankTemplate(){this.payload={}},createBasket(){this.valid?this.$emit("createBasket",this.basketName,this.payload):alert("Please enter a name & select a starting template")},closeModal(){this.$emit("close")}},updated(){this.visible&&document.getElementById("newBasketName").focus()}};t.exports=o},function(t){t.exports=JSON.parse('[{"fileName":"users","name":"User List","description":"Realistic sample user data for testing authentication systems, user management features"},{"fileName":"posts","name":"Blog Posts","description":"Sample blog post data for testing CMS features, content management, and publishing workflows."},{"fileName":"events","name":"Event List","description":"Sample event data for testing calendar features, registrations, and event management."},{"fileName":"pokemon","name":"Pokémon Info","description":"The original 150 Pokémon, complete with their stats, classifications, evolutions, and attacks."},{"fileName":"airports","name":"World Airports","description":"Top 30 busiest international airports with IATA codes and coordinates."}]')},function(t,e){t.exports='
\n \n
\n'},function(t,e,i){"use strict";const l={name:"card",template:i(74),data:()=>({}),methods:{clicked(){this.$emit("click")}}};t.exports=l},function(t,e){t.exports='
\n
\n \n \n Card Title\n \n \n

\n \n Card content goes here\n \n

\n
\n
\n'},function(t,e,i){var l={"./airports.json":76,"./events.json":77,"./pokemon.json":78,"./posts.json":79,"./users.json":80};function a(t){var e=n(t);return i(e)}function n(t){if(!i.o(l,t)){var e=new Error("Cannot find module '"+t+"'");throw e.code="MODULE_NOT_FOUND",e}return l[t]}a.keys=function(){return Object.keys(l)},a.resolve=n,t.exports=a,a.id=75},function(t){t.exports=JSON.parse('{"airports":[{"code":"ATL","name":"Hartsfield-Jackson Atlanta International","city":"Atlanta","country":"US","lat":33.6407,"lon":-84.4277},{"code":"PEK","name":"Beijing Capital International","city":"Beijing","country":"CN","lat":40.0801,"lon":116.5846},{"code":"DXB","name":"Dubai International","city":"Dubai","country":"AE","lat":25.2528,"lon":55.3644},{"code":"LAX","name":"Los Angeles International","city":"Los Angeles","country":"US","lat":33.9425,"lon":-118.4081},{"code":"HND","name":"Tokyo Haneda","city":"Tokyo","country":"JP","lat":35.5494,"lon":139.7798},{"code":"ORD","name":"O\'Hare International","city":"Chicago","country":"US","lat":41.9742,"lon":-87.9073},{"code":"LHR","name":"London Heathrow","city":"London","country":"GB","lat":51.47,"lon":-0.4543},{"code":"PVG","name":"Shanghai Pudong International","city":"Shanghai","country":"CN","lat":31.1443,"lon":121.8083},{"code":"CDG","name":"Paris Charles de Gaulle","city":"Paris","country":"FR","lat":49.0097,"lon":2.5479},{"code":"DFW","name":"Dallas/Fort Worth International","city":"Dallas","country":"US","lat":32.8998,"lon":-97.0403},{"code":"CAN","name":"Guangzhou Baiyun International","city":"Guangzhou","country":"CN","lat":23.3924,"lon":113.2988},{"code":"AMS","name":"Amsterdam Schiphol","city":"Amsterdam","country":"NL","lat":52.3105,"lon":4.7683},{"code":"FRA","name":"Frankfurt Airport","city":"Frankfurt","country":"DE","lat":50.0379,"lon":8.5622},{"code":"IST","name":"Istanbul Airport","city":"Istanbul","country":"TR","lat":41.2753,"lon":28.7519},{"code":"SIN","name":"Singapore Changi","city":"Singapore","country":"SG","lat":1.3644,"lon":103.9915},{"code":"ICN","name":"Incheon International","city":"Seoul","country":"KR","lat":37.4602,"lon":126.4407},{"code":"DEN","name":"Denver International","city":"Denver","country":"US","lat":39.8561,"lon":-104.6737},{"code":"BKK","name":"Suvarnabhumi Airport","city":"Bangkok","country":"TH","lat":13.69,"lon":100.7501},{"code":"JFK","name":"John F. Kennedy International","city":"New York","country":"US","lat":40.6413,"lon":-73.7781},{"code":"HKG","name":"Hong Kong International","city":"Hong Kong","country":"HK","lat":22.308,"lon":113.9185},{"code":"KUL","name":"Kuala Lumpur International","city":"Kuala Lumpur","country":"MY","lat":2.7456,"lon":101.7099},{"code":"MAD","name":"Adolfo Suárez Madrid–Barajas","city":"Madrid","country":"ES","lat":40.4983,"lon":-3.5676},{"code":"SFO","name":"San Francisco International","city":"San Francisco","country":"US","lat":37.6213,"lon":-122.379},{"code":"MIA","name":"Miami International","city":"Miami","country":"US","lat":25.7959,"lon":-80.287},{"code":"SYD","name":"Sydney Kingsford Smith","city":"Sydney","country":"AU","lat":-33.9399,"lon":151.1753},{"code":"MUC","name":"Munich Airport","city":"Munich","country":"DE","lat":48.3537,"lon":11.775},{"code":"BCN","name":"Barcelona–El Prat","city":"Barcelona","country":"ES","lat":41.2974,"lon":2.0833},{"code":"YYZ","name":"Toronto Pearson International","city":"Toronto","country":"CA","lat":43.6777,"lon":-79.6248},{"code":"MEX","name":"Mexico City International","city":"Mexico City","country":"MX","lat":19.4361,"lon":-99.0719},{"code":"NRT","name":"Narita International","city":"Tokyo","country":"JP","lat":35.772,"lon":140.3929}]}')},function(t){t.exports=JSON.parse('{"events":[{"id":1,"title":"Tech Conference 2024","type":"conference","start":"2024-03-15T09:00:00Z","end":"2024-03-17T18:00:00Z","location":"San Francisco, CA","attendees":500,"virtual":false,"price":299},{"id":2,"title":"JavaScript Workshop","type":"workshop","start":"2024-02-20T14:00:00Z","end":"2024-02-20T17:00:00Z","location":"Online","attendees":150,"virtual":true,"price":49},{"id":3,"title":"Startup Pitch Night","type":"meetup","start":"2024-02-10T18:30:00Z","end":"2024-02-10T21:00:00Z","location":"New York, NY","attendees":75,"virtual":false,"price":0},{"id":4,"title":"AI & Machine Learning Summit","type":"conference","start":"2024-04-22T09:00:00Z","end":"2024-04-24T17:00:00Z","location":"Austin, TX","attendees":800,"virtual":false,"price":449},{"id":5,"title":"React Advanced Course","type":"course","start":"2024-02-05T10:00:00Z","end":"2024-02-26T12:00:00Z","location":"Online","attendees":200,"virtual":true,"price":199},{"id":6,"title":"Product Design Sprint","type":"workshop","start":"2024-03-01T09:00:00Z","end":"2024-03-05T17:00:00Z","location":"Seattle, WA","attendees":30,"virtual":false,"price":599},{"id":7,"title":"Monthly Developer Meetup","type":"meetup","start":"2024-01-25T19:00:00Z","end":"2024-01-25T21:00:00Z","location":"Chicago, IL","attendees":45,"virtual":false,"price":0},{"id":8,"title":"Cloud Architecture Webinar","type":"webinar","start":"2024-02-15T11:00:00Z","end":"2024-02-15T12:30:00Z","location":"Online","attendees":350,"virtual":true,"price":0},{"id":9,"title":"DevOps Bootcamp","type":"course","start":"2024-03-10T09:00:00Z","end":"2024-03-14T17:00:00Z","location":"Denver, CO","attendees":40,"virtual":false,"price":1299},{"id":10,"title":"Women in Tech Networking","type":"meetup","start":"2024-02-28T18:00:00Z","end":"2024-02-28T20:30:00Z","location":"Boston, MA","attendees":60,"virtual":false,"price":15}]}')},function(t){t.exports=JSON.parse('{"pokemon":[{"id":"001","name":"Bulbasaur","classification":"Seed Pokémon","types":["Grass","Poison"],"resistant":["Water","Electric","Grass","Fighting","Fairy"],"weaknesses":["Fire","Ice","Flying","Psychic"],"weight":{"minimum":"6.04kg","maximum":"7.76kg"},"height":{"minimum":"0.61m","maximum":"0.79m"},"fleeRate":0.1,"evolutionRequirements":{"amount":25,"name":"Bulbasaur candies"},"evolutions":[{"id":2,"name":"Ivysaur"},{"id":3,"name":"Venusaur"}],"maxCP":951,"maxHP":1071,"attacks":{"fast":[{"name":"Tackle","type":"Normal","damage":12},{"name":"Vine Whip","type":"Grass","damage":7}],"special":[{"name":"Power Whip","type":"Grass","damage":70},{"name":"Seed Bomb","type":"Grass","damage":40},{"name":"Sludge Bomb","type":"Poison","damage":55}]}},{"id":"002","name":"Ivysaur","classification":"Seed Pokémon","types":["Grass","Poison"],"resistant":["Water","Electric","Grass","Fighting","Fairy"],"weaknesses":["Fire","Ice","Flying","Psychic"],"weight":{"minimum":"11.38kg","maximum":"14.63kg"},"height":{"minimum":"0.88m","maximum":"1.13m"},"fleeRate":0.07,"Previous evolution(s)":[{"id":1,"name":"Bulbasaur"}],"evolutionRequirements":{"amount":100,"name":"Bulbasaur candies"},"evolutions":[{"id":3,"name":"Venusaur"}],"maxCP":1483,"maxHP":1632,"attacks":{"fast":[{"name":"Razor Leaf","type":"Grass","damage":15},{"name":"Vine Whip","type":"Grass","damage":7}],"special":[{"name":"Power Whip","type":"Grass","damage":70},{"name":"Sludge Bomb","type":"Poison","damage":55},{"name":"Solar Beam","type":"Grass","damage":120}]}},{"id":"003","name":"Venusaur","classification":"Seed Pokémon","types":["Grass","Poison"],"resistant":["Water","Electric","Grass","Fighting","Fairy"],"weaknesses":["Fire","Ice","Flying","Psychic"],"weight":{"minimum":"87.5kg","maximum":"112.5kg"},"height":{"minimum":"1.75m","maximum":"2.25m"},"fleeRate":0.05,"Previous evolution(s)":[{"id":1,"name":"Bulbasaur"},{"id":2,"name":"Ivysaur"}],"maxCP":2392,"maxHP":2580,"attacks":{"fast":[{"name":"Razor Leaf","type":"Grass","damage":15},{"name":"Vine Whip","type":"Grass","damage":7}],"special":[{"name":"Petal Blizzard","type":"Grass","damage":65},{"name":"Sludge Bomb","type":"Poison","damage":55},{"name":"Solar Beam","type":"Grass","damage":120}]}},{"id":"004","name":"Charmander","classification":"Lizard Pokémon","types":["Fire"],"resistant":["Fire","Grass","Ice","Bug","Steel","Fairy"],"weaknesses":["Water","Ground","Rock"],"weight":{"minimum":"7.44kg","maximum":"9.56kg"},"height":{"minimum":"0.53m","maximum":"0.68m"},"fleeRate":0.1,"evolutionRequirements":{"amount":25,"name":"Charmander candies"},"evolutions":[{"id":5,"name":"Charmeleon"},{"id":6,"name":"Charizard"}],"maxCP":841,"maxHP":955,"attacks":{"fast":[{"name":"Ember","type":"Fire","damage":10},{"name":"Scratch","type":"Normal","damage":6}],"special":[{"name":"Flame Burst","type":"Fire","damage":30},{"name":"Flame Charge","type":"Fire","damage":25},{"name":"Flamethrower","type":"Fire","damage":55}]}},{"id":"005","name":"Charmeleon","classification":"Flame Pokémon","types":["Fire"],"resistant":["Fire","Grass","Ice","Bug","Steel","Fairy"],"weaknesses":["Water","Ground","Rock"],"weight":{"minimum":"16.63kg","maximum":"21.38kg"},"height":{"minimum":"0.96m","maximum":"1.24m"},"fleeRate":0.07,"Previous evolution(s)":[{"id":4,"name":"Charmander"}],"evolutionRequirements":{"amount":100,"name":"Charmander candies"},"evolutions":[{"id":6,"name":"Charizard"}],"maxCP":1411,"maxHP":1557,"attacks":{"fast":[{"name":"Ember","type":"Fire","damage":10},{"name":"Scratch","type":"Normal","damage":6}],"special":[{"name":"Fire Punch","type":"Fire","damage":40},{"name":"Flame Burst","type":"Fire","damage":30},{"name":"Flamethrower","type":"Fire","damage":55}]}},{"id":"006","name":"Charizard","classification":"Flame Pokémon","types":["Fire","Flying"],"resistant":["Fire","Grass","Fighting","Bug","Steel","Fairy"],"weaknesses":["Water","Electric","Rock"],"weight":{"minimum":"79.19kg","maximum":"101.81kg"},"height":{"minimum":"1.49m","maximum":"1.91m"},"fleeRate":0.05,"Previous evolution(s)":[{"id":4,"name":"Charmander"},{"id":5,"name":"Charmeleon"}],"maxCP":2413,"maxHP":2602,"attacks":{"fast":[{"name":"Ember","type":"Fire","damage":10},{"name":"Wing Attack","type":"Flying","damage":9}],"special":[{"name":"Dragon Claw","type":"Dragon","damage":35},{"name":"Fire Blast","type":"Fire","damage":100},{"name":"Flamethrower","type":"Fire","damage":55}]}},{"id":"007","name":"Squirtle","classification":"Tiny Turtle Pokémon","types":["Water"],"resistant":["Fire","Water","Ice","Steel"],"weaknesses":["Electric","Grass"],"weight":{"minimum":"7.88kg","maximum":"10.13kg"},"height":{"minimum":"0.44m","maximum":"0.56m"},"fleeRate":0.1,"evolutionRequirements":{"amount":25,"name":"Squirtle candies"},"evolutions":[{"id":8,"name":"Wartortle"},{"id":9,"name":"Blastoise"}],"maxCP":891,"maxHP":1008,"attacks":{"fast":[{"name":"Bubble","type":"Water","damage":25},{"name":"Tackle","type":"Normal","damage":12}],"special":[{"name":"Aqua Jet","type":"Water","damage":25},{"name":"Aqua Tail","type":"Water","damage":45},{"name":"Water Pulse","type":"Water","damage":35}]}},{"id":"008","name":"Wartortle","classification":"Turtle Pokémon","types":["Water"],"resistant":["Fire","Water","Ice","Steel"],"weaknesses":["Electric","Grass"],"weight":{"minimum":"19.69kg","maximum":"25.31kg"},"height":{"minimum":"0.88m","maximum":"1.13m"},"fleeRate":0.07,"Previous evolution(s)":[{"id":7,"name":"Squirtle"}],"evolutionRequirements":{"amount":100,"name":"Squirtle candies"},"evolutions":[{"id":9,"name":"Blastoise"}],"maxCP":1435,"maxHP":1582,"attacks":{"fast":[{"name":"Bite","type":"Dark","damage":6},{"name":"Water Gun","type":"Water","damage":6}],"special":[{"name":"Aqua Jet","type":"Water","damage":25},{"name":"Gunk Shot","type":"Poison","damage":65},{"name":"Hydro Pump","type":"Water","damage":90},{"name":"Ice Beam","type":"Ice","damage":65}]}},{"id":"009","name":"Blastoise","classification":"Shellfish Pokémon","types":["Water"],"resistant":["Fire","Water","Ice","Steel"],"weaknesses":["Electric","Grass"],"weight":{"minimum":"74.81kg","maximum":"96.19kg"},"height":{"minimum":"1.4m","maximum":"1.8m"},"fleeRate":0.05,"Previous evolution(s)":[{"id":7,"name":"Squirtle"},{"id":8,"name":"Wartortle"}],"maxCP":2355,"maxHP":2542,"attacks":{"fast":[{"name":"Bite","type":"Dark","damage":6},{"name":"Water Gun","type":"Water","damage":6}],"special":[{"name":"Flash Cannon","type":"Steel","damage":60},{"name":"Gunk Shot","type":"Poison","damage":65},{"name":"Hydro Pump","type":"Water","damage":90},{"name":"Ice Beam","type":"Ice","damage":65}]}},{"id":"010","name":"Caterpie","classification":"Worm Pokémon","types":["Bug"],"resistant":["Grass","Fighting","Ground"],"weaknesses":["Fire","Flying","Rock"],"weight":{"minimum":"2.54kg","maximum":"3.26kg"},"height":{"minimum":"0.26m","maximum":"0.34m"},"fleeRate":0.2,"evolutionRequirements":{"amount":12,"name":"Caterpie candies"},"evolutions":[{"id":11,"name":"Metapod"},{"id":12,"name":"Butterfree"}],"maxCP":367,"maxHP":443,"attacks":{"fast":[{"name":"Bug Bite","type":"Bug","damage":5},{"name":"Tackle","type":"Normal","damage":12}],"special":[{"name":"Struggle","type":"Normal","damage":15}]}},{"id":"011","name":"Metapod","classification":"Cocoon Pokémon","types":["Bug"],"resistant":["Grass","Fighting","Ground"],"weaknesses":["Fire","Flying","Rock"],"weight":{"minimum":"8.66kg","maximum":"11.14kg"},"height":{"minimum":"0.61m","maximum":"0.79m"},"fleeRate":0.09,"Previous evolution(s)":[{"id":10,"name":"Caterpie"}],"evolutionRequirements":{"amount":50,"name":"Caterpie candies"},"evolutions":[{"id":12,"name":"Butterfree"}],"maxCP":397,"maxHP":477,"attacks":{"fast":[{"name":"Bug Bite","type":"Bug","damage":5},{"name":"Tackle","type":"Normal","damage":12}],"special":[{"name":"Struggle","type":"Normal","damage":15}]}},{"id":"012","name":"Butterfree","classification":"Butterfly Pokémon","types":["Bug","Flying"],"resistant":["Grass","Fighting","Ground","Bug"],"weaknesses":["Fire","Electric","Ice","Flying","Rock"],"weight":{"minimum":"28kg","maximum":"36kg"},"height":{"minimum":"0.96m","maximum":"1.24m"},"fleeRate":0.06,"Previous evolution(s)":[{"id":10,"name":"Caterpie"},{"id":11,"name":"Metapod"}],"maxCP":1315,"maxHP":1454,"attacks":{"fast":[{"name":"Bug Bite","type":"Bug","damage":5},{"name":"Confusion","type":"Psychic","damage":15}],"special":[{"name":"Bug Buzz","type":"Bug","damage":75},{"name":"Psychic","type":"Psychic","damage":55},{"name":"Signal Beam","type":"Bug","damage":45}]}},{"id":"013","name":"Weedle","classification":"Hairy Pokémon","types":["Bug","Poison"],"resistant":["Grass","Fighting","Poison","Bug","Fairy"],"weaknesses":["Fire","Flying","Psychic","Rock"],"weight":{"minimum":"2.8kg","maximum":"3.6kg"},"height":{"minimum":"0.26m","maximum":"0.34m"},"fleeRate":0.2,"evolutionRequirements":{"amount":12,"name":"Weedle candies"},"evolutions":[{"id":14,"name":"Kakuna"},{"id":15,"name":"Beedrill"}],"maxCP":372,"maxHP":449,"attacks":{"fast":[{"name":"Bug Bite","type":"Bug","damage":5},{"name":"Poison Sting","type":"Poison","damage":6}],"special":[{"name":"Struggle","type":"Normal","damage":15}]}},{"id":"014","name":"Kakuna","classification":"Cocoon Pokémon","types":["Bug","Poison"],"resistant":["Grass","Fighting","Poison","Bug","Fairy"],"weaknesses":["Fire","Flying","Psychic","Rock"],"weight":{"minimum":"8.75kg","maximum":"11.25kg"},"height":{"minimum":"0.53m","maximum":"0.68m"},"fleeRate":0.09,"Previous evolution(s)":[{"id":13,"name":"Weedle"}],"evolutionRequirements":{"amount":50,"name":"Weedle candies"},"evolutions":[{"id":15,"name":"Beedrill"}],"maxCP":405,"maxHP":485,"attacks":{"fast":[{"name":"Bug Bite","type":"Bug","damage":5},{"name":"Poison Sting","type":"Poison","damage":6}],"special":[{"name":"Struggle","type":"Normal","damage":15}]}},{"id":"015","name":"Beedrill","classification":"Poison Bee Pokémon","types":["Bug","Poison"],"resistant":["Grass","Fighting","Poison","Bug","Fairy"],"weaknesses":["Fire","Flying","Psychic","Rock"],"weight":{"minimum":"25.81kg","maximum":"33.19kg"},"height":{"minimum":"0.88m","maximum":"1.13m"},"fleeRate":0.06,"Previous evolution(s)":[{"id":13,"name":"Weedle"},{"id":14,"name":"Kakuna"}],"maxCP":1301,"maxHP":1439,"attacks":{"fast":[{"name":"Bug Bite","type":"Bug","damage":5},{"name":"Poison Jab","type":"Poison","damage":12}],"special":[{"name":"Aerial Ace","type":"Flying","damage":30},{"name":"Sludge Bomb","type":"Poison","damage":55},{"name":"X Scissor","type":"Bug","damage":35}]}},{"id":"016","name":"Pidgey","classification":"Tiny Bird Pokémon","types":["Normal","Flying"],"resistant":["Grass","Ground","Bug","Ghost"],"weaknesses":["Electric","Ice","Rock"],"weight":{"minimum":"1.57kg","maximum":"2.02kg"},"height":{"minimum":"0.26m","maximum":"0.34m"},"fleeRate":0.2,"evolutionRequirements":{"amount":12,"name":"Pidgey candies"},"evolutions":[{"id":17,"name":"Pidgeotto"},{"id":18,"name":"Pidgeot"}],"maxCP":585,"maxHP":679,"attacks":{"fast":[{"name":"Quick Attack","type":"Normal","damage":10},{"name":"Tackle","type":"Normal","damage":12}],"special":[{"name":"Aerial Ace","type":"Flying","damage":30},{"name":"Air Cutter","type":"Flying","damage":30},{"name":"Twister","type":"Dragon","damage":25}]}},{"id":"017","name":"Pidgeotto","classification":"Bird Pokémon","types":["Normal","Flying"],"resistant":["Grass","Ground","Bug","Ghost"],"weaknesses":["Electric","Ice","Rock"],"weight":{"minimum":"26.25kg","maximum":"33.75kg"},"height":{"minimum":"0.96m","maximum":"1.24m"},"fleeRate":0.09,"Previous evolution(s)":[{"id":16,"name":"Pidgey"}],"evolutionRequirements":{"amount":50,"name":"Pidgey candies"},"evolutions":[{"id":18,"name":"Pidgeot"}],"maxCP":1096,"maxHP":1223,"attacks":{"fast":[{"name":"Steel Wing","type":"Steel","damage":15},{"name":"Wing Attack","type":"Flying","damage":9}],"special":[{"name":"Aerial Ace","type":"Flying","damage":30},{"name":"Air Cutter","type":"Flying","damage":30},{"name":"Twister","type":"Dragon","damage":25}]}},{"id":"018","name":"Pidgeot","classification":"Bird Pokémon","types":["Normal","Flying"],"resistant":["Grass","Ground","Bug","Ghost"],"weaknesses":["Electric","Ice","Rock"],"weight":{"minimum":"34.56kg","maximum":"44.44kg"},"height":{"minimum":"1.31m","maximum":"1.69m"},"fleeRate":0.06,"Previous evolution(s)":[{"id":16,"name":"Pidgey"},{"id":17,"name":"Pidgeotto"}],"maxCP":1923,"maxHP":2091,"attacks":{"fast":[{"name":"Steel Wing","type":"Steel","damage":15},{"name":"Wing Attack","type":"Flying","damage":9}],"special":[{"name":"Aerial Ace","type":"Flying","damage":30},{"name":"Air Cutter","type":"Flying","damage":30},{"name":"Hurricane","type":"Flying","damage":80}]}},{"id":"019","name":"Rattata","classification":"Mouse Pokémon","types":["Normal"],"resistant":["Ghost"],"weaknesses":["Fighting"],"weight":{"minimum":"3.06kg","maximum":"3.94kg"},"height":{"minimum":"0.26m","maximum":"0.34m"},"fleeRate":0.2,"evolutionRequirements":{"amount":25,"name":"Rattata candies"},"evolutions":[{"id":20,"name":"Raticate"}],"maxCP":493,"maxHP":581,"attacks":{"fast":[{"name":"Quick Attack","type":"Normal","damage":10},{"name":"Tackle","type":"Normal","damage":12}],"special":[{"name":"Body Slam","type":"Normal","damage":40},{"name":"Dig","type":"Ground","damage":70},{"name":"Hyper Fang","type":"Normal","damage":35}]}},{"id":"020","name":"Raticate","classification":"Mouse Pokémon","types":["Normal"],"resistant":["Ghost"],"weaknesses":["Fighting"],"weight":{"minimum":"16.19kg","maximum":"20.81kg"},"height":{"minimum":"0.61m","maximum":"0.79m"},"fleeRate":0.07,"Previous evolution(s)":[{"id":19,"name":"Rattata"}],"maxCP":1304,"maxHP":1444,"attacks":{"fast":[{"name":"Bite","type":"Dark","damage":6},{"name":"Quick Attack","type":"Normal","damage":10}],"special":[{"name":"Dig","type":"Ground","damage":70},{"name":"Hyper Beam","type":"Normal","damage":120},{"name":"Hyper Fang","type":"Normal","damage":35}]}},{"id":"021","name":"Spearow","classification":"Tiny Bird Pokémon","types":["Normal","Flying"],"resistant":["Grass","Ground","Bug","Ghost"],"weaknesses":["Electric","Ice","Rock"],"weight":{"minimum":"1.75kg","maximum":"2.25kg"},"height":{"minimum":"0.26m","maximum":"0.34m"},"fleeRate":0.15,"evolutionRequirements":{"amount":50,"name":"Spearow candies"},"evolutions":[{"id":22,"name":"Fearow"}],"maxCP":591,"maxHP":686,"attacks":{"fast":[{"name":"Peck","type":"Flying","damage":10},{"name":"Quick Attack","type":"Normal","damage":10}],"special":[{"name":"Aerial Ace","type":"Flying","damage":30},{"name":"Drill Peck","type":"Flying","damage":40},{"name":"Twister","type":"Dragon","damage":25}]}},{"id":"022","name":"Fearow","classification":"Beak Pokémon","types":["Normal","Flying"],"resistant":["Grass","Ground","Bug","Ghost"],"weaknesses":["Electric","Ice","Rock"],"weight":{"minimum":"33.25kg","maximum":"42.75kg"},"height":{"minimum":"1.05m","maximum":"1.35m"},"fleeRate":0.07,"Previous evolution(s)":[{"id":21,"name":"Spearow"}],"maxCP":1592,"maxHP":1746,"attacks":{"fast":[{"name":"Peck","type":"Flying","damage":10},{"name":"Steel Wing","type":"Steel","damage":15}],"special":[{"name":"Aerial Ace","type":"Flying","damage":30},{"name":"Drill Run","type":"Ground","damage":50},{"name":"Twister","type":"Dragon","damage":25}]}},{"id":"023","name":"Ekans","classification":"Snake Pokémon","types":["Poison"],"resistant":["Grass","Fighting","Poison","Bug","Fairy"],"weaknesses":["Ground","Psychic"],"weight":{"minimum":"6.04kg","maximum":"7.76kg"},"height":{"minimum":"1.75m","maximum":"2.25m"},"fleeRate":0.15,"evolutionRequirements":{"amount":50,"name":"Ekans candies"},"evolutions":[{"id":24,"name":"Arbok"}],"maxCP":718,"maxHP":824,"attacks":{"fast":[{"name":"Acid","type":"Poison","damage":10},{"name":"Poison Sting","type":"Poison","damage":6}],"special":[{"name":"Gunk Shot","type":"Poison","damage":65},{"name":"Sludge Bomb","type":"Poison","damage":55},{"name":"Wrap","type":"Normal","damage":25}]}},{"id":"024","name":"Arbok","classification":"Cobra Pokémon","types":["Poison"],"resistant":["Grass","Fighting","Poison","Bug","Fairy"],"weaknesses":["Ground","Psychic"],"weight":{"minimum":"56.88kg","maximum":"73.13kg"},"height":{"minimum":"3.06m","maximum":"3.94m"},"fleeRate":0.07,"Previous evolution(s)":[{"id":23,"name":"Ekans"}],"maxCP":1611,"maxHP":1767,"attacks":{"fast":[{"name":"Acid","type":"Poison","damage":10},{"name":"Bite","type":"Dark","damage":6}],"special":[{"name":"Dark Pulse","type":"Dark","damage":45},{"name":"Gunk Shot","type":"Poison","damage":65},{"name":"Sludge Wave","type":"Poison","damage":70}]}},{"id":"025","name":"Pikachu","classification":"Mouse Pokémon","types":["Electric"],"resistant":["Electric","Flying","Steel"],"weaknesses":["Ground"],"weight":{"minimum":"5.25kg","maximum":"6.75kg"},"height":{"minimum":"0.35m","maximum":"0.45m"},"fleeRate":0.1,"evolutionRequirements":{"amount":50,"name":"Pikachu candies"},"evolutions":[{"id":26,"name":"Raichu"}],"maxCP":777,"maxHP":887,"attacks":{"fast":[{"name":"Quick Attack","type":"Normal","damage":10},{"name":"Thunder Shock","type":"Electric","damage":5}],"special":[{"name":"Discharge","type":"Electric","damage":35},{"name":"Thunder","type":"Electric","damage":100},{"name":"Thunderbolt","type":"Electric","damage":55}]}},{"id":"026","name":"Raichu","classification":"Mouse Pokémon","types":["Electric"],"resistant":["Electric","Flying","Steel"],"weaknesses":["Ground"],"weight":{"minimum":"26.25kg","maximum":"33.75kg"},"height":{"minimum":"0.7m","maximum":"0.9m"},"fleeRate":0.06,"Previous evolution(s)":[{"id":25,"name":"Pikachu"}],"maxCP":1859,"maxHP":2028,"attacks":{"fast":[{"name":"Spark","type":"Electric","damage":7},{"name":"Thunder Shock","type":"Electric","damage":5}],"special":[{"name":"Brick Break","type":"Fighting","damage":30},{"name":"Thunder","type":"Electric","damage":100},{"name":"Thunder Punch","type":"Electric","damage":40}]}},{"id":"027","name":"Sandshrew","classification":"Mouse Pokémon","types":["Ground"],"resistant":["Electric","Poison","Rock"],"weaknesses":["Water","Grass","Ice"],"weight":{"minimum":"10.5kg","maximum":"13.5kg"},"height":{"minimum":"0.53m","maximum":"0.68m"},"fleeRate":0.1,"evolutionRequirements":{"amount":50,"name":"Sandshrew candies"},"evolutions":[{"id":28,"name":"Sandslash"}],"maxCP":695,"maxHP":798,"attacks":{"fast":[{"name":"Mud Shot","type":"Ground","damage":6},{"name":"Scratch","type":"Normal","damage":6}],"special":[{"name":"Dig","type":"Ground","damage":70},{"name":"Rock Slide","type":"Rock","damage":50},{"name":"Rock Tomb","type":"Rock","damage":30}]}},{"id":"028","name":"Sandslash","classification":"Mouse Pokémon","types":["Ground"],"resistant":["Electric","Poison","Rock"],"weaknesses":["Water","Grass","Ice"],"weight":{"minimum":"25.81kg","maximum":"33.19kg"},"height":{"minimum":"0.88m","maximum":"1.13m"},"fleeRate":0.06,"Previous evolution(s)":[{"id":27,"name":"Sandshrew"}],"maxCP":1654,"maxHP":1810,"attacks":{"fast":[{"name":"Metal Claw","type":"Steel","damage":8},{"name":"Mud Shot","type":"Ground","damage":6}],"special":[{"name":"Bulldoze","type":"Ground","damage":35},{"name":"Earthquake","type":"Ground","damage":100},{"name":"Rock Tomb","type":"Rock","damage":30}]}},{"id":"029","name":"Nidoran-F","classification":"Poison Pin Pokémon","types":["Poison"],"resistant":["Grass","Fighting","Poison","Bug","Fairy"],"weaknesses":["Ground","Psychic"],"weight":{"minimum":"6.13kg","maximum":"7.88kg"},"height":{"minimum":"0.35m","maximum":"0.45m"},"fleeRate":0.15,"evolutionRequirements":{"amount":25,"name":"Nidoran♀ candies"},"evolutions":[{"id":30,"name":"Nidorina"},{"id":31,"name":"Nidoqueen"}],"maxCP":768,"maxHP":876,"attacks":{"fast":[{"name":"Bite","type":"Dark","damage":6},{"name":"Poison Sting","type":"Poison","damage":6}],"special":[{"name":"Body Slam","type":"Normal","damage":40},{"name":"Poison Fang","type":"Poison","damage":25},{"name":"Sludge Bomb","type":"Poison","damage":55}]}},{"id":"030","name":"Nidorina","classification":"Poison Pin Pokémon","types":["Poison"],"resistant":["Grass","Fighting","Poison","Bug","Fairy"],"weaknesses":["Ground","Psychic"],"weight":{"minimum":"17.5kg","maximum":"22.5kg"},"height":{"minimum":"0.7m","maximum":"0.9m"},"fleeRate":0.07,"Previous evolution(s)":[{"id":29,"name":"Nidoran-F"}],"evolutionRequirements":{"amount":100,"name":"Nidoran♀ candies"},"evolutions":[{"id":31,"name":"Nidoqueen"}],"maxCP":1267,"maxHP":1404,"attacks":{"fast":[{"name":"Bite","type":"Dark","damage":6},{"name":"Poison Sting","type":"Poison","damage":6}],"special":[{"name":"Dig","type":"Ground","damage":70},{"name":"Poison Fang","type":"Poison","damage":25},{"name":"Sludge Bomb","type":"Poison","damage":55}]}},{"id":"031","name":"Nidoqueen","classification":"Drill Pokémon","types":["Poison","Ground"],"resistant":["Electric","Fighting","Poison","Bug","Rock","Fairy"],"weaknesses":["Water","Ice","Ground","Psychic"],"weight":{"minimum":"52.5kg","maximum":"67.5kg"},"height":{"minimum":"1.14m","maximum":"1.46m"},"fleeRate":0.05,"Previous evolution(s)":[{"id":29,"name":"Nidoran-F"},{"id":30,"name":"Nidorina"}],"maxCP":2301,"maxHP":2485,"attacks":{"fast":[{"name":"Bite","type":"Dark","damage":6},{"name":"Poison Jab","type":"Poison","damage":12}],"special":[{"name":"Earthquake","type":"Ground","damage":100},{"name":"Sludge Wave","type":"Poison","damage":70},{"name":"Stone Edge","type":"Rock","damage":80}]}},{"id":"032","name":"Nidoran-M","classification":"Poison Pin Pokémon","types":["Poison"],"resistant":["Grass","Fighting","Poison","Bug","Fairy"],"weaknesses":["Ground","Psychic"],"weight":{"minimum":"7.88kg","maximum":"10.13kg"},"height":{"minimum":"0.44m","maximum":"0.56m"},"fleeRate":0.15,"evolutionRequirements":{"amount":25,"name":"Nidoran-M candies"},"evolutions":[{"id":33,"name":"Nidorino"},{"id":34,"name":"Nidoking"}],"maxCP":737,"maxHP":843,"attacks":{"fast":[{"name":"Peck","type":"Flying","damage":10},{"name":"Poison Sting","type":"Poison","damage":6}],"special":[{"name":"Body Slam","type":"Normal","damage":40},{"name":"Horn Attack","type":"Normal","damage":25},{"name":"Sludge Bomb","type":"Poison","damage":55}]}},{"id":"033","name":"Nidorino","classification":"Poison Pin Pokémon","types":["Poison"],"resistant":["Grass","Fighting","Poison","Bug","Fairy"],"weaknesses":["Ground","Psychic"],"weight":{"minimum":"17.06kg","maximum":"21.94kg"},"height":{"minimum":"0.79m","maximum":"1.01m"},"fleeRate":0.07,"Previous evolution(s)":[{"id":32,"name":"Nidoran-M"}],"evolutionRequirements":{"amount":100,"name":"Nidoran-M candies"},"evolutions":[{"id":34,"name":"Nidoking"}],"maxCP":1236,"maxHP":1372,"attacks":{"fast":[{"name":"Bite","type":"Dark","damage":6},{"name":"Poison Jab","type":"Poison","damage":12}],"special":[{"name":"Dig","type":"Ground","damage":70},{"name":"Horn Attack","type":"Normal","damage":25},{"name":"Sludge Bomb","type":"Poison","damage":55}]}},{"id":"034","name":"Nidoking","classification":"Drill Pokémon","types":["Poison","Ground"],"resistant":["Electric","Fighting","Poison","Bug","Rock","Fairy"],"weaknesses":["Water","Ice","Ground","Psychic"],"weight":{"minimum":"54.25kg","maximum":"69.75kg"},"height":{"minimum":"1.22m","maximum":"1.57m"},"fleeRate":0.05,"Previous evolution(s)":[{"id":32,"name":"Nidoran-M"},{"id":33,"name":"Nidorino"}],"maxCP":2291,"maxHP":2475,"attacks":{"fast":[{"name":"Fury Cutter","type":"Bug","damage":3},{"name":"Poison Jab","type":"Poison","damage":12}],"special":[{"name":"Earthquake","type":"Ground","damage":100},{"name":"Megahorn","type":"Bug","damage":80},{"name":"Sludge Wave","type":"Poison","damage":70}]}},{"id":"035","name":"Clefairy","classification":"Fairy Pokémon","types":["Fairy"],"resistant":["Fighting","Bug","Dragon","Dark"],"weaknesses":["Poison","Steel"],"weight":{"minimum":"6.56kg","maximum":"8.44kg"},"height":{"minimum":"0.53m","maximum":"0.68m"},"fleeRate":0.1,"evolutionRequirements":{"amount":50,"name":"Clefairy candies"},"evolutions":[{"id":36,"name":"Clefable"}],"maxCP":1074,"maxHP":1200,"attacks":{"fast":[{"name":"Pound","type":"Normal","damage":7},{"name":"Zen Headbutt","type":"Psychic","damage":12}],"special":[{"name":"Body Slam","type":"Normal","damage":40},{"name":"Disarming Voice","type":"Fairy","damage":25},{"name":"Moonblast","type":"Fairy","damage":85}]}},{"id":"036","name":"Clefable","classification":"Fairy Pokémon","types":["Fairy"],"resistant":["Fighting","Bug","Dragon","Dark"],"weaknesses":["Poison","Steel"],"weight":{"minimum":"35kg","maximum":"45kg"},"height":{"minimum":"1.14m","maximum":"1.46m"},"fleeRate":0.06,"Previous evolution(s)":[{"id":35,"name":"Clefairy"}],"maxCP":2217,"maxHP":2397,"attacks":{"fast":[{"name":"Pound","type":"Normal","damage":7},{"name":"Zen Headbutt","type":"Psychic","damage":12}],"special":[{"name":"Dazzling Gleam","type":"Fairy","damage":55},{"name":"Moonblast","type":"Fairy","damage":85},{"name":"Psychic","type":"Psychic","damage":55}]}},{"id":"037","name":"Vulpix","classification":"Fox Pokémon","types":["Fire"],"resistant":["Fire","Grass","Ice","Bug","Steel","Fairy"],"weaknesses":["Water","Ground","Rock"],"weight":{"minimum":"8.66kg","maximum":"11.14kg"},"height":{"minimum":"0.53m","maximum":"0.68m"},"fleeRate":0.1,"evolutionRequirements":{"amount":50,"name":"Vulpi"},"evolutions":[{"id":38,"name":"Ninetales"}],"maxCP":725,"maxHP":831,"attacks":{"fast":[{"name":"Ember","type":"Fire","damage":10},{"name":"Quick Attack","type":"Normal","damage":10}],"special":[{"name":"Body Slam","type":"Normal","damage":40},{"name":"Flame Charge","type":"Fire","damage":25},{"name":"Flamethrower","type":"Fire","damage":55}]}},{"id":"038","name":"Ninetales","classification":"Fox Pokémon","types":["Fire"],"resistant":["Fire","Grass","Ice","Bug","Steel","Fairy"],"weaknesses":["Water","Ground","Rock"],"weight":{"minimum":"17.41kg","maximum":"22.39kg"},"height":{"minimum":"0.96m","maximum":"1.24m"},"fleeRate":0.06,"Previous evolution(s)":[{"id":37,"name":"Vulpix"}],"maxCP":2015,"maxHP":2188,"attacks":{"fast":[{"name":"Ember","type":"Fire","damage":10},{"name":"Quick Attack","type":"Normal","damage":10}],"special":[{"name":"Fire Blast","type":"Fire","damage":100},{"name":"Flamethrower","type":"Fire","damage":55},{"name":"Heat Wave","type":"Fire","damage":80}]}},{"id":"039","name":"Jigglypuff","classification":"Balloon Pokémon","types":["Normal","Fairy"],"resistant":["Bug","Ghost","Dragon","Dark"],"weaknesses":["Poison","Steel"],"weight":{"minimum":"4.81kg","maximum":"6.19kg"},"height":{"minimum":"0.44m","maximum":"0.56m"},"fleeRate":0.1,"evolutionRequirements":{"amount":50,"name":"Jigglypuff candies"},"evolutions":[{"id":40,"name":"Wigglytuff"}],"maxCP":796,"maxHP":917,"attacks":{"fast":[{"name":"Feint Attack","type":"Dark","damage":12},{"name":"Pound","type":"Normal","damage":7}],"special":[{"name":"Body Slam","type":"Normal","damage":40},{"name":"Disarming Voice","type":"Fairy","damage":25},{"name":"Play Rough","type":"Fairy","damage":55}]}},{"id":"040","name":"Wigglytuff","classification":"Balloon Pokémon","types":["Normal","Fairy"],"resistant":["Bug","Ghost","Dragon","Dark"],"weaknesses":["Poison","Steel"],"weight":{"minimum":"10.5kg","maximum":"13.5kg"},"height":{"minimum":"0.88m","maximum":"1.13m"},"fleeRate":0.06,"Previous evolution(s)":[{"id":40,"name":"Wigglytuff"}],"maxCP":1997,"maxHP":2177,"attacks":{"fast":[{"name":"Feint Attack","type":"Dark","damage":12},{"name":"Pound","type":"Normal","damage":7}],"special":[{"name":"Dazzling Gleam","type":"Fairy","damage":55},{"name":"Hyper Beam","type":"Normal","damage":120},{"name":"Play Rough","type":"Fairy","damage":55}]}},{"id":"041","name":"Zubat","classification":"Bat Pokémon","types":["Poison","Flying"],"resistant":["Grass","Fighting","Poison","Bug","Fairy"],"weaknesses":["Electric","Ice","Psychic","Rock"],"weight":{"minimum":"6.56kg","maximum":"8.44kg"},"height":{"minimum":"0.7m","maximum":"0.9m"},"fleeRate":0.2,"evolutionRequirements":{"amount":50,"name":"Zubat candies"},"evolutions":[{"id":42,"name":"Golbat"}],"maxCP":550,"maxHP":642,"attacks":{"fast":[{"name":"Bite","type":"Dark","damage":6},{"name":"Quick Attack","type":"Normal","damage":10}],"special":[{"name":"Air Cutter","type":"Flying","damage":30},{"name":"Poison Fang","type":"Poison","damage":25},{"name":"Sludge Bomb","type":"Poison","damage":55}]}},{"id":"042","name":"Golbat","classification":"Bat Pokémon","types":["Poison","Flying"],"resistant":["Grass","Fighting","Poison","Bug","Fairy"],"weaknesses":["Electric","Ice","Psychic","Rock"],"weight":{"minimum":"48.13kg","maximum":"61.88kg"},"height":{"minimum":"1.4m","maximum":"1.8m"},"fleeRate":0.07,"Previous evolution(s)":[{"id":41,"name":"Zubat"}],"maxCP":1760,"maxHP":1921,"attacks":{"fast":[{"name":"Bite","type":"Dark","damage":6},{"name":"Wing Attack","type":"Flying","damage":9}],"special":[{"name":"Air Cutter","type":"Flying","damage":30},{"name":"Ominous Wind","type":"Ghost","damage":30},{"name":"Poison Fang","type":"Poison","damage":25}]}},{"id":"043","name":"Oddish","classification":"Weed Pokémon","types":["Grass","Poison"],"resistant":["Water","Electric","Grass","Fighting","Fairy"],"weaknesses":["Fire","Ice","Flying","Psychic"],"weight":{"minimum":"4.73kg","maximum":"6.08kg"},"height":{"minimum":"0.44m","maximum":"0.56m"},"fleeRate":0.15,"evolutionRequirements":{"amount":25,"name":"Oddish candies"},"evolutions":[{"id":44,"name":"Gloom"},{"id":45,"name":"Vileplume"}],"maxCP":1023,"maxHP":1148,"attacks":{"fast":[{"name":"Acid","type":"Poison","damage":10},{"name":"Razor Leaf","type":"Grass","damage":15}],"special":[{"name":"Moonblast","type":"Fairy","damage":85},{"name":"Seed Bomb","type":"Grass","damage":40},{"name":"Sludge Bomb","type":"Poison","damage":55}]}},{"id":"044","name":"Gloom","classification":"Weed Pokémon","types":["Grass","Poison"],"resistant":["Water","Electric","Grass","Fighting","Fairy"],"weaknesses":["Fire","Ice","Flying","Psychic"],"weight":{"minimum":"7.53kg","maximum":"9.68kg"},"height":{"minimum":"0.7m","maximum":"0.9m"},"fleeRate":0.07,"Previous evolution(s)":[{"id":43,"name":"Oddish"}],"evolutionRequirements":{"amount":100,"name":"Oddish candies"},"evolutions":[{"id":45,"name":"Vileplume"}],"maxCP":1537,"maxHP":1689,"attacks":{"fast":[{"name":"Acid","type":"Poison","damage":10},{"name":"Razor Leaf","type":"Grass","damage":15}],"special":[{"name":"Moonblast","type":"Fairy","damage":85},{"name":"Petal Blizzard","type":"Grass","damage":65},{"name":"Sludge Bomb","type":"Poison","damage":55}]}},{"id":"045","name":"Vileplume","classification":"Flower Pokémon","types":["Grass","Poison"],"resistant":["Water","Electric","Grass","Fighting","Fairy"],"weaknesses":["Fire","Ice","Flying","Psychic"],"weight":{"minimum":"16.28kg","maximum":"20.93kg"},"height":{"minimum":"1.05m","maximum":"1.35m"},"fleeRate":0.05,"Previous evolution(s)":[{"id":43,"name":"Oddish"},{"id":44,"name":"Gloom"}],"maxCP":2307,"maxHP":2492,"attacks":{"fast":[{"name":"Acid","type":"Poison","damage":10},{"name":"Razor Leaf","type":"Grass","damage":15}],"special":[{"name":"Moonblast","type":"Fairy","damage":85},{"name":"Petal Blizzard","type":"Grass","damage":65},{"name":"Solar Beam","type":"Grass","damage":120}]}},{"id":"046","name":"Paras","classification":"Mushroom Pokémon","types":["Bug","Grass"],"resistant":["Water","Electric","Grass","Fighting","Ground"],"weaknesses":["Fire","Ice","Poison","Flying","Bug","Rock"],"weight":{"minimum":"4.73kg","maximum":"6.08kg"},"height":{"minimum":"0.26m","maximum":"0.34m"},"fleeRate":0.15,"evolutionRequirements":{"amount":50,"name":"Paras candies"},"evolutions":[{"id":47,"name":"Parasect"}],"maxCP":804,"maxHP":916,"attacks":{"fast":[{"name":"Bug Bite","type":"Bug","damage":5},{"name":"Scratch","type":"Normal","damage":6}],"special":[{"name":"Cross Poison","type":"Poison","damage":25},{"name":"Seed Bomb","type":"Grass","damage":40},{"name":"X Scissor","type":"Bug","damage":35}]}},{"id":"047","name":"Parasect","classification":"Mushroom Pokémon","types":["Bug","Grass"],"resistant":["Water","Electric","Grass","Fighting","Ground"],"weaknesses":["Fire","Ice","Poison","Flying","Bug","Rock"],"weight":{"minimum":"25.81kg","maximum":"33.19kg"},"height":{"minimum":"0.88m","maximum":"1.13m"},"fleeRate":0.07,"Previous evolution(s)":[{"id":46,"name":"Paras"}],"maxCP":1592,"maxHP":1747,"attacks":{"fast":[{"name":"Bug Bite","type":"Bug","damage":5},{"name":"Fury Cutter","type":"Bug","damage":3}],"special":[{"name":"Cross Poison","type":"Poison","damage":25},{"name":"Solar Beam","type":"Grass","damage":120},{"name":"X Scissor","type":"Bug","damage":35}]}},{"id":"048","name":"Venonat","classification":"Insect Pokémon","types":["Bug","Poison"],"resistant":["Grass","Fighting","Poison","Bug","Fairy"],"weaknesses":["Fire","Flying","Psychic","Rock"],"weight":{"minimum":"26.25kg","maximum":"33.75kg"},"height":{"minimum":"0.88m","maximum":"1.13m"},"fleeRate":0.15,"evolutionRequirements":{"amount":50,"name":"Venonat candies"},"evolutions":[{"id":49,"name":"Venomoth"}],"maxCP":912,"maxHP":1029,"attacks":{"fast":[{"name":"Bug Bite","type":"Bug","damage":5},{"name":"Confusion","type":"Psychic","damage":15}],"special":[{"name":"Poison Fang","type":"Poison","damage":25},{"name":"Psybeam","type":"Psychic","damage":40},{"name":"Signal Beam","type":"Bug","damage":45}]}},{"id":"049","name":"Venomoth","classification":"Poison Moth Pokémon","types":["Bug","Poison"],"resistant":["Grass","Fighting","Poison","Bug","Fairy"],"weaknesses":["Fire","Flying","Psychic","Rock"],"weight":{"minimum":"10.94kg","maximum":"14.06kg"},"height":{"minimum":"1.31m","maximum":"1.69m"},"fleeRate":0.07,"Previous evolution(s)":[{"id":48,"name":"Venonat"}],"maxCP":1730,"maxHP":1890,"attacks":{"fast":[{"name":"Bug Bite","type":"Bug","damage":5},{"name":"Confusion","type":"Psychic","damage":15}],"special":[{"name":"Bug Buzz","type":"Bug","damage":75},{"name":"Poison Fang","type":"Poison","damage":25},{"name":"Psychic","type":"Psychic","damage":55}]}},{"id":"050","name":"Diglett","classification":"Mole Pokémon","types":["Ground"],"resistant":["Electric","Poison","Rock"],"weaknesses":["Water","Grass","Ice"],"weight":{"minimum":"0.7kg","maximum":"0.9kg"},"height":{"minimum":"0.18m","maximum":"0.23m"},"fleeRate":0.1,"evolutionRequirements":{"amount":50,"name":"Diglett candies"},"evolutions":[{"id":51,"name":"Dugtrio"}],"maxCP":365,"maxHP":456,"attacks":{"fast":[{"name":"Mud Shot","type":"Ground","damage":6},{"name":"Scratch","type":"Normal","damage":6}],"special":[{"name":"Dig","type":"Ground","damage":70},{"name":"Mud Bomb","type":"Ground","damage":30},{"name":"Rock Tomb","type":"Rock","damage":30}]}},{"id":"051","name":"Dugtrio","classification":"Mole Pokémon","types":["Ground"],"resistant":["Electric","Poison","Rock"],"weaknesses":["Water","Grass","Ice"],"weight":{"minimum":"29.14kg","maximum":"37.46kg"},"height":{"minimum":"0.61m","maximum":"0.79m"},"fleeRate":0.06,"Previous evolution(s)":[{"id":50,"name":"Diglett"}],"maxCP":1038,"maxHP":1168,"attacks":{"fast":[{"name":"Mud Shot","type":"Ground","damage":6},{"name":"Sucker Punch","type":"Dark","damage":7}],"special":[{"name":"Earthquake","type":"Ground","damage":100},{"name":"Mud Bomb","type":"Ground","damage":30},{"name":"Stone Edge","type":"Rock","damage":80}]}},{"id":"052","name":"Meowth","classification":"Scratch Cat Pokémon","types":["Normal"],"resistant":["Ghost"],"weaknesses":["Fighting"],"weight":{"minimum":"3.67kg","maximum":"4.72kg"},"height":{"minimum":"0.35m","maximum":"0.45m"},"fleeRate":0.15,"evolutionRequirements":{"amount":50,"name":"Meowth candies"},"evolutions":[{"id":53,"name":"Persian"}],"maxCP":656,"maxHP":756,"attacks":{"fast":[{"name":"Bite","type":"Dark","damage":6},{"name":"Scratch","type":"Normal","damage":6}],"special":[{"name":"Body Slam","type":"Normal","damage":40},{"name":"Dark Pulse","type":"Dark","damage":45},{"name":"Night Slash","type":"Dark","damage":30}]}},{"id":"053","name":"Persian","classification":"Classy Cat Pokémon","types":["Normal"],"resistant":["Ghost"],"weaknesses":["Fighting"],"weight":{"minimum":"28kg","maximum":"36kg"},"height":{"minimum":"0.88m","maximum":"1.13m"},"fleeRate":0.07,"Previous evolution(s)":[{"id":52,"name":"Meowth"}],"maxCP":1483,"maxHP":1631,"attacks":{"fast":[{"name":"Feint Attack","type":"Dark","damage":12},{"name":"Scratch","type":"Normal","damage":6}],"special":[{"name":"Night Slash","type":"Dark","damage":30},{"name":"Play Rough","type":"Fairy","damage":55},{"name":"Power Gem","type":"Rock","damage":40}]}},{"id":"054","name":"Psyduck","classification":"Duck Pokémon","types":["Water"],"resistant":["Fire","Water","Ice","Steel"],"weaknesses":["Electric","Grass"],"weight":{"minimum":"17.15kg","maximum":"22.05kg"},"height":{"minimum":"0.7m","maximum":"0.9m"},"fleeRate":0.1,"evolutionRequirements":{"amount":50,"name":"Psyduck candies"},"evolutions":[{"id":55,"name":"Golduck"}],"maxCP":987,"maxHP":1109,"attacks":{"fast":[{"name":"Water Gun","type":"Water","damage":6},{"name":"Zen Headbutt","type":"Psychic","damage":12}],"special":[{"name":"Aqua Tail","type":"Water","damage":45},{"name":"Cross Chop","type":"Fighting","damage":60},{"name":"Psybeam","type":"Psychic","damage":40}]}},{"id":"055","name":"Golduck","classification":"Duck Pokémon","types":["Water"],"resistant":["Fire","Water","Ice","Steel"],"weaknesses":["Electric","Grass"],"weight":{"minimum":"67.02kg","maximum":"86.17kg"},"height":{"minimum":"1.49m","maximum":"1.91m"},"fleeRate":0.06,"Previous evolution(s)":[{"id":54,"name":"Psyduck"}],"maxCP":2206,"maxHP":2386,"attacks":{"fast":[{"name":"Confusion","type":"Psychic","damage":15},{"name":"Zen Headbutt","type":"Psychic","damage":12}],"special":[{"name":"Gunk Shot","type":"Poison","damage":65},{"name":"Hydro Pump","type":"Water","damage":90},{"name":"Ice Beam","type":"Ice","damage":65},{"name":"Psychic","type":"Psychic","damage":55}]}},{"id":"056","name":"Mankey","classification":"Pig Monkey Pokémon","types":["Fighting"],"resistant":["Bug","Rock","Dark"],"weaknesses":["Flying","Psychic","Fairy"],"weight":{"minimum":"24.5kg","maximum":"31.5kg"},"height":{"minimum":"0.44m","maximum":"0.56m"},"fleeRate":0.1,"evolutionRequirements":{"amount":50,"name":"Mankey candies"},"evolutions":[{"id":57,"name":"Primeape"}],"maxCP":769,"maxHP":878,"attacks":{"fast":[{"name":"Karate Chop","type":"Fighting","damage":6},{"name":"Scratch","type":"Normal","damage":6}],"special":[{"name":"Brick Break","type":"Fighting","damage":30},{"name":"Cross Chop","type":"Fighting","damage":60},{"name":"Low Sweep","type":"Fighting","damage":30}]}},{"id":"057","name":"Primeape","classification":"Pig Monkey Pokémon","types":["Fighting"],"resistant":["Bug","Rock","Dark"],"weaknesses":["Flying","Psychic","Fairy"],"weight":{"minimum":"28kg","maximum":"36kg"},"height":{"minimum":"0.88m","maximum":"1.13m"},"fleeRate":0.06,"Previous evolution(s)":[{"id":56,"name":"Mankey"}],"maxCP":1704,"maxHP":1864,"attacks":{"fast":[{"name":"Karate Chop","type":"Fighting","damage":6},{"name":"Low Kick","type":"Fighting","damage":5}],"special":[{"name":"Cross Chop","type":"Fighting","damage":60},{"name":"Low Sweep","type":"Fighting","damage":30},{"name":"Night Slash","type":"Dark","damage":30}]}},{"id":"058","name":"Growlithe","classification":"Puppy Pokémon","types":["Fire"],"resistant":["Fire","Grass","Ice","Bug","Steel","Fairy"],"weaknesses":["Water","Ground","Rock"],"weight":{"minimum":"16.63kg","maximum":"21.38kg"},"height":{"minimum":"0.61m","maximum":"0.79m"},"fleeRate":0.1,"evolutionRequirements":{"amount":50,"name":"Growlithe candies"},"evolutions":[{"id":59,"name":"Arcanine"}],"maxCP":1199,"maxHP":1335,"attacks":{"fast":[{"name":"Bite","type":"Dark","damage":6},{"name":"Ember","type":"Fire","damage":10}],"special":[{"name":"Body Slam","type":"Normal","damage":40},{"name":"Flame Wheel","type":"Fire","damage":40},{"name":"Flamethrower","type":"Fire","damage":55}]}},{"id":"059","name":"Arcanine","classification":"Legendary Pokémon","types":["Fire"],"resistant":["Fire","Grass","Ice","Bug","Steel","Fairy"],"weaknesses":["Water","Ground","Rock"],"weight":{"minimum":"135.63kg","maximum":"174.38kg"},"height":{"minimum":"1.66m","maximum":"2.14m"},"fleeRate":0.06,"Previous evolution(s)":[{"id":58,"name":"Growlithe"}],"maxCP":2781,"maxHP":2983,"attacks":{"fast":[{"name":"Bite","type":"Dark","damage":6},{"name":"Fire Fang","type":"Fire","damage":10}],"special":[{"name":"Bulldoze","type":"Ground","damage":35},{"name":"Fire Blast","type":"Fire","damage":100},{"name":"Flamethrower","type":"Fire","damage":55}]}},{"id":"060","name":"Poliwag","classification":"Tadpole Pokémon","types":["Water"],"resistant":["Fire","Water","Ice","Steel"],"weaknesses":["Electric","Grass"],"weight":{"minimum":"10.85kg","maximum":"13.95kg"},"height":{"minimum":"0.53m","maximum":"0.68m"},"fleeRate":0.15,"evolutionRequirements":{"amount":25,"name":"Poliwag candies"},"evolutions":[{"id":61,"name":"Poliwhirl"},{"id":62,"name":"Poliwrath"}],"maxCP":693,"maxHP":795,"attacks":{"fast":[{"name":"Bubble","type":"Water","damage":25},{"name":"Mud Shot","type":"Ground","damage":6}],"special":[{"name":"Body Slam","type":"Normal","damage":40},{"name":"Bubble Beam","type":"Water","damage":30},{"name":"Mud Bomb","type":"Ground","damage":30}]}},{"id":"061","name":"Poliwhirl","classification":"Tadpole Pokémon","types":["Water"],"resistant":["Fire","Water","Ice","Steel"],"weaknesses":["Electric","Grass"],"weight":{"minimum":"17.5kg","maximum":"22.5kg"},"height":{"minimum":"0.88m","maximum":"1.13m"},"fleeRate":0.07,"Previous evolution(s)":[{"id":60,"name":"Poliwag"}],"evolutionRequirements":{"amount":100,"name":"Poliwag candies"},"evolutions":[{"id":62,"name":"Poliwrath"}],"maxCP":1206,"maxHP":1340,"attacks":{"fast":[{"name":"Bubble","type":"Water","damage":25},{"name":"Mud Shot","type":"Ground","damage":6}],"special":[{"name":"Bubble Beam","type":"Water","damage":30},{"name":"Mud Bomb","type":"Ground","damage":30},{"name":"Scald","type":"Water","damage":55}]}},{"id":"062","name":"Poliwrath","classification":"Tadpole Pokémon","types":["Water","Fighting"],"resistant":["Fire","Water","Ice","Bug","Rock","Dark","Steel"],"weaknesses":["Electric","Grass","Flying","Psychic","Fairy"],"weight":{"minimum":"47.25kg","maximum":"60.75kg"},"height":{"minimum":"1.14m","maximum":"1.46m"},"fleeRate":0.05,"Previous evolution(s)":[{"id":60,"name":"Poliwag"},{"id":61,"name":"Poliwhirl"}],"maxCP":2321,"maxHP":2505,"attacks":{"fast":[{"name":"Bubble","type":"Water","damage":25},{"name":"Mud Shot","type":"Ground","damage":6}],"special":[{"name":"Hydro Pump","type":"Water","damage":90},{"name":"Ice Punch","type":"Ice","damage":45},{"name":"Submission","type":"Fighting","damage":30}]}},{"id":"063","name":"Abra","classification":"Psi Pokémon","types":["Psychic"],"resistant":["Fighting","Psychic"],"weaknesses":["Bug","Ghost","Dark"],"weight":{"minimum":"17.06kg","maximum":"21.94kg"},"height":{"minimum":"0.79m","maximum":"1.01m"},"fleeRate":0.99,"evolutionRequirements":{"amount":25,"name":"Abra candies"},"evolutions":[{"id":64,"name":"Kadabra"},{"id":65,"name":"Alakazam"}],"maxCP":508,"maxHP":600,"attacks":{"fast":[{},{"name":"Zen Headbutt","type":"Psychic","damage":12}],"special":[{"name":"Psyshock","type":"Psychic","damage":40},{"name":"Shadow Ball","type":"Ghost","damage":45},{"name":"Signal Beam","type":"Bug","damage":45}]}},{"id":"064","name":"Kadabra","classification":"Psi Pokémon","types":["Psychic"],"resistant":["Fighting","Psychic"],"weaknesses":["Bug","Ghost","Dark"],"weight":{"minimum":"49.44kg","maximum":"63.56kg"},"height":{"minimum":"1.14m","maximum":"1.46m"},"fleeRate":0.07,"Previous evolution(s)":[{"id":63,"name":"Abra"}],"evolutionRequirements":{"amount":100,"name":"Abra candies"},"evolutions":[{"id":65,"name":"Alakazam"}],"maxCP":1005,"maxHP":1131,"attacks":{"fast":[{"name":"Confusion","type":"Psychic","damage":15},{"name":"Psycho Cut","type":"Psychic","damage":7}],"special":[{"name":"Dazzling Gleam","type":"Fairy","damage":55},{"name":"Psybeam","type":"Psychic","damage":40},{"name":"Shadow Ball","type":"Ghost","damage":45}]}},{"id":"065","name":"Alakazam","classification":"Psi Pokémon","types":["Psychic"],"resistant":["Fighting","Psychic"],"weaknesses":["Bug","Ghost","Dark"],"weight":{"minimum":"42kg","maximum":"54kg"},"height":{"minimum":"1.31m","maximum":"1.69m"},"fleeRate":0.05,"Previous evolution(s)":[{"id":63,"name":"Abra"},{"id":64,"name":"Kadabra"}],"maxCP":1654,"maxHP":1813,"attacks":{"fast":[{"name":"Confusion","type":"Psychic","damage":15},{"name":"Psycho Cut","type":"Psychic","damage":7}],"special":[{"name":"Dazzling Gleam","type":"Fairy","damage":55},{"name":"Psychic","type":"Psychic","damage":55},{"name":"Shadow Ball","type":"Ghost","damage":45}]}},{"id":"066","name":"Machop","classification":"Superpower Pokémon","types":["Fighting"],"resistant":["Bug","Rock","Dark"],"weaknesses":["Flying","Psychic","Fairy"],"weight":{"minimum":"17.06kg","maximum":"21.94kg"},"height":{"minimum":"0.7m","maximum":"0.9m"},"fleeRate":0.1,"evolutionRequirements":{"amount":25,"name":"Machop candies"},"evolutions":[{"id":67,"name":"Machoke"},{"id":68,"name":"Machamp"}],"maxCP":968,"maxHP":1089,"attacks":{"fast":[{"name":"Karate Chop","type":"Fighting","damage":6},{"name":"Low Kick","type":"Fighting","damage":5}],"special":[{"name":"Brick Break","type":"Fighting","damage":30},{"name":"Cross Chop","type":"Fighting","damage":60},{"name":"Low Sweep","type":"Fighting","damage":30}]}},{"id":"067","name":"Machoke","classification":"Superpower Pokémon","types":["Fighting"],"resistant":["Bug","Rock","Dark"],"weaknesses":["Flying","Psychic","Fairy"],"weight":{"minimum":"61.69kg","maximum":"79.31kg"},"height":{"minimum":"1.31m","maximum":"1.69m"},"fleeRate":0.07,"Previous evolution(s)":[{"id":66,"name":"Machop"}],"evolutionRequirements":{"amount":100,"name":"Machop candies"},"evolutions":[{"id":68,"name":"Machamp"}],"maxCP":1606,"maxHP":1760,"attacks":{"fast":[{"name":"Karate Chop","type":"Fighting","damage":6},{"name":"Low Kick","type":"Fighting","damage":5}],"special":[{"name":"Brick Break","type":"Fighting","damage":30},{"name":"Cross Chop","type":"Fighting","damage":60},{"name":"Submission","type":"Fighting","damage":30}]}},{"id":"068","name":"Machamp","classification":"Superpower Pokémon","types":["Fighting"],"resistant":["Bug","Rock","Dark"],"weaknesses":["Flying","Psychic","Fairy"],"weight":{"minimum":"113.75kg","maximum":"146.25kg"},"height":{"minimum":"1.4m","maximum":"1.8m"},"fleeRate":0.05,"Previous evolution(s)":[{"id":66,"name":"Machop"},{"id":67,"name":"Machoke"}],"maxCP":2406,"maxHP":2594,"attacks":{"fast":[{"name":"Bullet Punch","type":"Steel","damage":10},{"name":"Karate Chop","type":"Fighting","damage":6}],"special":[{"name":"Cross Chop","type":"Fighting","damage":60},{"name":"Stone Edge","type":"Rock","damage":80},{"name":"Submission","type":"Fighting","damage":30}]}},{"id":"069","name":"Bellsprout","classification":"Flower Pokémon","types":["Grass","Poison"],"resistant":["Water","Electric","Grass","Fighting","Fairy"],"weaknesses":["Fire","Ice","Flying","Psychic"],"weight":{"minimum":"3.5kg","maximum":"4.5kg"},"height":{"minimum":"0.61m","maximum":"0.79m"},"fleeRate":0.15,"evolutionRequirements":{"amount":25,"name":"Bellsprout candies"},"evolutions":[{"id":70,"name":"Weepinbell"},{"id":71,"name":"Victreebel"}],"maxCP":990,"maxHP":1117,"attacks":{"fast":[{"name":"Acid","type":"Poison","damage":10},{"name":"Vine Whip","type":"Grass","damage":7}],"special":[{"name":"Power Whip","type":"Grass","damage":70},{"name":"Sludge Bomb","type":"Poison","damage":55},{"name":"Wrap","type":"Normal","damage":25}]}},{"id":"070","name":"Weepinbell","classification":"Flycatcher Pokémon","types":["Grass","Poison"],"resistant":["Water","Electric","Grass","Fighting","Fairy"],"weaknesses":["Fire","Ice","Flying","Psychic"],"weight":{"minimum":"5.6kg","maximum":"7.2kg"},"height":{"minimum":"0.88m","maximum":"1.13m"},"fleeRate":0.07,"Previous evolution(s)":[{"id":69,"name":"Bellsprout"}],"evolutionRequirements":{"amount":100,"name":"Bellsprout candies"},"evolutions":[{"id":71,"name":"Victreebel"}],"maxCP":1567,"maxHP":1723,"attacks":{"fast":[{"name":"Acid","type":"Poison","damage":10},{"name":"Razor Leaf","type":"Grass","damage":15}],"special":[{"name":"Power Whip","type":"Grass","damage":70},{"name":"Seed Bomb","type":"Grass","damage":40},{"name":"Sludge Bomb","type":"Poison","damage":55}]}},{"id":"071","name":"Victreebel","classification":"Flycatcher Pokémon","types":["Grass","Poison"],"resistant":["Water","Electric","Grass","Fighting","Fairy"],"weaknesses":["Fire","Ice","Flying","Psychic"],"weight":{"minimum":"13.56kg","maximum":"17.44kg"},"height":{"minimum":"1.49m","maximum":"1.91m"},"fleeRate":0.05,"Previous evolution(s)":[{"id":69,"name":"Bellsprout"},{"id":70,"name":"Weepinbell"}],"maxCP":2342,"maxHP":2530,"attacks":{"fast":[{"name":"Acid","type":"Poison","damage":10},{"name":"Razor Leaf","type":"Grass","damage":15}],"special":[{"name":"Leaf Blade","type":"Grass","damage":55},{"name":"Sludge Bomb","type":"Poison","damage":55},{"name":"Solar Beam","type":"Grass","damage":120}]}},{"id":"072","name":"Tentacool","classification":"Jellyfish Pokémon","types":["Water","Poison"],"resistant":["Fire","Water","Ice","Fighting","Poison","Bug","Steel","Fairy"],"weaknesses":["Electric","Ground","Psychic"],"weight":{"minimum":"39.81kg","maximum":"51.19kg"},"height":{"minimum":"0.79m","maximum":"1.01m"},"fleeRate":0.15,"evolutionRequirements":{"amount":50,"name":"Tentacool candies"},"evolutions":[{"id":73,"name":"Tentacruel"}],"maxCP":794,"maxHP":905,"attacks":{"fast":[{"name":"Bubble","type":"Water","damage":25},{"name":"Poison Sting","type":"Poison","damage":6}],"special":[{"name":"Bubble Beam","type":"Water","damage":30},{"name":"Water Pulse","type":"Water","damage":35},{"name":"Wrap","type":"Normal","damage":25}]}},{"id":"073","name":"Tentacruel","classification":"Jellyfish Pokémon","types":["Water","Poison"],"resistant":["Fire","Water","Ice","Fighting","Poison","Bug","Steel","Fairy"],"weaknesses":["Electric","Ground","Psychic"],"weight":{"minimum":"48.13kg","maximum":"61.88kg"},"height":{"minimum":"1.4m","maximum":"1.8m"},"fleeRate":0.07,"Previous evolution(s)":[{"id":72,"name":"Tentacool"}],"maxCP":2046,"maxHP":2220,"attacks":{"fast":[{"name":"Acid","type":"Poison","damage":10},{"name":"Poison Jab","type":"Poison","damage":12}],"special":[{"name":"Blizzard","type":"Ice","damage":100},{"name":"Hydro Pump","type":"Water","damage":90},{"name":"Sludge Wave","type":"Poison","damage":70}]}},{"id":"074","name":"Geodude","classification":"Rock Pokémon","types":["Rock","Ground"],"resistant":["Normal","Fire","Electric","Poison","Flying","Rock"],"weaknesses":["Water","Grass","Ice","Fighting","Ground","Steel"],"weight":{"minimum":"17.5kg","maximum":"22.5kg"},"height":{"minimum":"0.35m","maximum":"0.45m"},"fleeRate":0.1,"evolutionRequirements":{"amount":25,"name":"Geodude candies"},"evolutions":[{"id":75,"name":"Graveler"},{"id":76,"name":"Golem"}],"maxCP":742,"maxHP":849,"attacks":{"fast":[{"name":"Rock Throw","type":"Rock","damage":12},{"name":"Tackle","type":"Normal","damage":12}],"special":[{"name":"Dig","type":"Ground","damage":70},{"name":"Rock Slide","type":"Rock","damage":50},{"name":"Rock Tomb","type":"Rock","damage":30}]}},{"id":"075","name":"Graveler","classification":"Rock Pokémon","types":["Rock","Ground"],"resistant":["Normal","Fire","Electric","Poison","Flying","Rock"],"weaknesses":["Water","Grass","Ice","Fighting","Ground","Steel"],"weight":{"minimum":"91.88kg","maximum":"118.13kg"},"height":{"minimum":"0.88m","maximum":"1.13m"},"fleeRate":0.07,"Previous evolution(s)":[{"id":74,"name":"Geodude"}],"evolutionRequirements":{"amount":100,"name":"Geodude candies"},"evolutions":[{"id":76,"name":"Golem"}],"maxCP":1294,"maxHP":1433,"attacks":{"fast":[{"name":"Mud Shot","type":"Ground","damage":6},{"name":"Rock Throw","type":"Rock","damage":12}],"special":[{"name":"Dig","type":"Ground","damage":70},{"name":"Rock Slide","type":"Rock","damage":50},{"name":"Stone Edge","type":"Rock","damage":80}]}},{"id":"076","name":"Golem","classification":"Megaton Pokémon","types":["Rock","Ground"],"resistant":["Normal","Fire","Electric","Poison","Flying","Rock"],"weaknesses":["Water","Grass","Ice","Fighting","Ground","Steel"],"weight":{"minimum":"262.5kg","maximum":"337.5kg"},"height":{"minimum":"1.22m","maximum":"1.57m"},"fleeRate":0.05,"Previous evolution(s)":[{"id":74,"name":"Geodude"},{"id":75,"name":"Graveler"}],"maxCP":2126,"maxHP":2303,"attacks":{"fast":[{"name":"Mud Shot","type":"Ground","damage":6},{"name":"Rock Throw","type":"Rock","damage":12}],"special":[{"name":"Ancient Power","type":"Rock","damage":35},{"name":"Earthquake","type":"Ground","damage":100},{"name":"Stone Edge","type":"Rock","damage":80}]}},{"id":"077","name":"Ponyta","classification":"Fire Horse Pokémon","types":["Fire"],"resistant":["Fire","Grass","Ice","Bug","Steel","Fairy"],"weaknesses":["Water","Ground","Rock"],"weight":{"minimum":"26.25kg","maximum":"33.75kg"},"height":{"minimum":"0.88m","maximum":"1.13m"},"fleeRate":0.1,"evolutionRequirements":{"amount":50,"name":"Ponyta candies"},"evolutions":[{"id":78,"name":"Rapidash"}],"maxCP":1370,"maxHP":1516,"attacks":{"fast":[{"name":"Ember","type":"Fire","damage":10},{"name":"Tackle","type":"Normal","damage":12}],"special":[{"name":"Fire Blast","type":"Fire","damage":100},{"name":"Flame Charge","type":"Fire","damage":25},{"name":"Flame Wheel","type":"Fire","damage":40}]}},{"id":"078","name":"Rapidash","classification":"Fire Horse Pokémon","types":["Fire"],"resistant":["Fire","Grass","Ice","Bug","Steel","Fairy"],"weaknesses":["Water","Ground","Rock"],"weight":{"minimum":"83.13kg","maximum":"106.88kg"},"height":{"minimum":"1.49m","maximum":"1.91m"},"fleeRate":0.06,"Previous evolution(s)":[{"id":77,"name":"Ponyta"}],"maxCP":2024,"maxHP":2199,"attacks":{"fast":[{"name":"Ember","type":"Fire","damage":10},{"name":"Low Kick","type":"Fighting","damage":5}],"special":[{"name":"Drill Run","type":"Ground","damage":50},{"name":"Fire Blast","type":"Fire","damage":100},{"name":"Heat Wave","type":"Fire","damage":80}]}},{"id":"079","name":"Slowpoke","classification":"Dopey Pokémon","types":["Water","Psychic"],"resistant":["Fire","Water","Ice","Fighting","Psychic","Steel"],"weaknesses":["Electric","Grass","Bug","Ghost","Dark"],"weight":{"minimum":"31.5kg","maximum":"40.5kg"},"height":{"minimum":"1.05m","maximum":"1.35m"},"fleeRate":0.1,"evolutionRequirements":{"amount":50,"name":"Slowpoke candies"},"evolutions":[{"id":80,"name":"Slowbro"}],"maxCP":1089,"maxHP":1218,"attacks":{"fast":[{"name":"Confusion","type":"Psychic","damage":15},{"name":"Water Gun","type":"Water","damage":6}],"special":[{"name":"Psychic","type":"Psychic","damage":55},{"name":"Psyshock","type":"Psychic","damage":40},{"name":"Water Pulse","type":"Water","damage":35}]}},{"id":"080","name":"Slowbro","classification":"Hermit Crab Pokémon","types":["Water","Psychic"],"resistant":["Fire","Water","Ice","Fighting","Psychic","Steel"],"weaknesses":["Electric","Grass","Bug","Ghost","Dark"],"weight":{"minimum":"68.69kg","maximum":"88.31kg"},"height":{"minimum":"1.4m","maximum":"1.8m"},"fleeRate":0.06,"Previous evolution(s)":[{"id":79,"name":"Slowpoke"}],"maxCP":2409,"maxHP":2597,"attacks":{"fast":[{"name":"Confusion","type":"Psychic","damage":15},{"name":"Water Gun","type":"Water","damage":6}],"special":[{"name":"Ice Beam","type":"Ice","damage":65},{"name":"Psychic","type":"Psychic","damage":55},{"name":"Water Pulse","type":"Water","damage":35}]}},{"id":"081","name":"Magnemite","classification":"Magnet Pokémon","types":["Electric","Steel"],"resistant":["Normal","Electric","Grass","Ice","Poison","Flying","Psychic","Bug","Rock","Dragon","Steel","Fairy"],"weaknesses":["Fire","Fighting","Ground"],"weight":{"minimum":"5.25kg","maximum":"6.75kg"},"height":{"minimum":"0.26m","maximum":"0.34m"},"fleeRate":0.1,"evolutionRequirements":{"amount":50,"name":"Magnemite candies"},"evolutions":[{"id":82,"name":"Magneton"}],"maxCP":774,"maxHP":890,"attacks":{"fast":[{"name":"Spark","type":"Electric","damage":7},{"name":"Thunder Shock","type":"Electric","damage":5}],"special":[{"name":"Discharge","type":"Electric","damage":35},{"name":"Magnet Bomb","type":"Steel","damage":30},{"name":"Thunderbolt","type":"Electric","damage":55}]}},{"id":"082","name":"Magneton","classification":"Magnet Pokémon","types":["Electric","Steel"],"resistant":["Normal","Electric","Grass","Ice","Poison","Flying","Psychic","Bug","Rock","Dragon","Steel","Fairy"],"weaknesses":["Fire","Fighting","Ground"],"weight":{"minimum":"52.5kg","maximum":"67.5kg"},"height":{"minimum":"0.88m","maximum":"1.13m"},"fleeRate":0.06,"Previous evolution(s)":[{"id":81,"name":"Magnemite"}],"maxCP":1715,"maxHP":1879,"attacks":{"fast":[{"name":"Spark","type":"Electric","damage":7},{"name":"Thunder Shock","type":"Electric","damage":5}],"special":[{"name":"Discharge","type":"Electric","damage":35},{"name":"Flash Cannon","type":"Steel","damage":60},{"name":"Magnet Bomb","type":"Steel","damage":30}]}},{"id":"083","name":"Farfetch\'d","classification":"Wild Duck Pokémon","types":["Normal","Flying"],"resistant":["Grass","Ground","Bug","Ghost"],"weaknesses":["Electric","Ice","Rock"],"weight":{"minimum":"13.13kg","maximum":"16.88kg"},"height":{"minimum":"0.7m","maximum":"0.9m"},"fleeRate":0.09,"Common Capture Area":"Early reports that this Pokémon is likely to be found in: Asia","Asia":"Common Capture Area","maxCP":1133,"maxHP":1263,"attacks":{"fast":[{},{"name":"Fury Cutter","type":"Bug","damage":3}],"special":[{"name":"Aerial Ace","type":"Flying","damage":30},{"name":"Air Cutter","type":"Flying","damage":30},{"name":"Leaf Blade","type":"Grass","damage":55}]}},{"id":"084","name":"Doduo","classification":"Twin Bird Pokémon","types":["Normal","Flying"],"resistant":["Grass","Ground","Bug","Ghost"],"weaknesses":["Electric","Ice","Rock"],"weight":{"minimum":"34.3kg","maximum":"44.1kg"},"height":{"minimum":"1.22m","maximum":"1.57m"},"fleeRate":0.1,"evolutionRequirements":{"amount":50,"name":"Doduo candies"},"evolutions":[{"id":85,"name":"Dodrio"}],"maxCP":746,"maxHP":855,"attacks":{"fast":[{"name":"Peck","type":"Flying","damage":10},{"name":"Quick Attack","type":"Normal","damage":10}],"special":[{"name":"Aerial Ace","type":"Flying","damage":30},{"name":"Drill Peck","type":"Flying","damage":40},{"name":"Swift","type":"Normal","damage":30}]}},{"id":"085","name":"Dodrio","classification":"Triple Bird Pokémon","types":["Normal","Flying"],"resistant":["Grass","Ground","Bug","Ghost"],"weaknesses":["Electric","Ice","Rock"],"weight":{"minimum":"74.55kg","maximum":"95.85kg"},"height":{"minimum":"1.57m","maximum":"2.02m"},"fleeRate":0.06,"Previous evolution(s)":[{"id":84,"name":"Doduo"}],"maxCP":1677,"maxHP":1836,"attacks":{"fast":[{"name":"Feint Attack","type":"Dark","damage":12},{"name":"Steel Wing","type":"Steel","damage":15}],"special":[{"name":"Aerial Ace","type":"Flying","damage":30},{"name":"Air Cutter","type":"Flying","damage":30},{"name":"Drill Peck","type":"Flying","damage":40}]}},{"id":"086","name":"Seel","classification":"Sea Lion Pokémon","types":["Water"],"resistant":["Fire","Water","Ice","Steel"],"weaknesses":["Electric","Grass"],"weight":{"minimum":"78.75kg","maximum":"101.25kg"},"height":{"minimum":"0.96m","maximum":"1.24m"},"fleeRate":0.09,"evolutionRequirements":{"amount":50,"name":"Seel candies"},"evolutions":[{"id":87,"name":"Dewgong"}],"maxCP":985,"maxHP":1107,"attacks":{"fast":[{"name":"Ice Shard","type":"Ice","damage":15},{"name":"Water Gun","type":"Water","damage":6}],"special":[{"name":"Aqua Jet","type":"Water","damage":25},{"name":"Aqua Tail","type":"Water","damage":45},{"name":"Icy Wind","type":"Ice","damage":25}]}},{"id":"087","name":"Dewgong","classification":"Sea Lion Pokémon","types":["Water","Ice"],"resistant":["Water","Ice"],"weaknesses":["Electric","Grass","Fighting","Rock"],"weight":{"minimum":"105kg","maximum":"135kg"},"height":{"minimum":"1.49m","maximum":"1.91m"},"fleeRate":0.06,"Previous evolution(s)":[{"id":86,"name":"Seel"}],"maxCP":1975,"maxHP":2145,"attacks":{"fast":[{"name":"Frost Breath","type":"Ice","damage":9},{"name":"Ice Shard","type":"Ice","damage":15}],"special":[{"name":"Aqua Jet","type":"Water","damage":25},{"name":"Blizzard","type":"Ice","damage":100},{"name":"Icy Wind","type":"Ice","damage":25}]}},{"id":"088","name":"Grimer","classification":"Sludge Pokémon","types":["Poison"],"resistant":["Grass","Fighting","Poison","Bug","Fairy"],"weaknesses":["Ground","Psychic"],"weight":{"minimum":"26.25kg","maximum":"33.75kg"},"height":{"minimum":"0.79m","maximum":"1.01m"},"fleeRate":0.1,"evolutionRequirements":{"amount":50,"name":"Grimer candies"},"evolutions":[{"id":89,"name":"Muk"}],"maxCP":1152,"maxHP":1284,"attacks":{"fast":[{"name":"Acid","type":"Poison","damage":10},{"name":"Mud Slap","type":"Ground","damage":15}],"special":[{"name":"Mud Bomb","type":"Ground","damage":30},{"name":"Sludge","type":"Poison","damage":30},{"name":"Sludge Bomb","type":"Poison","damage":55}]}},{"id":"089","name":"Muk","classification":"Sludge Pokémon","types":["Poison"],"resistant":["Grass","Fighting","Poison","Bug","Fairy"],"weaknesses":["Ground","Psychic"],"weight":{"minimum":"26.25kg","maximum":"33.75kg"},"height":{"minimum":"1.05m","maximum":"1.35m"},"fleeRate":0.06,"Previous evolution(s)":[{"id":88,"name":"Grimer"}],"maxCP":2414,"maxHP":2602,"attacks":{"fast":[{"name":"Acid","type":"Poison","damage":10},{"name":"Poison Jab","type":"Poison","damage":12}],"special":[{"name":"Dark Pulse","type":"Dark","damage":45},{"name":"Gunk Shot","type":"Poison","damage":65},{"name":"Sludge Wave","type":"Poison","damage":70}]}},{"id":"090","name":"Shellder","classification":"Bivalve Pokémon","types":["Water"],"resistant":["Fire","Water","Ice","Steel"],"weaknesses":["Electric","Grass"],"weight":{"minimum":"3.5kg","maximum":"4.5kg"},"height":{"minimum":"0.26m","maximum":"0.34m"},"fleeRate":0.1,"evolutionRequirements":{"amount":50,"name":"Shellder candies"},"evolutions":[{"id":91,"name":"Cloyster"}],"maxCP":715,"maxHP":822,"attacks":{"fast":[{"name":"Ice Shard","type":"Ice","damage":15},{"name":"Tackle","type":"Normal","damage":12}],"special":[{"name":"Bubble Beam","type":"Water","damage":30},{"name":"Icy Wind","type":"Ice","damage":25},{"name":"Water Pulse","type":"Water","damage":35}]}},{"id":"091","name":"Cloyster","classification":"Bivalve Pokémon","types":["Water","Ice"],"resistant":["Water","Ice"],"weaknesses":["Electric","Grass","Fighting","Rock"],"weight":{"minimum":"115.94kg","maximum":"149.06kg"},"height":{"minimum":"1.31m","maximum":"1.69m"},"fleeRate":0.06,"Previous evolution(s)":[{"id":90,"name":"Shellder"}],"maxCP":1879,"maxHP":2052,"attacks":{"fast":[{"name":"Frost Breath","type":"Ice","damage":9},{"name":"Ice Shard","type":"Ice","damage":15}],"special":[{"name":"Blizzard","type":"Ice","damage":100},{"name":"Hydro Pump","type":"Water","damage":90},{"name":"Icy Wind","type":"Ice","damage":25}]}},{"id":"092","name":"Gastly","classification":"Gas Pokémon","types":["Ghost","Poison"],"resistant":["Normal","Grass","Fighting","Poison","Bug","Fairy"],"weaknesses":["Ground","Psychic","Ghost","Dark"],"weight":{"minimum":"0.09kg","maximum":"0.11kg"},"height":{"minimum":"1.14m","maximum":"1.46m"},"fleeRate":0.1,"evolutionRequirements":{"amount":25,"name":"Gastly candies"},"evolutions":[{"id":93,"name":"Haunter"},{"id":94,"name":"Gengar"}],"maxCP":696,"maxHP":804,"attacks":{"fast":[{"name":"Lick","type":"Ghost","damage":5},{"name":"Sucker Punch","type":"Dark","damage":7}],"special":[{"name":"Dark Pulse","type":"Dark","damage":45},{"name":"Ominous Wind","type":"Ghost","damage":30},{"name":"Sludge Bomb","type":"Poison","damage":55}]}},{"id":"093","name":"Haunter","classification":"Gas Pokémon","types":["Ghost","Poison"],"resistant":["Normal","Grass","Fighting","Poison","Bug","Fairy"],"weaknesses":["Ground","Psychic","Ghost","Dark"],"weight":{"minimum":"0.09kg","maximum":"0.11kg"},"height":{"minimum":"1.4m","maximum":"1.8m"},"fleeRate":0.07,"Previous evolution(s)":[{"id":92,"name":"Gastly"}],"evolutionRequirements":{"amount":100,"name":"Gastly candies"},"evolutions":[{"id":94,"name":"Gengar"}],"maxCP":1240,"maxHP":1380,"attacks":{"fast":[{"name":"Lick","type":"Ghost","damage":5},{"name":"Shadow Claw","type":"Ghost","damage":11}],"special":[{"name":"Dark Pulse","type":"Dark","damage":45},{"name":"Shadow Ball","type":"Ghost","damage":45},{"name":"Sludge Bomb","type":"Poison","damage":55}]}},{"id":"094","name":"Gengar","classification":"Shadow Pokémon","types":["Ghost","Poison"],"resistant":["Normal","Grass","Fighting","Poison","Bug","Fairy"],"weaknesses":["Ground","Psychic","Ghost","Dark"],"weight":{"minimum":"35.44kg","maximum":"45.56kg"},"height":{"minimum":"1.31m","maximum":"1.69m"},"fleeRate":0.05,"Previous evolution(s)":[{"id":92,"name":"Gastly"},{"id":93,"name":"Haunter"}],"maxCP":1907,"maxHP":2078,"attacks":{"fast":[{"name":"Shadow Claw","type":"Ghost","damage":11},{"name":"Sucker Punch","type":"Dark","damage":7}],"special":[{"name":"Dark Pulse","type":"Dark","damage":45},{"name":"Shadow Ball","type":"Ghost","damage":45},{"name":"Sludge Wave","type":"Poison","damage":70}]}},{"id":"095","name":"Onix","classification":"Rock Snake Pokémon","types":["Rock","Ground"],"resistant":["Normal","Fire","Electric","Poison","Flying","Rock"],"weaknesses":["Water","Grass","Ice","Fighting","Ground","Steel"],"weight":{"minimum":"183.75kg","maximum":"236.25kg"},"height":{"minimum":"7.7m","maximum":"9.9m"},"fleeRate":0.09,"maxCP":745,"maxHP":857,"attacks":{"fast":[{"name":"Rock Throw","type":"Rock","damage":12},{"name":"Tackle","type":"Normal","damage":12}],"special":[{"name":"Iron Head","type":"Steel","damage":30},{"name":"Rock Slide","type":"Rock","damage":50},{"name":"Stone Edge","type":"Rock","damage":80}]}},{"id":"096","name":"Drowzee","classification":"Hypnosis Pokémon","types":["Psychic"],"resistant":["Fighting","Psychic"],"weaknesses":["Bug","Ghost","Dark"],"weight":{"minimum":"28.35kg","maximum":"36.45kg"},"height":{"minimum":"0.88m","maximum":"1.13m"},"fleeRate":0.1,"evolutionRequirements":{"amount":50,"name":"Drowzee candies"},"evolutions":[{"id":97,"name":"Hypno"}],"maxCP":955,"maxHP":1075,"attacks":{"fast":[{"name":"Confusion","type":"Psychic","damage":15},{"name":"Pound","type":"Normal","damage":7}],"special":[{"name":"Psybeam","type":"Psychic","damage":40},{"name":"Psychic","type":"Psychic","damage":55},{"name":"Psyshock","type":"Psychic","damage":40}]}},{"id":"097","name":"Hypno","classification":"Hypnosis Pokémon","types":["Psychic"],"resistant":["Fighting","Psychic"],"weaknesses":["Bug","Ghost","Dark"],"weight":{"minimum":"66.15kg","maximum":"85.05kg"},"height":{"minimum":"1.4m","maximum":"1.8m"},"fleeRate":0.06,"Previous evolution(s)":[{"id":96,"name":"Drowzee"}],"maxCP":2012,"maxHP":2184,"attacks":{"fast":[{"name":"Confusion","type":"Psychic","damage":15},{"name":"Zen Headbutt","type":"Psychic","damage":12}],"special":[{"name":"Psychic","type":"Psychic","damage":55},{"name":"Psyshock","type":"Psychic","damage":40},{"name":"Shadow Ball","type":"Ghost","damage":45}]}},{"id":"098","name":"Krabby","classification":"River Crab Pokémon","types":["Water"],"resistant":["Fire","Water","Ice","Steel"],"weaknesses":["Electric","Grass"],"weight":{"minimum":"5.69kg","maximum":"7.31kg"},"height":{"minimum":"0.35m","maximum":"0.45m"},"fleeRate":0.15,"evolutionRequirements":{"amount":50,"name":"Krabby candies"},"evolutions":[{"id":99,"name":"Kingler"}],"maxCP":686,"maxHP":792,"attacks":{"fast":[{"name":"Bubble","type":"Water","damage":25},{"name":"Mud Shot","type":"Ground","damage":6}],"special":[{"name":"Bubble Beam","type":"Water","damage":30},{"name":"Vice Grip","type":"Normal","damage":25},{"name":"Water Pulse","type":"Water","damage":35}]}},{"id":"099","name":"Kingler","classification":"Pincer Pokémon","types":["Water"],"resistant":["Fire","Water","Ice","Steel"],"weaknesses":["Electric","Grass"],"weight":{"minimum":"52.5kg","maximum":"67.5kg"},"height":{"minimum":"1.14m","maximum":"1.46m"},"fleeRate":0.07,"Previous evolution(s)":[{"id":98,"name":"Krabby"}],"maxCP":1663,"maxHP":1823,"attacks":{"fast":[{"name":"Metal Claw","type":"Steel","damage":8},{"name":"Mud Shot","type":"Ground","damage":6}],"special":[{"name":"Vice Grip","type":"Normal","damage":25},{"name":"Water Pulse","type":"Water","damage":35},{"name":"X Scissor","type":"Bug","damage":35}]}},{"id":"100","name":"Voltorb","classification":"Ball Pokémon","types":["Electric"],"resistant":["Electric","Flying","Steel"],"weaknesses":["Ground"],"weight":{"minimum":"9.1kg","maximum":"11.7kg"},"height":{"minimum":"0.44m","maximum":"0.56m"},"fleeRate":0.1,"evolutionRequirements":{"amount":50,"name":"Voltorb candies"},"evolutions":[{"id":101,"name":"Electrode"}],"maxCP":733,"maxHP":839,"attacks":{"fast":[{"name":"Spark","type":"Electric","damage":7},{"name":"Tackle","type":"Normal","damage":12}],"special":[{"name":"Discharge","type":"Electric","damage":35},{"name":"Signal Beam","type":"Bug","damage":45},{"name":"Thunderbolt","type":"Electric","damage":55}]}},{"id":"101","name":"Electrode","classification":"Ball Pokémon","types":["Electric"],"resistant":["Electric","Flying","Steel"],"weaknesses":["Ground"],"weight":{"minimum":"58.27kg","maximum":"74.92kg"},"height":{"minimum":"1.05m","maximum":"1.35m"},"fleeRate":0.06,"Previous evolution(s)":[{"id":100,"name":"Voltorb"}],"maxCP":1496,"maxHP":1646,"attacks":{"fast":[{"name":"Spark","type":"Electric","damage":7},{"name":"Tackle","type":"Normal","damage":12}],"special":[{"name":"Discharge","type":"Electric","damage":35},{"name":"Hyper Beam","type":"Normal","damage":120},{"name":"Thunderbolt","type":"Electric","damage":55}]}},{"id":"102","name":"Exeggcute","classification":"Egg Pokémon","types":["Grass","Psychic"],"resistant":["Water","Electric","Grass","Fighting","Ground","Psychic"],"weaknesses":["Fire","Ice","Poison","Flying","Bug","Ghost","Dark"],"weight":{"minimum":"2.19kg","maximum":"2.81kg"},"height":{"minimum":"0.35m","maximum":"0.45m"},"fleeRate":0.1,"evolutionRequirements":{"amount":50,"name":"E"},"evolutions":[{"id":103,"name":"Exeggutor"}],"maxCP":978,"maxHP":1099,"attacks":{"fast":[{"name":"Confusion","type":"Psychic","damage":15}],"special":[{"name":"Ancient Power","type":"Rock","damage":35},{"name":"Psychic","type":"Psychic","damage":55},{"name":"Seed Bomb","type":"Grass","damage":40}]}},{"id":"103","name":"Exeggutor","classification":"Coconut Pokémon","types":["Grass","Psychic"],"resistant":["Water","Electric","Grass","Fighting","Ground","Psychic"],"weaknesses":["Fire","Ice","Poison","Flying","Bug","Ghost","Dark"],"weight":{"minimum":"105kg","maximum":"135kg"},"height":{"minimum":"1.75m","maximum":"2.25m"},"fleeRate":0.06,"Previous evolution(s)":[{"id":102,"name":"Exeggcute"}],"maxCP":2752,"maxHP":2955,"attacks":{"fast":[{"name":"Confusion","type":"Psychic","damage":15},{"name":"Zen Headbutt","type":"Psychic","damage":12}],"special":[{"name":"Psychic","type":"Psychic","damage":55},{"name":"Seed Bomb","type":"Grass","damage":40},{"name":"Solar Beam","type":"Grass","damage":120}]}},{"id":"104","name":"Cubone","classification":"Lonely Pokémon","types":["Ground"],"resistant":["Electric","Poison","Rock"],"weaknesses":["Water","Grass","Ice"],"weight":{"minimum":"5.69kg","maximum":"7.31kg"},"height":{"minimum":"0.35m","maximum":"0.45m"},"fleeRate":0.1,"evolutionRequirements":{"amount":50,"name":"Cubone candies"},"evolutions":[{"id":105,"name":"Marowak"}],"maxCP":889,"maxHP":1006,"attacks":{"fast":[{"name":"Mud Slap","type":"Ground","damage":15},{"name":"Rock Smash","type":"Fighting","damage":15}],"special":[{"name":"Bulldoze","type":"Ground","damage":35},{"name":"Dig","type":"Ground","damage":70},{"name":"Earthquake","type":"Ground","damage":100}]}},{"id":"105","name":"Marowak","classification":"Bone Keeper Pokémon","types":["Ground"],"resistant":["Electric","Poison","Rock"],"weaknesses":["Water","Grass","Ice"],"weight":{"minimum":"39.38kg","maximum":"50.63kg"},"height":{"minimum":"0.88m","maximum":"1.13m"},"fleeRate":0.06,"Previous evolution(s)":[{"id":104,"name":"Cubone"}],"maxCP":1505,"maxHP":1656,"attacks":{"fast":[{"name":"Mud Slap","type":"Ground","damage":15},{"name":"Rock Smash","type":"Fighting","damage":15}],"special":[{"name":"Bone Club","type":"Ground","damage":25},{"name":"Dig","type":"Ground","damage":70},{"name":"Earthquake","type":"Ground","damage":100}]}},{"id":"106","name":"Hitmonlee","classification":"Kicking Pokémon","types":["Fighting"],"resistant":["Bug","Rock","Dark"],"weaknesses":["Flying","Psychic","Fairy"],"weight":{"minimum":"43.57kg","maximum":"56.02kg"},"height":{"minimum":"1.31m","maximum":"1.69m"},"fleeRate":0.09,"maxCP":1349,"maxHP":1492,"attacks":{"fast":[{"name":"Low Kick","type":"Fighting","damage":5},{"name":"Rock Smash","type":"Fighting","damage":15}],"special":[{"name":"Low Sweep","type":"Fighting","damage":30},{"name":"Stomp","type":"Normal","damage":30},{"name":"Stone Edge","type":"Rock","damage":80}]}},{"id":"107","name":"Hitmonchan","classification":"Punching Pokémon","types":["Fighting"],"resistant":["Bug","Rock","Dark"],"weaknesses":["Flying","Psychic","Fairy"],"weight":{"minimum":"43.93kg","maximum":"56.48kg"},"height":{"minimum":"1.22m","maximum":"1.57m"},"fleeRate":0.09,"maxCP":1370,"maxHP":1516,"attacks":{"fast":[{"name":"Bullet Punch","type":"Steel","damage":10},{"name":"Rock Smash","type":"Fighting","damage":15}],"special":[{"name":"Brick Break","type":"Fighting","damage":30},{"name":"Fire Punch","type":"Fire","damage":40},{"name":"Ice Punch","type":"Ice","damage":45},{"name":"Thunder Punch","type":"Electric","damage":40}]}},{"id":"108","name":"Lickitung","classification":"Licking Pokémon","types":["Normal"],"resistant":["Ghost"],"weaknesses":["Fighting"],"weight":{"minimum":"57.31kg","maximum":"73.69kg"},"height":{"minimum":"1.05m","maximum":"1.35m"},"fleeRate":0.09,"maxCP":1477,"maxHP":1626,"attacks":{"fast":[{"name":"Lick","type":"Ghost","damage":5},{"name":"Zen Headbutt","type":"Psychic","damage":12}],"special":[{"name":"Hyper Beam","type":"Normal","damage":120},{"name":"Power Whip","type":"Grass","damage":70},{"name":"Stomp","type":"Normal","damage":30}]}},{"id":"109","name":"Koffing","classification":"Poison Gas Pokémon","types":["Poison"],"resistant":["Grass","Fighting","Poison","Bug","Fairy"],"weaknesses":["Ground","Psychic"],"weight":{"minimum":"0.88kg","maximum":"1.13kg"},"height":{"minimum":"0.53m","maximum":"0.68m"},"fleeRate":0.1,"evolutionRequirements":{"amount":50,"name":"Koffing candies"},"evolutions":[{"id":110,"name":"Weezing"}],"maxCP":1025,"maxHP":1151,"attacks":{"fast":[{"name":"Acid","type":"Poison","damage":10},{"name":"Tackle","type":"Normal","damage":12}],"special":[{"name":"Dark Pulse","type":"Dark","damage":45},{"name":"Sludge","type":"Poison","damage":30},{"name":"Sludge Bomb","type":"Poison","damage":55}]}},{"id":"110","name":"Weezing","classification":"Poison Gas Pokémon","types":["Poison"],"resistant":["Grass","Fighting","Poison","Bug","Fairy"],"weaknesses":["Ground","Psychic"],"weight":{"minimum":"8.31kg","maximum":"10.69kg"},"height":{"minimum":"1.05m","maximum":"1.35m"},"fleeRate":0.06,"Previous evolution(s)":[{"id":109,"name":"Koffing"}],"maxCP":2073,"maxHP":2250,"attacks":{"fast":[{"name":"Acid","type":"Poison","damage":10},{"name":"Tackle","type":"Normal","damage":12}],"special":[{"name":"Dark Pulse","type":"Dark","damage":45},{"name":"Shadow Ball","type":"Ghost","damage":45},{"name":"Sludge Bomb","type":"Poison","damage":55}]}},{"id":"111","name":"Rhyhorn","classification":"Spikes Pokémon","types":["Ground","Rock"],"resistant":["Normal","Fire","Electric","Poison","Flying","Rock"],"weaknesses":["Water","Grass","Ice","Fighting","Ground","Steel"],"weight":{"minimum":"100.63kg","maximum":"129.38kg"},"height":{"minimum":"0.88m","maximum":"1.13m"},"fleeRate":0.1,"evolutionRequirements":{"amount":50,"name":"Rhyhorn candies"},"evolutions":[{"id":112,"name":"Rhydon"}],"maxCP":1055,"maxHP":1182,"attacks":{"fast":[{"name":"Mud Slap","type":"Ground","damage":15},{"name":"Rock Smash","type":"Fighting","damage":15}],"special":[{"name":"Bulldoze","type":"Ground","damage":35},{"name":"Horn Attack","type":"Normal","damage":25},{"name":"Stomp","type":"Normal","damage":30}]}},{"id":"112","name":"Rhydon","classification":"Drill Pokémon","types":["Ground","Rock"],"resistant":["Normal","Fire","Electric","Poison","Flying","Rock"],"weaknesses":["Water","Grass","Ice","Fighting","Ground","Steel"],"weight":{"minimum":"105kg","maximum":"135kg"},"height":{"minimum":"1.66m","maximum":"2.14m"},"fleeRate":0.06,"Previous evolution(s)":[{"id":111,"name":"Rhyhorn"}],"maxCP":2068,"maxHP":2243,"attacks":{"fast":[{"name":"Mud Slap","type":"Ground","damage":15},{"name":"Rock Smash","type":"Fighting","damage":15}],"special":[{"name":"Earthquake","type":"Ground","damage":100},{"name":"Megahorn","type":"Bug","damage":80},{"name":"Stone Edge","type":"Rock","damage":80}]}},{"id":"113","name":"Chansey","classification":"Egg Pokémon","types":["Normal"],"resistant":["Ghost"],"weaknesses":["Fighting"],"weight":{"minimum":"30.27kg","maximum":"38.92kg"},"height":{"minimum":"0.96m","maximum":"1.24m"},"fleeRate":0.09,"maxCP":549,"maxHP":675,"attacks":{"fast":[{"name":"Pound","type":"Normal","damage":7},{"name":"Zen Headbutt","type":"Psychic","damage":12}],"special":[{"name":"Dazzling Gleam","type":"Fairy","damage":55},{"name":"Psybeam","type":"Psychic","damage":40},{"name":"Psychic","type":"Psychic","damage":55}]}},{"id":"114","name":"Tangela","classification":"Vine Pokémon","types":["Grass"],"resistant":["Water","Electric","Grass","Ground"],"weaknesses":["Fire","Ice","Poison","Flying","Bug"],"weight":{"minimum":"30.63kg","maximum":"39.38kg"},"height":{"minimum":"0.88m","maximum":"1.13m"},"fleeRate":0.09,"maxCP":1586,"maxHP":1739,"attacks":{"fast":[{"name":"Vine Whip","type":"Grass","damage":7}],"special":[{"name":"Power Whip","type":"Grass","damage":70},{"name":"Sludge Bomb","type":"Poison","damage":55},{"name":"Solar Beam","type":"Grass","damage":120}]}},{"id":"115","name":"Kangaskhan","classification":"Parent Pokémon","types":["Normal"],"resistant":["Ghost"],"weaknesses":["Fighting"],"weight":{"minimum":"70kg","maximum":"90kg"},"height":{"minimum":"1.93m","maximum":"2.48m"},"fleeRate":0.09,"Common Capture Area":"Early reports that this Pokémon is likely to be found in: Australia, New Zealand","Australia, New Zealand":"Common Capture Area","maxCP":1875,"maxHP":2043,"attacks":{"fast":[{"name":"Low Kick","type":"Fighting","damage":5},{"name":"Mud Slap","type":"Ground","damage":15}],"special":[{"name":"Brick Break","type":"Fighting","damage":30},{"name":"Earthquake","type":"Ground","damage":100},{"name":"Stomp","type":"Normal","damage":30}]}},{"id":"116","name":"Horsea","classification":"Dragon Pokémon","types":["Water"],"resistant":["Fire","Water","Ice","Steel"],"weaknesses":["Electric","Grass"],"weight":{"minimum":"7kg","maximum":"9kg"},"height":{"minimum":"0.35m","maximum":"0.45m"},"fleeRate":0.1,"evolutionRequirements":{"amount":50,"name":"Horsea candies"},"evolutions":[{"id":117,"name":"Seadra"}],"maxCP":688,"maxHP":794,"attacks":{"fast":[{"name":"Bubble","type":"Water","damage":25},{"name":"Water Gun","type":"Water","damage":6}],"special":[{"name":"Bubble Beam","type":"Water","damage":30},{"name":"Dragon Pulse","type":"Dragon","damage":65},{"name":"Flash Cannon","type":"Steel","damage":60}]}},{"id":"117","name":"Seadra","classification":"Dragon Pokémon","types":["Water"],"resistant":["Fire","Water","Ice","Steel"],"weaknesses":["Electric","Grass"],"weight":{"minimum":"21.88kg","maximum":"28.13kg"},"height":{"minimum":"1.05m","maximum":"1.35m"},"fleeRate":0.06,"Previous evolution(s)":[{"id":116,"name":"Horsea"}],"maxCP":1559,"maxHP":1713,"attacks":{"fast":[{"name":"Dragon Breath","type":"Dragon","damage":6},{"name":"Water Gun","type":"Water","damage":6}],"special":[{"name":"Blizzard","type":"Ice","damage":100},{"name":"Dragon Pulse","type":"Dragon","damage":65},{"name":"Hydro Pump","type":"Water","damage":90}]}},{"id":"118","name":"Goldeen","classification":"Goldfish Pokémon","types":["Water"],"resistant":["Fire","Water","Ice","Steel"],"weaknesses":["Electric","Grass"],"weight":{"minimum":"13.13kg","maximum":"16.88kg"},"height":{"minimum":"0.53m","maximum":"0.68m"},"fleeRate":0.15,"evolutionRequirements":{"amount":50,"name":"Goldeen candies"},"evolutions":[{"id":119,"name":"Seaking"}],"maxCP":851,"maxHP":965,"attacks":{"fast":[{"name":"Mud Shot","type":"Ground","damage":6},{"name":"Peck","type":"Flying","damage":10}],"special":[{"name":"Aqua Tail","type":"Water","damage":45},{"name":"Horn Attack","type":"Normal","damage":25},{"name":"Water Pulse","type":"Water","damage":35}]}},{"id":"119","name":"Seaking","classification":"Goldfish Pokémon","types":["Water"],"resistant":["Fire","Water","Ice","Steel"],"weaknesses":["Electric","Grass"],"weight":{"minimum":"34.13kg","maximum":"43.88kg"},"height":{"minimum":"1.14m","maximum":"1.46m"},"fleeRate":0.07,"Previous evolution(s)":[{"id":118,"name":"Goldeen"}],"maxCP":1877,"maxHP":2043,"attacks":{"fast":[{"name":"Peck","type":"Flying","damage":10},{"name":"Poison Jab","type":"Poison","damage":12}],"special":[{"name":"Drill Run","type":"Ground","damage":50},{"name":"Icy Wind","type":"Ice","damage":25},{"name":"Megahorn","type":"Bug","damage":80}]}},{"id":"120","name":"Staryu","classification":"Starshape Pokémon","types":["Water"],"resistant":["Fire","Water","Ice","Steel"],"weaknesses":["Electric","Grass"],"weight":{"minimum":"30.19kg","maximum":"38.81kg"},"height":{"minimum":"0.7m","maximum":"0.9m"},"fleeRate":0.15,"evolutionRequirements":{"amount":50,"name":"Staryu candies"},"evolutions":[{"id":121,"name":"Starmie"}],"maxCP":821,"maxHP":937,"attacks":{"fast":[{"name":"Quick Attack","type":"Normal","damage":10},{"name":"Water Gun","type":"Water","damage":6}],"special":[{"name":"Bubble Beam","type":"Water","damage":30},{"name":"Power Gem","type":"Rock","damage":40},{"name":"Swift","type":"Normal","damage":30}]}},{"id":"121","name":"Starmie","classification":"Mysterious Pokémon","types":["Water","Psychic"],"resistant":["Fire","Water","Ice","Fighting","Psychic","Steel"],"weaknesses":["Electric","Grass","Bug","Ghost","Dark"],"weight":{"minimum":"70kg","maximum":"90kg"},"height":{"minimum":"0.96m","maximum":"1.24m"},"fleeRate":0.06,"Previous evolution(s)":[{"id":120,"name":"Staryu"}],"maxCP":2007,"maxHP":2182,"attacks":{"fast":[{"name":"Quick Attack","type":"Normal","damage":10},{"name":"Water Gun","type":"Water","damage":6}],"special":[{"name":"Hydro Pump","type":"Water","damage":90},{"name":"Power Gem","type":"Rock","damage":40},{"name":"Psybeam","type":"Psychic","damage":40}]}},{"id":"122","name":"Mr. Mime","classification":"Barrier Pokémon","types":["Psychic","Fairy"],"resistant":["Fighting","Psychic","Dragon"],"weaknesses":["Poison","Ghost","Steel"],"weight":{"minimum":"47.69kg","maximum":"61.31kg"},"height":{"minimum":"1.14m","maximum":"1.46m"},"fleeRate":0.09,"Common Capture Area":"Early reports that this Pokémon is likely to be found in: Western Europe","Western Europe":"Common Capture Area","maxCP":1345,"maxHP":1494,"attacks":{"fast":[{"name":"Confusion","type":"Psychic","damage":15},{"name":"Zen Headbutt","type":"Psychic","damage":12}],"special":[{"name":"Psybeam","type":"Psychic","damage":40},{"name":"Psychic","type":"Psychic","damage":55},{"name":"Shadow Ball","type":"Ghost","damage":45}]}},{"id":"123","name":"Scyther","classification":"Mantis Pokémon","types":["Bug","Flying"],"resistant":["Grass","Fighting","Ground","Bug"],"weaknesses":["Fire","Electric","Ice","Flying","Rock"],"weight":{"minimum":"49kg","maximum":"63kg"},"height":{"minimum":"1.31m","maximum":"1.69m"},"fleeRate":0.09,"maxCP":1905,"maxHP":2073,"attacks":{"fast":[{"name":"Fury Cutter","type":"Bug","damage":3},{"name":"Steel Wing","type":"Steel","damage":15}],"special":[{"name":"Bug Buzz","type":"Bug","damage":75},{"name":"Night Slash","type":"Dark","damage":30},{"name":"X Scissor","type":"Bug","damage":35}]}},{"id":"124","name":"Jynx","classification":"Humanshape Pokémon","types":["Ice","Psychic"],"resistant":["Ice","Psychic"],"weaknesses":["Fire","Bug","Rock","Ghost","Dark","Steel"],"weight":{"minimum":"35.52kg","maximum":"45.67kg"},"height":{"minimum":"1.22m","maximum":"1.57m"},"fleeRate":0.09,"maxCP":1563,"maxHP":1716,"attacks":{"fast":[{"name":"Frost Breath","type":"Ice","damage":9},{"name":"Pound","type":"Normal","damage":7}],"special":[{"name":"Draining Kiss","type":"Fairy","damage":25},{"name":"Ice Punch","type":"Ice","damage":45},{"name":"Psyshock","type":"Psychic","damage":40}]}},{"id":"125","name":"Electabuzz","classification":"Electric Pokémon","types":["Electric"],"resistant":["Electric","Flying","Steel"],"weaknesses":["Ground"],"weight":{"minimum":"26.25kg","maximum":"33.75kg"},"height":{"minimum":"0.96m","maximum":"1.24m"},"fleeRate":0.09,"maxCP":1947,"maxHP":2119,"attacks":{"fast":[{"name":"Low Kick","type":"Fighting","damage":5},{"name":"Thunder Shock","type":"Electric","damage":5}],"special":[{"name":"Thunder","type":"Electric","damage":100},{"name":"Thunder Punch","type":"Electric","damage":40},{"name":"Thunderbolt","type":"Electric","damage":55}]}},{"id":"126","name":"Magmar","classification":"Spitfire Pokémon","types":["Fire"],"resistant":["Fire","Grass","Ice","Bug","Steel","Fairy"],"weaknesses":["Water","Ground","Rock"],"weight":{"minimum":"38.94kg","maximum":"50.06kg"},"height":{"minimum":"1.14m","maximum":"1.46m"},"fleeRate":0.09,"maxCP":2086,"maxHP":2265,"attacks":{"fast":[{"name":"Ember","type":"Fire","damage":10},{"name":"Karate Chop","type":"Fighting","damage":6}],"special":[{"name":"Fire Blast","type":"Fire","damage":100},{"name":"Fire Punch","type":"Fire","damage":40},{"name":"Flamethrower","type":"Fire","damage":55}]}},{"id":"127","name":"Pinsir","classification":"Stagbeetle Pokémon","types":["Bug"],"resistant":["Grass","Fighting","Ground"],"weaknesses":["Fire","Flying","Rock"],"weight":{"minimum":"48.13kg","maximum":"61.88kg"},"height":{"minimum":"1.31m","maximum":"1.69m"},"fleeRate":0.09,"maxCP":1950,"maxHP":2121,"attacks":{"fast":[{"name":"Fury Cutter","type":"Bug","damage":3},{"name":"Rock Smash","type":"Fighting","damage":15}],"special":[{"name":"Submission","type":"Fighting","damage":30},{"name":"Vice Grip","type":"Normal","damage":25},{"name":"X Scissor","type":"Bug","damage":35}]}},{"id":"128","name":"Tauros","classification":"Wild Bull Pokémon","types":["Normal"],"resistant":["Ghost"],"weaknesses":["Fighting"],"weight":{"minimum":"77.35kg","maximum":"99.45kg"},"height":{"minimum":"1.22m","maximum":"1.57m"},"fleeRate":0.09,"Common Capture Area":"Early reports that this Pokémon is likely to be found in: North America","North America":"Common Capture Area","maxCP":1686,"maxHP":1844,"attacks":{"fast":[{"name":"Tackle","type":"Normal","damage":12},{"name":"Zen Headbutt","type":"Psychic","damage":12}],"special":[{"name":"Earthquake","type":"Ground","damage":100},{"name":"Horn Attack","type":"Normal","damage":25},{"name":"Iron Head","type":"Steel","damage":30}]}},{"id":"129","name":"Magikarp","classification":"Fish Pokémon","types":["Water"],"resistant":["Fire","Water","Ice","Steel"],"weaknesses":["Electric","Grass"],"weight":{"minimum":"8.75kg","maximum":"11.25kg"},"height":{"minimum":"0.79m","maximum":"1.01m"},"fleeRate":0.15,"evolutionRequirements":{"amount":400,"name":"Magikarp candies"},"evolutions":[{"id":130,"name":"Gyarados"}],"maxCP":203,"maxHP":262,"attacks":{"fast":[{"name":"Splash","type":"Water","damage":0}],"special":[{"name":"Struggle","type":"Normal","damage":15}]}},{"id":"130","name":"Gyarados","classification":"Atrocious Pokémon","types":["Water","Flying"],"resistant":["Fire","Water","Fighting","Ground","Bug","Steel"],"weaknesses":["Electric","Rock"],"weight":{"minimum":"205.63kg","maximum":"264.38kg"},"height":{"minimum":"5.69m","maximum":"7.31m"},"fleeRate":0.07,"Previous evolution(s)":[{"id":129,"name":"Magikarp"}],"maxCP":2498,"maxHP":2688,"attacks":{"fast":[{"name":"Bite","type":"Dark","damage":6},{"name":"Dragon Breath","type":"Dragon","damage":6}],"special":[{"name":"Dragon Pulse","type":"Dragon","damage":65},{"name":"Hydro Pump","type":"Water","damage":90},{"name":"Twister","type":"Dragon","damage":25}]}},{"id":"131","name":"Lapras","classification":"Transport Pokémon","types":["Water","Ice"],"resistant":["Water","Ice"],"weaknesses":["Electric","Grass","Fighting","Rock"],"weight":{"minimum":"192.5kg","maximum":"247.5kg"},"height":{"minimum":"2.19m","maximum":"2.81m"},"fleeRate":0.09,"maxCP":2777,"maxHP":2980,"attacks":{"fast":[{"name":"Frost Breath","type":"Ice","damage":9},{"name":"Ice Shard","type":"Ice","damage":15}],"special":[{"name":"Blizzard","type":"Ice","damage":100},{"name":"Dragon Pulse","type":"Dragon","damage":65},{"name":"Ice Beam","type":"Ice","damage":65}]}},{"id":"132","name":"Ditto","classification":"Transform Pokémon","types":["Normal"],"resistant":["Ghost"],"weaknesses":["Fighting"],"weight":{"minimum":"3.5kg","maximum":"4.5kg"},"height":{"minimum":"0.26m","maximum":"0.34m"},"fleeRate":0.1,"maxCP":809,"maxHP":919,"attacks":{"fast":[{"name":"Pound","type":"Normal","damage":7}],"special":[{"name":"Struggle","type":"Normal","damage":15}]}},{"id":"133","name":"Eevee","classification":"Evolution Pokémon","types":["Normal"],"resistant":["Ghost"],"weaknesses":["Fighting"],"weight":{"minimum":"5.69kg","maximum":"7.31kg"},"height":{"minimum":"0.26m","maximum":"0.34m"},"fleeRate":0.1,"evolutionRequirements":{"amount":25,"name":"Eevee candies"},"evolutions":[{"id":134,"name":"Vaporeon"},{"id":135,"name":"Jolteon"},{"id":136,"name":"Flareon"}],"maxCP":957,"maxHP":1077,"attacks":{"fast":[{"name":"Quick Attack","type":"Normal","damage":10},{"name":"Tackle","type":"Normal","damage":12}],"special":[{"name":"Body Slam","type":"Normal","damage":40},{"name":"Dig","type":"Ground","damage":70},{"name":"Swift","type":"Normal","damage":30}]}},{"id":"134","name":"Vaporeon","classification":"Bubble Jet Pokémon","types":["Water"],"resistant":["Fire","Water","Ice","Steel"],"weaknesses":["Electric","Grass"],"weight":{"minimum":"25.38kg","maximum":"32.63kg"},"height":{"minimum":"0.88m","maximum":"1.13m"},"fleeRate":0.06,"Previous evolution(s)":[{"id":133,"name":"Eevee"}],"maxCP":2618,"maxHP":2816,"attacks":{"fast":[{"name":"Water Gun","type":"Water","damage":6}],"special":[{"name":"Aqua Tail","type":"Water","damage":45},{"name":"Hydro Pump","type":"Water","damage":90},{"name":"Water Pulse","type":"Water","damage":35}]}},{"id":"135","name":"Jolteon","classification":"Lightning Pokémon","types":["Electric"],"resistant":["Electric","Flying","Steel"],"weaknesses":["Ground"],"weight":{"minimum":"21.44kg","maximum":"27.56kg"},"height":{"minimum":"0.7m","maximum":"0.9m"},"fleeRate":0.06,"Previous evolution(s)":[{"id":133,"name":"Eevee"}],"maxCP":1968,"maxHP":2140,"attacks":{"fast":[{"name":"Thunder Shock","type":"Electric","damage":5}],"special":[{"name":"Discharge","type":"Electric","damage":35},{"name":"Thunder","type":"Electric","damage":100},{"name":"Thunderbolt","type":"Electric","damage":55}]}},{"id":"136","name":"Flareon","classification":"Flame Pokémon","types":["Fire"],"resistant":["Fire","Grass","Ice","Bug","Steel","Fairy"],"weaknesses":["Water","Ground","Rock"],"weight":{"minimum":"21.88kg","maximum":"28.13kg"},"height":{"minimum":"0.79m","maximum":"1.01m"},"fleeRate":0.06,"Previous evolution(s)":[{"id":133,"name":"Eevee"}],"maxCP":2448,"maxHP":2643,"attacks":{"fast":[{"name":"Ember","type":"Fire","damage":10}],"special":[{"name":"Fire Blast","type":"Fire","damage":100},{"name":"Flamethrower","type":"Fire","damage":55},{"name":"Heat Wave","type":"Fire","damage":80}]}},{"id":"137","name":"Porygon","classification":"Virtual Pokémon","types":["Normal"],"resistant":["Ghost"],"weaknesses":["Fighting"],"weight":{"minimum":"31.94kg","maximum":"41.06kg"},"height":{"minimum":"0.7m","maximum":"0.9m"},"fleeRate":0.09,"maxCP":1540,"maxHP":1691,"attacks":{"fast":[{"name":"Quick Attack","type":"Normal","damage":10},{"name":"Tackle","type":"Normal","damage":12}],"special":[{"name":"Discharge","type":"Electric","damage":35},{"name":"Psybeam","type":"Psychic","damage":40},{"name":"Signal Beam","type":"Bug","damage":45}]}},{"id":"138","name":"Omanyte","classification":"Spiral Pokémon","types":["Rock","Water"],"resistant":["Normal","Fire","Ice","Poison","Flying"],"weaknesses":["Electric","Grass","Fighting","Ground"],"weight":{"minimum":"6.56kg","maximum":"8.44kg"},"height":{"minimum":"0.35m","maximum":"0.45m"},"fleeRate":0.09,"evolutionRequirements":{"amount":50,"name":"Omanyte candies"},"evolutions":[{"id":139,"name":"Omastar"}],"maxCP":992,"maxHP":1119,"attacks":{"fast":[{"name":"Mud Shot","type":"Ground","damage":6},{"name":"Water Gun","type":"Water","damage":6}],"special":[{"name":"Ancient Power","type":"Rock","damage":35},{"name":"Brine","type":"Water","damage":25},{"name":"Rock Tomb","type":"Rock","damage":30}]}},{"id":"139","name":"Omastar","classification":"Spiral Pokémon","types":["Rock","Water"],"resistant":["Normal","Fire","Ice","Poison","Flying"],"weaknesses":["Electric","Grass","Fighting","Ground"],"weight":{"minimum":"30.63kg","maximum":"39.38kg"},"height":{"minimum":"0.88m","maximum":"1.13m"},"fleeRate":0.05,"Previous evolution(s)":[{"id":138,"name":"Omanyte"}],"maxCP":2058,"maxHP":2233,"attacks":{"fast":[{"name":"Rock Throw","type":"Rock","damage":12},{"name":"Water Gun","type":"Water","damage":6}],"special":[{"name":"Ancient Power","type":"Rock","damage":35},{"name":"Hydro Pump","type":"Water","damage":90},{"name":"Rock Slide","type":"Rock","damage":50}]}},{"id":"140","name":"Kabuto","classification":"Shellfish Pokémon","types":["Rock","Water"],"resistant":["Normal","Fire","Ice","Poison","Flying"],"weaknesses":["Electric","Grass","Fighting","Ground"],"weight":{"minimum":"10.06kg","maximum":"12.94kg"},"height":{"minimum":"0.44m","maximum":"0.56m"},"fleeRate":0.09,"evolutionRequirements":{"amount":50,"name":"Kabuto candies"},"evolutions":[{"id":141,"name":"Kabutops"}],"maxCP":975,"maxHP":1104,"attacks":{"fast":[{"name":"Mud Shot","type":"Ground","damage":6},{"name":"Scratch","type":"Normal","damage":6}],"special":[{"name":"Ancient Power","type":"Rock","damage":35},{"name":"Aqua Jet","type":"Water","damage":25},{"name":"Rock Tomb","type":"Rock","damage":30}]}},{"id":"141","name":"Kabutops","classification":"Shellfish Pokémon","types":["Rock","Water"],"resistant":["Normal","Fire","Ice","Poison","Flying"],"weaknesses":["Electric","Grass","Fighting","Ground"],"weight":{"minimum":"35.44kg","maximum":"45.56kg"},"height":{"minimum":"1.14m","maximum":"1.46m"},"fleeRate":0.05,"Previous evolution(s)":[{"id":140,"name":"Kabuto"}],"maxCP":1957,"maxHP":2130,"attacks":{"fast":[{"name":"Fury Cutter","type":"Bug","damage":3},{"name":"Mud Shot","type":"Ground","damage":6}],"special":[{"name":"Ancient Power","type":"Rock","damage":35},{"name":"Stone Edge","type":"Rock","damage":80},{"name":"Water Pulse","type":"Water","damage":35}]}},{"id":"142","name":"Aerodactyl","classification":"Fossil Pokémon","types":["Rock","Flying"],"resistant":["Normal","Fire","Poison","Flying","Bug"],"weaknesses":["Water","Electric","Ice","Rock","Steel"],"weight":{"minimum":"51.63kg","maximum":"66.38kg"},"height":{"minimum":"1.57m","maximum":"2.02m"},"fleeRate":0.09,"maxCP":1994,"maxHP":2165,"attacks":{"fast":[{"name":"Bite","type":"Dark","damage":6},{"name":"Steel Wing","type":"Steel","damage":15}],"special":[{"name":"Ancient Power","type":"Rock","damage":35},{"name":"Hyper Beam","type":"Normal","damage":120},{"name":"Iron Head","type":"Steel","damage":30}]}},{"id":"143","name":"Snorlax","classification":"Sleeping Pokémon","types":["Normal"],"resistant":["Ghost"],"weaknesses":["Fighting"],"weight":{"minimum":"402.5kg","maximum":"517.5kg"},"height":{"minimum":"1.84m","maximum":"2.36m"},"fleeRate":0.09,"maxCP":2901,"maxHP":3112,"attacks":{"fast":[{"name":"Lick","type":"Ghost","damage":5},{"name":"Zen Headbutt","type":"Psychic","damage":12}],"special":[{"name":"Body Slam","type":"Normal","damage":40},{"name":"Earthquake","type":"Ground","damage":100},{"name":"Hyper Beam","type":"Normal","damage":120}]}},{"id":"144","name":"Articuno","classification":"Freeze Pokémon","types":["Ice","Flying"],"resistant":["Grass","Ground","Bug"],"weaknesses":["Fire","Electric","Rock","Steel"],"weight":{"minimum":"48.48kg","maximum":"62.33kg"},"height":{"minimum":"1.49m","maximum":"1.91m"},"fleeRate":0.1,"Pokémon Class":"This is a LEGENDARY Pokémon.","LEGENDARY":"Pokémon Class","maxCP":2776,"maxHP":2978,"attacks":{"fast":[{"name":"Frost Breath","type":"Ice","damage":9}],"special":[{"name":"Blizzard","type":"Ice","damage":100},{"name":"Ice Beam","type":"Ice","damage":65},{"name":"Icy Wind","type":"Ice","damage":25}]}},{"id":"145","name":"Zapdos","classification":"Electric Pokémon","types":["Electric","Flying"],"resistant":["Grass","Fighting","Flying","Bug","Steel"],"weaknesses":["Ice","Rock"],"weight":{"minimum":"46.02kg","maximum":"59.17kg"},"height":{"minimum":"1.4m","maximum":"1.8m"},"fleeRate":0.1,"Pokémon Class":"This is a LEGENDARY Pokémon.","LEGENDARY":"Pokémon Class","maxCP":2907,"maxHP":3114,"attacks":{"fast":[{"name":"Thunder Shock","type":"Electric","damage":5}],"special":[{"name":"Discharge","type":"Electric","damage":35},{"name":"Thunder","type":"Electric","damage":100},{"name":"Thunderbolt","type":"Electric","damage":55}]}},{"id":"146","name":"Moltres","classification":"Flame Pokémon","types":["Fire","Flying"],"resistant":["Fire","Grass","Fighting","Bug","Steel","Fairy"],"weaknesses":["Water","Electric","Rock"],"weight":{"minimum":"52.5kg","maximum":"67.5kg"},"height":{"minimum":"1.75m","maximum":"2.25m"},"fleeRate":0.1,"Pokémon Class":"This is a LEGENDARY Pokémon.","LEGENDARY":"Pokémon Class","maxCP":3028,"maxHP":3240,"attacks":{"fast":[{"name":"Ember","type":"Fire","damage":10}],"special":[{"name":"Fire Blast","type":"Fire","damage":100},{"name":"Flamethrower","type":"Fire","damage":55},{"name":"Heat Wave","type":"Fire","damage":80}]}},{"id":"147","name":"Dratini","classification":"Dragon Pokémon","types":["Dragon"],"resistant":["Fire","Water","Electric","Grass"],"weaknesses":["Ice","Dragon","Fairy"],"weight":{"minimum":"2.89kg","maximum":"3.71kg"},"height":{"minimum":"1.57m","maximum":"2.02m"},"fleeRate":0.09,"evolutionRequirements":{"amount":25,"name":"Dratini candies"},"evolutions":[{"id":148,"name":"Dragonair"}],"maxCP":867,"maxHP":983,"attacks":{"fast":[{"name":"Dragon Breath","type":"Dragon","damage":6}],"special":[{"name":"Aqua Tail","type":"Water","damage":45},{"name":"Twister","type":"Dragon","damage":25},{"name":"Wrap","type":"Normal","damage":25}]}},{"id":"148","name":"Dragonair","classification":"Dragon Pokémon","types":["Dragon"],"resistant":["Fire","Water","Electric","Grass"],"weaknesses":["Ice","Dragon","Fairy"],"weight":{"minimum":"14.44kg","maximum":"18.56kg"},"height":{"minimum":"3.5m","maximum":"4.5m"},"fleeRate":0.06,"Previous evolution(s)":[{"id":147,"name":"Dratini"}],"evolutionRequirements":{"amount":100,"name":"Dratini candies"},"evolutions":[{"id":149,"name":"Dragonite"}],"maxCP":1593,"maxHP":1747,"attacks":{"fast":[{"name":"Dragon Breath","type":"Dragon","damage":6}],"special":[{"name":"Aqua Tail","type":"Water","damage":45},{"name":"Dragon Pulse","type":"Dragon","damage":65},{"name":"Wrap","type":"Normal","damage":25}]}},{"id":"149","name":"Dragonite","classification":"Dragon Pokémon","types":["Dragon","Flying"],"resistant":["Fire","Water","Grass","Fighting","Ground","Bug"],"weaknesses":["Ice","Rock","Dragon","Fairy"],"weight":{"minimum":"183.75kg","maximum":"236.25kg"},"height":{"minimum":"1.93m","maximum":"2.48m"},"fleeRate":0.05,"Previous evolution(s)":[{"id":147,"name":"Dratini"},{"id":148,"name":"Dragonair"}],"maxCP":3280,"maxHP":3500,"attacks":{"fast":[{"name":"Dragon Breath","type":"Dragon","damage":6},{"name":"Steel Wing","type":"Steel","damage":15}],"special":[{"name":"Dragon Claw","type":"Dragon","damage":35},{"name":"Dragon Pulse","type":"Dragon","damage":65},{"name":"Hyper Beam","type":"Normal","damage":120}]}},{"id":"150","name":"Mewtwo","classification":"Genetic Pokémon","types":["Psychic"],"resistant":["Fighting","Psychic"],"weaknesses":["Bug","Ghost","Dark"],"weight":{"minimum":"106.75kg","maximum":"137.25kg"},"height":{"minimum":"1.75m","maximum":"2.25m"},"fleeRate":0.1,"Pokémon Class":"This is a LEGENDARY Pokémon.","LEGENDARY":"Pokémon Class","maxCP":3904,"maxHP":4144,"attacks":{"fast":[{"name":"Confusion","type":"Psychic","damage":15},{"name":"Psycho Cut","type":"Psychic","damage":7}],"special":[{"name":"Hyper Beam","type":"Normal","damage":120},{"name":"Psychic","type":"Psychic","damage":55},{"name":"Shadow Ball","type":"Ghost","damage":45}]}},{"id":"151","name":"Mew","classification":"New Species Pokémon","types":["Psychic"],"resistant":["Fighting","Psychic"],"weaknesses":["Bug","Ghost","Dark"],"weight":{"minimum":"3.5kg","maximum":"4.5kg"},"height":{"minimum":"0.35m","maximum":"0.45m"},"fleeRate":0.1,"Pokémon Class":"This is a MYTHIC Pokémon.","MYTHIC":"Pokémon Class","maxCP":3087,"maxHP":3299,"attacks":{"fast":[{"name":"Pound","type":"Normal","damage":7}],"special":[{"name":"Dragon Pulse","type":"Dragon","damage":65},{"name":"Earthquake","type":"Ground","damage":100},{"name":"Fire Blast","type":"Fire","damage":100},{"name":"Hurricane","type":"Flying","damage":80},{"name":"Hyper Beam","type":"Normal","damage":120},{"name":"Moonblast","type":"Fairy","damage":85},{"name":"Psychic","type":"Psychic","damage":55},{"name":"Solar Beam","type":"Grass","damage":120},{"name":"Thunder","type":"Electric","damage":100}]}}]}')},function(t){t.exports=JSON.parse('{"posts":[{"id":101,"author_id":1,"title":"Getting Started with JSON","slug":"getting-started-with-json","excerpt":"Learn the basics of JSON syntax and structure.","status":"published","views":1542,"comments":12,"created":"2024-01-05","tags":["json","tutorial","beginner"]},{"id":102,"author_id":2,"title":"Advanced JSON Schema Validation","slug":"advanced-json-schema-validation","excerpt":"Deep dive into JSON Schema for robust data validation.","status":"published","views":892,"comments":8,"created":"2024-01-08","tags":["json","schema","validation"]},{"id":103,"author_id":1,"title":"JSON vs XML: A Comparison","slug":"json-vs-xml-comparison","excerpt":"Exploring the differences between JSON and XML.","status":"published","views":2103,"comments":24,"created":"2024-01-10","tags":["json","xml","comparison"]},{"id":104,"author_id":3,"title":"Working with JSON in JavaScript","slug":"working-with-json-javascript","excerpt":"Master JSON parsing and stringification in JS.","status":"published","views":3421,"comments":31,"created":"2024-01-12","tags":["json","javascript","tutorial"]},{"id":105,"author_id":2,"title":"RESTful APIs and JSON","slug":"restful-apis-and-json","excerpt":"How JSON became the standard for REST APIs.","status":"published","views":1876,"comments":15,"created":"2024-01-14","tags":["json","api","rest"]},{"id":106,"author_id":4,"title":"JSON Performance Tips","slug":"json-performance-tips","excerpt":"Optimize your JSON handling for better performance.","status":"draft","views":0,"comments":0,"created":"2024-01-15","tags":["json","performance","optimization"]},{"id":107,"author_id":1,"title":"Common JSON Mistakes","slug":"common-json-mistakes","excerpt":"Avoid these common pitfalls when working with JSON.","status":"published","views":4532,"comments":42,"created":"2024-01-03","tags":["json","mistakes","debugging"]},{"id":108,"author_id":3,"title":"JSON in Python","slug":"json-in-python","excerpt":"Complete guide to JSON handling in Python.","status":"published","views":2891,"comments":19,"created":"2024-01-07","tags":["json","python","tutorial"]}]}')},function(t){t.exports=JSON.parse('{"users":[{"id":1,"username":"johndoe","email":"john.doe@example.com","name":{"first":"John","last":"Doe"},"age":32,"role":"admin","active":true,"created":"2023-01-15"},{"id":2,"username":"janesmith","email":"jane.smith@example.com","name":{"first":"Jane","last":"Smith"},"age":28,"role":"editor","active":true,"created":"2023-02-20"},{"id":3,"username":"bobwilson","email":"bob.wilson@example.com","name":{"first":"Bob","last":"Wilson"},"age":45,"role":"viewer","active":false,"created":"2023-03-10"},{"id":4,"username":"alicebrown","email":"alice.brown@example.com","name":{"first":"Alice","last":"Brown"},"age":35,"role":"editor","active":true,"created":"2023-04-05"},{"id":5,"username":"charliedavis","email":"charlie.davis@example.com","name":{"first":"Charlie","last":"Davis"},"age":29,"role":"viewer","active":true,"created":"2023-05-12"},{"id":6,"username":"emilyjohnson","email":"emily.johnson@example.com","name":{"first":"Emily","last":"Johnson"},"age":31,"role":"admin","active":true,"created":"2023-06-18"},{"id":7,"username":"franklee","email":"frank.lee@example.com","name":{"first":"Frank","last":"Lee"},"age":42,"role":"viewer","active":false,"created":"2023-07-22"},{"id":8,"username":"gracekim","email":"grace.kim@example.com","name":{"first":"Grace","last":"Kim"},"age":26,"role":"editor","active":true,"created":"2023-08-30"},{"id":9,"username":"henrymiller","email":"henry.miller@example.com","name":{"first":"Henry","last":"Miller"},"age":38,"role":"viewer","active":true,"created":"2023-09-14"},{"id":10,"username":"isabellawang","email":"isabella.wang@example.com","name":{"first":"Isabella","last":"Wang"},"age":33,"role":"admin","active":true,"created":"2023-10-25"},{"id":11,"username":"jackthompson","email":"jack.thompson@example.com","name":{"first":"Jack","last":"Thompson"},"age":27,"role":"editor","active":true,"created":"2023-11-08"},{"id":12,"username":"katiegarcia","email":"katie.garcia@example.com","name":{"first":"Katie","last":"Garcia"},"age":30,"role":"viewer","active":false,"created":"2023-12-01"}]}')},function(t,e,i){"use strict";const l={name:"login",template:i(82),data:()=>({id:null}),methods:{idInvalid(){return null===this.id},login(){this.$emit("login",this.id)}}};t.exports=l},function(t,e){t.exports='
\n

\n Login\n

\n
\n
\n
\n \n
\n \n
\n
\n\n
\n \n
\n
\n
\n
\n'},function(t,e){t.exports='
\n
\n
\n

\n \n {{ promo.emoji || \'👋 \'}}\n \n {{ promo.snippet }}\n \n \n \n \n

\n
\n
\n \n
\n
\n
\n'},function(t,e,i){"use strict";const l={name:"sdk",template:i(85),data:()=>({sdks:[{name:"pantry-node",platform:"Node.js",author:"Team Pantry",link:"https://github.com/imRohan/pantry-node",verified:!0},{name:"bash-client",platform:"Bash",author:"Team Pantry",link:"https://github.com/imRohan/Pantry/tree/master/client-libraries/Bash",verified:!0},{name:"pantryclient-esp",platform:"ESP32/ESP8266",author:"Zakrzewiaczek",link:"https://github.com/Zakrzewiaczek/pantryclient-esp",verified:!1},{name:"libPantryDotNet",platform:".Net",author:"Krutonium",link:"https://github.com/Krutonium/libPantryDotNet",verified:!1},{name:"pantry-cloud",platform:"Node.js",author:"rdarida",link:"https://github.com/rdarida/pantry-cloud",verified:!1},{name:"pantry_wrapper",platform:"Python",author:"alexmulligan",link:"https://github.com/alexmulligan/pantry_wrapper",verified:!1},{name:"pantry-nim",platform:"Nim",author:"Jake Leahy",link:"https://github.com/ire4ever1190/pantry-nim",verified:!1},{name:"JPantry",platform:"Java",author:"Magnus Gunnarsson",link:"https://github.com/EnderCrypt/JPantry",verified:!1},{name:"pantry-cloud",platform:"Python",author:"Sarvesh Kumar Dwivedi",link:"https://github.com/sarvesh4396/pantry-cloud",verified:!1},{name:"pantry-cloud",platform:"PHP",author:"Seba",link:"https://github.com/sebaOfficial/pantry-cloud/",verified:!1},{name:"pantry_client",platform:"GO",author:"Atoo35",link:"https://github.com/Atoo35/pantry_client/",verified:!1},{name:"pantry",platform:"Dart",author:"Georges",link:"https://github.com/georges-ph/pantry",verified:!1},{name:"pantry_client",platform:"Rust",author:"Atoo35",link:"https://github.com/Atoo35/pantry_client_rust/",verified:!1},{name:"UniPantry",platform:"Unity",author:"Dmitry Koleev",link:"https://github.com/dkoleev/UniPantry/",verified:!1},{name:"pantry",platform:"Common Lisp",author:"Aleksandar Simić",link:"https://github.com/dotemacs/pantry/",verified:!1},{name:"pantry",platform:"Nushell",author:"Shaoyan Ji",link:"https://gist.github.com/shaoyanji/dbc5d6e8fe8abb338226a28cd5f8d6cd",verified:!1}],defaultBadgeClasses:"flex-shrink-0 inline-block px-2 py-0.5\n text-xs font-medium\n rounded-full"}),methods:{getBadgeClass(t){var e;return null!==(e={"node.js":"bg-green-200",bash:"bg-gray-200",python:"bg-yellow-200",".net":"bg-blue-200",nim:"bg-yellow-400",java:"bg-red-400",dart:"bg-blue-500",nushell:"bg-green-200"}[t.trim().toLowerCase()])&&void 0!==e?e:"bg-gray-200"}}};t.exports=l},function(t,e){t.exports='
\n
\n
\n
\n
\n

\n \n Libraries and SDK\'s\n \n \n Developer Tools\n \n

\n

\n Pantry has official libraries which will be maintained and supported\n by the team going forward.\n\n There are also several third-party libraries built by kind\n developers (like yourself) that we\'d like to showcase.\n

\n\n \n
\n
\n
\n
\n
\n'},function(t,e,i){"use strict";var l=this&&this.__awaiter||function(t,e,i,l){return new(i||(i=Promise))((function(a,n){function s(t){try{c(l.next(t))}catch(t){n(t)}}function d(t){try{c(l.throw(t))}catch(t){n(t)}}function c(t){var e;t.done?a(t.value):(e=t.value,e instanceof i?e:new i((function(t){t(e)}))).then(s,d)}c((l=l.apply(t,e||[])).next())}))};const a=i(4),n=i(3),s=i(87),{IView:d}=i(2),c=i(88),o=i(90),m=i(92),r=i(94),b=i(96),g=i(98),Z=i(22),h=n.apiPath,W={name:"home",template:s,components:{initialSignup:c,finishSignup:o,features:m,example:r,stats:b,quote:g,banner:Z},data:()=>({email:null,name:null,finishOnboarding:!1,siteKey:"6Leqqt4aAAAAAFCxWwcRO3YB6zuKKR2CGm8ACRuJ",promo:{emoji:"💪",snippet:"Integrate Pantry using our SDK!",title:"Speed up your development by using one of our many SDKs!"}}),methods:{beginSignup(t){this.email=t,this.finishOnboarding=!0},beginRegistration(t){this.name=t,this.createNewPantry()},showReCaptcha(){window.grecaptcha.render("recaptcha",{sitekey:this.siteKey})},createNewPantry(){return l(this,void 0,void 0,(function*(){const t=window.grecaptcha.getResponse();this.accountCreationInProgress=!0;const{data:e}=yield a({method:"POST",data:{name:this.name,description:"defaultDescription",contactEmail:this.email,recaptchaResponse:t},url:h+"/pantry/create"});this.$emit("account-created",e)}))},bannerCTAClicked(){this.changeView(d.sdk)},changeView(t){this.$emit("change-view",t)}}};t.exports=W},function(t,e){t.exports='
\n \n
\n
\n
\n
\n
\n \n \n
\n
\n
\n \n
\n
\n \n \n \n \n
\n
\n'},function(t,e,i){"use strict";const l={name:"initialSignup",template:i(89),data:()=>({email:null}),methods:{showReCaptcha(){this.$emit("show-recaptcha")},storeEmail(){this.$emit("store-email",this.email)},signupValid(){return/^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/.test(String(this.email).toLowerCase())}}};t.exports=l},function(t,e){t.exports='
\n

\n Free\n yourself from\n data storage\n woes.\n

\n

\n Focus your efforts on building your next project and leave the\n data storage to us. We help speed up your development time,\n letting you build awesome things fast!\n

\n
\n
\n
\n
\n \n \n
\n
\n \n
\n
\n

\n Sorry, but that email is invalid.\n

\n

\n Don\'t worry, we\'ll only contact you if it\'s important.\n

\n
\n
\n
\n'},function(t,e,i){"use strict";const l={name:"finishSignup",template:i(91),data:()=>({name:null}),methods:{storeName(){this.$emit("store-name",this.name)}}};t.exports=l},function(t,e){t.exports='
\n

\n Almost there, just\n \n one more step!\n \n

\n

\n Let\'s give your pantry a name! This could be the name of your project\n or anything that means something to you.\n

\n
\n
\n
\n
\n \n \n
\n
\n \n
\n
\n

\n Give your Pantry a creative name\n

\n
\n
\n
\n'},function(t,e,i){"use strict";const l={name:"features",template:i(93),data:()=>({}),methods:{},mounted(){}};t.exports=l},function(t,e){t.exports='
\n
\n

Effortless

\n

A better JSON storage solution

\n

\n CRUD your data on the cloud in just 2 minutes either by using our\n API or dashboard. Perfect for small projects and hackathons!\n

\n
\n\n
\n
\n
\n
\n
\n \n \n \n \n \n
\n

\n Generous Storage Limit\n

\n
\n
\n Your Pantry can have 100 baskets (JSON objects), each with a max size\n of 1.44mb. That\'s a lot of JSON, and we think it\'s a great starting\n point for developers.\n
\n
\n\n
\n
\n
\n \n \n \n
\n

\n Supports JSON Schema\n

\n
\n
\n Data integrity is the backbone of any good project. So stop worrying\n about malformed data breaking your frontend by enabling\n optional JSON schema validation for each of your baskets.\n
\n
\n\n
\n
\n
\n \n \n \n
\n

\n Simple API\n

\n
\n
\n We\'ve built a very straightforward and easy-to-use API which you can\n use to CRUD your Pantry\'s baskets. Simple and intuitive - that\'s the\n goal.\n
\n
\n\n
\n
\n
\n \n \n \n
\n

\n Generate Public URLS\n

\n
\n
\n Expose your data to users by using public urls. These are\n "share anywhere" read only paths that protect your Pantry\'s ID and\n Basket details.\n
\n
\n\n
\n
\n
\n \n
\n

\n Powerful Dashboard \n

\n
\n
\n We also offer a slick dashboard which you can use to interact with\n your Pantry\'s baskets. This intuitive interface is especially helpful\n when debugging your application.\n
\n
\n\n
\n
\n
\n \n \n \n
\n

\n 100% Open Source\n

\n
\n
\n This project is open-source and supported by a wonderful group of\n developers who continue to improve the platform.\n
\n \n
\n
\n
\n
\n
\n
\n'},function(t,e,i){"use strict";const l=i(95),{IView:a}=i(2),n={name:"example",template:l,methods:{showSDK(){this.$emit("change-view",a.sdk)}}};t.exports=n},function(t,e){t.exports='
\n
\n
\n
\n
\n

\n Jump Right In\n

\n

\n Quickly add Pantry to your project using one of our\n easy-to-use client libraries.\n

\n
\n \n npm install pantry-node\n \n \n \n \n
\n
\n \n
\n
\n
\n
\n'},function(t,e,i){"use strict";const l={name:"stats",template:i(97),data:()=>({}),methods:{},mounted(){}};t.exports=l},function(t,e){t.exports='
\n
\n
\n

\n Trusted by developers from over 100 countries\n

\n

\n Here\'s a snapshot of what we\'ve accomplished in the last month\n

\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
Data Served
\n
23GB
\n
\n
\n
Active Projects
\n
1230+
\n
\n
\n
Requests Handled
\n
2.57M
\n
\n
\n
\n
\n
\n
\n
\n'},function(t,e,i){"use strict";const l={name:"quote",template:i(99),data:()=>({}),methods:{},mounted(){}};t.exports=l},function(t,e){t.exports='
\n
\n \n Workcation\n \n \n \n \n \n \n \n\n
\n
\n
\n

\n “\n If you have a simple application that needs a database - don\'t setup\n a database. Pantry let\'s you store 100mb of JSON, while attaching a\n CRUD interface to it. Kind of like TinyDB for Python.\n ”\n

\n
\n \n
\n
\n
\n

\n “\n I think Pantry is a great option for my project/for\n testing, I currently have a project with over 10,000 users alone!\n and I think Pantry is a nice way to get that sorted, it\'s free and\n uses basic JSON.\n ”\n

\n
\n
\n
\n
\n
\n SalmonStudios\n
\n\n \n\n
\n Game Studio\n
\n
\n
\n
\n
\n
\n
\n

\n “\n Pantry\'s simple design, and features have been instrumental in\n realizing [my] little project\n ”\n

\n
\n
\n
\n
\n
\n Somajit Dey\n
\n\n \n\n
\n Department of Physics, University of Calcutta\n
\n
\n
\n
\n
\n
\n
\n
\n'},function(t,e,i){"use strict";const l=i(101),{IView:a}=i(2),n={name:"onboarding",template:l,props:["pantryID"],data:()=>({}),methods:{getStarted(){this.$emit("change-view",a.dashboard)},createSession(){sessionStorage.setItem("pantry-id",this.pantryID)}},mounted(){this.createSession()}};t.exports=n},function(t,e){t.exports='
\n
\n
\n
\n
\n

\n \n Success!\n \n \n Save your PantryID\n \n

\n

\n Here is your PantryID! Think of this as your API key, and\n keep this safe as we won\'t be sharing it with you again. Once you\'ve \n saved it somewhere, hit the button below and we\'ll show you how to\n add items to your pantry.\n

\n\n

\n {{ pantryID }}\n

\n\n \n
\n
\n
\n
\n
\n'},function(t,e,i){"use strict";const l={name:"about",template:i(103),props:[],components:{faq:i(104)},data:()=>({questions:[{title:"What is Pantry?",answer:"Pantry is a free data storage service which allows users to manage\n a collection of JSON objects. It is great for small to medium sized projects,\n and can be interacted with through a RESTful API or via a dashboard."},{title:"What is a Basket?",answer:'A "Basket" is one JSON object. Each Pantry can have up to 100 baskets\n held within it, each with its own human-readable name.'},{title:"How is my data stored?",answer:"Every basket is encrypted using the AES-256 encryption scheme and is securely\n stored on our servers after being properly sanitized."},{title:"Who can access my Pantry & Baskets?",answer:'You can share direct links to your baskets (GET & POST), or\n a read-only (GET) "public". Public links are a great way to allow\n anyone to read the contents of a specific basket but not modify them.'},{title:"What are the limitations?",answer:"A Pantry can have up to 100 baskets (JSON objects), each with a max size\n of 1.44mb per basket. API requests are limited to 2 calls per second. That's it."},{title:"How long will my data be stored for?",answer:"Data is stored until you no longer need it. Users can choose to delete\n their data from Pantry at any time. However, inactive baskets will be removed after 30 days."}]}),methods:{}};t.exports=l},function(t,e){t.exports='
\n
\n
\n
\n
\n

\n \n Learn about Pantry\n \n \n Frequently Asked Questions\n \n

\n
\n \n
\n
\n
\n \n
\n'},function(t,e,i){"use strict";const l={name:"faq",template:i(105),props:["questions"],data:()=>({})};t.exports=l},function(t,e){t.exports='
\n
\n
\n

\n Contribute\n

\n

\n Pantry is open-source, and is maintained by\n \n Rohan Likhite.\n \n If you\'d like to help develop Pantry, or have an issue to report,\n please visit the\n \n GitHub repo\n .\n

\n

\n Sponsor\n

\n

\n To help with server costs, please consider sponsoring the project\n via\n \n GitHub Sponsors.\n \n

\n

\n Looking for more information?\n

\n

\n Can’t find the answer you’re looking for? Ask the developers directly\n by\n starting a \n discussion on GitHub.\n

\n
\n
\n
\n \n
\n
\n
\n
\n'},function(t,e,i){"use strict";const l=i(107),a=i(3),{IView:n}=i(2),s=i(108),d=a.docsPath,c={name:"topbar",template:l,props:["view"],components:{headerBar:s},methods:{showAbout(){this.$emit("change-view",n.about)},showDocs(){window.location.href=d},showDashboard(){this.$emit("change-view",n.dashboard)},goHome(){this.$emit("change-view",n.home)},showSDK(){this.$emit("change-view",n.sdk)},topbarClass(){return this.view!==n.home?"bg-orange-100 pb-52":""}}};t.exports=c},function(t,e){t.exports='
\n
\n \n
\n
\n\n'},function(t,e,i){"use strict";const l={name:"headerBar",template:i(109),props:["view"],data:()=>({}),methods:{}};t.exports=l},function(t,e){t.exports='\n'},function(t,e,i){"use strict";const l={name:"bottomBar",template:i(111),props:[],methods:{}};t.exports=l},function(t,e){t.exports='\n'}]); //# sourceMappingURL=bundle.js.map \ No newline at end of file diff --git a/dist/src/bundle.js.map b/dist/src/bundle.js.map index 3db9b30..88fc411 100644 --- a/dist/src/bundle.js.map +++ b/dist/src/bundle.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./node_modules/axios/lib/utils.js","webpack:///./node_modules/vue-json-editor/assets/img/jsoneditor-icons.svg","webpack:///./src/interfaces/view.ts","webpack:///./src/app/config.ts","webpack:///./node_modules/axios/index.js","webpack:///(webpack)/buildin/global.js","webpack:///./node_modules/css-loader/lib/css-base.js","webpack:///./node_modules/style-loader/lib/addStyles.js","webpack:///./node_modules/axios/lib/defaults.js","webpack:///./node_modules/process/browser.js","webpack:///./node_modules/css-loader/lib/url/escape.js","webpack:///./node_modules/axios/lib/helpers/bind.js","webpack:///./node_modules/axios/lib/helpers/buildURL.js","webpack:///./node_modules/axios/lib/core/enhanceError.js","webpack:///./node_modules/axios/lib/adapters/xhr.js","webpack:///./node_modules/axios/lib/core/createError.js","webpack:///./node_modules/axios/lib/cancel/isCancel.js","webpack:///./node_modules/axios/lib/core/mergeConfig.js","webpack:///./node_modules/axios/lib/cancel/Cancel.js","webpack:///./node_modules/vue-json-editor/vue-json-editor.vue?f708","webpack:///./src/app/components/modal.ts","webpack:///./src/app/components/banner.ts","webpack:///./node_modules/vue-json-editor/vue-json-editor.vue?5343","webpack:///./node_modules/vue-json-editor/vue-json-editor.vue?fb06","webpack:///node_modules/vue-json-editor/vue-json-editor.vue","webpack:///./node_modules/vue-json-editor/vue-json-editor.vue","webpack:///./node_modules/vue-loader/lib/runtime/componentNormalizer.js","webpack:///./node_modules/vue-json-editor/assets/jsoneditor.js","webpack:///./src/app/index.ts","webpack:///./node_modules/vue/dist/vue.min.js","webpack:///./node_modules/timers-browserify/main.js","webpack:///./node_modules/setimmediate/setImmediate.js","webpack:///./src/app/scss/main.scss?e2bf","webpack:///./src/app/scss/main.scss","webpack:///./src/app/assets/MeditatingDoodle.svg","webpack:///./src/app/assets/example.svg","webpack:///./node_modules/style-loader/lib/urls.js","webpack:///./src/app/components/mainContent.ts","webpack:///./src/app/templates/mainContent.html","webpack:///./src/app/components/dashboard.ts","webpack:///./node_modules/axios/lib/axios.js","webpack:///./node_modules/axios/lib/core/Axios.js","webpack:///./node_modules/axios/lib/core/InterceptorManager.js","webpack:///./node_modules/axios/lib/core/dispatchRequest.js","webpack:///./node_modules/axios/lib/core/transformData.js","webpack:///./node_modules/axios/lib/helpers/normalizeHeaderName.js","webpack:///./node_modules/axios/lib/core/settle.js","webpack:///./node_modules/axios/lib/helpers/cookies.js","webpack:///./node_modules/axios/lib/core/buildFullPath.js","webpack:///./node_modules/axios/lib/helpers/isAbsoluteURL.js","webpack:///./node_modules/axios/lib/helpers/combineURLs.js","webpack:///./node_modules/axios/lib/helpers/parseHeaders.js","webpack:///./node_modules/axios/lib/helpers/isURLSameOrigin.js","webpack:///./node_modules/axios/lib/helpers/validator.js","webpack:///./node_modules/axios/lib/cancel/CancelToken.js","webpack:///./node_modules/axios/lib/helpers/spread.js","webpack:///./node_modules/axios/lib/helpers/isAxiosError.js","webpack:///./src/app/templates/dashboard.html","webpack:///./src/app/components/explorer.ts","webpack:///./node_modules/vue-json-editor/assets/jsoneditor.css?d672","webpack:///./node_modules/vue-json-editor/assets/jsoneditor.css","webpack:///./node_modules/vue-json-editor/vue-json-editor.vue?4707","webpack:///./node_modules/vue-json-editor/vue-json-editor.vue?9e61","webpack:///./src/app/templates/explorer.html","webpack:///./src/app/components/changelog.ts","webpack:///./src/app/templates/changelog.html","webpack:///./src/app/components/explorerEmpty.ts","webpack:///./src/app/templates/explorerEmpty.html","webpack:///./src/app/components/explorerOnboarding.ts","webpack:///./src/app/templates/explorerOnboarding.html","webpack:///./src/app/components/basket.ts","webpack:///./src/app/templates/basket.html","webpack:///./src/app/templates/modal.html","webpack:///./src/app/components/login.ts","webpack:///./src/app/templates/login.html","webpack:///./src/app/templates/banner.html","webpack:///./src/app/components/sdk.ts","webpack:///./src/app/templates/sdk.html","webpack:///./src/app/components/home.ts","webpack:///./src/app/templates/home.html","webpack:///./src/app/components/initialSignup.ts","webpack:///./src/app/templates/initialSignup.html","webpack:///./src/app/components/finishSignup.ts","webpack:///./src/app/templates/finishSignup.html","webpack:///./src/app/components/features.ts","webpack:///./src/app/templates/features.html","webpack:///./src/app/components/example.ts","webpack:///./src/app/templates/example.html","webpack:///./src/app/components/stats.ts","webpack:///./src/app/templates/stats.html","webpack:///./src/app/components/quote.ts","webpack:///./src/app/templates/quote.html","webpack:///./src/app/components/onboarding.ts","webpack:///./src/app/templates/onboarding.html","webpack:///./src/app/components/about.ts","webpack:///./src/app/templates/about.html","webpack:///./src/app/components/faq.ts","webpack:///./src/app/templates/faq.html","webpack:///./src/app/components/topbar.ts","webpack:///./src/app/templates/topbar.html","webpack:///./src/app/components/headerBar.ts","webpack:///./src/app/templates/headerBar.html","webpack:///./src/app/components/bottomBar.ts","webpack:///./src/app/templates/bottomBar.html"],"names":["installedModules","__webpack_require__","moduleId","exports","module","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","toString","isArray","val","isUndefined","isObject","isPlainObject","getPrototypeOf","isFunction","forEach","obj","fn","length","isArrayBuffer","isBuffer","constructor","isFormData","FormData","isArrayBufferView","ArrayBuffer","isView","buffer","isString","isNumber","isDate","isFile","isBlob","isStream","pipe","isURLSearchParams","URLSearchParams","isStandardBrowserEnv","navigator","product","window","document","merge","result","assignValue","slice","arguments","extend","a","b","thisArg","trim","str","replace","stripBOM","content","charCodeAt","IView","apiPath","docsPath","g","this","Function","e","useSourceMap","list","map","item","cssMapping","btoa","sourceMapping","sourceMap","unescape","encodeURIComponent","JSON","stringify","sourceURLs","sources","source","sourceRoot","concat","join","cssWithMappingToString","mediaQuery","alreadyImportedModules","id","push","memo","stylesInDom","isOldIE","all","atob","apply","getTarget","target","querySelector","getElement","styleTarget","HTMLIFrameElement","contentDocument","head","singleton","singletonCounter","stylesInsertedAtTop","fixUrls","addStylesToDom","styles","options","domStyle","refs","j","parts","addStyle","listToStyles","newStyles","base","part","css","media","insertStyleElement","style","insertInto","Error","lastStyleElementInsertedAtTop","insertAt","nextSibling","insertBefore","appendChild","firstChild","before","removeStyleElement","parentNode","removeChild","idx","indexOf","splice","createStyleElement","createElement","undefined","attrs","type","addAttrs","el","keys","setAttribute","update","remove","transform","styleIndex","applyToSingletonTag","URL","createObjectURL","revokeObjectURL","Blob","link","rel","createLinkElement","updateLink","href","applyToTag","newObj","DEBUG","newList","mayRemove","textStore","replaceText","index","replacement","filter","Boolean","styleSheet","cssText","cssNode","createTextNode","childNodes","autoFixUrls","convertToAbsoluteUrls","blob","oldSrc","utils","normalizeHeaderName","enhanceError","DEFAULT_CONTENT_TYPE","setContentTypeIfUnset","headers","adapter","defaults","transitional","silentJSONParsing","forcedJSONParsing","clarifyTimeoutError","XMLHttpRequest","process","transformRequest","data","rawValue","parser","encoder","parse","stringifySafely","transformResponse","strictJSONParsing","responseType","timeout","xsrfCookieName","xsrfHeaderName","maxContentLength","maxBodyLength","validateStatus","status","common","method","cachedSetTimeout","cachedClearTimeout","defaultSetTimout","defaultClearTimeout","runTimeout","fun","setTimeout","clearTimeout","currentQueue","queue","draining","queueIndex","cleanUpNextTick","drainQueue","len","run","marker","runClearTimeout","Item","array","noop","nextTick","args","Array","title","browser","env","argv","version","versions","on","addListener","once","off","removeListener","removeAllListeners","emit","prependListener","prependOnceListener","listeners","binding","cwd","chdir","dir","umask","url","test","encode","params","paramsSerializer","serializedParams","v","toISOString","hashmarkIndex","error","config","code","request","response","isAxiosError","toJSON","message","description","number","fileName","lineNumber","columnNumber","stack","settle","cookies","buildURL","buildFullPath","parseHeaders","isURLSameOrigin","createError","Promise","resolve","reject","requestData","requestHeaders","auth","username","password","Authorization","fullPath","baseURL","onloadend","responseHeaders","getAllResponseHeaders","responseText","statusText","open","toUpperCase","onreadystatechange","readyState","responseURL","onabort","onerror","ontimeout","timeoutErrorMessage","xsrfValue","withCredentials","read","toLowerCase","setRequestHeader","onDownloadProgress","addEventListener","onUploadProgress","upload","cancelToken","promise","then","cancel","abort","send","__CANCEL__","config1","config2","valueFromConfig2Keys","mergeDeepPropertiesKeys","defaultToConfig2Keys","directMergeKeys","getMergedValue","mergeDeepProperties","prop","axiosKeys","otherKeys","Cancel","locals","modal","template","methods","$emit","banner","props","visible","render","_vm","_h","$createElement","_c","_self","staticClass","_v","showBtns","disabled","click","$event","onSave","_s","locale","lang","save","_e","_withStripped","String","Number","expandedOnStart","default","modes","watch","immediate","internalChange","setEditor","expandAll","deep","editor","json","expandedModes","it","en","zh","self","$nextTick","$el","includes","getMode","set","component","scriptExports","staticRenderFns","functionalTemplate","injectStyles","scopeId","moduleIdentifier","shadowMode","hook","_compiled","functional","_scopeId","context","$vnode","ssrContext","parent","__VUE_SSR_CONTEXT__","_registeredComponents","add","_ssrRegister","$root","$options","shadowRoot","_injectStyles","originalRender","h","existing","beforeCreate","__file","factory","loaded","Ajv","err","treemode","textmode","util","JSONEditor","container","ieVersion","getInternetExplorerVersion","console","warn","onError","change","onChange","editable","onEditable","VALID_OPTIONS","option","_create","DEBOUNCE_INTERVAL","setMode","destroy","setText","jsonText","getText","setName","getName","oldMode","asText","clear","mixin","load","onModeChange","_onError","setSchema","schema","ajv","allErrors","verbose","validateSchema","compile","validate","refresh","registerMode","reserved","compileSchema","Cache","SchemaObject","stableStringify","formats","rules","v5","async","co","compileAsync","addKeyword","ValidationError","META_SCHEMA_ID","SCHEMA_URI_FORMAT","SCHEMA_URI_FORMAT_FUNC","META_IGNORE_OPTIONS","opts","schemaKeyRef","getSchema","schemaObj","_addSchema","_compile","valid","_opts","errors","addSchema","_skipValidation","_meta","checkUnique","normalizeId","_schemas","meta","addMetaSchema","skipValidation","throwOrLogError","$schema","defaultMeta","currentUriFormat","_formats","uri","errorsText","keyRef","_getSchemaObj","_refs","_removeAllSchemas","schemas","regex","_cache","del","jsonStr","shouldAddSchema","cached","addUsedSchema","localRefs","ids","put","root","compiling","callValidate","$async","currentOpts","_metaOpts","refVal","_validate","separator","dataVar","text","dataPath","addFormat","format","RegExp","copy","cache","_loadingSchemas","RULES","removeSchema","loopRequired","Infinity","transpile","setup","beautify","indent_size","errorDataPath","_errorDataPathProperty","metaOpts","getMetaSchemaOptions","optsSchemas","addInitialSchemas","addInitialFormats","enable","js_beautify","validateGenerator","baseId","patterns","patternsHash","defaultsHash","customRules","localCompile","_schema","_root","isRoot","sourceCode","isTop","schemaPath","errSchemaPath","errorPath","resolveRef","usePattern","useDefault","useCustomRule","vars","refValCode","patternCode","defaultCode","customRuleCode","validateCode","_transpileFunc","eval","ref","_refVal","refCode","refIndex","resolvedRef","rootRefId","addLocalRef","localSchema","inlineRef","inlineRefs","replaceLocalRef","refId","inline","regexStr","toQuotedString","valueStr","rule","parentSchema","definition","macro","keyword","arr","statement","ucs2length","equal","res","_resolve","refPath","_getFullPath","getFullPath","resolveRecursive","getJsonPointer","parsedRef","resolveUrl","_resolveIds","escapeFragment","PREVENT_SCOPE_CHANGE","toHash","hash","split","unescapeFragment","$ref","SIMPLE_INLINED","limit","checkNoRef","countKeys","count","normalize","protocol","host","path","TRAILING_SLASH_HASH","punycode","Url","slashes","port","hostname","search","query","pathname","urlParse","relative","resolveObject","protocolPattern","portPattern","unwise","autoEscape","nonHostChars","hostEndingChars","hostnamePartPattern","hostnamePartStart","unsafeProtocol","hostlessProtocol","slashedProtocol","querystring","parseQueryString","slashesDenoteHost","u","arg","isNull","TypeError","rest","proto","exec","lowerProto","substr","match","atSign","hostEnd","hec","lastIndexOf","decodeURIComponent","parseHost","ipv6Hostname","hostparts","newpart","k","validParts","notHost","bit","unshift","domainArray","newOut","ae","esc","escape","qm","charAt","relPath","shift","isSourceAbs","isRelAbs","mustEndAbs","removeAllDots","srcPath","psychotic","pop","authInHost","last","hasTrailingSlash","up","isAbsolute","__WEBPACK_AMD_DEFINE_RESULT__","global","nodeType","freeGlobal","maxInt","regexPunycode","regexNonASCII","regexSeparators","floor","Math","stringFromCharCode","fromCharCode","RangeError","mapDomain","string","ucs2decode","extra","output","counter","ucs2encode","digitToBasic","digit","flag","adapt","delta","numPoints","firstTime","baseMinusTMin","decode","input","out","basic","oldi","w","baseMinusT","codePoint","inputLength","bias","handledCPCount","basicLength","q","currentValue","handledCPCountPlusOne","qMinusT","webpackPolyfill","deprecate","paths","children","qs","sep","eq","regexp","maxKeys","kstr","vstr","x","stringifyPrimitive","isFinite","ks","arrA","arrB","checkDataType","dataType","negate","EQUAL","AND","OK","NOT","to","checkDataTypes","dataTypes","types","null","integer","coerceToTypes","COERCE_TO_TYPES","getProperty","escapeQuotes","pos","varOccurences","matches","varReplace","expr","cleanUpCode","EMPTY_ELSE","EMPTY_IF_NO_ELSE","EMPTY_IF_WITH_ELSE","cleanUpVarErrors","ERRORS_REGEXP","REMOVE_ERRORS_ASYNC","RETURN_ASYNC","REMOVE_ERRORS","schemaHasRules","getPathExpr","currentPath","jsonPointers","joinPaths","getPath","escapeJsonPointer","getData","$data","lvl","RELATIVE_JSON_POINTER","jsonPointer","segments","segment","unescapeJsonPointer","IDENTIFIER","SINGLE_QUOTE","cmp","space","f","cycles","replacer","node","aobj","bobj","seen","level","indent","colonSeparator","objectKeys","sort","keyValue","has","at","ch","escapee","next","hex","uffff","parseInt","white","word","reviver","walk","holder","gap","rep","escapable","quote","lastIndex","partial","mind","setupAsync","ASYNC","checkGenerators","checkAsyncFunction","TRANSPILE","getNodent","getRegenerator","MODES","regenerator","nodent","required","check","runtime","regeneratorTranspile","log","dontInstallRequireHook","nodentTranspile","promises","sourcemap","callback","loadSchema","_compileAsync","firstCall","missingSchema","loadMissingSchema","deferCallback","missingRef","_callbacks","schemaLoaded","sch","$keyword","$top","$lvl","$dataLvl","dataLevel","rootId","$es7","yieldAwait","dataPathArr","$errorKeyword","$valid","$breakOnError","$closingBraces1","$closingBraces2","$typeSchema","$typeIsArray","coerceTypes","$coerceToTypes","$schemaPath","$errSchemaPath","$method","$dataType","$coerced","$bracesCoercion","arr1","$type","$i","l1","$$outStack","createErrors","messages","__err","compositeRule","arr2","$rulesGroup","i2","l2","$shouldUseGroup","useDefaults","properties","arr3","$propertyKey","i3","l3","$sch","$passData","items","arr4","l4","arr5","$rule","i5","l5","$shouldUseRule","custom","$ruleValidate","$ruleErrs","$errs","$ruleErr","$rDef","$asyncKeyword","$inline","$macro","statements","$it","$wasComposite","$code","passContext","def_callRuleValidate","def_customError","$typeChecked","additionalProperties","patternProperties","patternGroups","gen","ctx","onFulfilled","ret","onRejected","throw","done","toPromise","isPromise","displayName","isGenerator","isGeneratorFunction","thunkToPromise","arrayToPromise","objectToPromise","results","defer","wrap","createPromise","__generatorFunction__","validation","DATE","DAYS","TIME","HOSTNAME","URI","UUID","JSON_POINTER","formatDefs","fName","compare","date","month","day","time","full","hour","minute","second","timeZone","fast","email","ipv4","ipv6","uuid","dateTime","DATE_TIME_SEPARATOR","NOT_URI_FRAGMENT","compareDate","compareTime","dt1","dt2","d1","d2","t1","t2","ruleModules","keywords","group","allOf","anyOf","dependencies","enum","maximum","minimum","maxItems","minItems","maxLength","minLength","maxProperties","minProperties","multipleOf","not","oneOf","pattern","uniqueItems","$refCode","$refVal","$message","missingRefs","$error","__callValidate","$closingBraces","every","$schemaDeps","$propertyDeps","$property","$deps","$currentErrorPath","_$property","$prop","$propertyPath","$missingProperty","$isData","$schemaValue","$format","$isObject","$formatRef","$dataNxt","$nextData","$additionalItems","additionalItems","$currErrSchemaPath","$isMax","$exclusiveKeyword","$schemaExcl","$op","$notOp","$schemaValueExcl","$exclusive","$opStr","$opExpr","unicode","multipleOfPrecision","$allErrorsOption","$schemaKeys","$pProperties","$pPropertyKeys","$aProperties","$someProperties","$noAdditional","$additionalIsSchema","$removeAdditional","removeAdditional","$checkAdditional","$required","$requiredHash","$pgProperties","$pgPropertyKeys","i1","$pProperty","$pgProperty","$additionalProperty","$useDefaults","i4","$hasDefault","$useData","arr6","i6","l6","$pgSchema","$pgMin","$pgMax","$limit","$reason","$moreOrLess","$propertySch","$loopRequired","containsMacro","inlineFunctions","metaSchema","_addKeyword","inlineFunc","_formatLimit","$shouldContinue","$ifPassed","$caseIndex","if","continue","$schemaFormat","$isDataFormat","$compare","$isDataExcl","$result","$key","$matched","$missingPattern","_addRule","ruleGroup","rg","Highlighter","History","SearchBox","ContextMenu","Node","ModeSwitcher","dom","highlighter","selection","multiselection","nodes","errorNodes","focusTarget","_setOptions","history","_createFrame","_createTable","frame","_debouncedValidate","searchBox","modeSwitcher","debounce","table","field","_setRoot","expand","getNodeFromTarget","blur","getValue","updateField","focus","menu","collapse","tbody","getDom","action","_onChange","setError","duplicateErrors","schemaErrors","improveSchemaError","findNode","entry","reduce","findParents","child","updateDom","recurse","mouseY","me","top","getAbsoluteTop","height","clientHeight","bottom","scrollTop","autoScrollStep","scrollHeight","autoScrollTimer","setInterval","stopAutoScroll","select","range","setSelectionOffset","getSelectionOffset","nodeName","animateTimeout","animateCallback","finalScrollTop","min","max","animate","diff","abs","className","onEvent","event","_onEvent","onclick","preventDefault","oninput","onchange","onkeydown","onkeyup","oncut","onpaste","onmousedown","onmouseup","onmouseover","onmouseout","onfocusin","onfocusout","collapseAll","undo","_onUndo","redo","_onRedo","canUndo","canRedo","_onKeyDown","_startDragDistance","_updateDragDistance","selected","showContextMenu","hasMoved","deselect","onDragStart","drag","_onMultiSelectStart","dragDistanceEvent","initialTarget","initialPageX","pageX","initialPageY","pageY","dragDistance","diffX","diffY","sqrt","start","end","mousemove","_onMultiSelect","mouseup","_onMultiSelectEnd","_findTopLevelNodes","removeEventListener","clearStartAndEnd","setSelected","first","startPath","getNodePath","endPath","startChild","endChild","childs","startIndex","endIndex","firstIndex","keynum","which","keyCode","ctrlKey","shiftKey","handled","selectContentEditable","previous","stopPropagation","col","contentOuter","colgroupContent","width","anchor","onClose","onDuplicate","onRemove","close","show","locked","highlight","setHighlight","_cancelUnhighlight","unhighlight","unhighlightTimer","lock","unlock","actions","oldValue","newValue","updateValue","changeType","oldType","newType","beforeNode","afterNode","insertAfter","append","oldBeforeNode","moveBefore","newBeforeNode","hideChilds","oldSort","oldChilds","showChilds","newSort","newChilds","Date","oldSelection","setSelection","newSelection","jsonlint","jsonString","sanitize","jsString","chars","curr","lastNonWhitespace","pp","skipBlockComment","skipComment","parseString","parseKey","escapeUnicodeChars","isUrlRegex","isUrl","getAbsoluteLeft","elem","getBoundingClientRect","left","pageXOffset","scrollLeft","pageYOffset","addClassName","classes","removeClassName","stripFormatting","divElement","iMax","removeAttribute","attributes","attribute","specified","setEndOfContentEditable","contentEditableElement","createRange","selectNodeContents","getSelection","removeAllRanges","addRange","sel","getRangeAt","rangeCount","startContainer","endContainer","startOffset","endOffset","setStart","setEnd","getInnerText","element","nodeValue","flush","hasChildNodes","innerText","prevChild","prevName","_ieVersion","rv","appName","ua","userAgent","parseFloat","$1","isFirefox","listener","useCapture","attachEvent","detachEvent","parsePath","jsonPath","remainder","SyntaxError","substring","enums","more","additionalProperty","insideRect","margin","_margin","right","func","wait","later","callNow","textDiff","oldText","newText","oldEnd","newEnd","lexer","trace","yy","symbols_","terminals_","2","4","6","8","10","11","14","17","18","21","22","23","24","productions_","performAction","yytext","yyleng","yylineno","yystate","$$","_$","$0","$","3","5","7","9","12","13","15","16","1","19","20","25","defaultActions","parseError","vstack","lstack","recovering","setInput","yylloc","yyloc","lex","token","symbol","preErrorSymbol","state","newState","expected","yyval","errStr","showPosition","line","loc","first_line","last_line","first_column","last_column","EOF","_input","_more","_less","matched","conditionStack","unput","less","pastInput","past","upcomingInput","pre","tempMatch","lines","_currentRules","flex","begin","condition","popState","conditions","topState","pushState","yy_","$avoiding_name_collisions","YY_START","delay","lastText","tr","td","divInput","tableInput","tbodySearch","refreshSearch","_onDelayedSearch","_onSearch","_onKeyUp","searchNext","searchPrevious","resultIndex","_setActiveResult","activeResult","prevNode","searchFieldActive","searchValueActive","scrollTo","_clearDelay","forceSearch","resultCount","innerHTML","eventListeners","focusButton","li","overflow","createMenuItems","domItems","domItem","button","hide","submenu","buttonSubmenu","divIcon","buttonExpand","submenuTitle","divExpand","_onExpandItem","domSubItems","subItems","ul","maxHeight","_getVisibleButtons","buttons","expandedItem","subItem","visibleMenu","contentWindow","showBelow","anchorRect","contentRect","anchorHeight","offsetHeight","mousedown","_isChildOf","keydown","alreadyVisible","padding","display","targetIndex","prevButton","nextButton","naturalSort","appendNodeFactory","expanded","setField","fieldEditable","setValue","_debouncedOnChangeValue","_onChangeValue","_debouncedOnChangeField","_onChangeField","_updateEditability","parents","tdError","tdValue","popover","onfocus","directions","direction","popoverRect","getIndex","setParent","previousField","getField","_getDomField","childValue","_getType","childField","sortObjectKeys","previousValue","_getDomValue","getLevel","clone","fieldInnerText","valueInnerText","cloneChilds","childClone","getAppend","nextTr","_hasChilds","newTr","appendTr","trTemp","AppendNode","moveTo","searchField","searchValue","_updateDomField","childResults","_updateDomValue","offsetTop","focusElement","elementName","editableDiv","containsNode","_move","clearDom","removedNode","_remove","lastTr","_stringCast","silent","_unescapeHTML","undoDiff","redoDiff","_onAction","domValue","classNames","checkbox","tdCheckbox","checked","getUTCMilliseconds","tdSelect","valueFieldHTML","visibility","domField","duplicateKeys","tdDrag","domDrag","tdMenu","tdField","tree","_createDomTree","firstNode","lastNode","draggedNode","_nextSibling","offsetY","onDrag","onDragEnd","oldCursor","body","cursor","mouseX","trThis","trPrev","trNext","trFirst","trLast","trRoot","nodePrev","nodeNext","topThis","topPrev","topFirst","heightThis","bottomNext","heightNext","moved","previousSibling","diffLevel","round","levelNext","some","startAutoScroll","_createDomField","isFirst","domTree","marginLeft","fieldText","contentEditable","spellcheck","_escapeHTML","_updateSchema","updateIndexes","_updateDomIndexes","_findSchema","_findEnum","composite","childSchema","_createDomValue","_createDomExpandButton","borderCollapse","tdExpand","tdSeparator","srcElement","expandable","_onExpand","offsetX","onKeyDown","nextNode","nextDom","nextDom2","altKey","selectedNodes","_onInsertBefore","_onInsertAfter","endNode","_lastNode","_getElementName","homeNode","_firstNode","prevElement","_previousElement","appendDom","nextNode2","_previousNode","nextElement","_nextElement","prevDom","isVisible","_nextNode","blurNodes","clones","newNode","_onAppend","_onChangeType","order","oldSortOrder","sortOrder","firstDom","lastDom","lastChild","TYPE_TITLES","titles","auto","lower","num","numFloat","isNaN","htmlEscaped","html","escapeUnicode","escapedText","_escapeJSON","escaped","oFxNcL","oFyNcL","re","sre","dre","hre","ore","insensitive","y","xN","yN","xD","yD","cLoc","numS","trAppend","tdAppend","domText","paddingLeft","current","onSwitch","availableModes","form","view","currentMode","currentTitle","box","position","ace","indentation","_ace","theme","aceEditor","textarea","clientWidth","buttonFormat","buttonCompact","compact","editorDom","edit","$blockScrolling","setTheme","setShowPrintMargin","setFontSize","getSession","setTabSize","setUseSoftTabs","setUseWrapMode","commands","bindKey","poweredBy","resize","originalOnChange","validationErrors","marginBottom","paddingBottom","doValidate","hidden","define","deps","payload","payloads","original","_acequire","parentId","lookup","dep","acequire","packagedModule","normalizeModule","moduleName","chunks","mod","packaged","real","compliantExecNpcg","compliantLastIndexIncrement","getNativeFlags","ignoreCase","multiline","extended","sticky","from","r2","_xregexp","captureNames","Empty","that","bound","defineGetter","defineSetter","lookupGetter","lookupSetter","supportsAccessors","prototypeOfArray","prototypeOfObject","_toString","owns","__defineGetter__","__defineSetter__","__lookupGetter__","__lookupSetter__","makeArray","lengthBefore","array_splice","deleteCount","removeCount","removed","insert","tailOldPos","tailNewPos","tailCount","lengthAfterRemove","createEmpty","freezeObject","boxedString","splitString","doesDefinePropertyWork","exception","toObject","thisp","reduceRight","sought","toInteger","__proto__","getOwnPropertyDescriptor","descriptor","configurable","setter","getOwnPropertyNames","empty","propertyIsEnumerable","isPrototypeOf","toLocaleString","valueOf","Type","defineProperties","definePropertyWorksOnObject","definePropertyWorksOnDom","definePropertyFallback","seal","freeze","preventExtensions","isSealed","isFrozen","isExtensible","returnValue","hasDontEnumBug","dontEnums","dontEnumsLength","ii","dontEnum","now","getTime","ws","trimBeginRegexp","trimEndRegexp","getDocumentHead","doc","getElementsByTagName","documentElement","tag","createElementNS","hasCssClass","addCssClass","removeCssClass","toggleCssClass","setCssClass","include","hasCssString","sheets","createStyleSheet","styleSheets","owningElement","importCssString","importCssStylsheet","getInnerWidth","computedStyle","getInnerHeight","scrollbarWidth","inner","minWidth","outer","noScrollbar","offsetWidth","withScrollbar","getPageScrollTop","getPageScrollLeft","getComputedStyle","currentStyle","setInnerHtml","innerHtml","cloneNode","replaceChild","setInnerText","textContent","getParentWindow","defaultView","parentWindow","inherits","ctor","superCtor","super_","writable","implement","oop","Keys","MODIFIER_KEYS","224","KEY_MODS","FUNCTION_KEYS","27","32","33","34","35","36","37","38","39","40","44","45","46","96","97","98","99","100","101","102","103","104","105","112","113","114","115","116","117","118","119","120","121","122","123","144","145","PRINTABLE_KEYS","48","49","50","51","52","53","54","55","56","57","59","61","65","66","67","68","69","70","71","72","73","74","75","76","77","78","79","80","81","82","83","84","85","86","87","88","89","90","107","109","110","186","187","188","189","190","191","192","219","220","221","222","111","106","enter","mods","pow","keyCodeToString","keyString","OS","LINUX","MAC","WINDOWS","getOS","isMac","isLinux","os","platform","isWin","isIE","isGecko","isMozilla","Controllers","controllers","isOldGecko","isOpera","opera","isWebKit","isChrome","isAIR","isIPad","isTouchPad","isChromeOS","useragent","pressedKeys","ts","wrapper","_wrapper","stopEvent","cancelBubble","getButton","capture","eventHandler","releaseCaptureHandler","onMouseUp","addTouchMoveListener","startx","starty","touchObj","changedTouches","clientX","clientY","wheelX","wheelY","addMouseWheelListener","wheelDeltaX","wheelDeltaY","wheelDelta","deltaMode","DOM_DELTA_PIXEL","deltaX","deltaY","DOM_DELTA_LINE","DOM_DELTA_PAGE","axis","HORIZONTAL_AXIS","detail","addMultiMouseDownListener","elements","timeouts","callbackName","startX","startY","timer","clicks","eventNames","onMousedown","isNewClick","_clicks","onDblclick","getModifierHash","metaKey","normalizeCommandKeys","hashId","OSKey","altGr","location","keyLocation","timeStamp","defaultPrevented","resetPressedKeys","lastT","getModifierString","addCommandKeyListener","lastKeyDownKeyCode","lastDefaultPrevented","postMessage","win","nextFrame","requestAnimationFrame","mozRequestAnimationFrame","webkitRequestAnimationFrame","msRequestAnimationFrame","oRequestAnimationFrame","stringReverse","reverse","stringRepeat","stringTrimLeft","stringTrimRight","copyObject","copyArray","deepCopy","cons","arrayToMap","createMap","arrayRemove","escapeRegExp","escapeHTML","getMatchOffsets","regExp","offset","deferredCall","fcn","deferred","schedule","isPending","delayedCall","defaultTimeout","BROKEN_SETDATA","USE_IE_MIME_TYPE","TextInput","opacity","copied","pasted","inComposition","tempStyle","isSelectionEmpty","isFocused","activeElement","onBlur","onFocus","resetSelection","syncSelection","syncValue","isEmpty","inputHandler","selectionStart","selectionEnd","setSelectionRange","resetValue","isAllSelected","createTextRange","moveStart","moveEnd","ownerDocument","parentElement","inPropertyChange","onPropertyChange","syncProperty","sendText","keytable","onCompositionEnd","onCompositionUpdate","onCompositionStart","setInputHandler","cb","getInputHandler","afterContextMenu","onPaste","execCommand","onTextInput","handleClipboardData","clipboardData","mime","setData","doCopy","isCut","getCopyText","onCut","onCopy","onCommandKey","selectAll","closeTimeout","$readOnly","session","markUndoGroup","clearSelection","lastValue","getRange","setRange","syncComposition","onContextMenuClose","renderer","$keepTextAreaAtCursor","$moveTextAreaToCursor","setReadOnly","readOnly","onContextMenu","_emit","domEvent","moveToMouse","bringToFront","rect","borderTopWidth","borderLeftWidth","maxTop","move","textInput","scroller","DefaultHandlers","mouseHandler","$clickSelection","setDefaultHandler","onMouseDown","onDoubleClick","onTripleClick","onQuadClick","onMouseWheel","onTouchMove","selectByLines","extendSelectionBy","selectByWords","calcRangeOrientation","row","column","ev","inSelection","getDocumentPosition","mousedownEvent","selectionEmpty","getSelectionRange","moveToPosition","$focusTimout","inMultiSelectMode","captureMouse","startSelect","setState","waitForClickSelection","screenToTextCoordinates","getShiftKey","selectToPosition","setCapture","setStyle","comparePoint","orientedRange","setSelectionAnchor","scrollCursorIntoView","unitName","cmpStart","cmpEnd","selectEnd","selectAllEnd","selectByWordsEnd","selectByLinesEnd","unsetStyle","releaseCapture","focusWait","ax","ay","bx","by","distance","getBracketRange","getWordRange","isMultiLine","contains","getLineRange","getAccelKey","dt","$lastScrollTime","isScrollableBy","speed","scrollBy","stop","Tooltip","isOpen","$element","$parentNode","$init","setHtml","setPosition","setClassName","getHeight","getWidth","GutterTooltip","windowWidth","innerWidth","windowHeight","innerHeight","GutterHandler","tooltipTimeout","mouseEvent","tooltipAnnotation","gutter","$gutterLayer","tooltip","hideTooltip","moveTooltip","getRegion","selectTo","$tooltipFollowsMouse","isMousePressed","annotation","$annotations","getLength","screenRow","pixelToScreenCoordinates","$pos","documentToScreenRow","showTooltip","$gutter","MouseEvent","$inSelection","propagationStopped","selectionRange","DragdropHandler","blankImage","src","dragSelectionMarker","timerId","dragCursor","dragOperation","isInternal","autoScrollStartTime","cursorMovedTime","cursorPointOnCaretMoved","mouseTarget","onDragInterval","prevCursor","vMovement","hMovement","moveCursorToPosition","calcDistance","lineHeight","layerConfig","characterWidth","editorRect","offsets","nearestXOffset","nearestYOffset","scrollCursor","vScroll","hScroll","autoScroll","addDragMarker","toOrientedRange","addMarker","getSelectionStyle","$cursorLayer","setBlinking","clearInterval","onMouseMove","clearDragMarker","removeMarker","fromOrientedRange","getReadOnly","cancelDrag","draggable","dataTransfer","effectAllowed","setDragImage","clearData","getTextRange","dropEffect","setCursorStyle","onDragEnter","canAccept","getDropEffect","onDragOver","onMouseMoveTimer","onDragLeave","onDrop","moveText","dropData","copyAllowed","copyModifierState","dragWait","getDragDelay","startDrag","dragWaitEnd","dragReadyEnd","cursorStyle","onMouseDrag","dragDrop","$dragEnabled","eventTarget","unselectable","xhr","loadScript","onload","_","isAbort","qualifyURL","EventEmitter","_dispatchEvent","eventName","_eventRegistry","_defaultHandlers","defaultHandler","_signal","newCallback","handlers","_disabled_","old","removeDefaultHandler","capturing","optionsProvider","setOptions","optList","setOption","getOptions","optionNames","getOption","opt","forwardTo","handlesSet","reportError","msg","AppConfig","$defaultOptions","defineOptions","initialValue","resetOptions","setDefaultValue","setDefaultValues","optionHash","net","workerPath","modePath","themePath","basePath","suffix","$moduleUrls","init","scriptOptions","scriptUrl","currentScript","_currentScript","scripts","script","getAttribute","attr","m1","moduleUrl","setModuleUrl","subst","$loading","loadModule","onLoad","moduleType","afterLoad","DefaultGutterHandler","MouseHandler","focusEditor","hasFocus","getMouseEventTarget","onMouseEvent","scrollBarV","scrollBarH","gutterEl","$dragDelay","character","insideStart","$scrollSpeed","mouseMoveHandler","releaseMouse","$mouseMoved","onCaptureEnd","onCaptureInterval","$onCaptureMouseMove","cancelContextMenu","scrollSpeed","dragDelay","dragEnabled","focusTimout","tooltipFollowsMouse","FoldHandler","fold","getFoldAt","removeFold","expandFold","foldWidgets","onFoldWidgetClick","getParentFoldRangeData","firstRange","getLine","addFold","keyUtil","KeyBinding","$editor","$handlers","kb","removeKeyboardHandler","$defaultHandler","addKeyboardHandler","setKeyboardHandler","handleKeyboard","attach","detach","getKeyboardHandler","getStatusText","$callKeyboardHandlers","toExecute","success","command","passEvent","Range","startRow","startColumn","endRow","endColumn","isEqual","compareRange","containsRange","intersects","isEnd","isStart","inside","insideEnd","compareStart","compareEnd","compareInside","clipRows","firstRow","lastRow","fromPoints","collapseRows","toScreenRange","screenPosStart","documentToScreenPosition","screenPosEnd","moveBy","comparePoints","p1","p2","Selection","getDocument","lead","selectionLead","createAnchor","selectionAnchor","$isEmpty","$keepDesiredColumnOnChange","$desiredColumn","getCursor","getPosition","getSelectionAnchor","getSelectionLead","shiftSelection","columns","moveCursorTo","isBackwards","$moveSelection","mover","selectUp","moveCursorUp","selectDown","moveCursorDown","selectRight","moveCursorRight","selectLeft","moveCursorLeft","selectLineStart","moveCursorLineStart","selectLineEnd","moveCursorLineEnd","selectFileEnd","moveCursorFileEnd","selectFileStart","moveCursorFileStart","selectWordRight","moveCursorWordRight","selectWordLeft","moveCursorWordLeft","selectWord","selectAWord","getAWordRange","excludeLastChar","rowEnd","rowStart","foldLine","getFoldLine","selectLine","moveCursorBy","tabSize","getTabSize","isTabStop","firstColumnPosition","screenToDocumentPosition","leadingSpace","getDisplayLine","$useEmacsStyleLineStart","lineEnd","getDocumentLastRowColumnPosition","textEnd","moveCursorLongWordRight","rightOfCursor","nonTokenRe","tokenRe","moveCursorLongWordLeft","getFoldStringAt","leftOfCursor","$shortWordEndIndex","whitespaceRe","moveCursorShortWordRight","moveCursorShortWordLeft","$selectLongWords","rows","screenPos","docPos","lineWidgets","keepDesiredColumn","moveCursorToScreen","desiredColumn","getRangeOfMovements","ranges","r1","fromJSON","rangeList","toSingleRange","MAX_TOKEN_COUNT","Tokenizer","states","regExps","matchMappings","ruleRegExps","matchTotal","mapping","defaultToken","splitterRurles","caseInsensitive","adjustedregex","matchcount","groupCount","tokenArray","onMatch","$arrayTokens","$applyToken","removeCapturingGroups","splitRegex","createSplitterRegexp","$setMaxTokenCount","values","tokens","inChClass","lastCapture","parenOpen","parenClose","square","getLineTokens","startState","currentState","matchAttempts","skipped","TextHighlightRules","$rules","addRules","prefix","nextState","getRules","embedRules","HighlightRules","escapeRules","$embeds","getEmbeds","normalizeRules","processState","processed","stateName","includeName","toInsert","noEscape","keywordMap","createKeywordMapper","splitChar","$keywordList","getKeywords","$keywords","Behaviour","$behaviours","addBehaviours","behaviours","inherit","getBehaviours","packages","pack","addUnicodePackage","L","Ll","Lu","Lt","Lm","Lo","M","Mn","Mc","Me","N","Nd","Nl","No","P","Pd","Ps","Pe","Pi","Pf","Pc","Po","S","Sm","Sc","Sk","So","Z","Zs","Zl","Zp","C","Cc","Cf","Co","Cs","Cn","TokenIterator","initialRow","initialColumn","$session","$row","$rowTokens","getTokens","getTokenAt","$tokenIndex","stepBackward","stepForward","rowCount","getCurrentToken","getCurrentTokenRow","getCurrentTokenColumn","rowTokens","tokenIndex","getCurrentTokenPosition","Mode","$behaviour","getTokenizer","$tokenizer","$highlightRules","lineCommentStart","blockComment","toggleCommentLines","ignoreBlankLines","shouldRemove","minIndent","insertAtTabStop","regexpStart","getUseSoftTabs","uncomment","shouldInsertSpace","removeInLine","commentWithSpace","comment","insertInLine","testRemove","after","spaces","lineCommentEnd","regexpEnd","iter","minEmptyLength","toggleBlockComment","colDiff","iterator","initialRange","startRange","endRange","getNextLineIndent","tab","$getIndent","checkOutdent","autoOutdent","createWorker","createModeDelegates","$modes","delegations","scope","functionName","$delegator","transformAction","param","completionKeywords","ruleItr","aLength","$createKeywordList","getCompletions","score","$id","applyDelta","docLines","doNotValidate","Anchor","$onChange","$pointsInOrder","point1","point2","equalPointsInOrder","bColIsAfter","$clipPositionToDocument","$insertRight","point","moveIfEqual","deltaIsInsert","deltaRowShift","deltaColShift","deltaStart","deltaEnd","$getTransformedPoint","noClip","Document","textOrLines","$lines","insertMergedLines","getAllLines","getNewLineCharacter","$split","$detectNewLine","$autoNewLine","$newLineMode","setNewLineMode","newLineMode","getNewLineMode","isNewLine","getLines","getLinesForRange","insertLines","insertFullLines","removeLines","removeFullLines","insertNewLine","clippedPos","clonePos","$clipPosition","deleteFirstNewLine","deleteLastNewLine","startCol","endCol","deletedLines","removeNewLine","applyDeltas","deltas","revertDeltas","revertDelta","isInsert","$splitAndapplyLargeDelta","MAX","chunk","indexToPosition","newlineLength","positionToIndex","BackgroundTokenizer","tokenizer","running","currentLine","$worker","workerStart","endLine","startLine","processedLines","$tokenizeRow","fireUpdateEvent","setTokenizer","setDocument","scheduleStart","$updateOnChange","getState","SearchHighlight","clazz","setRegexp","MAX_RANGES","markerLayer","drawSingleLineMarker","FoldLine","foldData","folds","setFoldLine","shiftRow","sameRow","containsRow","lastEnd","isNewRow","placeholder","getNextFoldTo","kind","addRemoveChars","foldBefore","newFoldLine","foldLineNext","idxToPosition","lastFoldEndColumn","RangeList","pointIndex","excludeEdges","addList","substractPoint","containsPoint","rangeAtPoint","clipped","removeAll","lineDif","Fold","subFolds","consumePoint","restorePoint","subFold","collapseChildren","addSubFold","afterStart","restoreRange","Folding","side","getFoldsInRange","foldLines","$foldData","foundFolds","getFoldsInRangeList","getAllFolds","lastFold","docRow","startFoldLine","getNextFoldLine","getFoldedRowCount","$addFoldLine","added","$clipRangeToDocument","startFold","endFold","removeFolds","$useWrapMode","$updateWrapData","$updateRowLengthCache","$modified","addFolds","$updating","cloneFolds","foldAll","expandFolds","unfold","expandInner","isRowFolded","startFoldRow","getRowFoldEnd","getRowFoldStart","getFoldDisplayLine","textLine","lastColumn","$cloneFoldData","fd","toggleFold","tryToUnfold","bracketPos","findMatchingBracket","getCommentFoldRange","depth","getFoldWidget","getFoldWidgetRange","$foldStyles","$foldStyle","setFoldStyle","$foldMode","$setFolding","foldMode","$updateFoldWidgets","$tokenizerUpdateFoldWidgets","updateFoldWidgets","tokenizerUpdateFoldWidgets","ignoreCurrent","fw","siblings","$toggleFoldWidget","toggleFoldWidget","toggleParent","BracketMatch","chr","charBeforeCursor","$findClosingBracket","$findOpeningBracket","$brackets","bracket","typeRe","openBracket","valueIndex","closingBracket","valueLength","TextMode","EditSession","$breakpoints","$decorations","$frontMarkers","$backMarkers","$markerId","$undoSelect","onChangeFold","bgTokenizer","resetCaches","$resetRowCache","$docRowCache","$screenRowCache","$getRowCacheIndex","cacheArray","low","hi","mid","$wrapData","$rowLengthCache","removedFolds","$updateInternalDataOnChange","$fromUndo","$undoManager","ignore","$deltasDoc","$deltasFold","$informUndoManager","$deltas","setUndoManager","getUndoManager","reset","undoManager","$syncInformUndoManager","execute","mergeUndoDeltas","$defaultUndoManager","getTabString","$useSoftTabs","$mode","$indentWithTabs","$tabSize","$overwrite","setOverwrite","overwrite","getOverwrite","toggleOverwrite","addGutterDecoration","removeGutterDecoration","getBreakpoints","setBreakpoints","clearBreakpoints","setBreakpoint","clearBreakpoint","inFront","addDynamicMarker","markerId","markers","getMarkers","$searchHighlight","highlightLines","setAnnotations","annotations","getAnnotations","clearAnnotations","inToken","wordRange","setUseWorker","useWorker","getUseWorker","$useWorker","onReloadTokenizer","$modeId","$onChangeMode","$isPlaceholder","$stopWorker","$startWorker","attachToSession","wrapMethod","$wrapMethod","foldingRules","terminate","$scrollTop","setScrollTop","getScrollTop","$scrollLeft","setScrollLeft","getScrollLeft","getScreenWidth","$computeWidth","getLineWidgetMaxWidth","screenWidth","lineWidgetsWidth","lineWidgetWidth","force","$wrapLimit","longestScreenLine","foldIndex","foldStart","$getStringScreenWidth","undoChanges","dontSelect","lastUndoRange","$getUndoSelection","foldDelta","redoChanges","setUndoSelect","isUndo","fromRange","toPosition","toRange","rowDiff","collDiff","oldStart","newStart","indentRows","indentString","outdentRows","rowRange","deleteRange","size","$moveLines","$clipRowToDocument","MAX_VALUE","moveLinesUp","moveLinesDown","duplicateLines","$clipColumnToRow","$wrapLimitRange","useWrapMode","getUseWrapMode","setWrapLimitRange","adjustWrapLimit","desiredLimit","$printMargin","limits","wrapLimit","$constrainWrapLimit","getWrapLimit","setWrapLimit","getWrapLimitRange","foldLineBefore","wrapData","walkTokens","$getDisplayTokens","PLACEHOLDER_START","PLACEHOLDER_BODY","$computeWrapSplits","isFullWidth","splits","displayLength","lastSplit","lastDocSplit","isCode","$wrapAsCode","indentedSoftWrap","$indentedSoftWrap","maxIndent","addSplit","displayed","getWrapIndent","minSplit","getScreenTabSize","maxScreenColumn","screenColumn","getRowLength","getRowLineCount","getRowWrapIndent","getScreenLastRowColumn","documentToScreenColumn","getDocumentLastRowColumn","docColumn","getRowSplitData","screenToDocumentRow","screenToDocumentColumn","rowLength","rowCache","doCache","maxRow","wrapIndent","splitIndex","foldStartRow","wrapRow","screenRowOffset","getScreenLength","screenRows","$getWidgetScreenLength","$setFontMetrics","fm","$enableVarChar","getCharacterWidth","$wrap","firstLineNumber","useSoftTabs","Search","find","$matchIterator","skipCurrent","findAll","needle","$assembleRegExp","$isMultiLine","prevRange","preserveCase","matchIterator","backwards","lineIterator","$lineIterator","_callback","$disableFakeMultiline","wholeWord","modifier","caseSensitive","$assembleMultilineRegExp","HashHandler","commandKeyBinding","addCommands","$singleCommand","MultiHashHandler","addCommand","removeCommand","_buildKeyHash","keepCommand","ckb","keyId","cmdGroup","keyPart","chain","parseKeys","_addCommandToBinding","isDefault","removeCommands","bindKeys","keyList","findKeyCommand","$keyChain","CommandManager","byName","toggleRecording","$inReplay","recording","$addCommandToMacro","oldMacro","replay","trimMacro","mac","showSettingsMenu","showErrorMarker","scrollIntoView","centerSelection","prompt","gotoLine","multiSelectAction","getAllRanges","findNext","findPrevious","aceCommandGroup","navigateFileStart","navigateUp","times","navigateFileEnd","navigateDown","navigateWordLeft","navigateLineStart","navigateLeft","navigateWordRight","navigateLineEnd","navigateRight","selectPageDown","scrollPageDown","gotoPageDown","selectPageUp","scrollPageUp","gotoPageUp","jumpToMatching","$handlePaste","duplicateSelection","sortLines","modifyNumber","copyLinesUp","copyLinesDown","removeToLineStart","removeToLineEnd","removeWordLeft","removeWordRight","blockOutdent","blockIndent","splitLine","transposeLetters","transposeSelections","firstLineEndCol","selectedCount","insertLine","curLine","newRanges","exitMultiSelectMode","defaultCommands","Editor","getContainerElement","getTextAreaContainer","keyBinding","$mouseHandler","$search","$historyTracker","$initOperationListeners","_$emitInputEvent","setSession","selections","startOperation","endOperation","$opResetTimer","curOp","docChanged","selectionChanged","prevOp","commadEvent","previousCommand","scrollSelectionIntoView","animateScrolling","$mergeableCommands","$mergeUndoDeltas","prev","mergeableCommands","shouldMerge","mergeNextCommand","sequenceStartTime","keyboardHandler","$keybindingId","handler","oldSession","$onDocumentChange","$onTokenizerUpdate","$onChangeTabSize","$onChangeWrapLimit","$onChangeWrapMode","$onChangeFold","$onChangeFrontMarker","$onChangeBackMarker","$onChangeBreakpoint","$onChangeAnnotation","$onCursorChange","$onScrollTopChange","$onScrollLeftChange","$onSelectionChange","onDocumentChange","onChangeMode","onTokenizerUpdate","onChangeTabSize","onChangeWrapLimit","onChangeWrapMode","onChangeFrontMarker","onChangeBackMarker","onChangeBreakpoint","onChangeAnnotation","onCursorChange","onScrollTopChange","onScrollLeftChange","onSelectionChange","updateFull","oldEditor","cursorPos","onResize","getTheme","getFontSize","$highlightBrackets","$bracketHighlight","$highlightPending","getCursorPosition","getMatching","$highlightTags","$highlightTagPending","$tagHighlight","prevToken","$isFocused","showCursor","visualizeFocus","hideCursor","visualizeBlur","$cursorChange","updateCursor","updateLines","$updateHighlightActiveLine","scrollToY","scrollToX","$highlightActiveLine","$selectionStyle","$maxLines","$minLines","$highlightLineMarker","$selectionMarker","$highlightSelectedWord","$getSelectionHighLightRegexp","startOuter","endOuter","lineCols","updateFrontMarkers","updateBackMarkers","updateBreakpoints","updateText","getSelectedText","inVirtualSelectionMode","getBehavioursEnabled","$mergeNextCommand","lineState","shouldOutdent","lineIndent","setScrollSpeed","getScrollSpeed","setDragDelay","setSelectionStyle","setHighlightActiveLine","shouldHighlight","getHighlightActiveLine","setHighlightGutterLine","getHighlightGutterLine","setHighlightSelectedWord","getHighlightSelectedWord","setAnimatedScroll","shouldAnimate","getAnimatedScroll","setShowInvisibles","showInvisibles","getShowInvisibles","setDisplayIndentGuides","getDisplayIndentGuides","showPrintMargin","getShowPrintMargin","setPrintMarginColumn","getPrintMarginColumn","setBehavioursEnabled","enabled","setWrapBehavioursEnabled","getWrapBehavioursEnabled","setShowFoldWidgets","getShowFoldWidgets","setFadeFoldWidgets","fade","getFadeFoldWidgets","new_range","swap","originalRange","$getSelectedRows","getNumberAt","_numberRx","amount","charRange","nr","fp","decimals","nnr","toFixed","replaceRange","endPoint","totalDiff","rangeIndex","subRows","showComposition","setCompositionText","hideComposition","getFirstVisibleRow","getLastVisibleRow","isRowVisible","isRowFullyVisible","getFirstFullyVisibleRow","getLastFullyVisibleRow","$getVisibleRowCount","getScrollBottomRow","getScrollTopRow","$moveByPage","scrollToRow","scrollToLine","center","alignCursor","getCursorPositionScreen","matchType","bracketType","found","brackets","navigateTo","replaced","$tryReplace","replaceAll","getLastSearchOptions","newRange","preventScroll","revealRange","setAutoScrollEditorIntoView","shouldScroll","$scrollAnchor","scrollAnchor","onChangeSelection","onBeforeRender","onAfterRender","$pixelPos","$resetCursorStyle","$cursorStyle","cursorLayer","setSmoothBlinking","isBlinking","selectionStyle","highlightActiveLine","highlightSelectedWord","behavioursEnabled","wrapBehavioursEnabled","autoScrollEditorIntoView","keybindingId","hScrollBarAlwaysVisible","vScrollBarAlwaysVisible","highlightGutterLine","animatedScroll","printMarginColumn","printMargin","fadeFoldWidgets","showFoldWidgets","showLineNumbers","showGutter","displayIndentGuides","fontSize","fontFamily","maxLines","minLines","scrollPastEnd","fixedWidthGutter","foldStyle","UndoManager","$serializeDelta","$deserializeDelta","cloneDeltaSetsObj","deltaSets_old","fnGetModifiedDelta","deltaSets_new","deltaSet_old","deltaSet_new","delta_old","deltaSets","$doc","hasUndo","dirtyCounter","$undoStack","$redoStack","NaN","undoSelectionRange","redoSelectionRange","$deserializeDeltas","hasRedo","markClean","isClean","$serializeDeltas","Gutter","parentEl","$showFoldWidgets","gutterWidth","$updateAnnotations","$cells","rowInfo","annoText","gutterOffset","breakpoints","decorations","$firstLineNumber","lastLineNumber","gutterRenderer","$renderer","cell","textNode","foldWidget","minHeight","$fixedWidth","$padding","$computePadding","ceil","$showLineNumbers","setShowLineNumbers","getShowLineNumbers","paddingRight","Marker","setPadding","setMarkers","$getTop","drawFullLineMarker","drawScreenLineMarker","drawTextMarker","drawMultiLineMarker","firstRowScreen","stringBuilder","extraStyle","lineRange","radiusClass","extraLength","Text","$updateEolChar","EOF_CHAR","EOL_CHAR_LF","EOL_CHAR_CRLF","EOL_CHAR","TAB_CHAR","SPACE_CHAR","getLineHeight","$fontMetrics","$characterSize","measure","$pollSizeChanges","checkForSizeChanges","$pollSizeChangesTimer","$computeTabString","$tabStrings","tabStr","$indentGuideRe","spaceClass","tabClass","spaceContent","tabContent","scrollLines","lineElements","lineElementsIdx","lineElement","$renderLine","$useLineGroups","oldConfig","fragment","$renderLinesFragment","createDocumentFragment","$textToken","$renderToken","tabIdx","idx4","classToUse","renderIndentGuide","cols","$renderWrappedLine","onlyContents","splitChars","$renderSimpleLine","$getFoldLineTokens","renderTokens","addTokens","$measureNode","isIE8","Cursor","blinkInterval","smoothBlinking","cursors","addCursor","$updateCursors","$updateVisibility","$updateOpacity","blinking","restartTimer","setBlinkInterval","removeCursor","intervalId","timeoutId","blink","getPixelPosition","onScreen","$selectionMarkers","cursorIndex","pixelPos","drawCursor","$setOverwrite","ScrollBar","classSuffix","setVisible","skipEvent","onScroll","VScrollBar","$scrollbarWidth","setHeight","setInnerHeight","setScrollHeight","HScrollBar","setWidth","setInnerWidth","setScrollWidth","ScrollBarV","ScrollBarH","RenderLoop","onRender","pending","changes","CHAR_COUNT","FontMetrics","$setMeasureNodeStyles","$main","$testFractionalRect","whiteSpace","font","$measureSizes","fontWeight","boldSize","charSizes","allowBoldFonts","setPolling","$measureCharWidth","GutterLayer","MarkerLayer","TextLayer","CursorLayer","VirtualRenderer","onGutterResize","$markerBack","textLayer","$textLayer","canvas","$markerFront","$horizScroll","$vScroll","scrollBar","$scrollAnimation","scrollMargin","updateCharacterSize","$size","scrollerHeight","scrollerWidth","$dirty","$loop","$renderChanges","CHANGE_FULL","CHANGE_CURSOR","CHANGE_MARKER","CHANGE_GUTTER","CHANGE_SCROLL","CHANGE_LINES","CHANGE_TEXT","CHANGE_SIZE","CHANGE_MARKER_BACK","CHANGE_MARKER_FRONT","CHANGE_H_SCROLL","$allowBoldFonts","$updatePrintMargin","onChangeNewLineMode","$changedLines","updateFontSize","$changes","$updateSizeAsync","resizing","scrollWidth","$updateCachedSize","$extraHeight","oldSize","$showGutter","$computeLayerConfig","availableWidth","$showPrintMargin","$printMarginColumn","$animatedScroll","getShowGutter","setShowGutter","$updateGutterLineHighlight","$gutterLineHighlight","$printMarginEl","containerEl","posTop","posLeft","$composition","setScrollMargin","sm","getHScrollBarAlwaysVisible","$hScrollBarAlwaysVisible","setHScrollBarAlwaysVisible","alwaysVisible","getVScrollBarAlwaysVisible","$vScrollBarAlwaysVisible","setVScrollBarAlwaysVisible","$updateScrollBarV","$scrollPastEnd","$updateScrollBarH","$frozen","unfreeze","st","marginTop","$highlightGutterLine","$updateLines","$autosize","desiredHeight","$gutterWidth","hideScrollbars","longestLine","$getLongestLine","horizScroll","hScrollChanged","vScrollBefore","vScrollChanged","firstRowHeight","lineCount","charCount","$viewMargin","topMargin","bottomMargin","alignment","STEPS","$calcSteps","fromValue","toValue","x_min","steps","initialScroll","oldSteps","$timer","canvasPos","textToScreenCoordinates","keepTextAreaAtCursor","$themeId","cssClass","$theme","isDark","setMouseCursor","WorkerClient","topLevelNamespaces","classname","workerUrl","$sendDeltaQueue","changeListener","onMessage","nameToUrl","toUrl","normalizePath","$normalizePath","tlns","workerSrc","blobUrl","webkitURL","Worker","DOMException","$workerBlob","blobURL","callbackId","callbacks","onmessage","deltaQueue","cmd","ex","attachToDocument","blobBuilder","BlobBuilder","WebKitBlobBuilder","MozBlobBuilder","getBlob","UIWorkerClient","messageBuffer","main","emitSync","sender","processNext","setEmitSync","Main","PlaceHolder","others","mainClass","othersClass","$onUpdate","onUpdate","$others","undoStack","$undostack","$undoStackDepth","selectionBefore","other","showOtherMarkers","othersActive","hideOtherMarkers","updateAnchors","lengthDiff","inMainRange","distanceFromStart","newPos","otherPos","updateMarkers","updateMarker","undosRequired","isSamePoint","alt","ctrl","accel","selectionMode","isMultiSelect","screenAnchor","screenCursor","$enableJumpToDef","$blockSelectEnabled","addSelectionMarker","oldRange","removeSelectionMarker","tmpSel","rectSel","onSelectionInterval","newCursor","removeSelectionMarkers","rectangularRangeBlock","updateSelectionMarkers","selectMoreLines","selectMore","multiSelect","splitIntoLines","alignCursors","multiSelectCommands","isAvailable","getSelectionMarkers","$blockChangeEvents","$onAddRange","$onRemoveRange","mergeOverlappingRanges","lastRange","$initRangeList","toggleBlockSelection","includeEmptyLines","xBackwards","yBackwards","docEnd","MultiSelect","$multiselectOnSessionChange","$onMultiSelect","$onSingleSelect","onSessionChange","$checkMultiselectChange","altCursor","altDown","addAltCursorListeners","selectionMarkerCount","markerList","$onMultiSelectExec","inVirtualMode","forEachSelection","keepOrder","$byLines","reg","cmdResult","anim","buf","nl","additive","skip","screenLead","toRemove","tmp","words","stopAtFirst","sameRowRanges","maxCol","minSpace","spaceOffsets","spaceOffset","fr","lr","guessRange","$reAlignText","forceLeft","startW","textW","endW","isLeftAligned","isRightAligned","alignLeft","enableMultiselect","enableBlockSelect","FoldMode","foldingStartMarker","foldingStopMarker","indentationBlock","startLevel","openingBracketBlock","closingBracketBlock","LineWidgets","widgetManager","updateOnChange","renderWidgets","measureWidgets","_changedWidgets","$onChangeEditor","updateOnFold","_inDocument","removeLineWidget","$updateRows","noWidgets","$oldWidget","addLineWidget","zIndex","coverGutter","pixelHeight","$fold","onWidgetChanged","w1","getWidgetsAtRow","changedWidgets","fixedWidth","coverLine","fullWidth","oldWidget","gutterAnno","comparator","binarySearch","findAnnotations","sc","arrow","Renderer","_id","getElementById","tagName","oldNode","createEditSession","Builder","MSBlobBuilder","bag","builder","endings","get_blob","JsonHighlightRules","MatchingBraceOutdent","openBracePos","SAFE_INSERT_IN_TOKENS","SAFE_INSERT_BEFORE_TOKENS","contextCache","initContext","autoInsertedBrackets","autoInsertedRow","autoInsertedLineEnd","maybeInsertedBrackets","maybeInsertedRow","maybeInsertedLineStart","maybeInsertedLineEnd","getWrapped","opening","closing","CstyleBehaviour","isSaneInsertion","recordAutoInsert","recordMaybeInsert","isAutoInsertedClosing","popAutoInsertedClosing","isMaybeInsertedClosing","clearMaybeInsertedClosing","next_indent","leftChar","rightChar","rightToken","pair","stringBefore","stringAfter","wordRe","isWordBefore","isWordAfter","$matchTokenType","iterator2","BaseFoldMode","commentRegex","singleLineBlockCommentRe","tripleStarBlockCommentRe","startRegionRe","_getFoldWidgetBase","forceMultiline","getCommentRegionBlock","getSectionRange","startIndent","subRange","CStyleFoldMode","$outdent","worker","showReplaceForm","div","$initElements","sb","replaceBox","searchOptions","regExpOption","caseSensitiveOption","wholeWordOption","searchInput","replaceInput","_this","activeInput","$searchBarKb","$closeSearchBarKb","isReplace","findPrev","$syncOptions","noMatch","replaceAndFindNext","vue","pantry","components","mainContent","topbar","bottomBar","home","_view","checkIfInView","catch","_length","A","O","T","E","D","I","F","optionMergeStrategies","productionTip","devtools","performance","errorHandler","warnHandler","ignoredElements","keyCodes","isReservedTag","isReservedAttr","isUnknownElement","getTagNamespace","parsePlatformTagName","mustUseProp","_lifecycleHooks","R","B","H","U","V","z","WXEnvironment","K","J","W","G","X","Y","Q","ee","te","VUE_ENV","ne","__VUE_DEVTOOLS_GLOBAL_HOOK__","ie","oe","Reflect","ownKeys","Set","se","ce","subs","addSub","removeSub","depend","addDep","notify","ue","le","fe","pe","elm","fnContext","fnOptions","fnScopeId","componentOptions","componentInstance","raw","isStatic","isRootInsert","isComment","isCloned","isOnce","asyncFactory","asyncMeta","isAsyncPlaceholder","de","ve","he","ye","ge","__ob__","observeArray","be","$e","we","vmCount","Ce","_isVue","xe","ke","Ae","Oe","Se","Te","Ne","Ee","inject","computed","provide","je","De","directives","_base","extends","mixins","Le","Ie","Re","propsData","_props","Fe","He","$parent","errorCaptured","Ue","Be","_handled","Ve","ze","Ke","Je","qe","We","Ze","MutationObserver","setImmediate","Ge","Xe","Ye","observe","characterData","Qe","et","tt","nt","passive","rt","fns","ot","merged","ct","_isVList","ut","_provided","lt","slot","ft","pt","$stable","_normalized","$hasNormal","vt","ht","proxy","mt","yt","$scopedSlots","$slots","gt","_t","bt","$t","domProps","wt","_staticTrees","xt","_renderProxy","Ct","kt","At","Ot","St","Tt","Nt","_o","_n","_l","_q","_i","_m","_f","_k","_b","_u","_g","_d","_p","Et","_original","injections","slots","scopedSlots","Ht","jt","Dt","_isDestroyed","keepAlive","prepatch","_isComponent","_parentVnode","inlineTemplate","Ctor","Zt","$mount","_renderChildren","_vnode","$attrs","$listeners","_propKeys","_parentListeners","Wt","$forceUpdate","_isMounted","Qt","_inactive","tn","Yt","_directInactive","Xt","$children","$destroy","It","Mt","cid","errorComp","resolved","Ut","owners","loading","loadingComp","$on","Vt","wn","model","nativeOn","abstract","_merged","Ft","is","class","Bt","zt","Kt","Jt","$off","qt","Gt","_hasHookEvent","nn","rn","an","sn","cn","un","createEvent","ln","vm","_watcher","pn","_watchers","user","lazy","sync","active","dirty","newDeps","depIds","newDepIds","expression","cleanupDeps","evaluate","teardown","_isBeingDestroyed","dn","vn","mn","yn","gn","_computedWatchers","bn","$watch","$n","super","superOptions","sealedOptions","extendOptions","_init","kn","An","On","Sn","_uid","_componentTag","$refs","_events","_data","hn","$set","$delete","$once","_update","__patch__","__vue__","_render","Tn","Nn","KeepAlive","exclude","cacheVNode","vnodeToCache","keyToCache","created","destroyed","mounted","updated","mergeOptions","defineReactive","delete","observable","use","_installedPlugins","install","_Ctor","xn","En","jn","Dn","Ln","In","Fn","Pn","Rn","Hn","Bn","Vn","zn","Kn","Jn","svg","math","qn","Wn","Zn","Gn","Xn","Yn","Qn","er","multiple","createComment","setTextContent","setStyleScope","refInFor","rr","ir","or","ar","sr","cr","oldArg","pr","def","componentUpdated","inserted","ur","modifiers","rawName","dr","vr","inheritAttrs","hr","removeAttributeNS","mr","setAttributeNS","__ieph","stopImmediatePropagation","yr","gr","Un","_transitionClasses","_prevClass","_r","br","$r","wr","Cr","xr","kr","Ar","Or","Sr","Tr","Nr","Er","Hr","dynamic","plain","jr","dynamicAttrs","Dr","attrsMap","attrsList","Lr","isDynamicArg","Ir","Mr","middle","native","nativeEvents","events","Fr","Pr","Rr","Br","Ur","exp","zr","Kr","Vr","qr","Jr","Wr","Zr","Xr","ei","Yr","Qr","currentTarget","ti","ni","ri","_value","oi","composing","_vModifiers","ai","si","ci","ui","staticStyle","fi","pi","di","setProperty","vi","mi","normalizedStyle","yi","gi","classList","bi","wi","enterClass","enterToClass","enterActiveClass","leaveClass","leaveToClass","leaveActiveClass","Ci","xi","ki","Ai","Oi","Si","Ti","ontransitionend","onwebkittransitionend","onanimationend","onwebkitanimationend","Ni","Ei","ji","Di","Li","Mi","propCount","Ii","Fi","hasTransform","Ri","_leaveCb","cancelled","transition","_enterCb","appearClass","appearToClass","appearActiveClass","beforeEnter","afterEnter","enterCancelled","beforeAppear","appear","afterAppear","appearCancelled","duration","Ui","_pending","Bi","Hi","beforeLeave","leave","afterLeave","leaveCancelled","delayLeave","Vi","zi","nodeOps","activate","pendingInsert","postpatch","hasAttribute","vmodel","Yi","Ki","_vOptions","Ji","Zi","Gi","Xi","Wi","qi","selectedIndex","initEvent","dispatchEvent","Qi","eo","__vOriginalDisplay","unbind","no","ro","io","oo","ao","so","_leaving","moveClass","uo","_moveCb","lo","fo","WebkitTransform","transitionDuration","po","Transition","TransitionGroup","beforeMount","kept","prevChildren","hasMove","_reflow","propertyName","_hasMove","HTMLUnknownElement","HTMLElement","go","vo","ho","mo","yo","staticKeys","transformNode","classBinding","genData","styleBinding","$o","wo","xo","ko","Ao","Oo","To","Eo","jo","Do","Io","Mo","Fo","Ro","Ho","Bo","Uo","Vo","zo","Ko","Jo","qo","Wo","Zo","Go","Xo","Yo","Qo","ea","ta","na","ra","ia","oa","aa","sa","ca","la","ya","rawAttrsMap","pa","for","slotScope","slotTarget","slotTargetDynamic","ha","slotName","hasBindings","ma","camel","da","alias","iterator1","va","ifConditions","ga","_a","ba","wa","Ca","$a","preTransformNode","block","else","elseif","xa","expectHTML","isPreTag","isUnaryTag","canBeLeftOpenTag","ka","Oa","Sa","Ta","Na","down","Ea","ja","Da","prevent","La","Ia","Ma","Fa","wrapListeners","cloak","Pa","transforms","dataGenFns","maybeComponent","onceId","Ra","Ha","staticRoot","staticProcessed","Ba","onceProcessed","Ua","forProcessed","za","ifProcessed","Va","Wa","Xa","Ka","staticInFor","Ja","qa","Za","Ga","Ya","Qa","es","delimiters","rs","preserveWhitespace","whitespace","forbidden","shouldKeepComment","unarySlash","shouldDecodeNewlinesForHref","shouldDecodeNewlines","lowerCasedTag","comments","outputSourceRange","fa","optimize","static","Aa","ast","tips","compileToFunctions","as","ss","cs","us","outerHTML","Timeout","clearFn","_clearFn","unref","enroll","msecs","_idleTimeoutId","_idleTimeout","unenroll","_unrefActive","_onTimeout","clearImmediate","registerImmediate","channel","messagePrefix","onGlobalMessage","nextHandle","tasksByHandle","currentlyRunningATask","attachTo","handle","runIfPresent","importScripts","postMessageIsAsynchronous","oldOnMessage","canUsePostMessage","MessageChannel","port1","port2","random","task","baseUrl","currentDir","fullMatch","origUrl","newUrl","unquotedOrigUrl","mainContentTemplate","dashboard","sdk","onboarding","about","pantryID","__awaiter","_arguments","generator","fulfilled","step","rejected","axios","API_PATH","explorer","login","signedIn","promo","emoji","snippet","fetchPantry","createSession","alert","pantryId","assign","sessionStorage","getItem","setItem","urlPantryID","_pantryId","loadFromSession","loadFromURL","Axios","mergeConfig","createInstance","defaultConfig","instance","instanceConfig","CancelToken","isCancel","spread","InterceptorManager","dispatchRequest","validator","validators","interceptors","assertOptions","boolean","requestInterceptorChain","synchronousRequestInterceptors","interceptor","runWhen","synchronous","responseInterceptorChain","newConfig","getUri","eject","transformData","throwIfCancellationRequested","throwIfRequested","reason","normalizedName","write","expires","domain","secure","cookie","toGMTString","isAbsoluteURL","combineURLs","requestedURL","relativeURL","ignoreDuplicateOf","parsed","originURL","msie","urlParsingNode","resolveURL","requestURL","pkg","thing","deprecatedWarnings","currentVerArr","isOlderVersion","thanVersion","pkgVersionArr","destVer","isDeprecated","formatMessage","desc","allowUnknown","executor","resolvePromise","jsonEditor","configs","explorerTemplate","changelog","explorerEmpty","explorerOnboarding","basket","schemaModalVisible","schemaExample","toppings","price","baskets","ttl","_expiryDate","setSeconds","getDiffOfDates","startUTC","UTC","getFullYear","getMonth","getDate","endUTC","_randomNumber","_name","_defaultPantryName","_namePantry","_defaultDesc","_description","viewBasket","basketTemplate","shareModalVisible","publicBasketPath","newData","clipboard","writeText","basketPath","confirm","refreshDashboard","axiosError","_errorData","details","getPublicBasket","sdks","author","verified","defaultBadgeClasses","homeTemplate","initialSignup","finishSignup","features","example","stats","finishOnboarding","siteKey","createNewPantry","grecaptcha","sitekey","_recaptchaResponse","getResponse","accountCreationInProgress","contactEmail","recaptchaResponse","changeView","exampleTemplate","onboardingTemplate","faq","questions","answer","topbarTemplate","headerBar","DOCS_PATH"],"mappings":"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","file":"bundle.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 24);\n","'use strict';\n\nvar bind = require('./helpers/bind');\n\n// utils is a library of generic helper functions non-specific to axios\n\nvar toString = Object.prototype.toString;\n\n/**\n * Determine if a value is an Array\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an Array, otherwise false\n */\nfunction isArray(val) {\n return toString.call(val) === '[object Array]';\n}\n\n/**\n * Determine if a value is undefined\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if the value is undefined, otherwise false\n */\nfunction isUndefined(val) {\n return typeof val === 'undefined';\n}\n\n/**\n * Determine if a value is a Buffer\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Buffer, otherwise false\n */\nfunction isBuffer(val) {\n return val !== null && !isUndefined(val) && val.constructor !== null && !isUndefined(val.constructor)\n && typeof val.constructor.isBuffer === 'function' && val.constructor.isBuffer(val);\n}\n\n/**\n * Determine if a value is an ArrayBuffer\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an ArrayBuffer, otherwise false\n */\nfunction isArrayBuffer(val) {\n return toString.call(val) === '[object ArrayBuffer]';\n}\n\n/**\n * Determine if a value is a FormData\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an FormData, otherwise false\n */\nfunction isFormData(val) {\n return (typeof FormData !== 'undefined') && (val instanceof FormData);\n}\n\n/**\n * Determine if a value is a view on an ArrayBuffer\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\n */\nfunction isArrayBufferView(val) {\n var result;\n if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {\n result = ArrayBuffer.isView(val);\n } else {\n result = (val) && (val.buffer) && (val.buffer instanceof ArrayBuffer);\n }\n return result;\n}\n\n/**\n * Determine if a value is a String\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a String, otherwise false\n */\nfunction isString(val) {\n return typeof val === 'string';\n}\n\n/**\n * Determine if a value is a Number\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Number, otherwise false\n */\nfunction isNumber(val) {\n return typeof val === 'number';\n}\n\n/**\n * Determine if a value is an Object\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an Object, otherwise false\n */\nfunction isObject(val) {\n return val !== null && typeof val === 'object';\n}\n\n/**\n * Determine if a value is a plain Object\n *\n * @param {Object} val The value to test\n * @return {boolean} True if value is a plain Object, otherwise false\n */\nfunction isPlainObject(val) {\n if (toString.call(val) !== '[object Object]') {\n return false;\n }\n\n var prototype = Object.getPrototypeOf(val);\n return prototype === null || prototype === Object.prototype;\n}\n\n/**\n * Determine if a value is a Date\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Date, otherwise false\n */\nfunction isDate(val) {\n return toString.call(val) === '[object Date]';\n}\n\n/**\n * Determine if a value is a File\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a File, otherwise false\n */\nfunction isFile(val) {\n return toString.call(val) === '[object File]';\n}\n\n/**\n * Determine if a value is a Blob\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Blob, otherwise false\n */\nfunction isBlob(val) {\n return toString.call(val) === '[object Blob]';\n}\n\n/**\n * Determine if a value is a Function\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Function, otherwise false\n */\nfunction isFunction(val) {\n return toString.call(val) === '[object Function]';\n}\n\n/**\n * Determine if a value is a Stream\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Stream, otherwise false\n */\nfunction isStream(val) {\n return isObject(val) && isFunction(val.pipe);\n}\n\n/**\n * Determine if a value is a URLSearchParams object\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a URLSearchParams object, otherwise false\n */\nfunction isURLSearchParams(val) {\n return typeof URLSearchParams !== 'undefined' && val instanceof URLSearchParams;\n}\n\n/**\n * Trim excess whitespace off the beginning and end of a string\n *\n * @param {String} str The String to trim\n * @returns {String} The String freed of excess whitespace\n */\nfunction trim(str) {\n return str.trim ? str.trim() : str.replace(/^\\s+|\\s+$/g, '');\n}\n\n/**\n * Determine if we're running in a standard browser environment\n *\n * This allows axios to run in a web worker, and react-native.\n * Both environments support XMLHttpRequest, but not fully standard globals.\n *\n * web workers:\n * typeof window -> undefined\n * typeof document -> undefined\n *\n * react-native:\n * navigator.product -> 'ReactNative'\n * nativescript\n * navigator.product -> 'NativeScript' or 'NS'\n */\nfunction isStandardBrowserEnv() {\n if (typeof navigator !== 'undefined' && (navigator.product === 'ReactNative' ||\n navigator.product === 'NativeScript' ||\n navigator.product === 'NS')) {\n return false;\n }\n return (\n typeof window !== 'undefined' &&\n typeof document !== 'undefined'\n );\n}\n\n/**\n * Iterate over an Array or an Object invoking a function for each item.\n *\n * If `obj` is an Array callback will be called passing\n * the value, index, and complete array for each item.\n *\n * If 'obj' is an Object callback will be called passing\n * the value, key, and complete object for each property.\n *\n * @param {Object|Array} obj The object to iterate\n * @param {Function} fn The callback to invoke for each item\n */\nfunction forEach(obj, fn) {\n // Don't bother if no value provided\n if (obj === null || typeof obj === 'undefined') {\n return;\n }\n\n // Force an array if not already something iterable\n if (typeof obj !== 'object') {\n /*eslint no-param-reassign:0*/\n obj = [obj];\n }\n\n if (isArray(obj)) {\n // Iterate over array values\n for (var i = 0, l = obj.length; i < l; i++) {\n fn.call(null, obj[i], i, obj);\n }\n } else {\n // Iterate over object keys\n for (var key in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, key)) {\n fn.call(null, obj[key], key, obj);\n }\n }\n }\n}\n\n/**\n * Accepts varargs expecting each argument to be an object, then\n * immutably merges the properties of each object and returns result.\n *\n * When multiple objects contain the same key the later object in\n * the arguments list will take precedence.\n *\n * Example:\n *\n * ```js\n * var result = merge({foo: 123}, {foo: 456});\n * console.log(result.foo); // outputs 456\n * ```\n *\n * @param {Object} obj1 Object to merge\n * @returns {Object} Result of all merge properties\n */\nfunction merge(/* obj1, obj2, obj3, ... */) {\n var result = {};\n function assignValue(val, key) {\n if (isPlainObject(result[key]) && isPlainObject(val)) {\n result[key] = merge(result[key], val);\n } else if (isPlainObject(val)) {\n result[key] = merge({}, val);\n } else if (isArray(val)) {\n result[key] = val.slice();\n } else {\n result[key] = val;\n }\n }\n\n for (var i = 0, l = arguments.length; i < l; i++) {\n forEach(arguments[i], assignValue);\n }\n return result;\n}\n\n/**\n * Extends object a by mutably adding to it the properties of object b.\n *\n * @param {Object} a The object to be extended\n * @param {Object} b The object to copy properties from\n * @param {Object} thisArg The object to bind function to\n * @return {Object} The resulting value of object a\n */\nfunction extend(a, b, thisArg) {\n forEach(b, function assignValue(val, key) {\n if (thisArg && typeof val === 'function') {\n a[key] = bind(val, thisArg);\n } else {\n a[key] = val;\n }\n });\n return a;\n}\n\n/**\n * Remove byte order marker. This catches EF BB BF (the UTF-8 BOM)\n *\n * @param {string} content with BOM\n * @return {string} content value without BOM\n */\nfunction stripBOM(content) {\n if (content.charCodeAt(0) === 0xFEFF) {\n content = content.slice(1);\n }\n return content;\n}\n\nmodule.exports = {\n isArray: isArray,\n isArrayBuffer: isArrayBuffer,\n isBuffer: isBuffer,\n isFormData: isFormData,\n isArrayBufferView: isArrayBufferView,\n isString: isString,\n isNumber: isNumber,\n isObject: isObject,\n isPlainObject: isPlainObject,\n isUndefined: isUndefined,\n isDate: isDate,\n isFile: isFile,\n isBlob: isBlob,\n isFunction: isFunction,\n isStream: isStream,\n isURLSearchParams: isURLSearchParams,\n isStandardBrowserEnv: isStandardBrowserEnv,\n forEach: forEach,\n merge: merge,\n extend: extend,\n trim: trim,\n stripBOM: stripBOM\n};\n","module.exports = \"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+DQo8c3ZnDQogICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iDQogICB4bWxuczpjYz0iaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbnMjIg0KICAgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIg0KICAgeG1sbnM6c3ZnPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyINCiAgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyINCiAgIHhtbG5zOnNvZGlwb2RpPSJodHRwOi8vc29kaXBvZGkuc291cmNlZm9yZ2UubmV0L0RURC9zb2RpcG9kaS0wLmR0ZCINCiAgIHhtbG5zOmlua3NjYXBlPSJodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy9uYW1lc3BhY2VzL2lua3NjYXBlIg0KICAgd2lkdGg9IjIxNiINCiAgIGhlaWdodD0iMTQ0Ig0KICAgaWQ9InN2ZzQxMzYiDQogICB2ZXJzaW9uPSIxLjEiDQogICBpbmtzY2FwZTp2ZXJzaW9uPSIwLjkxIHIiDQogICBzb2RpcG9kaTpkb2NuYW1lPSJqc29uZWRpdG9yLWljb25zLnN2ZyI+DQogIDx0aXRsZQ0KICAgICBpZD0idGl0bGU2NTEyIj5KU09OIEVkaXRvciBJY29uczwvdGl0bGU+DQogIDxtZXRhZGF0YQ0KICAgICBpZD0ibWV0YWRhdGE0MTQ4Ij4NCiAgICA8cmRmOlJERj4NCiAgICAgIDxjYzpXb3JrDQogICAgICAgICByZGY6YWJvdXQ9IiI+DQogICAgICAgIDxkYzpmb3JtYXQ+aW1hZ2Uvc3ZnK3htbDwvZGM6Zm9ybWF0Pg0KICAgICAgICA8ZGM6dHlwZQ0KICAgICAgICAgICByZGY6cmVzb3VyY2U9Imh0dHA6Ly9wdXJsLm9yZy9kYy9kY21pdHlwZS9TdGlsbEltYWdlIiAvPg0KICAgICAgICA8ZGM6dGl0bGU+SlNPTiBFZGl0b3IgSWNvbnM8L2RjOnRpdGxlPg0KICAgICAgPC9jYzpXb3JrPg0KICAgIDwvcmRmOlJERj4NCiAgPC9tZXRhZGF0YT4NCiAgPGRlZnMNCiAgICAgaWQ9ImRlZnM0MTQ2IiAvPg0KICA8c29kaXBvZGk6bmFtZWR2aWV3DQogICAgIHBhZ2Vjb2xvcj0iI2ZmZmZmZiINCiAgICAgYm9yZGVyY29sb3I9IiM2NjY2NjYiDQogICAgIGJvcmRlcm9wYWNpdHk9IjEiDQogICAgIG9iamVjdHRvbGVyYW5jZT0iMTAiDQogICAgIGdyaWR0b2xlcmFuY2U9IjEwIg0KICAgICBndWlkZXRvbGVyYW5jZT0iMTAiDQogICAgIGlua3NjYXBlOnBhZ2VvcGFjaXR5PSIwIg0KICAgICBpbmtzY2FwZTpwYWdlc2hhZG93PSIyIg0KICAgICBpbmtzY2FwZTp3aW5kb3ctd2lkdGg9IjE5MjAiDQogICAgIGlua3NjYXBlOndpbmRvdy1oZWlnaHQ9IjEwMjgiDQogICAgIGlkPSJuYW1lZHZpZXc0MTQ0Ig0KICAgICBzaG93Z3JpZD0idHJ1ZSINCiAgICAgaW5rc2NhcGU6em9vbT0iNCINCiAgICAgaW5rc2NhcGU6Y3g9Ijk3LjIxNzI0OCINCiAgICAgaW5rc2NhcGU6Y3k9IjU5Ljk1MDIyNyINCiAgICAgaW5rc2NhcGU6d2luZG93LXg9IjAiDQogICAgIGlua3NjYXBlOndpbmRvdy15PSIwIg0KICAgICBpbmtzY2FwZTp3aW5kb3ctbWF4aW1pemVkPSIxIg0KICAgICBpbmtzY2FwZTpjdXJyZW50LWxheWVyPSJzdmc0MTM2Ig0KICAgICBzaG93Z3VpZGVzPSJmYWxzZSINCiAgICAgYm9yZGVybGF5ZXI9ImZhbHNlIg0KICAgICBpbmtzY2FwZTpzaG93cGFnZXNoYWRvdz0idHJ1ZSINCiAgICAgc2hvd2JvcmRlcj0idHJ1ZSI+DQogICAgPGlua3NjYXBlOmdyaWQNCiAgICAgICB0eXBlPSJ4eWdyaWQiDQogICAgICAgaWQ9ImdyaWQ0NjQwIg0KICAgICAgIGVtcHNwYWNpbmc9IjI0IiAvPg0KICA8L3NvZGlwb2RpOm5hbWVkdmlldz4NCiAgPCEtLSBDcmVhdGVkIHdpdGggU1ZHLWVkaXQgLSBodHRwOi8vc3ZnLWVkaXQuZ29vZ2xlY29kZS5jb20vIC0tPg0KICA8Zw0KICAgICBpZD0iZzQzOTQiPg0KICAgIDxyZWN0DQogICAgICAgeD0iNCINCiAgICAgICB5PSI0Ig0KICAgICAgIHdpZHRoPSIxNiINCiAgICAgICBoZWlnaHQ9IjE2Ig0KICAgICAgIGlkPSJzdmdfMSINCiAgICAgICBzdHlsZT0iZmlsbDojMWFhZTFjO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDowIiAvPg0KICAgIDxyZWN0DQogICAgICAgc3R5bGU9ImZpbGw6I2VjM2YyOTtmaWxsLW9wYWNpdHk6MC45NDExNzY0NztzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MCINCiAgICAgICB4PSIyOC4wMDAwMDYiDQogICAgICAgeT0iMy45OTk5OTUiDQogICAgICAgd2lkdGg9IjE2Ig0KICAgICAgIGhlaWdodD0iMTYiDQogICAgICAgaWQ9InN2Z18xLTciIC8+DQogICAgPHJlY3QNCiAgICAgICBpZD0icmVjdDQxNjUiDQogICAgICAgaGVpZ2h0PSIxNiINCiAgICAgICB3aWR0aD0iMTYiDQogICAgICAgeT0iMy45OTk5OTUiDQogICAgICAgeD0iNTIuMDAwMDA0Ig0KICAgICAgIHN0eWxlPSJmaWxsOiM0YzRjNGM7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjAiIC8+DQogICAgPHJlY3QNCiAgICAgICBzdHlsZT0iZmlsbDojNGM0YzRjO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDowIg0KICAgICAgIHg9IjE3Mi4wMDAwMiINCiAgICAgICB5PSIzLjk5OTk4NTIiDQogICAgICAgd2lkdGg9IjE2Ig0KICAgICAgIGhlaWdodD0iMTYiDQogICAgICAgaWQ9InJlY3Q0MTc1IiAvPg0KICAgIDxyZWN0DQogICAgICAgc3R5bGU9ImZpbGw6IzRjNGM0YztmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MCINCiAgICAgICB4PSIxOTYiDQogICAgICAgeT0iMy45OTk5OTUiDQogICAgICAgd2lkdGg9IjE2Ig0KICAgICAgIGhlaWdodD0iMTYiDQogICAgICAgaWQ9InJlY3Q0MTc1LTMiIC8+DQogICAgPGcNCiAgICAgICBzdHlsZT0ic3Ryb2tlOm5vbmUiDQogICAgICAgaWQ9Imc0Mjk5Ij4NCiAgICAgIDxyZWN0DQogICAgICAgICBzdHlsZT0iZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDowIg0KICAgICAgICAgaWQ9InN2Z18xLTEiDQogICAgICAgICBoZWlnaHQ9IjEuOTk5OTk4NiINCiAgICAgICAgIHdpZHRoPSI5Ljk5OTk5MjQiDQogICAgICAgICB5PSIxMC45OTk5OTgiDQogICAgICAgICB4PSI3LjAwMDAwNDgiIC8+DQogICAgICA8cmVjdA0KICAgICAgICAgc3R5bGU9ImZpbGw6I2ZmZmZmZjtmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MCINCiAgICAgICAgIGlkPSJzdmdfMS0xLTEiDQogICAgICAgICBoZWlnaHQ9IjkuOTk5OTgzOCINCiAgICAgICAgIHdpZHRoPSIxLjk5OTk5NTUiDQogICAgICAgICB5PSI3LjAwMDAxMTQiDQogICAgICAgICB4PSIxMS4wMDAwMDUiIC8+DQogICAgPC9nPg0KICAgIDxnDQogICAgICAgc3R5bGU9InN0cm9rZTpub25lIg0KICAgICAgIHRyYW5zZm9ybT0ibWF0cml4KDAuNzA3MTA2NzgsLTAuNzA3MTA2NzgsMC43MDcxMDY3OCwwLjcwNzEwNjc4LDE5LjAyOTQzNSwxMi4wMDAwMDEpIg0KICAgICAgIGlkPSJnNDI5OS0zIj4NCiAgICAgIDxyZWN0DQogICAgICAgICBzdHlsZT0iZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDowIg0KICAgICAgICAgaWQ9InN2Z18xLTEtMCINCiAgICAgICAgIGhlaWdodD0iMS45OTk5OTg2Ig0KICAgICAgICAgd2lkdGg9IjkuOTk5OTkyNCINCiAgICAgICAgIHk9IjEwLjk5OTk5OCINCiAgICAgICAgIHg9IjcuMDAwMDA0OCIgLz4NCiAgICAgIDxyZWN0DQogICAgICAgICBzdHlsZT0iZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDowIg0KICAgICAgICAgaWQ9InN2Z18xLTEtMS05Ig0KICAgICAgICAgaGVpZ2h0PSI5Ljk5OTk4MzgiDQogICAgICAgICB3aWR0aD0iMS45OTk5OTU1Ig0KICAgICAgICAgeT0iNy4wMDAwMTE0Ig0KICAgICAgICAgeD0iMTEuMDAwMDA1IiAvPg0KICAgIDwvZz4NCiAgICA8cmVjdA0KICAgICAgIHN0eWxlPSJmaWxsOiNmZmZmZmY7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjAiDQogICAgICAgeD0iNTUuMDAwMDA0Ig0KICAgICAgIHk9IjcuMDAwMDA0OCINCiAgICAgICB3aWR0aD0iNi45OTk5OTA5Ig0KICAgICAgIGhlaWdodD0iNi45OTk5OTA1Ig0KICAgICAgIGlkPSJzdmdfMS03LTUiIC8+DQogICAgPHJlY3QNCiAgICAgICBpZD0icmVjdDQzNTQiDQogICAgICAgaGVpZ2h0PSI2Ljk5OTk5MDUiDQogICAgICAgd2lkdGg9IjYuOTk5OTkwOSINCiAgICAgICB5PSIxMC4wMDAwMSINCiAgICAgICB4PSI1OCINCiAgICAgICBzdHlsZT0iZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTojNGM0YzRjO3N0cm9rZS13aWR0aDoyO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1vcGFjaXR5OjEiIC8+DQogICAgPHJlY3QNCiAgICAgICBzdHlsZT0iZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTojM2M4MGRmO3N0cm9rZS13aWR0aDowO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1vcGFjaXR5OjAuOTQxMTc2NDciDQogICAgICAgeD0iNTguMDAwMDA0Ig0KICAgICAgIHk9IjEwLjAwMDAwNSINCiAgICAgICB3aWR0aD0iNi45OTk5OTA5Ig0KICAgICAgIGhlaWdodD0iNi45OTk5OTA1Ig0KICAgICAgIGlkPSJzdmdfMS03LTUtNyIgLz4NCiAgICA8Zw0KICAgICAgIGlkPSJnNDM3OCI+DQogICAgICA8cmVjdA0KICAgICAgICAgaWQ9InN2Z18xLTctNS0zIg0KICAgICAgICAgaGVpZ2h0PSIxLjk5OTk5NjUiDQogICAgICAgICB3aWR0aD0iNy45OTk5OTA5Ig0KICAgICAgICAgeT0iMTAuOTk5OTk5Ig0KICAgICAgICAgeD0iMTk4Ig0KICAgICAgICAgc3R5bGU9ImZpbGw6I2ZmZmZmZjtmaWxsLW9wYWNpdHk6MTtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MCIgLz4NCiAgICAgIDxyZWN0DQogICAgICAgICBzdHlsZT0iZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDowIg0KICAgICAgICAgeD0iMTk4Ig0KICAgICAgICAgeT0iNy4wMDAwMDA1Ig0KICAgICAgICAgd2lkdGg9IjExLjk5OTk5NSINCiAgICAgICAgIGhlaWdodD0iMS45OTk5OTQ2Ig0KICAgICAgICAgaWQ9InJlY3Q0Mzc0IiAvPg0KICAgICAgPHJlY3QNCiAgICAgICAgIHN0eWxlPSJmaWxsOiNmZmZmZmY7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjAiDQogICAgICAgICB4PSIxOTgiDQogICAgICAgICB5PSIxNC45OTk5OTYiDQogICAgICAgICB3aWR0aD0iMy45OTk5OTI4Ig0KICAgICAgICAgaGVpZ2h0PSIxLjk5OTk5OTUiDQogICAgICAgICBpZD0icmVjdDQzNzYiIC8+DQogICAgPC9nPg0KICAgIDxnDQogICAgICAgaWQ9Imc0MzgzIg0KICAgICAgIHRyYW5zZm9ybT0ibWF0cml4KDEsMCwwLC0xLC0yMy45OTk5OTUsMjMuOTk5OTk1KSI+DQogICAgICA8cmVjdA0KICAgICAgICAgc3R5bGU9ImZpbGw6I2ZmZmZmZjtmaWxsLW9wYWNpdHk6MTtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MCINCiAgICAgICAgIHg9IjE5OCINCiAgICAgICAgIHk9IjEwLjk5OTk5OSINCiAgICAgICAgIHdpZHRoPSI3Ljk5OTk5MDkiDQogICAgICAgICBoZWlnaHQ9IjEuOTk5OTk2NSINCiAgICAgICAgIGlkPSJyZWN0NDM4NSIgLz4NCiAgICAgIDxyZWN0DQogICAgICAgICBpZD0icmVjdDQzODciDQogICAgICAgICBoZWlnaHQ9IjEuOTk5OTk0NiINCiAgICAgICAgIHdpZHRoPSIxMS45OTk5OTUiDQogICAgICAgICB5PSI3LjAwMDAwMDUiDQogICAgICAgICB4PSIxOTgiDQogICAgICAgICBzdHlsZT0iZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDowIiAvPg0KICAgICAgPHJlY3QNCiAgICAgICAgIGlkPSJyZWN0NDM4OSINCiAgICAgICAgIGhlaWdodD0iMS45OTk5OTk1Ig0KICAgICAgICAgd2lkdGg9IjMuOTk5OTkyOCINCiAgICAgICAgIHk9IjE0Ljk5OTk5NiINCiAgICAgICAgIHg9IjE5OCINCiAgICAgICAgIHN0eWxlPSJmaWxsOiNmZmZmZmY7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjAiIC8+DQogICAgPC9nPg0KICAgIDxyZWN0DQogICAgICAgeT0iMy45OTk5MTk5Ig0KICAgICAgIHg9Ijc2Ig0KICAgICAgIGhlaWdodD0iMTYiDQogICAgICAgd2lkdGg9IjE2Ig0KICAgICAgIGlkPSJyZWN0Mzc1NC00Ig0KICAgICAgIHN0eWxlPSJmaWxsOiM0YzRjNGM7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOm5vbmUiIC8+DQogICAgPHBhdGgNCiAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNjY2NjY2NjIg0KICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiDQogICAgICAgaWQ9InBhdGg0MzUxIg0KICAgICAgIGQ9Im0gODUuMTA0NDcsNi4wMTU3Mzg0IC0wLjAxNTYsMS40MDYzIGMgMy4wMjY2OSwtMC4yNDAyIDAuMzMwMDgsMy42NTA3OTk2IDIuNDg0MzgsNC41NzgwOTk2IC0yLjE4Njk0LDEuMDkzOCAwLjQ5MTkxLDQuOTA2OSAtMi40NTMxMyw0LjU3ODEgbCAtMC4wMTU2LDEuNDIxOSBjIDUuNzA4MjgsMC41NTkgMS4wMzI2NCwtNS4xMDA1IDQuNzAzMTMsLTUuMjY1NiBsIDAsLTEuNDA2MyBjIC0zLjYxMzAzLC0wLjAyNyAxLjExODkzLC01LjcwNjk5OTYgLTQuNzAzMTMsLTUuMzEyNDk5NiB6Ig0KICAgICAgIHN0eWxlPSJmaWxsOiNmZmZmZmY7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOiNmZmZmZmY7c3Ryb2tlLXdpZHRoOjAuMjtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2Utb3BhY2l0eToxIiAvPg0KICAgIDxwYXRoDQogICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjY2NjY2NjYyINCiAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIg0KICAgICAgIGlkPSJwYXRoNDM1MS05Ig0KICAgICAgIGQ9Im0gODIuNzgxMjUsNS45OTg0Mzg0IDAuMDE1NiwxLjQwNjMgYyAtMy4wMjY2OCwtMC4yNDAyIC0wLjMzMDA3LDMuNjUwNjk5NiAtMi40ODQzNyw0LjU3ODA5OTYgMi4xODY5NCwxLjA5MzggLTAuNDkxOTIsNC45MDY5IDIuNDUzMTIsNC41NzgxIGwgMC4wMTU2LDEuNDIxOSBjIC01LjcwODI3LDAuNTU5IC0xLjAzMjYzLC01LjEwMDQgLTQuNzAzMTIsLTUuMjY1NiBsIDAsLTEuNDA2MyBjIDMuNjEzMDMsLTAuMDI3IC0xLjExODk0LC01LjcwNzA5OTYgNC43MDMxMiwtNS4zMTI0OTk2IHoiDQogICAgICAgc3R5bGU9ImZpbGw6I2ZmZmZmZjtmaWxsLW9wYWNpdHk6MTtzdHJva2U6I2ZmZmZmZjtzdHJva2Utd2lkdGg6MC4yO3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1vcGFjaXR5OjEiIC8+DQogICAgPHJlY3QNCiAgICAgICB5PSIzLjk5OTkxOTkiDQogICAgICAgeD0iMTAwIg0KICAgICAgIGhlaWdodD0iMTYiDQogICAgICAgd2lkdGg9IjE2Ig0KICAgICAgIGlkPSJyZWN0Mzc1NC0yNSINCiAgICAgICBzdHlsZT0iZmlsbDojNGM0YzRjO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lIiAvPg0KICAgIDxwYXRoDQogICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCINCiAgICAgICBpZD0icGF0aDI5ODciDQogICAgICAgZD0ibSAxMDMuNzE5LDUuNjcxOTM4NCAwLDEyLjcxODc5OTYgMy4wMzEyNSwwIDAsLTEuNTMxMyAtMS4zNDM3NSwwIDAsLTkuNjI0OTk5NiAxLjM3NSwwIDAsLTEuNTYyNSB6Ig0KICAgICAgIHN0eWxlPSJmaWxsOiNmZmZmZmY7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOm5vbmUiIC8+DQogICAgPHBhdGgNCiAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIg0KICAgICAgIGlkPSJwYXRoMjk4Ny0xIg0KICAgICAgIGQ9Im0gMTEyLjIxODUsNS42NzIxOTg0IDAsMTIuNzE4Nzk5NiAtMy4wMzEyNSwwIDAsLTEuNTMxMyAxLjM0Mzc1LDAgMCwtOS42MjQ5OTk2IC0xLjM3NSwwIDAsLTEuNTYyNSB6Ig0KICAgICAgIHN0eWxlPSJmaWxsOiNmZmZmZmY7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOm5vbmUiIC8+DQogICAgPHJlY3QNCiAgICAgICB5PSIzLjk5OTkxOTkiDQogICAgICAgeD0iMTI0Ig0KICAgICAgIGhlaWdodD0iMTYiDQogICAgICAgd2lkdGg9IjE2Ig0KICAgICAgIGlkPSJyZWN0Mzc1NC03MyINCiAgICAgICBzdHlsZT0iZmlsbDojNGM0YzRjO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lIiAvPg0KICAgIDxwYXRoDQogICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjY2NjY2NjY2MiDQogICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCINCiAgICAgICBpZD0icGF0aDM3ODAiDQogICAgICAgZD0ibSAxMjYuMjgyNCwxNy42MDI5MzggMS43ODk1NywwIDEuMTQxNDMsLTIuODY0MSA1LjY1MzY0LDAgMS4xNDg1NiwyLjg2NDEgMS43NjU2NSwwIC00Ljc4Njg3LC0xMS4xNjEwOTk2IC0xLjkxOTAzLDAgeiINCiAgICAgICBzdHlsZT0iZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lIiAvPg0KICAgIDxwYXRoDQogICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCINCiAgICAgICBpZD0icGF0aDM3ODIiDQogICAgICAgZD0ibSAxMjkuNzI3MDQsMTMuNDc4ODM4IDQuNjA4NTIsMC4wMSAtMi4zMDQyNiwtNS41NDk3OTk2IHoiDQogICAgICAgc3R5bGU9ImZpbGw6IzRjNGM0YztmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZSIgLz4NCiAgICA8cmVjdA0KICAgICAgIHk9IjMuOTk5OTE5OSINCiAgICAgICB4PSIxNDgiDQogICAgICAgaGVpZ2h0PSIxNiINCiAgICAgICB3aWR0aD0iMTYiDQogICAgICAgaWQ9InJlY3QzNzU0LTM1Ig0KICAgICAgIHN0eWxlPSJmaWxsOiM0YzRjNGM7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOm5vbmUiIC8+DQogICAgPHBhdGgNCiAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNjY2NjY2MiDQogICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCINCiAgICAgICBpZD0icGF0aDUwMDgtMiINCiAgICAgICBkPSJtIDE1Ni40NzY1NSw1Ljg5MTczODQgMCwyLjE3OTcgMC40NjA5MywyLjM5ODM5OTYgMS44MjgxMywwIDAuMzk4NDQsLTIuMzk4Mzk5NiAwLC0yLjE3OTcgeiINCiAgICAgICBzdHlsZT0iZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lIiAvPg0KICAgIDxwYXRoDQogICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjY2NjY2NjIg0KICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiDQogICAgICAgaWQ9InBhdGg1MDA4LTItOCINCiAgICAgICBkPSJtIDE1Mi41MTU2MSw1Ljg5MDYzODQgMCwyLjE3OTcgMC40NjA5NCwyLjM5ODM5OTYgMS44MjgxMiwwIDAuMzk4NDQsLTIuMzk4Mzk5NiAwLC0yLjE3OTcgeiINCiAgICAgICBzdHlsZT0iZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lIiAvPg0KICA8L2c+DQogIDxyZWN0DQogICAgIHg9IjQiDQogICAgIHk9IjI3Ljk5OTk5NCINCiAgICAgd2lkdGg9IjE2Ig0KICAgICBoZWlnaHQ9IjE2Ig0KICAgICBpZD0icmVjdDQ0MzIiDQogICAgIHN0eWxlPSJmaWxsOiNkM2QzZDM7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjAiIC8+DQogIDxyZWN0DQogICAgIHN0eWxlPSJmaWxsOiNkM2QzZDM7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjAiDQogICAgIHg9IjI4LjAwMDAwNiINCiAgICAgeT0iMjcuOTk5OTkiDQogICAgIHdpZHRoPSIxNiINCiAgICAgaGVpZ2h0PSIxNiINCiAgICAgaWQ9InJlY3Q0NDM0IiAvPg0KICA8cmVjdA0KICAgICBpZD0icmVjdDQ0MzYiDQogICAgIGhlaWdodD0iMTYiDQogICAgIHdpZHRoPSIxNiINCiAgICAgeT0iMjcuOTk5OTkiDQogICAgIHg9IjUyLjAwMDAwNCINCiAgICAgc3R5bGU9ImZpbGw6I2QzZDNkMztmaWxsLW9wYWNpdHk6MTtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MCIgLz4NCiAgPHJlY3QNCiAgICAgc3R5bGU9ImZpbGw6I2QzZDNkMztzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MCINCiAgICAgeD0iMTcyLjAwMDAyIg0KICAgICB5PSIyNy45OTk5ODEiDQogICAgIHdpZHRoPSIxNiINCiAgICAgaGVpZ2h0PSIxNiINCiAgICAgaWQ9InJlY3Q0NDQ2IiAvPg0KICA8cmVjdA0KICAgICBzdHlsZT0iZmlsbDojZDNkM2QzO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDowIg0KICAgICB4PSIxOTYiDQogICAgIHk9IjI3Ljk5OTk5Ig0KICAgICB3aWR0aD0iMTYiDQogICAgIGhlaWdodD0iMTYiDQogICAgIGlkPSJyZWN0NDQ0OCIgLz4NCiAgPGcNCiAgICAgaWQ9Imc0NDY2Ig0KICAgICBzdHlsZT0ic3Ryb2tlOm5vbmUiDQogICAgIHRyYW5zZm9ybT0idHJhbnNsYXRlKDAsMjMuOTk5OTk1KSI+DQogICAgPHJlY3QNCiAgICAgICBzdHlsZT0iZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDowIg0KICAgICAgIGlkPSJyZWN0NDQ2OCINCiAgICAgICBoZWlnaHQ9IjEuOTk5OTk4NiINCiAgICAgICB3aWR0aD0iOS45OTk5OTI0Ig0KICAgICAgIHk9IjEwLjk5OTk5OCINCiAgICAgICB4PSI3LjAwMDAwNDgiIC8+DQogICAgPHJlY3QNCiAgICAgICBzdHlsZT0iZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDowIg0KICAgICAgIGlkPSJyZWN0NDQ3MCINCiAgICAgICBoZWlnaHQ9IjkuOTk5OTgzOCINCiAgICAgICB3aWR0aD0iMS45OTk5OTU1Ig0KICAgICAgIHk9IjcuMDAwMDExNCINCiAgICAgICB4PSIxMS4wMDAwMDUiIC8+DQogIDwvZz4NCiAgPGcNCiAgICAgdHJhbnNmb3JtPSJtYXRyaXgoMC43MDcxMDY3OCwtMC43MDcxMDY3OCwwLjcwNzEwNjc4LDAuNzA3MTA2NzgsMTkuMDI5NDM1LDM1Ljk5OTk5NikiDQogICAgIGlkPSJnNDQ3MiINCiAgICAgc3R5bGU9InN0cm9rZTpub25lIj4NCiAgICA8cmVjdA0KICAgICAgIHN0eWxlPSJmaWxsOiNmZmZmZmY7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjAiDQogICAgICAgaWQ9InJlY3Q0NDc0Ig0KICAgICAgIGhlaWdodD0iMS45OTk5OTg2Ig0KICAgICAgIHdpZHRoPSI5Ljk5OTk5MjQiDQogICAgICAgeT0iMTAuOTk5OTk4Ig0KICAgICAgIHg9IjcuMDAwMDA0OCIgLz4NCiAgICA8cmVjdA0KICAgICAgIHN0eWxlPSJmaWxsOiNmZmZmZmY7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjAiDQogICAgICAgaWQ9InJlY3Q0NDc2Ig0KICAgICAgIGhlaWdodD0iOS45OTk5ODM4Ig0KICAgICAgIHdpZHRoPSIxLjk5OTk5NTUiDQogICAgICAgeT0iNy4wMDAwMTE0Ig0KICAgICAgIHg9IjExLjAwMDAwNSIgLz4NCiAgPC9nPg0KICA8cmVjdA0KICAgICBzdHlsZT0iZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDowIg0KICAgICB4PSI1NS4wMDAwMDQiDQogICAgIHk9IjMxIg0KICAgICB3aWR0aD0iNi45OTk5OTA5Ig0KICAgICBoZWlnaHQ9IjYuOTk5OTkwNSINCiAgICAgaWQ9InJlY3Q0NDc4IiAvPg0KICA8cmVjdA0KICAgICBpZD0icmVjdDQ0ODAiDQogICAgIGhlaWdodD0iNi45OTk5OTA1Ig0KICAgICB3aWR0aD0iNi45OTk5OTA5Ig0KICAgICB5PSIzNC4wMDAwMDgiDQogICAgIHg9IjU4Ig0KICAgICBzdHlsZT0iZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTojZDNkM2QzO3N0cm9rZS13aWR0aDoyO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lIiAvPg0KICA8cmVjdA0KICAgICBzdHlsZT0iZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTojZDNkM2QzO3N0cm9rZS13aWR0aDowO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lIg0KICAgICB4PSI1OC4wMDAwMDQiDQogICAgIHk9IjM0LjAwMDAwNCINCiAgICAgd2lkdGg9IjYuOTk5OTkwOSINCiAgICAgaGVpZ2h0PSI2Ljk5OTk5MDUiDQogICAgIGlkPSJyZWN0NDQ4MiIgLz4NCiAgPGcNCiAgICAgaWQ9Imc0NDg0Ig0KICAgICB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwLDIzLjk5OTk5NSkiPg0KICAgIDxyZWN0DQogICAgICAgaWQ9InJlY3Q0NDg2Ig0KICAgICAgIGhlaWdodD0iMS45OTk5OTY1Ig0KICAgICAgIHdpZHRoPSI3Ljk5OTk5MDkiDQogICAgICAgeT0iMTAuOTk5OTk5Ig0KICAgICAgIHg9IjE5OCINCiAgICAgICBzdHlsZT0iZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDowIiAvPg0KICAgIDxyZWN0DQogICAgICAgc3R5bGU9ImZpbGw6I2ZmZmZmZjtmaWxsLW9wYWNpdHk6MTtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MCINCiAgICAgICB4PSIxOTgiDQogICAgICAgeT0iNy4wMDAwMDA1Ig0KICAgICAgIHdpZHRoPSIxMS45OTk5OTUiDQogICAgICAgaGVpZ2h0PSIxLjk5OTk5NDYiDQogICAgICAgaWQ9InJlY3Q0NDg4IiAvPg0KICAgIDxyZWN0DQogICAgICAgc3R5bGU9ImZpbGw6I2ZmZmZmZjtmaWxsLW9wYWNpdHk6MTtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MCINCiAgICAgICB4PSIxOTgiDQogICAgICAgeT0iMTQuOTk5OTk2Ig0KICAgICAgIHdpZHRoPSIzLjk5OTk5MjgiDQogICAgICAgaGVpZ2h0PSIxLjk5OTk5OTUiDQogICAgICAgaWQ9InJlY3Q0NDkwIiAvPg0KICA8L2c+DQogIDxnDQogICAgIGlkPSJnNDQ5MiINCiAgICAgdHJhbnNmb3JtPSJtYXRyaXgoMSwwLDAsLTEsLTIzLjk5OTk5NSw0Ny45OTk5OSkiPg0KICAgIDxyZWN0DQogICAgICAgc3R5bGU9ImZpbGw6I2ZmZmZmZjtmaWxsLW9wYWNpdHk6MTtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MCINCiAgICAgICB4PSIxOTgiDQogICAgICAgeT0iMTAuOTk5OTk5Ig0KICAgICAgIHdpZHRoPSI3Ljk5OTk5MDkiDQogICAgICAgaGVpZ2h0PSIxLjk5OTk5NjUiDQogICAgICAgaWQ9InJlY3Q0NDk0IiAvPg0KICAgIDxyZWN0DQogICAgICAgaWQ9InJlY3Q0NDk2Ig0KICAgICAgIGhlaWdodD0iMS45OTk5OTQ2Ig0KICAgICAgIHdpZHRoPSIxMS45OTk5OTUiDQogICAgICAgeT0iNy4wMDAwMDA1Ig0KICAgICAgIHg9IjE5OCINCiAgICAgICBzdHlsZT0iZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDowIiAvPg0KICAgIDxyZWN0DQogICAgICAgaWQ9InJlY3Q0NDk4Ig0KICAgICAgIGhlaWdodD0iMS45OTk5OTk1Ig0KICAgICAgIHdpZHRoPSIzLjk5OTk5MjgiDQogICAgICAgeT0iMTQuOTk5OTk2Ig0KICAgICAgIHg9IjE5OCINCiAgICAgICBzdHlsZT0iZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDowIiAvPg0KICA8L2c+DQogIDxyZWN0DQogICAgIHN0eWxlPSJmaWxsOiNkM2QzZDM7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOm5vbmUiDQogICAgIGlkPSJyZWN0Mzc1NC04Ig0KICAgICB3aWR0aD0iMTYiDQogICAgIGhlaWdodD0iMTYiDQogICAgIHg9Ijc2Ig0KICAgICB5PSIyNy45OTk5MiIgLz4NCiAgPHBhdGgNCiAgICAgc3R5bGU9ImZpbGw6I2ZmZmZmZjtmaWxsLW9wYWNpdHk6MTtzdHJva2U6I2ZmZmZmZjtzdHJva2Utd2lkdGg6MC4yO3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1vcGFjaXR5OjEiDQogICAgIGQ9Im0gODUuMTA0NDgsMzAuMDE1NTM3IC0wLjAxNTYsMS40MDYzIGMgMy4wMjY2OCwtMC4yNDAyIDAuMzMwMDcsMy42NTA4IDIuNDg0MzgsNC41NzgxIC0yLjE4Njk1LDEuMDkzOCAwLjQ5MTkxLDQuOTA2ODggLTIuNDUzMTMsNC41NzgwOCBsIC0wLjAxNTYsMS40MjE5IGMgNS43MDgyNywwLjU1OSAxLjAzMjYzLC01LjEwMDQ4IDQuNzAzMTMsLTUuMjY1NTggbCAwLC0xLjQwNjMgYyAtMy42MTMwNCwtMC4wMjcgMS4xMTg5MywtNS43MDcgLTQuNzAzMTMsLTUuMzEyNSB6Ig0KICAgICBpZD0icGF0aDQzNTEtMSINCiAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCINCiAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjY2NjY2NjYyIgLz4NCiAgPHBhdGgNCiAgICAgc3R5bGU9ImZpbGw6I2ZmZmZmZjtmaWxsLW9wYWNpdHk6MTtzdHJva2U6I2ZmZmZmZjtzdHJva2Utd2lkdGg6MC4yO3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1vcGFjaXR5OjEiDQogICAgIGQ9Im0gODIuNzgxMjYsMjkuOTk4MjM3IDAuMDE1NiwxLjQwNjMgYyAtMy4wMjY2OCwtMC4yNDAyIC0wLjMzMDA4LDMuNjUwNyAtMi40ODQzOCw0LjU3ODEgMi4xODY5NCwxLjA5MzggLTAuNDkxOTEsNC45MDY4OCAyLjQ1MzEzLDQuNTc4MDggbCAwLjAxNTYsMS40MjE5IGMgLTUuNzA4MjgsMC41NTkgLTEuMDMyNjQsLTUuMTAwMzggLTQuNzAzMTMsLTUuMjY1NTggbCAwLC0xLjQwNjMgYyAzLjYxMzAzLC0wLjAyNyAtMS4xMTg5MywtNS43MDcxIDQuNzAzMTMsLTUuMzEyNSB6Ig0KICAgICBpZD0icGF0aDQzNTEtOS01Ig0KICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIg0KICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNjY2NjY2NjIiAvPg0KICA8cmVjdA0KICAgICBzdHlsZT0iZmlsbDojZDNkM2QzO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lIg0KICAgICBpZD0icmVjdDM3NTQtNjUiDQogICAgIHdpZHRoPSIxNiINCiAgICAgaGVpZ2h0PSIxNiINCiAgICAgeD0iMTAwIg0KICAgICB5PSIyNy45OTk5MiIgLz4NCiAgPHBhdGgNCiAgICAgc3R5bGU9ImZpbGw6I2ZmZmZmZjtmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZSINCiAgICAgZD0ibSAxMDMuNzE5LDI5LjY3MTkzNyAwLDEyLjcxODc4IDMuMDMxMjUsMCAwLC0xLjUzMTMgLTEuMzQzNzUsMCAwLC05LjYyNDk4IDEuMzc1LDAgMCwtMS41NjI1IHoiDQogICAgIGlkPSJwYXRoMjk4Ny04Ig0KICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIiAvPg0KICA8cGF0aA0KICAgICBzdHlsZT0iZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lIg0KICAgICBkPSJtIDExMi4yMTg1LDI5LjY3MTkzNyAwLDEyLjcxODc4IC0zLjAzMTI1LDAgMCwtMS41MzEzIDEuMzQzNzUsMCAwLC05LjYyNDk4IC0xLjM3NSwwIDAsLTEuNTYyNSB6Ig0KICAgICBpZD0icGF0aDI5ODctMS05Ig0KICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIiAvPg0KICA8cmVjdA0KICAgICBzdHlsZT0iZmlsbDojZDNkM2QzO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lIg0KICAgICBpZD0icmVjdDM3NTQtOTIiDQogICAgIHdpZHRoPSIxNiINCiAgICAgaGVpZ2h0PSIxNiINCiAgICAgeD0iMTI0Ig0KICAgICB5PSIyNy45OTk5MiIgLz4NCiAgPHBhdGgNCiAgICAgc3R5bGU9ImZpbGw6I2ZmZmZmZjtmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZSINCiAgICAgZD0ibSAxMjYuMjgyNCw0MS42MDI5MTcgMS43ODk1NywwIDEuMTQxNDMsLTIuODY0MDggNS42NTM2NCwwIDEuMTQ4NTYsMi44NjQwOCAxLjc2NTY1LDAgLTQuNzg2ODcsLTExLjE2MTA4IC0xLjkxOTAyLDAgeiINCiAgICAgaWQ9InBhdGgzNzgwLTkiDQogICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiDQogICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY2NjY2NjY2NjIiAvPg0KICA8cGF0aA0KICAgICBzdHlsZT0iZmlsbDojZDNkM2QzO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lIg0KICAgICBkPSJtIDEyOS43MjcwNCwzNy40Nzg4MzcgNC42MDg1MiwwLjAxIC0yLjMwNDI2LC01LjU0OTggeiINCiAgICAgaWQ9InBhdGgzNzgyLTIiDQogICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiIC8+DQogIDxyZWN0DQogICAgIHN0eWxlPSJmaWxsOiNkM2QzZDM7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOm5vbmUiDQogICAgIGlkPSJyZWN0Mzc1NC00NyINCiAgICAgd2lkdGg9IjE2Ig0KICAgICBoZWlnaHQ9IjE2Ig0KICAgICB4PSIxNDgiDQogICAgIHk9IjI3Ljk5OTkyIiAvPg0KICA8cGF0aA0KICAgICBzdHlsZT0iZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lIg0KICAgICBkPSJtIDE1Ni40NzY1NiwyOS44OTE3MzcgMCwyLjE3OTcgMC40NjA5MywyLjM5ODQgMS44MjgxMywwIDAuMzk4NDQsLTIuMzk4NCAwLC0yLjE3OTcgeiINCiAgICAgaWQ9InBhdGg1MDA4LTItMSINCiAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCINCiAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjY2NjY2NjIiAvPg0KICA8cGF0aA0KICAgICBzdHlsZT0iZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lIg0KICAgICBkPSJtIDE1Mi41MTU2MiwyOS44OTA2MzcgMCwyLjE3OTcgMC40NjA5NCwyLjM5ODQgMS44MjgxMiwwIDAuMzk4NDQsLTIuMzk4NCAwLC0yLjE3OTcgeiINCiAgICAgaWQ9InBhdGg1MDA4LTItOC04Ig0KICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIg0KICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNjY2NjY2MiIC8+DQogIDxyZWN0DQogICAgIGlkPSJzdmdfMS03LTIiDQogICAgIGhlaWdodD0iMS45OTk5OTYxIg0KICAgICB3aWR0aD0iMTEuOTk5OTk2Ig0KICAgICB5PSI2NCINCiAgICAgeD0iNTQiDQogICAgIHN0eWxlPSJmaWxsOiM0YzRjNGM7ZmlsbC1vcGFjaXR5OjAuOTg0MzEzNzM7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjAiIC8+DQogIDxyZWN0DQogICAgIGlkPSJzdmdfMS03LTItMiINCiAgICAgaGVpZ2h0PSIyLjk5OTk5MDUiDQogICAgIHdpZHRoPSIyLjk5OTk5MDciDQogICAgIHk9IjUyIg0KICAgICB4PSI4MC4wMDAwMDgiDQogICAgIHN0eWxlPSJmaWxsOiM0YzRjNGM7ZmlsbC1vcGFjaXR5OjAuOTg0MzEzNzM7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjAiIC8+DQogIDxyZWN0DQogICAgIHN0eWxlPSJmaWxsOiM0YzRjNGM7ZmlsbC1vcGFjaXR5OjAuOTg0MzEzNzM7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjAiDQogICAgIHg9Ijg1LjAwMDAwOCINCiAgICAgeT0iNTIiDQogICAgIHdpZHRoPSIyLjk5OTk5MDciDQogICAgIGhlaWdodD0iMi45OTk5OTA1Ig0KICAgICBpZD0icmVjdDQ1NjEiIC8+DQogIDxyZWN0DQogICAgIHN0eWxlPSJmaWxsOiM0YzRjNGM7ZmlsbC1vcGFjaXR5OjAuOTg0MzEzNzM7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjAiDQogICAgIHg9IjgwLjAwMDAwOCINCiAgICAgeT0iNTgiDQogICAgIHdpZHRoPSIyLjk5OTk5MDciDQogICAgIGhlaWdodD0iMi45OTk5OTA1Ig0KICAgICBpZD0icmVjdDQ1NjMiIC8+DQogIDxyZWN0DQogICAgIGlkPSJyZWN0NDU2NSINCiAgICAgaGVpZ2h0PSIyLjk5OTk5MDUiDQogICAgIHdpZHRoPSIyLjk5OTk5MDciDQogICAgIHk9IjU4Ig0KICAgICB4PSI4NS4wMDAwMDgiDQogICAgIHN0eWxlPSJmaWxsOiM0YzRjNGM7ZmlsbC1vcGFjaXR5OjAuOTg0MzEzNzM7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjAiIC8+DQogIDxyZWN0DQogICAgIGlkPSJyZWN0NDU2NyINCiAgICAgaGVpZ2h0PSIyLjk5OTk5MDUiDQogICAgIHdpZHRoPSIyLjk5OTk5MDciDQogICAgIHk9IjY0Ig0KICAgICB4PSI4MC4wMDAwMDgiDQogICAgIHN0eWxlPSJmaWxsOiM0YzRjNGM7ZmlsbC1vcGFjaXR5OjAuOTg0MzEzNzM7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjAiIC8+DQogIDxyZWN0DQogICAgIHN0eWxlPSJmaWxsOiM0YzRjNGM7ZmlsbC1vcGFjaXR5OjAuOTg0MzEzNzM7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjAiDQogICAgIHg9Ijg1LjAwMDAwOCINCiAgICAgeT0iNjQiDQogICAgIHdpZHRoPSIyLjk5OTk5MDciDQogICAgIGhlaWdodD0iMi45OTk5OTA1Ig0KICAgICBpZD0icmVjdDQ1NjkiIC8+DQogIDxjaXJjbGUNCiAgICAgc3R5bGU9Im9wYWNpdHk6MTtmaWxsOm5vbmU7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOiM0YzRjNGM7c3Ryb2tlLXdpZHRoOjI7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lIg0KICAgICBpZD0icGF0aDQ1NzEiDQogICAgIGN4PSIxMTAuMDYwODEiDQogICAgIGN5PSI1Ny45MzkyMDkiDQogICAgIHI9IjQuNzQzODgzNiIgLz4NCiAgPHJlY3QNCiAgICAgc3R5bGU9ImZpbGw6IzRjNGM0YztmaWxsLW9wYWNpdHk6MC45ODQzMTM3MztzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MCINCiAgICAgeD0iMTE2LjY0NTY2Ig0KICAgICB5PSItMzEuNzk3NTIiDQogICAgIHdpZHRoPSI0LjIyOTcxMyINCiAgICAgaGVpZ2h0PSI2LjQwNTM4ODQiDQogICAgIGlkPSJyZWN0NDU2My0yIg0KICAgICB0cmFuc2Zvcm09Im1hdHJpeCgwLjcwNzEwNjc4LDAuNzA3MTA2NzgsLTAuNzA3MTA2NzgsMC43MDcxMDY3OCwwLDApIiAvPg0KICA8cGF0aA0KICAgICBzdHlsZT0iZmlsbDojNGM0YzRjO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDowO3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1vcGFjaXR5OjEiDQogICAgIGQ9Ik0gMTI1LDU2IDEzOC43NzAyNyw1Ni4wOTUgMTMyLDY0IFoiDQogICAgIGlkPSJwYXRoNDYxMyINCiAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCINCiAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjY2NjIiAvPg0KICA8cGF0aA0KICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNjY2MiDQogICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiDQogICAgIGlkPSJwYXRoNDYxNSINCiAgICAgZD0iTSAxNDksNjQgMTYyLjc3MDI3LDYzLjkwNSAxNTYsNTYgWiINCiAgICAgc3R5bGU9ImZpbGw6IzRjNGM0YztmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2Utb3BhY2l0eToxIiAvPg0KICA8cmVjdA0KICAgICBzdHlsZT0iZmlsbDojNGM0YzRjO2ZpbGwtb3BhY2l0eTowLjk4NDMxMzczO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDowIg0KICAgICB4PSI1NCINCiAgICAgeT0iNTMiDQogICAgIHdpZHRoPSIxMS45OTk5OTYiDQogICAgIGhlaWdodD0iMS45OTk5OTYxIg0KICAgICBpZD0icmVjdDQ2MzgiIC8+DQogIDxyZWN0DQogICAgIGlkPSJzdmdfMS03LTItMjQiDQogICAgIGhlaWdodD0iMS45OTk5OTU3Ig0KICAgICB3aWR0aD0iMTIuOTk5OTkiDQogICAgIHk9Ii01NiINCiAgICAgeD0iNTMiDQogICAgIHN0eWxlPSJmaWxsOiM0YzRjNGM7ZmlsbC1vcGFjaXR5OjAuOTg0MzEzNzM7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjAiDQogICAgIHRyYW5zZm9ybT0ibWF0cml4KDAsMSwtMSwwLDAsMCkiIC8+DQogIDxyZWN0DQogICAgIHRyYW5zZm9ybT0ibWF0cml4KDAsMSwtMSwwLDAsMCkiDQogICAgIHN0eWxlPSJmaWxsOiM0YzRjNGM7ZmlsbC1vcGFjaXR5OjAuOTg0MzEzNzM7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjAiDQogICAgIHg9IjUzIg0KICAgICB5PSItNjYiDQogICAgIHdpZHRoPSIxMi45OTk5OSINCiAgICAgaGVpZ2h0PSIxLjk5OTk5NTciDQogICAgIGlkPSJyZWN0NDY1NyIgLz4NCiAgPHJlY3QNCiAgICAgaWQ9InJlY3Q0NjU5Ig0KICAgICBoZWlnaHQ9IjAuOTk5OTkyOTEiDQogICAgIHdpZHRoPSIxMS45OTk5OTkiDQogICAgIHk9IjU3Ig0KICAgICB4PSI1NCINCiAgICAgc3R5bGU9ImZpbGw6IzRjNGM0YztmaWxsLW9wYWNpdHk6MC45ODQzMTM3MztzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MCIgLz4NCiAgPHJlY3QNCiAgICAgc3R5bGU9ImZpbGw6I2QzZDNkMztmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MDtzdHJva2Utb3BhY2l0eToxIg0KICAgICB4PSI1NCINCiAgICAgeT0iODguMDAwMTIyIg0KICAgICB3aWR0aD0iMTEuOTk5OTk2Ig0KICAgICBoZWlnaHQ9IjEuOTk5OTk2MSINCiAgICAgaWQ9InJlY3Q0NjYxIiAvPg0KICA8cmVjdA0KICAgICBzdHlsZT0iZmlsbDojZDNkM2QzO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDowO3N0cm9rZS1vcGFjaXR5OjEiDQogICAgIHg9IjgwLjAwMDAwOCINCiAgICAgeT0iNzYuMDAwMTIyIg0KICAgICB3aWR0aD0iMi45OTk5OTA3Ig0KICAgICBoZWlnaHQ9IjIuOTk5OTkwNSINCiAgICAgaWQ9InJlY3Q0NjYzIiAvPg0KICA8cmVjdA0KICAgICBpZD0icmVjdDQ2NjUiDQogICAgIGhlaWdodD0iMi45OTk5OTA1Ig0KICAgICB3aWR0aD0iMi45OTk5OTA3Ig0KICAgICB5PSI3Ni4wMDAxMjIiDQogICAgIHg9Ijg1LjAwMDAwOCINCiAgICAgc3R5bGU9ImZpbGw6I2QzZDNkMztmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MDtzdHJva2Utb3BhY2l0eToxIiAvPg0KICA8cmVjdA0KICAgICBpZD0icmVjdDQ2NjciDQogICAgIGhlaWdodD0iMi45OTk5OTA1Ig0KICAgICB3aWR0aD0iMi45OTk5OTA3Ig0KICAgICB5PSI4Mi4wMDAxMjIiDQogICAgIHg9IjgwLjAwMDAwOCINCiAgICAgc3R5bGU9ImZpbGw6I2QzZDNkMztmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MDtzdHJva2Utb3BhY2l0eToxIiAvPg0KICA8cmVjdA0KICAgICBzdHlsZT0iZmlsbDojZDNkM2QzO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDowO3N0cm9rZS1vcGFjaXR5OjEiDQogICAgIHg9Ijg1LjAwMDAwOCINCiAgICAgeT0iODIuMDAwMTIyIg0KICAgICB3aWR0aD0iMi45OTk5OTA3Ig0KICAgICBoZWlnaHQ9IjIuOTk5OTkwNSINCiAgICAgaWQ9InJlY3Q0NjY5IiAvPg0KICA8cmVjdA0KICAgICBzdHlsZT0iZmlsbDojZDNkM2QzO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDowO3N0cm9rZS1vcGFjaXR5OjEiDQogICAgIHg9IjgwLjAwMDAwOCINCiAgICAgeT0iODguMDAwMTIyIg0KICAgICB3aWR0aD0iMi45OTk5OTA3Ig0KICAgICBoZWlnaHQ9IjIuOTk5OTkwNSINCiAgICAgaWQ9InJlY3Q0NjcxIiAvPg0KICA8cmVjdA0KICAgICBpZD0icmVjdDQ2NzMiDQogICAgIGhlaWdodD0iMi45OTk5OTA1Ig0KICAgICB3aWR0aD0iMi45OTk5OTA3Ig0KICAgICB5PSI4OC4wMDAxMjIiDQogICAgIHg9Ijg1LjAwMDAwOCINCiAgICAgc3R5bGU9ImZpbGw6I2QzZDNkMztmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MDtzdHJva2Utb3BhY2l0eToxIiAvPg0KICA8Y2lyY2xlDQogICAgIHI9IjQuNzQzODgzNiINCiAgICAgY3k9IjgxLjkzOTMzMSINCiAgICAgY3g9IjExMC4wNjA4MSINCiAgICAgaWQ9ImNpcmNsZTQ2NzUiDQogICAgIHN0eWxlPSJvcGFjaXR5OjE7ZmlsbDpub25lO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTojZDNkM2QzO3N0cm9rZS13aWR0aDoyO3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2Utb3BhY2l0eToxIiAvPg0KICA8cmVjdA0KICAgICB0cmFuc2Zvcm09Im1hdHJpeCgwLjcwNzEwNjc4LDAuNzA3MTA2NzgsLTAuNzA3MTA2NzgsMC43MDcxMDY3OCwwLDApIg0KICAgICBpZD0icmVjdDQ2NzciDQogICAgIGhlaWdodD0iNi40MDUzODg0Ig0KICAgICB3aWR0aD0iNC4yMjk3MTMiDQogICAgIHk9Ii0xNC44MjY4MTYiDQogICAgIHg9IjEzMy42MTYzIg0KICAgICBzdHlsZT0iZmlsbDojZDNkM2QzO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTojZDNkM2QzO3N0cm9rZS13aWR0aDowO3N0cm9rZS1vcGFjaXR5OjEiIC8+DQogIDxwYXRoDQogICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY2NjYyINCiAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCINCiAgICAgaWQ9InBhdGg0Njc5Ig0KICAgICBkPSJtIDEyNSw4MC4wMDAwMDUgMTMuNzcwMjcsMC4wOTQ5OSBMIDEzMiw4Ny45OTk5OTIgWiINCiAgICAgc3R5bGU9ImZpbGw6I2QzZDNkMztmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6I2QzZDNkMztzdHJva2Utd2lkdGg6MDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2Utb3BhY2l0eToxIiAvPg0KICA8cGF0aA0KICAgICBzdHlsZT0iZmlsbDojZDNkM2QzO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojZDNkM2QzO3N0cm9rZS13aWR0aDowO3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1vcGFjaXR5OjEiDQogICAgIGQ9Ik0gMTQ5LDg4LjAwMDIgMTYyLjc3MDI3LDg3LjkwNTIgMTU2LDgwLjAwMDIgWiINCiAgICAgaWQ9InBhdGg0NjgxIg0KICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIg0KICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNjY2MiIC8+DQogIDxyZWN0DQogICAgIGlkPSJyZWN0NDY4MyINCiAgICAgaGVpZ2h0PSIxLjk5OTk5NjEiDQogICAgIHdpZHRoPSIxMS45OTk5OTYiDQogICAgIHk9Ijc3LjAwMDEyMiINCiAgICAgeD0iNTQiDQogICAgIHN0eWxlPSJmaWxsOiNkM2QzZDM7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjA7c3Ryb2tlLW9wYWNpdHk6MSIgLz4NCiAgPHJlY3QNCiAgICAgdHJhbnNmb3JtPSJtYXRyaXgoMCwxLC0xLDAsMCwwKSINCiAgICAgc3R5bGU9ImZpbGw6I2QzZDNkMztmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MDtzdHJva2Utb3BhY2l0eToxIg0KICAgICB4PSI3Ny4wMDAxMjIiDQogICAgIHk9Ii01NiINCiAgICAgd2lkdGg9IjEyLjk5OTk5Ig0KICAgICBoZWlnaHQ9IjEuOTk5OTk1NyINCiAgICAgaWQ9InJlY3Q0Njg1IiAvPg0KICA8cmVjdA0KICAgICBpZD0icmVjdDQ2ODciDQogICAgIGhlaWdodD0iMS45OTk5OTU3Ig0KICAgICB3aWR0aD0iMTIuOTk5OTkiDQogICAgIHk9Ii02NiINCiAgICAgeD0iNzcuMDAwMTIyIg0KICAgICBzdHlsZT0iZmlsbDojZDNkM2QzO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDowO3N0cm9rZS1vcGFjaXR5OjEiDQogICAgIHRyYW5zZm9ybT0ibWF0cml4KDAsMSwtMSwwLDAsMCkiIC8+DQogIDxyZWN0DQogICAgIHN0eWxlPSJmaWxsOiNkM2QzZDM7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjA7c3Ryb2tlLW9wYWNpdHk6MSINCiAgICAgeD0iNTQiDQogICAgIHk9IjgxLjAwMDEyMiINCiAgICAgd2lkdGg9IjExLjk5OTk5OSINCiAgICAgaGVpZ2h0PSIwLjk5OTk5MjkxIg0KICAgICBpZD0icmVjdDQ2ODkiIC8+DQogIDxyZWN0DQogICAgIGlkPSJyZWN0NDc2MS0xIg0KICAgICBoZWlnaHQ9IjEuOTk5OTk0NSINCiAgICAgd2lkdGg9IjE1Ljk5OTk5Ig0KICAgICB5PSIxMDEiDQogICAgIHg9Ijc2LjAwMDAwOCINCiAgICAgc3R5bGU9ImZpbGw6I2ZmZmZmZjtmaWxsLW9wYWNpdHk6MC44MDAwMDAwNztzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MCIgLz4NCiAgPHJlY3QNCiAgICAgaWQ9InJlY3Q0NzYxLTAiDQogICAgIGhlaWdodD0iMS45OTk5OTQ1Ig0KICAgICB3aWR0aD0iMTUuOTk5OTkiDQogICAgIHk9IjEwNSINCiAgICAgeD0iNzYuMDAwMDA4Ig0KICAgICBzdHlsZT0iZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eTowLjgwMDAwMDA3O3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDowIiAvPg0KICA8cmVjdA0KICAgICBpZD0icmVjdDQ3NjEtNyINCiAgICAgaGVpZ2h0PSIxLjk5OTk5NDUiDQogICAgIHdpZHRoPSI5Ig0KICAgICB5PSIxMDkiDQogICAgIHg9Ijc2LjAwMDAwOCINCiAgICAgc3R5bGU9ImZpbGw6I2ZmZmZmZjtmaWxsLW9wYWNpdHk6MC44MDAwMDAwNztzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MCIgLz4NCiAgPHJlY3QNCiAgICAgaWQ9InJlY3Q0NzYxLTEtMSINCiAgICAgaGVpZ2h0PSIxLjk5OTk5NDUiDQogICAgIHdpZHRoPSIxMiINCiAgICAgeT0iMTI1Ig0KICAgICB4PSI3Ni4wMDAwMDgiDQogICAgIHN0eWxlPSJmaWxsOiNmZmZmZmY7ZmlsbC1vcGFjaXR5OjAuODAwMDAwMDc7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjAiIC8+DQogIDxyZWN0DQogICAgIGlkPSJyZWN0NDc2MS0xLTEtNCINCiAgICAgaGVpZ2h0PSIxLjk5OTk5NDUiDQogICAgIHdpZHRoPSIxMCINCiAgICAgeT0iMTM3Ig0KICAgICB4PSI3Ni4wMDAwMDgiDQogICAgIHN0eWxlPSJmaWxsOiNmZmZmZmY7ZmlsbC1vcGFjaXR5OjAuODAwMDAwMDc7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjAiIC8+DQogIDxyZWN0DQogICAgIGlkPSJyZWN0NDc2MS0xLTEtNC00Ig0KICAgICBoZWlnaHQ9IjEuOTk5OTk0NSINCiAgICAgd2lkdGg9IjEwIg0KICAgICB5PSIxMjkiDQogICAgIHg9IjgyIg0KICAgICBzdHlsZT0iZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eTowLjgwMDAwMDA3O3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDowIiAvPg0KICA8cmVjdA0KICAgICBpZD0icmVjdDQ3NjEtMS0xLTQtNC0zIg0KICAgICBoZWlnaHQ9IjEuOTk5OTk0NSINCiAgICAgd2lkdGg9IjkiDQogICAgIHk9IjEzMyINCiAgICAgeD0iODIiDQogICAgIHN0eWxlPSJmaWxsOiNmZmZmZmY7ZmlsbC1vcGFjaXR5OjAuODAwMDAwMDc7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjAiIC8+DQogIDxwYXRoDQogICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiDQogICAgIHN0eWxlPSJjb2xvcjojMDAwMDAwO2ZvbnQtc3R5bGU6bm9ybWFsO2ZvbnQtdmFyaWFudDpub3JtYWw7Zm9udC13ZWlnaHQ6bm9ybWFsO2ZvbnQtc3RyZXRjaDpub3JtYWw7Zm9udC1zaXplOm1lZGl1bTtsaW5lLWhlaWdodDpub3JtYWw7Zm9udC1mYW1pbHk6c2Fucy1zZXJpZjt0ZXh0LWluZGVudDowO3RleHQtYWxpZ246c3RhcnQ7dGV4dC1kZWNvcmF0aW9uOm5vbmU7dGV4dC1kZWNvcmF0aW9uLWxpbmU6bm9uZTt0ZXh0LWRlY29yYXRpb24tc3R5bGU6c29saWQ7dGV4dC1kZWNvcmF0aW9uLWNvbG9yOiMwMDAwMDA7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO3dvcmQtc3BhY2luZzpub3JtYWw7dGV4dC10cmFuc2Zvcm06bm9uZTtkaXJlY3Rpb246bHRyO2Jsb2NrLXByb2dyZXNzaW9uOnRiO3dyaXRpbmctbW9kZTpsci10YjtiYXNlbGluZS1zaGlmdDpiYXNlbGluZTt0ZXh0LWFuY2hvcjpzdGFydDt3aGl0ZS1zcGFjZTpub3JtYWw7Y2xpcC1ydWxlOm5vbnplcm87ZGlzcGxheTppbmxpbmU7b3ZlcmZsb3c6dmlzaWJsZTt2aXNpYmlsaXR5OnZpc2libGU7b3BhY2l0eTowLjg7aXNvbGF0aW9uOmF1dG87bWl4LWJsZW5kLW1vZGU6bm9ybWFsO2NvbG9yLWludGVycG9sYXRpb246c1JHQjtjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnM6bGluZWFyUkdCO3NvbGlkLWNvbG9yOiMwMDAwMDA7c29saWQtb3BhY2l0eToxO2ZpbGw6I2ZmZmZmZjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6Mi42NjE1Nzg2NjtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2UtZGFzaG9mZnNldDowO3N0cm9rZS1vcGFjaXR5OjE7Y29sb3ItcmVuZGVyaW5nOmF1dG87aW1hZ2UtcmVuZGVyaW5nOmF1dG87c2hhcGUtcmVuZGVyaW5nOmF1dG87dGV4dC1yZW5kZXJpbmc6YXV0bztlbmFibGUtYmFja2dyb3VuZDphY2N1bXVsYXRlIg0KICAgICBkPSJtIDM2LjM5ODQzOCwxMDAuMDI1NCBjIC0wLjQyMzM2MiwtMC4wMTMgLTAuODQ2ODQ3LDAuMDEgLTEuMjY1NjI2LDAuMDYyIC0xLjY1NjU2MiwwLjIxOTYgLTMuMjQ0NTY3LDAuOTczOSAtNC41MDc4MTIsMi4yMjY2IEwgMjksMTAwLjU5OTEgbCAtMi4zMjQyMTksNy43MTI5IDcuODI2MTcyLC0xLjkwNjIgLTEuODA0Njg3LC0xLjkwNjMgYyAxLjU5NzcwMiwtMS41MzA4IDQuMDQ4NzA2LC0xLjg0NTMgNS45ODQzNzUsLTAuNzIwNyAxLjk3MTE2MiwxLjE0NTIgMi44ODE5NTQsMy4zOTc1IDIuMzA4NTkzLDUuNTUwOCAtMC41NzMzNjEsMi4xNTMzIC0yLjUzMzg2NSwzLjY5NTMgLTQuODMwMDc4LDMuNjk1MyBsIDAsMy4wNzQyIGMgMy41NTA3NTYsMCA2LjcxMDQ0MiwtMi40MTEzIDcuNjUwMzkxLC01Ljk0MTQgMC45Mzk5NDksLTMuNTMwMSAtMC42MTg0NjMsLTcuMjczNiAtMy43MTA5MzgsLTkuMDcwMyAtMS4xNTk2NzgsLTAuNjczOCAtMi40MzEwODcsLTEuMDIzMSAtMy43MDExNzEsLTEuMDYyNSB6Ig0KICAgICBpZD0icGF0aDQxMzgiIC8+DQogIDxwYXRoDQogICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiDQogICAgIHN0eWxlPSJjb2xvcjojMDAwMDAwO2ZvbnQtc3R5bGU6bm9ybWFsO2ZvbnQtdmFyaWFudDpub3JtYWw7Zm9udC13ZWlnaHQ6bm9ybWFsO2ZvbnQtc3RyZXRjaDpub3JtYWw7Zm9udC1zaXplOm1lZGl1bTtsaW5lLWhlaWdodDpub3JtYWw7Zm9udC1mYW1pbHk6c2Fucy1zZXJpZjt0ZXh0LWluZGVudDowO3RleHQtYWxpZ246c3RhcnQ7dGV4dC1kZWNvcmF0aW9uOm5vbmU7dGV4dC1kZWNvcmF0aW9uLWxpbmU6bm9uZTt0ZXh0LWRlY29yYXRpb24tc3R5bGU6c29saWQ7dGV4dC1kZWNvcmF0aW9uLWNvbG9yOiMwMDAwMDA7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO3dvcmQtc3BhY2luZzpub3JtYWw7dGV4dC10cmFuc2Zvcm06bm9uZTtkaXJlY3Rpb246bHRyO2Jsb2NrLXByb2dyZXNzaW9uOnRiO3dyaXRpbmctbW9kZTpsci10YjtiYXNlbGluZS1zaGlmdDpiYXNlbGluZTt0ZXh0LWFuY2hvcjpzdGFydDt3aGl0ZS1zcGFjZTpub3JtYWw7Y2xpcC1ydWxlOm5vbnplcm87ZGlzcGxheTppbmxpbmU7b3ZlcmZsb3c6dmlzaWJsZTt2aXNpYmlsaXR5OnZpc2libGU7b3BhY2l0eTowLjg7aXNvbGF0aW9uOmF1dG87bWl4LWJsZW5kLW1vZGU6bm9ybWFsO2NvbG9yLWludGVycG9sYXRpb246c1JHQjtjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnM6bGluZWFyUkdCO3NvbGlkLWNvbG9yOiMwMDAwMDA7c29saWQtb3BhY2l0eToxO2ZpbGw6I2ZmZmZmZjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6Mi42NjE1Nzg2NjtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2UtZGFzaG9mZnNldDowO3N0cm9rZS1vcGFjaXR5OjE7Y29sb3ItcmVuZGVyaW5nOmF1dG87aW1hZ2UtcmVuZGVyaW5nOmF1dG87c2hhcGUtcmVuZGVyaW5nOmF1dG87dGV4dC1yZW5kZXJpbmc6YXV0bztlbmFibGUtYmFja2dyb3VuZDphY2N1bXVsYXRlIg0KICAgICBkPSJtIDU5LjcyMjY1Niw5OS45NjI5IGMgLTEuMjcwMDg0LDAuMDM5IC0yLjU0MTQ5MywwLjM4ODcgLTMuNzAxMTcyLDEuMDYyNSAtMy4wOTI0NzUsMS43OTY3IC00LjY1MDg4Niw1LjU0MDIgLTMuNzEwOTM3LDkuMDcwMyAwLjkzOTk0OSwzLjUzMDEgNC4wOTc2OCw1Ljk0MTQgNy42NDg0MzcsNS45NDE0IGwgMCwtMy4wNzQyIGMgLTIuMjk2MjE0LDAgLTQuMjU2NzE3LC0xLjU0MiAtNC44MzAwNzgsLTMuNjk1MyAtMC41NzMzNjEsLTIuMTUzMyAwLjMzNzQzMiwtNC40MDU2IDIuMzA4NTk0LC01LjU1MDggMS45MzU3MzEsLTEuMTI0NiA0LjM4ODYzLC0wLjgxMDIgNS45ODYzMjYsMC43MjA3IGwgLTEuODA2NjM4LDEuOTA2MyA3LjgyODEyOCwxLjkwNjIgLTIuMzI0MjIsLTcuNzEyOSAtMS42MjY5NiwxLjcxNjggYyAtMS4yNjMzOCwtMS4yNTMxIC0yLjg0ODkxNywtMi4wMDg4IC00LjUwNTg1NSwtMi4yMjg1IC0wLjQxODc3OCwtMC4wNTUgLTAuODQyMjYzLC0wLjA3NiAtMS4yNjU2MjUsLTAuMDYyIHoiDQogICAgIGlkPSJwYXRoNDEzOC0xIiAvPg0KICA8cGF0aA0KICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIg0KICAgICBzdHlsZT0ib3BhY2l0eTowLjg7ZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDoxLjk2NjtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZSINCiAgICAgZD0ibSAxMC41LDEwMCAwLDIgLTIuNDk5OTk5NiwwIEwgMTIsMTA3IGwgNCwtNSAtMi41LDAgMCwtMiAtMywwIHoiDQogICAgIGlkPSJwYXRoMzA1NS0wLTc3IiAvPg0KICA8cGF0aA0KICAgICBzdHlsZT0ib3BhY2l0eTowLjg7ZmlsbDpub25lO3N0cm9rZTojZmZmZmZmO3N0cm9rZS13aWR0aDoxLjk2NjtzdHJva2UtbGluZWNhcDpzcXVhcmU7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1vcGFjaXR5OjEiDQogICAgIGQ9Im0gNC45ODUwNTc0LDEwOC4wMTUgMTQuMDI5ODg1NiwtMC4wMyINCiAgICAgaWQ9InBhdGg1MjQ0LTUtMC01Ig0KICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIg0KICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNjIiAvPg0KICA8cGF0aA0KICAgICBzdHlsZT0ib3BhY2l0eTowLjg7ZmlsbDpub25lO3N0cm9rZTojZmZmZmZmO3N0cm9rZS13aWR0aDoxLjk2NjtzdHJva2UtbGluZWNhcDpzcXVhcmU7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1vcGFjaXR5OjEiDQogICAgIGQ9Im0gNC45ODQ5ODc0LDEzMi4wMTUgMTQuMDI5ODg2NiwtMC4wMyINCiAgICAgaWQ9InBhdGg1MjQ0LTUtMC01LTgiDQogICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiDQogICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY2MiIC8+DQogIDxwYXRoDQogICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiDQogICAgIHN0eWxlPSJjb2xvcjojMDAwMDAwO2ZvbnQtc3R5bGU6bm9ybWFsO2ZvbnQtdmFyaWFudDpub3JtYWw7Zm9udC13ZWlnaHQ6bm9ybWFsO2ZvbnQtc3RyZXRjaDpub3JtYWw7Zm9udC1zaXplOm1lZGl1bTtsaW5lLWhlaWdodDpub3JtYWw7Zm9udC1mYW1pbHk6c2Fucy1zZXJpZjt0ZXh0LWluZGVudDowO3RleHQtYWxpZ246c3RhcnQ7dGV4dC1kZWNvcmF0aW9uOm5vbmU7dGV4dC1kZWNvcmF0aW9uLWxpbmU6bm9uZTt0ZXh0LWRlY29yYXRpb24tc3R5bGU6c29saWQ7dGV4dC1kZWNvcmF0aW9uLWNvbG9yOiMwMDAwMDA7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO3dvcmQtc3BhY2luZzpub3JtYWw7dGV4dC10cmFuc2Zvcm06bm9uZTtkaXJlY3Rpb246bHRyO2Jsb2NrLXByb2dyZXNzaW9uOnRiO3dyaXRpbmctbW9kZTpsci10YjtiYXNlbGluZS1zaGlmdDpiYXNlbGluZTt0ZXh0LWFuY2hvcjpzdGFydDt3aGl0ZS1zcGFjZTpub3JtYWw7Y2xpcC1ydWxlOm5vbnplcm87ZGlzcGxheTppbmxpbmU7b3ZlcmZsb3c6dmlzaWJsZTt2aXNpYmlsaXR5OnZpc2libGU7b3BhY2l0eTowLjQ7aXNvbGF0aW9uOmF1dG87bWl4LWJsZW5kLW1vZGU6bm9ybWFsO2NvbG9yLWludGVycG9sYXRpb246c1JHQjtjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnM6bGluZWFyUkdCO3NvbGlkLWNvbG9yOiMwMDAwMDA7c29saWQtb3BhY2l0eToxO2ZpbGw6IzRkNGQ0ZDtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6Mi42NjE1Nzg2NjtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2UtZGFzaG9mZnNldDowO3N0cm9rZS1vcGFjaXR5OjE7Y29sb3ItcmVuZGVyaW5nOmF1dG87aW1hZ2UtcmVuZGVyaW5nOmF1dG87c2hhcGUtcmVuZGVyaW5nOmF1dG87dGV4dC1yZW5kZXJpbmc6YXV0bztlbmFibGUtYmFja2dyb3VuZDphY2N1bXVsYXRlIg0KICAgICBkPSJtIDM2LjM5ODQzOCwxMjMuOTYyOSBjIC0wLjQyMzM2MiwtMC4wMTMgLTAuODQ2ODQ3LDAuMDEgLTEuMjY1NjI2LDAuMDYyIC0xLjY1NjU2MiwwLjIxOTYgLTMuMjQ0NTY3LDAuOTczOSAtNC41MDc4MTIsMi4yMjY2IEwgMjksMTI0LjUzNjYgbCAtMi4zMjQyMTksNy43MTI5IDcuODI2MTcyLC0xLjkwNjIgLTEuODA0Njg3LC0xLjkwNjMgYyAxLjU5NzcwMiwtMS41MzA4IDQuMDQ4NzA2LC0xLjg0NTMgNS45ODQzNzUsLTAuNzIwNyAxLjk3MTE2MiwxLjE0NTMgMi44ODE5NTQsMy4zOTc1IDIuMzA4NTkzLDUuNTUwOCAtMC41NzMzNjEsMi4xNTMzIC0yLjUzMzg2NCwzLjY5NTMgLTQuODMwMDc4LDMuNjk1MyBsIDAsMy4wNzQyIGMgMy41NTA3NTcsMCA2LjcxMDQ0MiwtMi40MDkzIDcuNjUwMzkxLC01LjkzOTQgMC45Mzk5NDksLTMuNTMwMSAtMC42MTg0NjMsLTcuMjc1NiAtMy43MTA5MzgsLTkuMDcyMyAtMS4xNTk2NzgsLTAuNjczNyAtMi40MzEwODcsLTEuMDIzMSAtMy43MDExNzEsLTEuMDYyNSB6Ig0KICAgICBpZD0icGF0aDQxMzgtMTIiIC8+DQogIDxwYXRoDQogICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiDQogICAgIHN0eWxlPSJjb2xvcjojMDAwMDAwO2ZvbnQtc3R5bGU6bm9ybWFsO2ZvbnQtdmFyaWFudDpub3JtYWw7Zm9udC13ZWlnaHQ6bm9ybWFsO2ZvbnQtc3RyZXRjaDpub3JtYWw7Zm9udC1zaXplOm1lZGl1bTtsaW5lLWhlaWdodDpub3JtYWw7Zm9udC1mYW1pbHk6c2Fucy1zZXJpZjt0ZXh0LWluZGVudDowO3RleHQtYWxpZ246c3RhcnQ7dGV4dC1kZWNvcmF0aW9uOm5vbmU7dGV4dC1kZWNvcmF0aW9uLWxpbmU6bm9uZTt0ZXh0LWRlY29yYXRpb24tc3R5bGU6c29saWQ7dGV4dC1kZWNvcmF0aW9uLWNvbG9yOiMwMDAwMDA7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO3dvcmQtc3BhY2luZzpub3JtYWw7dGV4dC10cmFuc2Zvcm06bm9uZTtkaXJlY3Rpb246bHRyO2Jsb2NrLXByb2dyZXNzaW9uOnRiO3dyaXRpbmctbW9kZTpsci10YjtiYXNlbGluZS1zaGlmdDpiYXNlbGluZTt0ZXh0LWFuY2hvcjpzdGFydDt3aGl0ZS1zcGFjZTpub3JtYWw7Y2xpcC1ydWxlOm5vbnplcm87ZGlzcGxheTppbmxpbmU7b3ZlcmZsb3c6dmlzaWJsZTt2aXNpYmlsaXR5OnZpc2libGU7b3BhY2l0eTowLjQ7aXNvbGF0aW9uOmF1dG87bWl4LWJsZW5kLW1vZGU6bm9ybWFsO2NvbG9yLWludGVycG9sYXRpb246c1JHQjtjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnM6bGluZWFyUkdCO3NvbGlkLWNvbG9yOiMwMDAwMDA7c29saWQtb3BhY2l0eToxO2ZpbGw6IzRkNGQ0ZDtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6Mi42NjE1Nzg2NjtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2UtZGFzaG9mZnNldDowO3N0cm9rZS1vcGFjaXR5OjE7Y29sb3ItcmVuZGVyaW5nOmF1dG87aW1hZ2UtcmVuZGVyaW5nOmF1dG87c2hhcGUtcmVuZGVyaW5nOmF1dG87dGV4dC1yZW5kZXJpbmc6YXV0bztlbmFibGUtYmFja2dyb3VuZDphY2N1bXVsYXRlIg0KICAgICBkPSJtIDU5LjcyMjY1NiwxMjMuOTYyOSBjIC0xLjI3MDA4NCwwLjAzOSAtMi41NDE0OTMsMC4zODg4IC0zLjcwMTE3MiwxLjA2MjUgLTMuMDkyNDc1LDEuNzk2NyAtNC42NTA4ODYsNS41NDIyIC0zLjcxMDkzNyw5LjA3MjMgMC45Mzk5NDksMy41MzAxIDQuMDk3NjgsNS45Mzk0IDcuNjQ4NDM3LDUuOTM5NCBsIDAsLTMuMDc0MiBjIC0yLjI5NjIxNCwwIC00LjI1NjcxNywtMS41NDIgLTQuODMwMDc4LC0zLjY5NTMgLTAuNTczMzYxLC0yLjE1MzMgMC4zMzc0MzIsLTQuNDA1NSAyLjMwODU5NCwtNS41NTA4IDEuOTM1NzMxLC0xLjEyNDYgNC4zODg2MywtMC44MTAyIDUuOTg2MzI2LDAuNzIwNyBsIC0xLjgwNjYzOCwxLjkwNjMgNy44MjgxMjgsMS45MDYyIC0yLjMyNDIyLC03LjcxMjkgLTEuNjI2OTYsMS43MTY4IGMgLTEuMjYzMzgsLTEuMjUzMSAtMi44NDg5MTcsLTIuMDA4OCAtNC41MDU4NTUsLTIuMjI4NSAtMC40MTg3NzgsLTAuMDU1IC0wLjg0MjI2MywtMC4wNzYgLTEuMjY1NjI1LC0wLjA2MiB6Ig0KICAgICBpZD0icGF0aDQxMzgtMS0zIiAvPg0KICA8cGF0aA0KICAgICBpZD0icGF0aDYxOTEiDQogICAgIGQ9Im0gMTAuNSwxMTYgMCwtMiAtMi40OTk5OTk2LDAgTCAxMiwxMDkgbCA0LDUgLTIuNSwwIDAsMiAtMywwIHoiDQogICAgIHN0eWxlPSJvcGFjaXR5OjAuODtmaWxsOiNmZmZmZmY7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjEuOTY2O3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lIg0KICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIiAvPg0KICA8cGF0aA0KICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIg0KICAgICBzdHlsZT0ib3BhY2l0eTowLjg7ZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDoxLjk2NjtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZSINCiAgICAgZD0ibSAxMC41LDEyOSAwLC0yIC0yLjQ5OTk5OTYsMCBMIDEyLDEyMiBsIDQsNSAtMi41LDAgMCwyIC0zLDAgeiINCiAgICAgaWQ9InBhdGg2MTkzIiAvPg0KICA8cGF0aA0KICAgICBpZD0icGF0aDYxOTUiDQogICAgIGQ9Im0gMTAuNSwxMzUgMCwyIC0yLjQ5OTk5OTYsMCBMIDEyLDE0MiBsIDQsLTUgLTIuNSwwIDAsLTIgLTMsMCB6Ig0KICAgICBzdHlsZT0ib3BhY2l0eTowLjg7ZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDoxLjk2NjtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZSINCiAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIgLz4NCiAgPHBhdGgNCiAgICAgc29kaXBvZGk6dHlwZT0ic3RhciINCiAgICAgc3R5bGU9ImZpbGw6IzRkNGQ0ZDtmaWxsLW9wYWNpdHk6MC45MDE5NjA3ODtzdHJva2U6I2QzZDNkMztzdHJva2Utd2lkdGg6MDtzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmUiDQogICAgIGlkPSJwYXRoNDUwMCINCiAgICAgc29kaXBvZGk6c2lkZXM9IjMiDQogICAgIHNvZGlwb2RpOmN4PSIxMS41NTU4MSINCiAgICAgc29kaXBvZGk6Y3k9IjYwLjA3MzI0MiINCiAgICAgc29kaXBvZGk6cjE9IjUuMTExNjEwNCINCiAgICAgc29kaXBvZGk6cjI9IjIuNTU1ODA1MiINCiAgICAgc29kaXBvZGk6YXJnMT0iMCINCiAgICAgc29kaXBvZGk6YXJnMj0iMS4wNDcxOTc2Ig0KICAgICBpbmtzY2FwZTpmbGF0c2lkZWQ9ImZhbHNlIg0KICAgICBpbmtzY2FwZTpyb3VuZGVkPSIwIg0KICAgICBpbmtzY2FwZTpyYW5kb21pemVkPSIwIg0KICAgICBkPSJtIDE2LjY2NzQyLDYwLjA3MzI0MiAtMy44MzM3MDgsMi4yMTMzOTIgLTMuODMzNzA3MiwyLjIxMzM5MyAwLC00LjQyNjc4NSAwLC00LjQyNjc4NCAzLjgzMzcwODIsMi4yMTMzOTIgeiINCiAgICAgaW5rc2NhcGU6dHJhbnNmb3JtLWNlbnRlci14PSItMS4yNzc5MDI2IiAvPg0KICA8cGF0aA0KICAgICBpbmtzY2FwZTp0cmFuc2Zvcm0tY2VudGVyLXg9IjEuMjc3OTAyIg0KICAgICBkPSJtIC0zMS41MDAwMDQsNjAuMDczMjQyIC0zLjgzMzcwOCwyLjIxMzM5MiAtMy44MzM3MDcsMi4yMTMzOTMgMCwtNC40MjY3ODUgMCwtNC40MjY3ODQgMy44MzM3MDcsMi4yMTMzOTIgeiINCiAgICAgaW5rc2NhcGU6cmFuZG9taXplZD0iMCINCiAgICAgaW5rc2NhcGU6cm91bmRlZD0iMCINCiAgICAgaW5rc2NhcGU6ZmxhdHNpZGVkPSJmYWxzZSINCiAgICAgc29kaXBvZGk6YXJnMj0iMS4wNDcxOTc2Ig0KICAgICBzb2RpcG9kaTphcmcxPSIwIg0KICAgICBzb2RpcG9kaTpyMj0iMi41NTU4MDUyIg0KICAgICBzb2RpcG9kaTpyMT0iNS4xMTE2MTA0Ig0KICAgICBzb2RpcG9kaTpjeT0iNjAuMDczMjQyIg0KICAgICBzb2RpcG9kaTpjeD0iLTM2LjYxMTYxNCINCiAgICAgc29kaXBvZGk6c2lkZXM9IjMiDQogICAgIGlkPSJwYXRoNDUwMiINCiAgICAgc3R5bGU9ImZpbGw6IzRkNGQ0ZDtmaWxsLW9wYWNpdHk6MC45MDE5NjA3ODtzdHJva2U6I2QzZDNkMztzdHJva2Utd2lkdGg6MDtzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmUiDQogICAgIHNvZGlwb2RpOnR5cGU9InN0YXIiDQogICAgIHRyYW5zZm9ybT0ic2NhbGUoLTEsMSkiIC8+DQogIDxwYXRoDQogICAgIGQ9Im0gMTYuNjY3NDIsNjAuMDczMjEyIC0zLjgzMzcwOCwyLjIxMzM5MiAtMy44MzM3MDcyLDIuMjEzMzkyIDAsLTQuNDI2Nzg0IDAsLTQuNDI2Nzg1IDMuODMzNzA4MiwyLjIxMzM5MiB6Ig0KICAgICBpbmtzY2FwZTpyYW5kb21pemVkPSIwIg0KICAgICBpbmtzY2FwZTpyb3VuZGVkPSIwIg0KICAgICBpbmtzY2FwZTpmbGF0c2lkZWQ9ImZhbHNlIg0KICAgICBzb2RpcG9kaTphcmcyPSIxLjA0NzE5NzYiDQogICAgIHNvZGlwb2RpOmFyZzE9IjAiDQogICAgIHNvZGlwb2RpOnIyPSIyLjU1NTgwNTIiDQogICAgIHNvZGlwb2RpOnIxPSI1LjExMTYxMDQiDQogICAgIHNvZGlwb2RpOmN5PSI2MC4wNzMyMTIiDQogICAgIHNvZGlwb2RpOmN4PSIxMS41NTU4MSINCiAgICAgc29kaXBvZGk6c2lkZXM9IjMiDQogICAgIGlkPSJwYXRoNDUwNCINCiAgICAgc3R5bGU9ImZpbGw6IzRkNGQ0ZDtmaWxsLW9wYWNpdHk6MC45MDE5NjA3ODtzdHJva2U6I2QzZDNkMztzdHJva2Utd2lkdGg6MDtzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmUiDQogICAgIHNvZGlwb2RpOnR5cGU9InN0YXIiDQogICAgIHRyYW5zZm9ybT0ibWF0cml4KDAsMSwtMSwwLDcyLjAwNzQsNzEuNzg3NykiDQogICAgIGlua3NjYXBlOnRyYW5zZm9ybS1jZW50ZXIteT0iMS4yNzc5MDI5IiAvPg0KICA8cGF0aA0KICAgICBpbmtzY2FwZTp0cmFuc2Zvcm0tY2VudGVyLXk9Ii0xLjI3NzkwMjYiDQogICAgIHRyYW5zZm9ybT0ibWF0cml4KDAsLTEsLTEsMCw5Niw5NikiDQogICAgIHNvZGlwb2RpOnR5cGU9InN0YXIiDQogICAgIHN0eWxlPSJmaWxsOiM0ZDRkNGQ7ZmlsbC1vcGFjaXR5OjAuOTAxOTYwNzg7c3Ryb2tlOiNkM2QzZDM7c3Ryb2tlLXdpZHRoOjA7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lIg0KICAgICBpZD0icGF0aDQ1MDYiDQogICAgIHNvZGlwb2RpOnNpZGVzPSIzIg0KICAgICBzb2RpcG9kaTpjeD0iMTEuNTU1ODEiDQogICAgIHNvZGlwb2RpOmN5PSI2MC4wNzMyMTIiDQogICAgIHNvZGlwb2RpOnIxPSI1LjExMTYxMDQiDQogICAgIHNvZGlwb2RpOnIyPSIyLjU1NTgwNTIiDQogICAgIHNvZGlwb2RpOmFyZzE9IjAiDQogICAgIHNvZGlwb2RpOmFyZzI9IjEuMDQ3MTk3NiINCiAgICAgaW5rc2NhcGU6ZmxhdHNpZGVkPSJmYWxzZSINCiAgICAgaW5rc2NhcGU6cm91bmRlZD0iMCINCiAgICAgaW5rc2NhcGU6cmFuZG9taXplZD0iMCINCiAgICAgZD0ibSAxNi42Njc0Miw2MC4wNzMyMTIgLTMuODMzNzA4LDIuMjEzMzkyIC0zLjgzMzcwNzIsMi4yMTMzOTIgMCwtNC40MjY3ODQgMCwtNC40MjY3ODUgMy44MzM3MDgyLDIuMjEzMzkyIHoiIC8+DQogIDxwYXRoDQogICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY2NjYyINCiAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCINCiAgICAgaWQ9InBhdGg0NjE1LTUiDQogICAgIGQ9Im0gMTcxLjgyNTc0LDY1LjE3NDE5MyAxNi4zNDg1NCwwIC04LjE3NDI3LC0xMy4zNDg0NTQgeiINCiAgICAgc3R5bGU9ImZpbGw6I2ZiYjkxNztmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6I2ZiYjkxNztzdHJva2Utd2lkdGg6MS42NTE2MTM5NTtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2Utb3BhY2l0eToxIiAvPg0KICA8cGF0aA0KICAgICBzdHlsZT0ib3BhY2l0eToxO2ZpbGw6I2ZmZmZmZjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MXB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjEiDQogICAgIGQ9Im0gMTc5LDU1IDAsNiAyLDAgMCwtNiINCiAgICAgaWQ9InBhdGg0MzAwIg0KICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIg0KICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNjY2MiIC8+DQogIDxwYXRoDQogICAgIHN0eWxlPSJvcGFjaXR5OjE7ZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDoxcHg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MSINCiAgICAgZD0ibSAxNzksNjIgMCwyIDIsMCAwLC0yIg0KICAgICBpZD0icGF0aDQzMDAtNiINCiAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCINCiAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjY2NjIiAvPg0KPC9zdmc+DQo=\"","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.IView = void 0;\nvar IView;\n(function (IView) {\n IView[\"home\"] = \"home\";\n IView[\"created\"] = \"created\";\n IView[\"about\"] = \"about\";\n IView[\"dashboard\"] = \"dashboard\";\n IView[\"status\"] = \"status\";\n IView[\"sdk\"] = \"sdk\";\n})(IView = exports.IView || (exports.IView = {}));\n","\"use strict\";\nconst configs = {\n apiPath: 'https://getpantry.cloud/apiv1',\n docsPath: 'https://documenter.getpostman.com/view/3281832/SzmZeMLC',\n};\nmodule.exports = configs;\n","module.exports = require('./lib/axios');","var g;\n\n// This works in non-strict mode\ng = (function() {\n\treturn this;\n})();\n\ntry {\n\t// This works if eval is allowed (see CSP)\n\tg = g || new Function(\"return this\")();\n} catch (e) {\n\t// This works if the window reference is available\n\tif (typeof window === \"object\") g = window;\n}\n\n// g can still be undefined, but nothing to do about it...\n// We return undefined, instead of nothing here, so it's\n// easier to handle this case. if(!global) { ...}\n\nmodule.exports = g;\n","/*\n\tMIT License http://www.opensource.org/licenses/mit-license.php\n\tAuthor Tobias Koppers @sokra\n*/\n// css base code, injected by the css-loader\nmodule.exports = function(useSourceMap) {\n\tvar list = [];\n\n\t// return the list of modules as css string\n\tlist.toString = function toString() {\n\t\treturn this.map(function (item) {\n\t\t\tvar content = cssWithMappingToString(item, useSourceMap);\n\t\t\tif(item[2]) {\n\t\t\t\treturn \"@media \" + item[2] + \"{\" + content + \"}\";\n\t\t\t} else {\n\t\t\t\treturn content;\n\t\t\t}\n\t\t}).join(\"\");\n\t};\n\n\t// import a list of modules into the list\n\tlist.i = function(modules, mediaQuery) {\n\t\tif(typeof modules === \"string\")\n\t\t\tmodules = [[null, modules, \"\"]];\n\t\tvar alreadyImportedModules = {};\n\t\tfor(var i = 0; i < this.length; i++) {\n\t\t\tvar id = this[i][0];\n\t\t\tif(typeof id === \"number\")\n\t\t\t\talreadyImportedModules[id] = true;\n\t\t}\n\t\tfor(i = 0; i < modules.length; i++) {\n\t\t\tvar item = modules[i];\n\t\t\t// skip already imported module\n\t\t\t// this implementation is not 100% perfect for weird media query combinations\n\t\t\t// when a module is imported multiple times with different media queries.\n\t\t\t// I hope this will never occur (Hey this way we have smaller bundles)\n\t\t\tif(typeof item[0] !== \"number\" || !alreadyImportedModules[item[0]]) {\n\t\t\t\tif(mediaQuery && !item[2]) {\n\t\t\t\t\titem[2] = mediaQuery;\n\t\t\t\t} else if(mediaQuery) {\n\t\t\t\t\titem[2] = \"(\" + item[2] + \") and (\" + mediaQuery + \")\";\n\t\t\t\t}\n\t\t\t\tlist.push(item);\n\t\t\t}\n\t\t}\n\t};\n\treturn list;\n};\n\nfunction cssWithMappingToString(item, useSourceMap) {\n\tvar content = item[1] || '';\n\tvar cssMapping = item[3];\n\tif (!cssMapping) {\n\t\treturn content;\n\t}\n\n\tif (useSourceMap && typeof btoa === 'function') {\n\t\tvar sourceMapping = toComment(cssMapping);\n\t\tvar sourceURLs = cssMapping.sources.map(function (source) {\n\t\t\treturn '/*# sourceURL=' + cssMapping.sourceRoot + source + ' */'\n\t\t});\n\n\t\treturn [content].concat(sourceURLs).concat([sourceMapping]).join('\\n');\n\t}\n\n\treturn [content].join('\\n');\n}\n\n// Adapted from convert-source-map (MIT)\nfunction toComment(sourceMap) {\n\t// eslint-disable-next-line no-undef\n\tvar base64 = btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap))));\n\tvar data = 'sourceMappingURL=data:application/json;charset=utf-8;base64,' + base64;\n\n\treturn '/*# ' + data + ' */';\n}\n","/*\n\tMIT License http://www.opensource.org/licenses/mit-license.php\n\tAuthor Tobias Koppers @sokra\n*/\n\nvar stylesInDom = {};\n\nvar\tmemoize = function (fn) {\n\tvar memo;\n\n\treturn function () {\n\t\tif (typeof memo === \"undefined\") memo = fn.apply(this, arguments);\n\t\treturn memo;\n\t};\n};\n\nvar isOldIE = memoize(function () {\n\t// Test for IE <= 9 as proposed by Browserhacks\n\t// @see http://browserhacks.com/#hack-e71d8692f65334173fee715c222cb805\n\t// Tests for existence of standard globals is to allow style-loader\n\t// to operate correctly into non-standard environments\n\t// @see https://github.com/webpack-contrib/style-loader/issues/177\n\treturn window && document && document.all && !window.atob;\n});\n\nvar getTarget = function (target) {\n return document.querySelector(target);\n};\n\nvar getElement = (function (fn) {\n\tvar memo = {};\n\n\treturn function(target) {\n // If passing function in options, then use it for resolve \"head\" element.\n // Useful for Shadow Root style i.e\n // {\n // insertInto: function () { return document.querySelector(\"#foo\").shadowRoot }\n // }\n if (typeof target === 'function') {\n return target();\n }\n if (typeof memo[target] === \"undefined\") {\n\t\t\tvar styleTarget = getTarget.call(this, target);\n\t\t\t// Special case to return head of iframe instead of iframe itself\n\t\t\tif (window.HTMLIFrameElement && styleTarget instanceof window.HTMLIFrameElement) {\n\t\t\t\ttry {\n\t\t\t\t\t// This will throw an exception if access to iframe is blocked\n\t\t\t\t\t// due to cross-origin restrictions\n\t\t\t\t\tstyleTarget = styleTarget.contentDocument.head;\n\t\t\t\t} catch(e) {\n\t\t\t\t\tstyleTarget = null;\n\t\t\t\t}\n\t\t\t}\n\t\t\tmemo[target] = styleTarget;\n\t\t}\n\t\treturn memo[target]\n\t};\n})();\n\nvar singleton = null;\nvar\tsingletonCounter = 0;\nvar\tstylesInsertedAtTop = [];\n\nvar\tfixUrls = require(\"./urls\");\n\nmodule.exports = function(list, options) {\n\tif (typeof DEBUG !== \"undefined\" && DEBUG) {\n\t\tif (typeof document !== \"object\") throw new Error(\"The style-loader cannot be used in a non-browser environment\");\n\t}\n\n\toptions = options || {};\n\n\toptions.attrs = typeof options.attrs === \"object\" ? options.attrs : {};\n\n\t// Force single-tag solution on IE6-9, which has a hard limit on the # of \r\n","import { render, staticRenderFns } from \"./vue-json-editor.vue?vue&type=template&id=551a97e0&scoped=true&\"\nimport script from \"./vue-json-editor.vue?vue&type=script&lang=js&\"\nexport * from \"./vue-json-editor.vue?vue&type=script&lang=js&\"\nimport style0 from \"./vue-json-editor.vue?vue&type=style&index=0&id=551a97e0&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"551a97e0\",\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/Users/rohanlikhite/Git/Pantry/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('551a97e0')) {\n api.createRecord('551a97e0', component.options)\n } else {\n api.reload('551a97e0', component.options)\n }\n module.hot.accept(\"./vue-json-editor.vue?vue&type=template&id=551a97e0&scoped=true&\", function () {\n api.rerender('551a97e0', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"node_modules/vue-json-editor/vue-json-editor.vue\"\nexport default component.exports","/* globals __VUE_SSR_CONTEXT__ */\n\n// IMPORTANT: Do NOT use ES2015 features in this file (except for modules).\n// This module is a runtime utility for cleaner component module output and will\n// be included in the final webpack user bundle.\n\nexport default function normalizeComponent (\n scriptExports,\n render,\n staticRenderFns,\n functionalTemplate,\n injectStyles,\n scopeId,\n moduleIdentifier, /* server only */\n shadowMode /* vue-cli only */\n) {\n // Vue.extend constructor export interop\n var options = typeof scriptExports === 'function'\n ? scriptExports.options\n : scriptExports\n\n // render functions\n if (render) {\n options.render = render\n options.staticRenderFns = staticRenderFns\n options._compiled = true\n }\n\n // functional template\n if (functionalTemplate) {\n options.functional = true\n }\n\n // scopedId\n if (scopeId) {\n options._scopeId = 'data-v-' + scopeId\n }\n\n var hook\n if (moduleIdentifier) { // server build\n hook = function (context) {\n // 2.3 injection\n context =\n context || // cached call\n (this.$vnode && this.$vnode.ssrContext) || // stateful\n (this.parent && this.parent.$vnode && this.parent.$vnode.ssrContext) // functional\n // 2.2 with runInNewContext: true\n if (!context && typeof __VUE_SSR_CONTEXT__ !== 'undefined') {\n context = __VUE_SSR_CONTEXT__\n }\n // inject component styles\n if (injectStyles) {\n injectStyles.call(this, context)\n }\n // register component module identifier for async chunk inferrence\n if (context && context._registeredComponents) {\n context._registeredComponents.add(moduleIdentifier)\n }\n }\n // used by ssr in case component is cached and beforeCreate\n // never gets called\n options._ssrRegister = hook\n } else if (injectStyles) {\n hook = shadowMode\n ? function () {\n injectStyles.call(\n this,\n (options.functional ? this.parent : this).$root.$options.shadowRoot\n )\n }\n : injectStyles\n }\n\n if (hook) {\n if (options.functional) {\n // for template-only hot-reload because in that case the render fn doesn't\n // go through the normalizer\n options._injectStyles = hook\n // register for functional component in vue file\n var originalRender = options.render\n options.render = function renderWithStyleInjection (h, context) {\n hook.call(context)\n return originalRender(h, context)\n }\n } else {\n // inject component registration as beforeCreate hook\n var existing = options.beforeCreate\n options.beforeCreate = existing\n ? [].concat(existing, hook)\n : [hook]\n }\n }\n\n return {\n exports: scriptExports,\n options: options\n }\n}\n","/*!\r\n * jsoneditor.js\r\n *\r\n * @brief\r\n * JSONEditor is a web-based tool to view, edit, format, and validate JSON.\r\n * It has various modes such as a tree editor, a code editor, and a plain text\r\n * editor.\r\n *\r\n * Supported browsers: Chrome, Firefox, Safari, Opera, Internet Explorer 8+\r\n *\r\n * @license\r\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not\r\n * use this file except in compliance with the License. You may obtain a copy\r\n * of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\r\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\r\n * License for the specific language governing permissions and limitations under\r\n * the License.\r\n *\r\n * Copyright (c) 2011-2017 Jos de Jong, http://jsoneditoronline.org\r\n *\r\n * @author Jos de Jong, \r\n * @version 5.5.11\r\n * @date 2017-01-06\r\n */\r\n(function webpackUniversalModuleDefinition(root, factory) {\r\n\tif(typeof exports === 'object' && typeof module === 'object')\r\n\t\tmodule.exports = factory();\r\n\telse if(typeof define === 'function' && define.amd)\r\n\t\tdefine([], factory);\r\n\telse if(typeof exports === 'object')\r\n\t\texports[\"JSONEditor\"] = factory();\r\n\telse\r\n\t\troot[\"JSONEditor\"] = factory();\r\n})(this, function() {\r\nreturn /******/ (function(modules) { // webpackBootstrap\r\n/******/ \t// The module cache\r\n/******/ \tvar installedModules = {};\r\n\r\n/******/ \t// The require function\r\n/******/ \tfunction __webpack_require__(moduleId) {\r\n\r\n/******/ \t\t// Check if module is in cache\r\n/******/ \t\tif(installedModules[moduleId])\r\n/******/ \t\t\treturn installedModules[moduleId].exports;\r\n\r\n/******/ \t\t// Create a new module (and put it into the cache)\r\n/******/ \t\tvar module = installedModules[moduleId] = {\r\n/******/ \t\t\texports: {},\r\n/******/ \t\t\tid: moduleId,\r\n/******/ \t\t\tloaded: false\r\n/******/ \t\t};\r\n\r\n/******/ \t\t// Execute the module function\r\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\r\n\r\n/******/ \t\t// Flag the module as loaded\r\n/******/ \t\tmodule.loaded = true;\r\n\r\n/******/ \t\t// Return the exports of the module\r\n/******/ \t\treturn module.exports;\r\n/******/ \t}\r\n\r\n\r\n/******/ \t// expose the modules object (__webpack_modules__)\r\n/******/ \t__webpack_require__.m = modules;\r\n\r\n/******/ \t// expose the module cache\r\n/******/ \t__webpack_require__.c = installedModules;\r\n\r\n/******/ \t// __webpack_public_path__\r\n/******/ \t__webpack_require__.p = \"\";\r\n\r\n/******/ \t// Load entry module and return exports\r\n/******/ \treturn __webpack_require__(0);\r\n/******/ })\r\n/************************************************************************/\r\n/******/ ([\r\n/* 0 */\r\n/***/ function(module, exports, __webpack_require__) {\r\n\r\n\t'use strict';\r\n\r\n\tvar Ajv;\r\n\ttry {\r\n\t Ajv = __webpack_require__(1);\r\n\t}\r\n\tcatch (err) {\r\n\t // no problem... when we need Ajv we will throw a neat exception\r\n\t}\r\n\r\n\tvar treemode = __webpack_require__(51);\r\n\tvar textmode = __webpack_require__(62);\r\n\tvar util = __webpack_require__(54);\r\n\r\n\t/**\r\n\t * @constructor JSONEditor\r\n\t * @param {Element} container Container element\r\n\t * @param {Object} [options] Object with options. available options:\r\n\t * {String} mode Editor mode. Available values:\r\n\t * 'tree' (default), 'view',\r\n\t * 'form', 'text', and 'code'.\r\n\t * {function} onChange Callback method, triggered\r\n\t * on change of contents\r\n\t * {function} onError Callback method, triggered\r\n\t * when an error occurs\r\n\t * {Boolean} search Enable search box.\r\n\t * True by default\r\n\t * Only applicable for modes\r\n\t * 'tree', 'view', and 'form'\r\n\t * {Boolean} history Enable history (undo/redo).\r\n\t * True by default\r\n\t * Only applicable for modes\r\n\t * 'tree', 'view', and 'form'\r\n\t * {String} name Field name for the root node.\r\n\t * Only applicable for modes\r\n\t * 'tree', 'view', and 'form'\r\n\t * {Number} indentation Number of indentation\r\n\t * spaces. 4 by default.\r\n\t * Only applicable for\r\n\t * modes 'text' and 'code'\r\n\t * {boolean} escapeUnicode If true, unicode\r\n\t * characters are escaped.\r\n\t * false by default.\r\n\t * {boolean} sortObjectKeys If true, object keys are\r\n\t * sorted before display.\r\n\t * false by default.\r\n\t * @param {Object | undefined} json JSON object\r\n\t */\r\n\tfunction JSONEditor (container, options, json) {\r\n\t if (!(this instanceof JSONEditor)) {\r\n\t throw new Error('JSONEditor constructor called without \"new\".');\r\n\t }\r\n\r\n\t // check for unsupported browser (IE8 and older)\r\n\t var ieVersion = util.getInternetExplorerVersion();\r\n\t if (ieVersion != -1 && ieVersion < 9) {\r\n\t throw new Error('Unsupported browser, IE9 or newer required. ' +\r\n\t 'Please install the newest version of your browser.');\r\n\t }\r\n\r\n\t if (options) {\r\n\t // check for deprecated options\r\n\t if (options.error) {\r\n\t console.warn('Option \"error\" has been renamed to \"onError\"');\r\n\t options.onError = options.error;\r\n\t delete options.error;\r\n\t }\r\n\t if (options.change) {\r\n\t console.warn('Option \"change\" has been renamed to \"onChange\"');\r\n\t options.onChange = options.change;\r\n\t delete options.change;\r\n\t }\r\n\t if (options.editable) {\r\n\t console.warn('Option \"editable\" has been renamed to \"onEditable\"');\r\n\t options.onEditable = options.editable;\r\n\t delete options.editable;\r\n\t }\r\n\r\n\t // validate options\r\n\t if (options) {\r\n\t var VALID_OPTIONS = [\r\n\t 'ace', 'theme',\r\n\t 'ajv', 'schema',\r\n\t 'onChange', 'onEditable', 'onError', 'onModeChange',\r\n\t 'escapeUnicode', 'history', 'search', 'mode', 'modes', 'name', 'indentation', 'sortObjectKeys'\r\n\t ];\r\n\r\n\t Object.keys(options).forEach(function (option) {\r\n\t if (VALID_OPTIONS.indexOf(option) === -1) {\r\n\t console.warn('Unknown option \"' + option + '\". This option will be ignored');\r\n\t }\r\n\t });\r\n\t }\r\n\t }\r\n\r\n\t if (arguments.length) {\r\n\t this._create(container, options, json);\r\n\t }\r\n\t}\r\n\r\n\t/**\r\n\t * Configuration for all registered modes. Example:\r\n\t * {\r\n\t * tree: {\r\n\t * mixin: TreeEditor,\r\n\t * data: 'json'\r\n\t * },\r\n\t * text: {\r\n\t * mixin: TextEditor,\r\n\t * data: 'text'\r\n\t * }\r\n\t * }\r\n\t *\r\n\t * @type { Object. }\r\n\t */\r\n\tJSONEditor.modes = {};\r\n\r\n\t// debounce interval for JSON schema vaidation in milliseconds\r\n\tJSONEditor.prototype.DEBOUNCE_INTERVAL = 150;\r\n\r\n\t/**\r\n\t * Create the JSONEditor\r\n\t * @param {Element} container Container element\r\n\t * @param {Object} [options] See description in constructor\r\n\t * @param {Object | undefined} json JSON object\r\n\t * @private\r\n\t */\r\n\tJSONEditor.prototype._create = function (container, options, json) {\r\n\t this.container = container;\r\n\t this.options = options || {};\r\n\t this.json = json || {};\r\n\r\n\t var mode = this.options.mode || 'tree';\r\n\t this.setMode(mode);\r\n\t};\r\n\r\n\t/**\r\n\t * Destroy the editor. Clean up DOM, event listeners, and web workers.\r\n\t */\r\n\tJSONEditor.prototype.destroy = function () {};\r\n\r\n\t/**\r\n\t * Set JSON object in editor\r\n\t * @param {Object | undefined} json JSON data\r\n\t */\r\n\tJSONEditor.prototype.set = function (json) {\r\n\t this.json = json;\r\n\t};\r\n\r\n\t/**\r\n\t * Get JSON from the editor\r\n\t * @returns {Object} json\r\n\t */\r\n\tJSONEditor.prototype.get = function () {\r\n\t return this.json;\r\n\t};\r\n\r\n\t/**\r\n\t * Set string containing JSON for the editor\r\n\t * @param {String | undefined} jsonText\r\n\t */\r\n\tJSONEditor.prototype.setText = function (jsonText) {\r\n\t this.json = util.parse(jsonText);\r\n\t};\r\n\r\n\t/**\r\n\t * Get stringified JSON contents from the editor\r\n\t * @returns {String} jsonText\r\n\t */\r\n\tJSONEditor.prototype.getText = function () {\r\n\t return JSON.stringify(this.json);\r\n\t};\r\n\r\n\t/**\r\n\t * Set a field name for the root node.\r\n\t * @param {String | undefined} name\r\n\t */\r\n\tJSONEditor.prototype.setName = function (name) {\r\n\t if (!this.options) {\r\n\t this.options = {};\r\n\t }\r\n\t this.options.name = name;\r\n\t};\r\n\r\n\t/**\r\n\t * Get the field name for the root node.\r\n\t * @return {String | undefined} name\r\n\t */\r\n\tJSONEditor.prototype.getName = function () {\r\n\t return this.options && this.options.name;\r\n\t};\r\n\r\n\t/**\r\n\t * Change the mode of the editor.\r\n\t * JSONEditor will be extended with all methods needed for the chosen mode.\r\n\t * @param {String} mode Available modes: 'tree' (default), 'view', 'form',\r\n\t * 'text', and 'code'.\r\n\t */\r\n\tJSONEditor.prototype.setMode = function (mode) {\r\n\t var container = this.container;\r\n\t var options = util.extend({}, this.options);\r\n\t var oldMode = options.mode;\r\n\t var data;\r\n\t var name;\r\n\r\n\t options.mode = mode;\r\n\t var config = JSONEditor.modes[mode];\r\n\t if (config) {\r\n\t try {\r\n\t var asText = (config.data == 'text');\r\n\t name = this.getName();\r\n\t data = this[asText ? 'getText' : 'get'](); // get text or json\r\n\r\n\t this.destroy();\r\n\t util.clear(this);\r\n\t util.extend(this, config.mixin);\r\n\t this.create(container, options);\r\n\r\n\t this.setName(name);\r\n\t this[asText ? 'setText' : 'set'](data); // set text or json\r\n\r\n\t if (typeof config.load === 'function') {\r\n\t try {\r\n\t config.load.call(this);\r\n\t }\r\n\t catch (err) {\r\n\t console.error(err);\r\n\t }\r\n\t }\r\n\r\n\t if (typeof options.onModeChange === 'function' && mode !== oldMode) {\r\n\t try {\r\n\t options.onModeChange(mode, oldMode);\r\n\t }\r\n\t catch (err) {\r\n\t console.error(err);\r\n\t }\r\n\t }\r\n\t }\r\n\t catch (err) {\r\n\t this._onError(err);\r\n\t }\r\n\t }\r\n\t else {\r\n\t throw new Error('Unknown mode \"' + options.mode + '\"');\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Get the current mode\r\n\t * @return {string}\r\n\t */\r\n\tJSONEditor.prototype.getMode = function () {\r\n\t return this.options.mode;\r\n\t};\r\n\r\n\t/**\r\n\t * Throw an error. If an error callback is configured in options.error, this\r\n\t * callback will be invoked. Else, a regular error is thrown.\r\n\t * @param {Error} err\r\n\t * @private\r\n\t */\r\n\tJSONEditor.prototype._onError = function(err) {\r\n\t if (this.options && typeof this.options.onError === 'function') {\r\n\t this.options.onError(err);\r\n\t }\r\n\t else {\r\n\t throw err;\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Set a JSON schema for validation of the JSON object.\r\n\t * To remove the schema, call JSONEditor.setSchema(null)\r\n\t * @param {Object | null} schema\r\n\t */\r\n\tJSONEditor.prototype.setSchema = function (schema) {\r\n\t // compile a JSON schema validator if a JSON schema is provided\r\n\t if (schema) {\r\n\t var ajv;\r\n\t try {\r\n\t // grab ajv from options if provided, else create a new instance\r\n\t ajv = this.options.ajv || Ajv({ allErrors: true, verbose: true });\r\n\r\n\t }\r\n\t catch (err) {\r\n\t console.warn('Failed to create an instance of Ajv, JSON Schema validation is not available. Please use a JSONEditor bundle including Ajv, or pass an instance of Ajv as via the configuration option `ajv`.');\r\n\t }\r\n\r\n\t if (ajv) {\r\n\t this.validateSchema = ajv.compile(schema);\r\n\r\n\t // add schema to the options, so that when switching to an other mode,\r\n\t // the set schema is not lost\r\n\t this.options.schema = schema;\r\n\r\n\t // validate now\r\n\t this.validate();\r\n\t }\r\n\r\n\t this.refresh(); // update DOM\r\n\t }\r\n\t else {\r\n\t // remove current schema\r\n\t this.validateSchema = null;\r\n\t this.options.schema = null;\r\n\t this.validate(); // to clear current error messages\r\n\t this.refresh(); // update DOM\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Validate current JSON object against the configured JSON schema\r\n\t * Throws an exception when no JSON schema is configured\r\n\t */\r\n\tJSONEditor.prototype.validate = function () {\r\n\t // must be implemented by treemode and textmode\r\n\t};\r\n\r\n\t/**\r\n\t * Refresh the rendered contents\r\n\t */\r\n\tJSONEditor.prototype.refresh = function () {\r\n\t // can be implemented by treemode and textmode\r\n\t};\r\n\r\n\t/**\r\n\t * Register a plugin with one ore multiple modes for the JSON Editor.\r\n\t *\r\n\t * A mode is described as an object with properties:\r\n\t *\r\n\t * - `mode: String` The name of the mode.\r\n\t * - `mixin: Object` An object containing the mixin functions which\r\n\t * will be added to the JSONEditor. Must contain functions\r\n\t * create, get, getText, set, and setText. May have\r\n\t * additional functions.\r\n\t * When the JSONEditor switches to a mixin, all mixin\r\n\t * functions are added to the JSONEditor, and then\r\n\t * the function `create(container, options)` is executed.\r\n\t * - `data: 'text' | 'json'` The type of data that will be used to load the mixin.\r\n\t * - `[load: function]` An optional function called after the mixin\r\n\t * has been loaded.\r\n\t *\r\n\t * @param {Object | Array} mode A mode object or an array with multiple mode objects.\r\n\t */\r\n\tJSONEditor.registerMode = function (mode) {\r\n\t var i, prop;\r\n\r\n\t if (util.isArray(mode)) {\r\n\t // multiple modes\r\n\t for (i = 0; i < mode.length; i++) {\r\n\t JSONEditor.registerMode(mode[i]);\r\n\t }\r\n\t }\r\n\t else {\r\n\t // validate the new mode\r\n\t if (!('mode' in mode)) throw new Error('Property \"mode\" missing');\r\n\t if (!('mixin' in mode)) throw new Error('Property \"mixin\" missing');\r\n\t if (!('data' in mode)) throw new Error('Property \"data\" missing');\r\n\t var name = mode.mode;\r\n\t if (name in JSONEditor.modes) {\r\n\t throw new Error('Mode \"' + name + '\" already registered');\r\n\t }\r\n\r\n\t // validate the mixin\r\n\t if (typeof mode.mixin.create !== 'function') {\r\n\t throw new Error('Required function \"create\" missing on mixin');\r\n\t }\r\n\t var reserved = ['setMode', 'registerMode', 'modes'];\r\n\t for (i = 0; i < reserved.length; i++) {\r\n\t prop = reserved[i];\r\n\t if (prop in mode.mixin) {\r\n\t throw new Error('Reserved property \"' + prop + '\" not allowed in mixin');\r\n\t }\r\n\t }\r\n\r\n\t JSONEditor.modes[name] = mode;\r\n\t }\r\n\t};\r\n\r\n\t// register tree and text modes\r\n\tJSONEditor.registerMode(treemode);\r\n\tJSONEditor.registerMode(textmode);\r\n\r\n\tmodule.exports = JSONEditor;\r\n\r\n\r\n/***/ },\r\n/* 1 */\r\n/***/ function(module, exports, __webpack_require__) {\r\n\r\n\t'use strict';\r\n\r\n\tvar compileSchema = __webpack_require__(2)\r\n\t , resolve = __webpack_require__(3)\r\n\t , Cache = __webpack_require__(21)\r\n\t , SchemaObject = __webpack_require__(16)\r\n\t , stableStringify = __webpack_require__(12)\r\n\t , formats = __webpack_require__(22)\r\n\t , rules = __webpack_require__(23)\r\n\t , v5 = __webpack_require__(43)\r\n\t , util = __webpack_require__(11)\r\n\t , async = __webpack_require__(17)\r\n\t , co = __webpack_require__(19);\r\n\r\n\tmodule.exports = Ajv;\r\n\r\n\tAjv.prototype.compileAsync = async.compile;\r\n\tAjv.prototype.addKeyword = __webpack_require__(49);\r\n\tAjv.ValidationError = __webpack_require__(20);\r\n\r\n\tvar META_SCHEMA_ID = 'http://json-schema.org/draft-04/schema';\r\n\tvar SCHEMA_URI_FORMAT = /^(?:(?:[a-z][a-z0-9+-.]*:)?\\/\\/)?[^\\s]*$/i;\r\n\tfunction SCHEMA_URI_FORMAT_FUNC(str) {\r\n\t return SCHEMA_URI_FORMAT.test(str);\r\n\t}\r\n\r\n\tvar META_IGNORE_OPTIONS = [ 'removeAdditional', 'useDefaults', 'coerceTypes' ];\r\n\r\n\t/**\r\n\t * Creates validator instance.\r\n\t * Usage: `Ajv(opts)`\r\n\t * @param {Object} opts optional options\r\n\t * @return {Object} ajv instance\r\n\t */\r\n\tfunction Ajv(opts) {\r\n\t if (!(this instanceof Ajv)) return new Ajv(opts);\r\n\t var self = this;\r\n\r\n\t opts = this._opts = util.copy(opts) || {};\r\n\t this._schemas = {};\r\n\t this._refs = {};\r\n\t this._formats = formats(opts.format);\r\n\t this._cache = opts.cache || new Cache;\r\n\t this._loadingSchemas = {};\r\n\t this.RULES = rules();\r\n\r\n\t // this is done on purpose, so that methods are bound to the instance\r\n\t // (without using bind) so that they can be used without the instance\r\n\t this.validate = validate;\r\n\t this.compile = compile;\r\n\t this.addSchema = addSchema;\r\n\t this.addMetaSchema = addMetaSchema;\r\n\t this.validateSchema = validateSchema;\r\n\t this.getSchema = getSchema;\r\n\t this.removeSchema = removeSchema;\r\n\t this.addFormat = addFormat;\r\n\t this.errorsText = errorsText;\r\n\r\n\t this._addSchema = _addSchema;\r\n\t this._compile = _compile;\r\n\r\n\t opts.loopRequired = opts.loopRequired || Infinity;\r\n\t if (opts.async || opts.transpile) async.setup(opts);\r\n\t if (opts.beautify === true) opts.beautify = { indent_size: 2 };\r\n\t if (opts.errorDataPath == 'property') opts._errorDataPathProperty = true;\r\n\t this._metaOpts = getMetaSchemaOptions();\r\n\r\n\t addInitialSchemas();\r\n\t if (opts.formats) addInitialFormats();\r\n\t if (opts.v5) v5.enable(this);\r\n\t if (typeof opts.meta == 'object') addMetaSchema(opts.meta);\r\n\r\n\r\n\t /**\r\n\t * Validate data using schema\r\n\t * Schema will be compiled and cached (using serialized JSON as key. [json-stable-stringify](https://github.com/substack/json-stable-stringify) is used to serialize.\r\n\t * @param {String|Object} schemaKeyRef key, ref or schema object\r\n\t * @param {Any} data to be validated\r\n\t * @return {Boolean} validation result. Errors from the last validation will be available in `ajv.errors` (and also in compiled schema: `schema.errors`).\r\n\t */\r\n\t function validate(schemaKeyRef, data) {\r\n\t var v;\r\n\t if (typeof schemaKeyRef == 'string') {\r\n\t v = getSchema(schemaKeyRef);\r\n\t if (!v) throw new Error('no schema with key or ref \"' + schemaKeyRef + '\"');\r\n\t } else {\r\n\t var schemaObj = _addSchema(schemaKeyRef);\r\n\t v = schemaObj.validate || _compile(schemaObj);\r\n\t }\r\n\r\n\t var valid = v(data);\r\n\t if (v.async) return self._opts.async == '*' ? co(valid) : valid;\r\n\t self.errors = v.errors;\r\n\t return valid;\r\n\t }\r\n\r\n\r\n\t /**\r\n\t * Create validating function for passed schema.\r\n\t * @param {Object} schema schema object\r\n\t * @return {Function} validating function\r\n\t */\r\n\t function compile(schema) {\r\n\t var schemaObj = _addSchema(schema);\r\n\t return schemaObj.validate || _compile(schemaObj);\r\n\t }\r\n\r\n\r\n\t /**\r\n\t * Adds schema to the instance.\r\n\t * @param {Object|Array} schema schema or array of schemas. If array is passed, `key` and other parameters will be ignored.\r\n\t * @param {String} key Optional schema key. Can be passed to `validate` method instead of schema object or id/ref. One schema per instance can have empty `id` and `key`.\r\n\t * @param {Boolean} _skipValidation true to skip schema validation. Used internally, option validateSchema should be used instead.\r\n\t * @param {Boolean} _meta true if schema is a meta-schema. Used internally, addMetaSchema should be used instead.\r\n\t */\r\n\t function addSchema(schema, key, _skipValidation, _meta) {\r\n\t if (Array.isArray(schema)){\r\n\t for (var i=0; i} errors optional array of validation errors, if not passed errors from the instance are used.\r\n\t * @param {Object} options optional options with properties `separator` and `dataVar`.\r\n\t * @return {String} human readable string with all errors descriptions\r\n\t */\r\n\t function errorsText(errors, options) {\r\n\t errors = errors || self.errors;\r\n\t if (!errors) return 'No errors';\r\n\t options = options || {};\r\n\t var separator = options.separator === undefined ? ', ' : options.separator;\r\n\t var dataVar = options.dataVar === undefined ? 'data' : options.dataVar;\r\n\r\n\t var text = '';\r\n\t for (var i=0; i', '\"', '`', ' ', '\\r', '\\n', '\\t'],\r\n\r\n\t // RFC 2396: characters not allowed for various reasons.\r\n\t unwise = ['{', '}', '|', '\\\\', '^', '`'].concat(delims),\r\n\r\n\t // Allowed by RFCs, but cause of XSS attacks. Always escape these.\r\n\t autoEscape = ['\\''].concat(unwise),\r\n\t // Characters that are never ever allowed in a hostname.\r\n\t // Note that any invalid chars are also handled, but these\r\n\t // are the ones that are *expected* to be seen, so we fast-path\r\n\t // them.\r\n\t nonHostChars = ['%', '/', '?', ';', '#'].concat(autoEscape),\r\n\t hostEndingChars = ['/', '?', '#'],\r\n\t hostnameMaxLen = 255,\r\n\t hostnamePartPattern = /^[a-z0-9A-Z_-]{0,63}$/,\r\n\t hostnamePartStart = /^([a-z0-9A-Z_-]{0,63})(.*)$/,\r\n\t // protocols that can allow \"unsafe\" and \"unwise\" chars.\r\n\t unsafeProtocol = {\r\n\t 'javascript': true,\r\n\t 'javascript:': true\r\n\t },\r\n\t // protocols that never have a hostname.\r\n\t hostlessProtocol = {\r\n\t 'javascript': true,\r\n\t 'javascript:': true\r\n\t },\r\n\t // protocols that always contain a // bit.\r\n\t slashedProtocol = {\r\n\t 'http': true,\r\n\t 'https': true,\r\n\t 'ftp': true,\r\n\t 'gopher': true,\r\n\t 'file': true,\r\n\t 'http:': true,\r\n\t 'https:': true,\r\n\t 'ftp:': true,\r\n\t 'gopher:': true,\r\n\t 'file:': true\r\n\t },\r\n\t querystring = __webpack_require__(7);\r\n\r\n\tfunction urlParse(url, parseQueryString, slashesDenoteHost) {\r\n\t if (url && isObject(url) && url instanceof Url) return url;\r\n\r\n\t var u = new Url;\r\n\t u.parse(url, parseQueryString, slashesDenoteHost);\r\n\t return u;\r\n\t}\r\n\r\n\tUrl.prototype.parse = function(url, parseQueryString, slashesDenoteHost) {\r\n\t if (!isString(url)) {\r\n\t throw new TypeError(\"Parameter 'url' must be a string, not \" + typeof url);\r\n\t }\r\n\r\n\t var rest = url;\r\n\r\n\t // trim before proceeding.\r\n\t // This is to support parse stuff like \" http://foo.com \\n\"\r\n\t rest = rest.trim();\r\n\r\n\t var proto = protocolPattern.exec(rest);\r\n\t if (proto) {\r\n\t proto = proto[0];\r\n\t var lowerProto = proto.toLowerCase();\r\n\t this.protocol = lowerProto;\r\n\t rest = rest.substr(proto.length);\r\n\t }\r\n\r\n\t // figure out if it's got a host\r\n\t // user@server is *always* interpreted as a hostname, and url\r\n\t // resolution will treat //foo/bar as host=foo,path=bar because that's\r\n\t // how the browser resolves relative URLs.\r\n\t if (slashesDenoteHost || proto || rest.match(/^\\/\\/[^@\\/]+@[^@\\/]+/)) {\r\n\t var slashes = rest.substr(0, 2) === '//';\r\n\t if (slashes && !(proto && hostlessProtocol[proto])) {\r\n\t rest = rest.substr(2);\r\n\t this.slashes = true;\r\n\t }\r\n\t }\r\n\r\n\t if (!hostlessProtocol[proto] &&\r\n\t (slashes || (proto && !slashedProtocol[proto]))) {\r\n\r\n\t // there's a hostname.\r\n\t // the first instance of /, ?, ;, or # ends the host.\r\n\t //\r\n\t // If there is an @ in the hostname, then non-host chars *are* allowed\r\n\t // to the left of the last @ sign, unless some host-ending character\r\n\t // comes *before* the @-sign.\r\n\t // URLs are obnoxious.\r\n\t //\r\n\t // ex:\r\n\t // http://a@b@c/ => user:a@b host:c\r\n\t // http://a@b?@c => user:a host:c path:/?@c\r\n\r\n\t // v0.12 TODO(isaacs): This is not quite how Chrome does things.\r\n\t // Review our test case against browsers more comprehensively.\r\n\r\n\t // find the first instance of any hostEndingChars\r\n\t var hostEnd = -1;\r\n\t for (var i = 0; i < hostEndingChars.length; i++) {\r\n\t var hec = rest.indexOf(hostEndingChars[i]);\r\n\t if (hec !== -1 && (hostEnd === -1 || hec < hostEnd))\r\n\t hostEnd = hec;\r\n\t }\r\n\r\n\t // at this point, either we have an explicit point where the\r\n\t // auth portion cannot go past, or the last @ char is the decider.\r\n\t var auth, atSign;\r\n\t if (hostEnd === -1) {\r\n\t // atSign can be anywhere.\r\n\t atSign = rest.lastIndexOf('@');\r\n\t } else {\r\n\t // atSign must be in auth portion.\r\n\t // http://a@b/c@d => host:b auth:a path:/c@d\r\n\t atSign = rest.lastIndexOf('@', hostEnd);\r\n\t }\r\n\r\n\t // Now we have a portion which is definitely the auth.\r\n\t // Pull that off.\r\n\t if (atSign !== -1) {\r\n\t auth = rest.slice(0, atSign);\r\n\t rest = rest.slice(atSign + 1);\r\n\t this.auth = decodeURIComponent(auth);\r\n\t }\r\n\r\n\t // the host is the remaining to the left of the first non-host char\r\n\t hostEnd = -1;\r\n\t for (var i = 0; i < nonHostChars.length; i++) {\r\n\t var hec = rest.indexOf(nonHostChars[i]);\r\n\t if (hec !== -1 && (hostEnd === -1 || hec < hostEnd))\r\n\t hostEnd = hec;\r\n\t }\r\n\t // if we still have not hit it, then the entire thing is a host.\r\n\t if (hostEnd === -1)\r\n\t hostEnd = rest.length;\r\n\r\n\t this.host = rest.slice(0, hostEnd);\r\n\t rest = rest.slice(hostEnd);\r\n\r\n\t // pull out port.\r\n\t this.parseHost();\r\n\r\n\t // we've indicated that there is a hostname,\r\n\t // so even if it's empty, it has to be present.\r\n\t this.hostname = this.hostname || '';\r\n\r\n\t // if hostname begins with [ and ends with ]\r\n\t // assume that it's an IPv6 address.\r\n\t var ipv6Hostname = this.hostname[0] === '[' &&\r\n\t this.hostname[this.hostname.length - 1] === ']';\r\n\r\n\t // validate a little.\r\n\t if (!ipv6Hostname) {\r\n\t var hostparts = this.hostname.split(/\\./);\r\n\t for (var i = 0, l = hostparts.length; i < l; i++) {\r\n\t var part = hostparts[i];\r\n\t if (!part) continue;\r\n\t if (!part.match(hostnamePartPattern)) {\r\n\t var newpart = '';\r\n\t for (var j = 0, k = part.length; j < k; j++) {\r\n\t if (part.charCodeAt(j) > 127) {\r\n\t // we replace non-ASCII char with a temporary placeholder\r\n\t // we need this to make sure size of hostname is not\r\n\t // broken by replacing non-ASCII by nothing\r\n\t newpart += 'x';\r\n\t } else {\r\n\t newpart += part[j];\r\n\t }\r\n\t }\r\n\t // we test again with ASCII char only\r\n\t if (!newpart.match(hostnamePartPattern)) {\r\n\t var validParts = hostparts.slice(0, i);\r\n\t var notHost = hostparts.slice(i + 1);\r\n\t var bit = part.match(hostnamePartStart);\r\n\t if (bit) {\r\n\t validParts.push(bit[1]);\r\n\t notHost.unshift(bit[2]);\r\n\t }\r\n\t if (notHost.length) {\r\n\t rest = '/' + notHost.join('.') + rest;\r\n\t }\r\n\t this.hostname = validParts.join('.');\r\n\t break;\r\n\t }\r\n\t }\r\n\t }\r\n\t }\r\n\r\n\t if (this.hostname.length > hostnameMaxLen) {\r\n\t this.hostname = '';\r\n\t } else {\r\n\t // hostnames are always lower case.\r\n\t this.hostname = this.hostname.toLowerCase();\r\n\t }\r\n\r\n\t if (!ipv6Hostname) {\r\n\t // IDNA Support: Returns a puny coded representation of \"domain\".\r\n\t // It only converts the part of the domain name that\r\n\t // has non ASCII characters. I.e. it dosent matter if\r\n\t // you call it with a domain that already is in ASCII.\r\n\t var domainArray = this.hostname.split('.');\r\n\t var newOut = [];\r\n\t for (var i = 0; i < domainArray.length; ++i) {\r\n\t var s = domainArray[i];\r\n\t newOut.push(s.match(/[^A-Za-z0-9_-]/) ?\r\n\t 'xn--' + punycode.encode(s) : s);\r\n\t }\r\n\t this.hostname = newOut.join('.');\r\n\t }\r\n\r\n\t var p = this.port ? ':' + this.port : '';\r\n\t var h = this.hostname || '';\r\n\t this.host = h + p;\r\n\t this.href += this.host;\r\n\r\n\t // strip [ and ] from the hostname\r\n\t // the host field still retains them, though\r\n\t if (ipv6Hostname) {\r\n\t this.hostname = this.hostname.substr(1, this.hostname.length - 2);\r\n\t if (rest[0] !== '/') {\r\n\t rest = '/' + rest;\r\n\t }\r\n\t }\r\n\t }\r\n\r\n\t // now rest is set to the post-host stuff.\r\n\t // chop off any delim chars.\r\n\t if (!unsafeProtocol[lowerProto]) {\r\n\r\n\t // First, make 100% sure that any \"autoEscape\" chars get\r\n\t // escaped, even if encodeURIComponent doesn't think they\r\n\t // need to be.\r\n\t for (var i = 0, l = autoEscape.length; i < l; i++) {\r\n\t var ae = autoEscape[i];\r\n\t var esc = encodeURIComponent(ae);\r\n\t if (esc === ae) {\r\n\t esc = escape(ae);\r\n\t }\r\n\t rest = rest.split(ae).join(esc);\r\n\t }\r\n\t }\r\n\r\n\r\n\t // chop off from the tail first.\r\n\t var hash = rest.indexOf('#');\r\n\t if (hash !== -1) {\r\n\t // got a fragment string.\r\n\t this.hash = rest.substr(hash);\r\n\t rest = rest.slice(0, hash);\r\n\t }\r\n\t var qm = rest.indexOf('?');\r\n\t if (qm !== -1) {\r\n\t this.search = rest.substr(qm);\r\n\t this.query = rest.substr(qm + 1);\r\n\t if (parseQueryString) {\r\n\t this.query = querystring.parse(this.query);\r\n\t }\r\n\t rest = rest.slice(0, qm);\r\n\t } else if (parseQueryString) {\r\n\t // no query string, but parseQueryString still requested\r\n\t this.search = '';\r\n\t this.query = {};\r\n\t }\r\n\t if (rest) this.pathname = rest;\r\n\t if (slashedProtocol[lowerProto] &&\r\n\t this.hostname && !this.pathname) {\r\n\t this.pathname = '/';\r\n\t }\r\n\r\n\t //to support http.request\r\n\t if (this.pathname || this.search) {\r\n\t var p = this.pathname || '';\r\n\t var s = this.search || '';\r\n\t this.path = p + s;\r\n\t }\r\n\r\n\t // finally, reconstruct the href based on what has been validated.\r\n\t this.href = this.format();\r\n\t return this;\r\n\t};\r\n\r\n\t// format a parsed object into a url string\r\n\tfunction urlFormat(obj) {\r\n\t // ensure it's an object, and not a string url.\r\n\t // If it's an obj, this is a no-op.\r\n\t // this way, you can call url_format() on strings\r\n\t // to clean up potentially wonky urls.\r\n\t if (isString(obj)) obj = urlParse(obj);\r\n\t if (!(obj instanceof Url)) return Url.prototype.format.call(obj);\r\n\t return obj.format();\r\n\t}\r\n\r\n\tUrl.prototype.format = function() {\r\n\t var auth = this.auth || '';\r\n\t if (auth) {\r\n\t auth = encodeURIComponent(auth);\r\n\t auth = auth.replace(/%3A/i, ':');\r\n\t auth += '@';\r\n\t }\r\n\r\n\t var protocol = this.protocol || '',\r\n\t pathname = this.pathname || '',\r\n\t hash = this.hash || '',\r\n\t host = false,\r\n\t query = '';\r\n\r\n\t if (this.host) {\r\n\t host = auth + this.host;\r\n\t } else if (this.hostname) {\r\n\t host = auth + (this.hostname.indexOf(':') === -1 ?\r\n\t this.hostname :\r\n\t '[' + this.hostname + ']');\r\n\t if (this.port) {\r\n\t host += ':' + this.port;\r\n\t }\r\n\t }\r\n\r\n\t if (this.query &&\r\n\t isObject(this.query) &&\r\n\t Object.keys(this.query).length) {\r\n\t query = querystring.stringify(this.query);\r\n\t }\r\n\r\n\t var search = this.search || (query && ('?' + query)) || '';\r\n\r\n\t if (protocol && protocol.substr(-1) !== ':') protocol += ':';\r\n\r\n\t // only the slashedProtocols get the //. Not mailto:, xmpp:, etc.\r\n\t // unless they had them to begin with.\r\n\t if (this.slashes ||\r\n\t (!protocol || slashedProtocol[protocol]) && host !== false) {\r\n\t host = '//' + (host || '');\r\n\t if (pathname && pathname.charAt(0) !== '/') pathname = '/' + pathname;\r\n\t } else if (!host) {\r\n\t host = '';\r\n\t }\r\n\r\n\t if (hash && hash.charAt(0) !== '#') hash = '#' + hash;\r\n\t if (search && search.charAt(0) !== '?') search = '?' + search;\r\n\r\n\t pathname = pathname.replace(/[?#]/g, function(match) {\r\n\t return encodeURIComponent(match);\r\n\t });\r\n\t search = search.replace('#', '%23');\r\n\r\n\t return protocol + host + pathname + search + hash;\r\n\t};\r\n\r\n\tfunction urlResolve(source, relative) {\r\n\t return urlParse(source, false, true).resolve(relative);\r\n\t}\r\n\r\n\tUrl.prototype.resolve = function(relative) {\r\n\t return this.resolveObject(urlParse(relative, false, true)).format();\r\n\t};\r\n\r\n\tfunction urlResolveObject(source, relative) {\r\n\t if (!source) return relative;\r\n\t return urlParse(source, false, true).resolveObject(relative);\r\n\t}\r\n\r\n\tUrl.prototype.resolveObject = function(relative) {\r\n\t if (isString(relative)) {\r\n\t var rel = new Url();\r\n\t rel.parse(relative, false, true);\r\n\t relative = rel;\r\n\t }\r\n\r\n\t var result = new Url();\r\n\t Object.keys(this).forEach(function(k) {\r\n\t result[k] = this[k];\r\n\t }, this);\r\n\r\n\t // hash is always overridden, no matter what.\r\n\t // even href=\"\" will remove it.\r\n\t result.hash = relative.hash;\r\n\r\n\t // if the relative url is empty, then there's nothing left to do here.\r\n\t if (relative.href === '') {\r\n\t result.href = result.format();\r\n\t return result;\r\n\t }\r\n\r\n\t // hrefs like //foo/bar always cut to the protocol.\r\n\t if (relative.slashes && !relative.protocol) {\r\n\t // take everything except the protocol from relative\r\n\t Object.keys(relative).forEach(function(k) {\r\n\t if (k !== 'protocol')\r\n\t result[k] = relative[k];\r\n\t });\r\n\r\n\t //urlParse appends trailing / to urls like http://www.example.com\r\n\t if (slashedProtocol[result.protocol] &&\r\n\t result.hostname && !result.pathname) {\r\n\t result.path = result.pathname = '/';\r\n\t }\r\n\r\n\t result.href = result.format();\r\n\t return result;\r\n\t }\r\n\r\n\t if (relative.protocol && relative.protocol !== result.protocol) {\r\n\t // if it's a known url protocol, then changing\r\n\t // the protocol does weird things\r\n\t // first, if it's not file:, then we MUST have a host,\r\n\t // and if there was a path\r\n\t // to begin with, then we MUST have a path.\r\n\t // if it is file:, then the host is dropped,\r\n\t // because that's known to be hostless.\r\n\t // anything else is assumed to be absolute.\r\n\t if (!slashedProtocol[relative.protocol]) {\r\n\t Object.keys(relative).forEach(function(k) {\r\n\t result[k] = relative[k];\r\n\t });\r\n\t result.href = result.format();\r\n\t return result;\r\n\t }\r\n\r\n\t result.protocol = relative.protocol;\r\n\t if (!relative.host && !hostlessProtocol[relative.protocol]) {\r\n\t var relPath = (relative.pathname || '').split('/');\r\n\t while (relPath.length && !(relative.host = relPath.shift()));\r\n\t if (!relative.host) relative.host = '';\r\n\t if (!relative.hostname) relative.hostname = '';\r\n\t if (relPath[0] !== '') relPath.unshift('');\r\n\t if (relPath.length < 2) relPath.unshift('');\r\n\t result.pathname = relPath.join('/');\r\n\t } else {\r\n\t result.pathname = relative.pathname;\r\n\t }\r\n\t result.search = relative.search;\r\n\t result.query = relative.query;\r\n\t result.host = relative.host || '';\r\n\t result.auth = relative.auth;\r\n\t result.hostname = relative.hostname || relative.host;\r\n\t result.port = relative.port;\r\n\t // to support http.request\r\n\t if (result.pathname || result.search) {\r\n\t var p = result.pathname || '';\r\n\t var s = result.search || '';\r\n\t result.path = p + s;\r\n\t }\r\n\t result.slashes = result.slashes || relative.slashes;\r\n\t result.href = result.format();\r\n\t return result;\r\n\t }\r\n\r\n\t var isSourceAbs = (result.pathname && result.pathname.charAt(0) === '/'),\r\n\t isRelAbs = (\r\n\t relative.host ||\r\n\t relative.pathname && relative.pathname.charAt(0) === '/'\r\n\t ),\r\n\t mustEndAbs = (isRelAbs || isSourceAbs ||\r\n\t (result.host && relative.pathname)),\r\n\t removeAllDots = mustEndAbs,\r\n\t srcPath = result.pathname && result.pathname.split('/') || [],\r\n\t relPath = relative.pathname && relative.pathname.split('/') || [],\r\n\t psychotic = result.protocol && !slashedProtocol[result.protocol];\r\n\r\n\t // if the url is a non-slashed url, then relative\r\n\t // links like ../.. should be able\r\n\t // to crawl up to the hostname, as well. This is strange.\r\n\t // result.protocol has already been set by now.\r\n\t // Later on, put the first path part into the host field.\r\n\t if (psychotic) {\r\n\t result.hostname = '';\r\n\t result.port = null;\r\n\t if (result.host) {\r\n\t if (srcPath[0] === '') srcPath[0] = result.host;\r\n\t else srcPath.unshift(result.host);\r\n\t }\r\n\t result.host = '';\r\n\t if (relative.protocol) {\r\n\t relative.hostname = null;\r\n\t relative.port = null;\r\n\t if (relative.host) {\r\n\t if (relPath[0] === '') relPath[0] = relative.host;\r\n\t else relPath.unshift(relative.host);\r\n\t }\r\n\t relative.host = null;\r\n\t }\r\n\t mustEndAbs = mustEndAbs && (relPath[0] === '' || srcPath[0] === '');\r\n\t }\r\n\r\n\t if (isRelAbs) {\r\n\t // it's absolute.\r\n\t result.host = (relative.host || relative.host === '') ?\r\n\t relative.host : result.host;\r\n\t result.hostname = (relative.hostname || relative.hostname === '') ?\r\n\t relative.hostname : result.hostname;\r\n\t result.search = relative.search;\r\n\t result.query = relative.query;\r\n\t srcPath = relPath;\r\n\t // fall through to the dot-handling below.\r\n\t } else if (relPath.length) {\r\n\t // it's relative\r\n\t // throw away the existing file, and take the new path instead.\r\n\t if (!srcPath) srcPath = [];\r\n\t srcPath.pop();\r\n\t srcPath = srcPath.concat(relPath);\r\n\t result.search = relative.search;\r\n\t result.query = relative.query;\r\n\t } else if (!isNullOrUndefined(relative.search)) {\r\n\t // just pull out the search.\r\n\t // like href='?foo'.\r\n\t // Put this after the other two cases because it simplifies the booleans\r\n\t if (psychotic) {\r\n\t result.hostname = result.host = srcPath.shift();\r\n\t //occationaly the auth can get stuck only in host\r\n\t //this especialy happens in cases like\r\n\t //url.resolveObject('mailto:local1@domain1', 'local2@domain2')\r\n\t var authInHost = result.host && result.host.indexOf('@') > 0 ?\r\n\t result.host.split('@') : false;\r\n\t if (authInHost) {\r\n\t result.auth = authInHost.shift();\r\n\t result.host = result.hostname = authInHost.shift();\r\n\t }\r\n\t }\r\n\t result.search = relative.search;\r\n\t result.query = relative.query;\r\n\t //to support http.request\r\n\t if (!isNull(result.pathname) || !isNull(result.search)) {\r\n\t result.path = (result.pathname ? result.pathname : '') +\r\n\t (result.search ? result.search : '');\r\n\t }\r\n\t result.href = result.format();\r\n\t return result;\r\n\t }\r\n\r\n\t if (!srcPath.length) {\r\n\t // no path at all. easy.\r\n\t // we've already handled the other stuff above.\r\n\t result.pathname = null;\r\n\t //to support http.request\r\n\t if (result.search) {\r\n\t result.path = '/' + result.search;\r\n\t } else {\r\n\t result.path = null;\r\n\t }\r\n\t result.href = result.format();\r\n\t return result;\r\n\t }\r\n\r\n\t // if a url ENDs in . or .., then it must get a trailing slash.\r\n\t // however, if it ends in anything else non-slashy,\r\n\t // then it must NOT get a trailing slash.\r\n\t var last = srcPath.slice(-1)[0];\r\n\t var hasTrailingSlash = (\r\n\t (result.host || relative.host) && (last === '.' || last === '..') ||\r\n\t last === '');\r\n\r\n\t // strip single dots, resolve double dots to parent dir\r\n\t // if the path tries to go above the root, `up` ends up > 0\r\n\t var up = 0;\r\n\t for (var i = srcPath.length; i >= 0; i--) {\r\n\t last = srcPath[i];\r\n\t if (last == '.') {\r\n\t srcPath.splice(i, 1);\r\n\t } else if (last === '..') {\r\n\t srcPath.splice(i, 1);\r\n\t up++;\r\n\t } else if (up) {\r\n\t srcPath.splice(i, 1);\r\n\t up--;\r\n\t }\r\n\t }\r\n\r\n\t // if the path is allowed to go above the root, restore leading ..s\r\n\t if (!mustEndAbs && !removeAllDots) {\r\n\t for (; up--; up) {\r\n\t srcPath.unshift('..');\r\n\t }\r\n\t }\r\n\r\n\t if (mustEndAbs && srcPath[0] !== '' &&\r\n\t (!srcPath[0] || srcPath[0].charAt(0) !== '/')) {\r\n\t srcPath.unshift('');\r\n\t }\r\n\r\n\t if (hasTrailingSlash && (srcPath.join('/').substr(-1) !== '/')) {\r\n\t srcPath.push('');\r\n\t }\r\n\r\n\t var isAbsolute = srcPath[0] === '' ||\r\n\t (srcPath[0] && srcPath[0].charAt(0) === '/');\r\n\r\n\t // put the host back\r\n\t if (psychotic) {\r\n\t result.hostname = result.host = isAbsolute ? '' :\r\n\t srcPath.length ? srcPath.shift() : '';\r\n\t //occationaly the auth can get stuck only in host\r\n\t //this especialy happens in cases like\r\n\t //url.resolveObject('mailto:local1@domain1', 'local2@domain2')\r\n\t var authInHost = result.host && result.host.indexOf('@') > 0 ?\r\n\t result.host.split('@') : false;\r\n\t if (authInHost) {\r\n\t result.auth = authInHost.shift();\r\n\t result.host = result.hostname = authInHost.shift();\r\n\t }\r\n\t }\r\n\r\n\t mustEndAbs = mustEndAbs || (result.host && srcPath.length);\r\n\r\n\t if (mustEndAbs && !isAbsolute) {\r\n\t srcPath.unshift('');\r\n\t }\r\n\r\n\t if (!srcPath.length) {\r\n\t result.pathname = null;\r\n\t result.path = null;\r\n\t } else {\r\n\t result.pathname = srcPath.join('/');\r\n\t }\r\n\r\n\t //to support request.http\r\n\t if (!isNull(result.pathname) || !isNull(result.search)) {\r\n\t result.path = (result.pathname ? result.pathname : '') +\r\n\t (result.search ? result.search : '');\r\n\t }\r\n\t result.auth = relative.auth || result.auth;\r\n\t result.slashes = result.slashes || relative.slashes;\r\n\t result.href = result.format();\r\n\t return result;\r\n\t};\r\n\r\n\tUrl.prototype.parseHost = function() {\r\n\t var host = this.host;\r\n\t var port = portPattern.exec(host);\r\n\t if (port) {\r\n\t port = port[0];\r\n\t if (port !== ':') {\r\n\t this.port = port.substr(1);\r\n\t }\r\n\t host = host.substr(0, host.length - port.length);\r\n\t }\r\n\t if (host) this.hostname = host;\r\n\t};\r\n\r\n\tfunction isString(arg) {\r\n\t return typeof arg === \"string\";\r\n\t}\r\n\r\n\tfunction isObject(arg) {\r\n\t return typeof arg === 'object' && arg !== null;\r\n\t}\r\n\r\n\tfunction isNull(arg) {\r\n\t return arg === null;\r\n\t}\r\n\tfunction isNullOrUndefined(arg) {\r\n\t return arg == null;\r\n\t}\r\n\r\n\r\n/***/ },\r\n/* 5 */\r\n/***/ function(module, exports, __webpack_require__) {\r\n\r\n\tvar __WEBPACK_AMD_DEFINE_RESULT__;/* WEBPACK VAR INJECTION */(function(module, global) {/*! https://mths.be/punycode v1.3.2 by @mathias */\r\n\t;(function(root) {\r\n\r\n\t\t/** Detect free variables */\r\n\t\tvar freeExports = typeof exports == 'object' && exports &&\r\n\t\t\t!exports.nodeType && exports;\r\n\t\tvar freeModule = typeof module == 'object' && module &&\r\n\t\t\t!module.nodeType && module;\r\n\t\tvar freeGlobal = typeof global == 'object' && global;\r\n\t\tif (\r\n\t\t\tfreeGlobal.global === freeGlobal ||\r\n\t\t\tfreeGlobal.window === freeGlobal ||\r\n\t\t\tfreeGlobal.self === freeGlobal\r\n\t\t) {\r\n\t\t\troot = freeGlobal;\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * The `punycode` object.\r\n\t\t * @name punycode\r\n\t\t * @type Object\r\n\t\t */\r\n\t\tvar punycode,\r\n\r\n\t\t/** Highest positive signed 32-bit float value */\r\n\t\tmaxInt = 2147483647, // aka. 0x7FFFFFFF or 2^31-1\r\n\r\n\t\t/** Bootstring parameters */\r\n\t\tbase = 36,\r\n\t\ttMin = 1,\r\n\t\ttMax = 26,\r\n\t\tskew = 38,\r\n\t\tdamp = 700,\r\n\t\tinitialBias = 72,\r\n\t\tinitialN = 128, // 0x80\r\n\t\tdelimiter = '-', // '\\x2D'\r\n\r\n\t\t/** Regular expressions */\r\n\t\tregexPunycode = /^xn--/,\r\n\t\tregexNonASCII = /[^\\x20-\\x7E]/, // unprintable ASCII chars + non-ASCII chars\r\n\t\tregexSeparators = /[\\x2E\\u3002\\uFF0E\\uFF61]/g, // RFC 3490 separators\r\n\r\n\t\t/** Error messages */\r\n\t\terrors = {\r\n\t\t\t'overflow': 'Overflow: input needs wider integers to process',\r\n\t\t\t'not-basic': 'Illegal input >= 0x80 (not a basic code point)',\r\n\t\t\t'invalid-input': 'Invalid input'\r\n\t\t},\r\n\r\n\t\t/** Convenience shortcuts */\r\n\t\tbaseMinusTMin = base - tMin,\r\n\t\tfloor = Math.floor,\r\n\t\tstringFromCharCode = String.fromCharCode,\r\n\r\n\t\t/** Temporary variable */\r\n\t\tkey;\r\n\r\n\t\t/*--------------------------------------------------------------------------*/\r\n\r\n\t\t/**\r\n\t\t * A generic error utility function.\r\n\t\t * @private\r\n\t\t * @param {String} type The error type.\r\n\t\t * @returns {Error} Throws a `RangeError` with the applicable error message.\r\n\t\t */\r\n\t\tfunction error(type) {\r\n\t\t\tthrow RangeError(errors[type]);\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * A generic `Array#map` utility function.\r\n\t\t * @private\r\n\t\t * @param {Array} array The array to iterate over.\r\n\t\t * @param {Function} callback The function that gets called for every array\r\n\t\t * item.\r\n\t\t * @returns {Array} A new array of values returned by the callback function.\r\n\t\t */\r\n\t\tfunction map(array, fn) {\r\n\t\t\tvar length = array.length;\r\n\t\t\tvar result = [];\r\n\t\t\twhile (length--) {\r\n\t\t\t\tresult[length] = fn(array[length]);\r\n\t\t\t}\r\n\t\t\treturn result;\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * A simple `Array#map`-like wrapper to work with domain name strings or email\r\n\t\t * addresses.\r\n\t\t * @private\r\n\t\t * @param {String} domain The domain name or email address.\r\n\t\t * @param {Function} callback The function that gets called for every\r\n\t\t * character.\r\n\t\t * @returns {Array} A new string of characters returned by the callback\r\n\t\t * function.\r\n\t\t */\r\n\t\tfunction mapDomain(string, fn) {\r\n\t\t\tvar parts = string.split('@');\r\n\t\t\tvar result = '';\r\n\t\t\tif (parts.length > 1) {\r\n\t\t\t\t// In email addresses, only the domain name should be punycoded. Leave\r\n\t\t\t\t// the local part (i.e. everything up to `@`) intact.\r\n\t\t\t\tresult = parts[0] + '@';\r\n\t\t\t\tstring = parts[1];\r\n\t\t\t}\r\n\t\t\t// Avoid `split(regex)` for IE8 compatibility. See #17.\r\n\t\t\tstring = string.replace(regexSeparators, '\\x2E');\r\n\t\t\tvar labels = string.split('.');\r\n\t\t\tvar encoded = map(labels, fn).join('.');\r\n\t\t\treturn result + encoded;\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * Creates an array containing the numeric code points of each Unicode\r\n\t\t * character in the string. While JavaScript uses UCS-2 internally,\r\n\t\t * this function will convert a pair of surrogate halves (each of which\r\n\t\t * UCS-2 exposes as separate characters) into a single code point,\r\n\t\t * matching UTF-16.\r\n\t\t * @see `punycode.ucs2.encode`\r\n\t\t * @see \r\n\t\t * @memberOf punycode.ucs2\r\n\t\t * @name decode\r\n\t\t * @param {String} string The Unicode input string (UCS-2).\r\n\t\t * @returns {Array} The new array of code points.\r\n\t\t */\r\n\t\tfunction ucs2decode(string) {\r\n\t\t\tvar output = [],\r\n\t\t\t counter = 0,\r\n\t\t\t length = string.length,\r\n\t\t\t value,\r\n\t\t\t extra;\r\n\t\t\twhile (counter < length) {\r\n\t\t\t\tvalue = string.charCodeAt(counter++);\r\n\t\t\t\tif (value >= 0xD800 && value <= 0xDBFF && counter < length) {\r\n\t\t\t\t\t// high surrogate, and there is a next character\r\n\t\t\t\t\textra = string.charCodeAt(counter++);\r\n\t\t\t\t\tif ((extra & 0xFC00) == 0xDC00) { // low surrogate\r\n\t\t\t\t\t\toutput.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\t// unmatched surrogate; only append this code unit, in case the next\r\n\t\t\t\t\t\t// code unit is the high surrogate of a surrogate pair\r\n\t\t\t\t\t\toutput.push(value);\r\n\t\t\t\t\t\tcounter--;\r\n\t\t\t\t\t}\r\n\t\t\t\t} else {\r\n\t\t\t\t\toutput.push(value);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn output;\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * Creates a string based on an array of numeric code points.\r\n\t\t * @see `punycode.ucs2.decode`\r\n\t\t * @memberOf punycode.ucs2\r\n\t\t * @name encode\r\n\t\t * @param {Array} codePoints The array of numeric code points.\r\n\t\t * @returns {String} The new Unicode string (UCS-2).\r\n\t\t */\r\n\t\tfunction ucs2encode(array) {\r\n\t\t\treturn map(array, function(value) {\r\n\t\t\t\tvar output = '';\r\n\t\t\t\tif (value > 0xFFFF) {\r\n\t\t\t\t\tvalue -= 0x10000;\r\n\t\t\t\t\toutput += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800);\r\n\t\t\t\t\tvalue = 0xDC00 | value & 0x3FF;\r\n\t\t\t\t}\r\n\t\t\t\toutput += stringFromCharCode(value);\r\n\t\t\t\treturn output;\r\n\t\t\t}).join('');\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * Converts a basic code point into a digit/integer.\r\n\t\t * @see `digitToBasic()`\r\n\t\t * @private\r\n\t\t * @param {Number} codePoint The basic numeric code point value.\r\n\t\t * @returns {Number} The numeric value of a basic code point (for use in\r\n\t\t * representing integers) in the range `0` to `base - 1`, or `base` if\r\n\t\t * the code point does not represent a value.\r\n\t\t */\r\n\t\tfunction basicToDigit(codePoint) {\r\n\t\t\tif (codePoint - 48 < 10) {\r\n\t\t\t\treturn codePoint - 22;\r\n\t\t\t}\r\n\t\t\tif (codePoint - 65 < 26) {\r\n\t\t\t\treturn codePoint - 65;\r\n\t\t\t}\r\n\t\t\tif (codePoint - 97 < 26) {\r\n\t\t\t\treturn codePoint - 97;\r\n\t\t\t}\r\n\t\t\treturn base;\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * Converts a digit/integer into a basic code point.\r\n\t\t * @see `basicToDigit()`\r\n\t\t * @private\r\n\t\t * @param {Number} digit The numeric value of a basic code point.\r\n\t\t * @returns {Number} The basic code point whose value (when used for\r\n\t\t * representing integers) is `digit`, which needs to be in the range\r\n\t\t * `0` to `base - 1`. If `flag` is non-zero, the uppercase form is\r\n\t\t * used; else, the lowercase form is used. The behavior is undefined\r\n\t\t * if `flag` is non-zero and `digit` has no uppercase form.\r\n\t\t */\r\n\t\tfunction digitToBasic(digit, flag) {\r\n\t\t\t// 0..25 map to ASCII a..z or A..Z\r\n\t\t\t// 26..35 map to ASCII 0..9\r\n\t\t\treturn digit + 22 + 75 * (digit < 26) - ((flag != 0) << 5);\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * Bias adaptation function as per section 3.4 of RFC 3492.\r\n\t\t * http://tools.ietf.org/html/rfc3492#section-3.4\r\n\t\t * @private\r\n\t\t */\r\n\t\tfunction adapt(delta, numPoints, firstTime) {\r\n\t\t\tvar k = 0;\r\n\t\t\tdelta = firstTime ? floor(delta / damp) : delta >> 1;\r\n\t\t\tdelta += floor(delta / numPoints);\r\n\t\t\tfor (/* no initialization */; delta > baseMinusTMin * tMax >> 1; k += base) {\r\n\t\t\t\tdelta = floor(delta / baseMinusTMin);\r\n\t\t\t}\r\n\t\t\treturn floor(k + (baseMinusTMin + 1) * delta / (delta + skew));\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * Converts a Punycode string of ASCII-only symbols to a string of Unicode\r\n\t\t * symbols.\r\n\t\t * @memberOf punycode\r\n\t\t * @param {String} input The Punycode string of ASCII-only symbols.\r\n\t\t * @returns {String} The resulting string of Unicode symbols.\r\n\t\t */\r\n\t\tfunction decode(input) {\r\n\t\t\t// Don't use UCS-2\r\n\t\t\tvar output = [],\r\n\t\t\t inputLength = input.length,\r\n\t\t\t out,\r\n\t\t\t i = 0,\r\n\t\t\t n = initialN,\r\n\t\t\t bias = initialBias,\r\n\t\t\t basic,\r\n\t\t\t j,\r\n\t\t\t index,\r\n\t\t\t oldi,\r\n\t\t\t w,\r\n\t\t\t k,\r\n\t\t\t digit,\r\n\t\t\t t,\r\n\t\t\t /** Cached calculation results */\r\n\t\t\t baseMinusT;\r\n\r\n\t\t\t// Handle the basic code points: let `basic` be the number of input code\r\n\t\t\t// points before the last delimiter, or `0` if there is none, then copy\r\n\t\t\t// the first basic code points to the output.\r\n\r\n\t\t\tbasic = input.lastIndexOf(delimiter);\r\n\t\t\tif (basic < 0) {\r\n\t\t\t\tbasic = 0;\r\n\t\t\t}\r\n\r\n\t\t\tfor (j = 0; j < basic; ++j) {\r\n\t\t\t\t// if it's not a basic code point\r\n\t\t\t\tif (input.charCodeAt(j) >= 0x80) {\r\n\t\t\t\t\terror('not-basic');\r\n\t\t\t\t}\r\n\t\t\t\toutput.push(input.charCodeAt(j));\r\n\t\t\t}\r\n\r\n\t\t\t// Main decoding loop: start just after the last delimiter if any basic code\r\n\t\t\t// points were copied; start at the beginning otherwise.\r\n\r\n\t\t\tfor (index = basic > 0 ? basic + 1 : 0; index < inputLength; /* no final expression */) {\r\n\r\n\t\t\t\t// `index` is the index of the next character to be consumed.\r\n\t\t\t\t// Decode a generalized variable-length integer into `delta`,\r\n\t\t\t\t// which gets added to `i`. The overflow checking is easier\r\n\t\t\t\t// if we increase `i` as we go, then subtract off its starting\r\n\t\t\t\t// value at the end to obtain `delta`.\r\n\t\t\t\tfor (oldi = i, w = 1, k = base; /* no condition */; k += base) {\r\n\r\n\t\t\t\t\tif (index >= inputLength) {\r\n\t\t\t\t\t\terror('invalid-input');\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tdigit = basicToDigit(input.charCodeAt(index++));\r\n\r\n\t\t\t\t\tif (digit >= base || digit > floor((maxInt - i) / w)) {\r\n\t\t\t\t\t\terror('overflow');\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\ti += digit * w;\r\n\t\t\t\t\tt = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);\r\n\r\n\t\t\t\t\tif (digit < t) {\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tbaseMinusT = base - t;\r\n\t\t\t\t\tif (w > floor(maxInt / baseMinusT)) {\r\n\t\t\t\t\t\terror('overflow');\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tw *= baseMinusT;\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t\tout = output.length + 1;\r\n\t\t\t\tbias = adapt(i - oldi, out, oldi == 0);\r\n\r\n\t\t\t\t// `i` was supposed to wrap around from `out` to `0`,\r\n\t\t\t\t// incrementing `n` each time, so we'll fix that now:\r\n\t\t\t\tif (floor(i / out) > maxInt - n) {\r\n\t\t\t\t\terror('overflow');\r\n\t\t\t\t}\r\n\r\n\t\t\t\tn += floor(i / out);\r\n\t\t\t\ti %= out;\r\n\r\n\t\t\t\t// Insert `n` at position `i` of the output\r\n\t\t\t\toutput.splice(i++, 0, n);\r\n\r\n\t\t\t}\r\n\r\n\t\t\treturn ucs2encode(output);\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * Converts a string of Unicode symbols (e.g. a domain name label) to a\r\n\t\t * Punycode string of ASCII-only symbols.\r\n\t\t * @memberOf punycode\r\n\t\t * @param {String} input The string of Unicode symbols.\r\n\t\t * @returns {String} The resulting Punycode string of ASCII-only symbols.\r\n\t\t */\r\n\t\tfunction encode(input) {\r\n\t\t\tvar n,\r\n\t\t\t delta,\r\n\t\t\t handledCPCount,\r\n\t\t\t basicLength,\r\n\t\t\t bias,\r\n\t\t\t j,\r\n\t\t\t m,\r\n\t\t\t q,\r\n\t\t\t k,\r\n\t\t\t t,\r\n\t\t\t currentValue,\r\n\t\t\t output = [],\r\n\t\t\t /** `inputLength` will hold the number of code points in `input`. */\r\n\t\t\t inputLength,\r\n\t\t\t /** Cached calculation results */\r\n\t\t\t handledCPCountPlusOne,\r\n\t\t\t baseMinusT,\r\n\t\t\t qMinusT;\r\n\r\n\t\t\t// Convert the input in UCS-2 to Unicode\r\n\t\t\tinput = ucs2decode(input);\r\n\r\n\t\t\t// Cache the length\r\n\t\t\tinputLength = input.length;\r\n\r\n\t\t\t// Initialize the state\r\n\t\t\tn = initialN;\r\n\t\t\tdelta = 0;\r\n\t\t\tbias = initialBias;\r\n\r\n\t\t\t// Handle the basic code points\r\n\t\t\tfor (j = 0; j < inputLength; ++j) {\r\n\t\t\t\tcurrentValue = input[j];\r\n\t\t\t\tif (currentValue < 0x80) {\r\n\t\t\t\t\toutput.push(stringFromCharCode(currentValue));\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\thandledCPCount = basicLength = output.length;\r\n\r\n\t\t\t// `handledCPCount` is the number of code points that have been handled;\r\n\t\t\t// `basicLength` is the number of basic code points.\r\n\r\n\t\t\t// Finish the basic string - if it is not empty - with a delimiter\r\n\t\t\tif (basicLength) {\r\n\t\t\t\toutput.push(delimiter);\r\n\t\t\t}\r\n\r\n\t\t\t// Main encoding loop:\r\n\t\t\twhile (handledCPCount < inputLength) {\r\n\r\n\t\t\t\t// All non-basic code points < n have been handled already. Find the next\r\n\t\t\t\t// larger one:\r\n\t\t\t\tfor (m = maxInt, j = 0; j < inputLength; ++j) {\r\n\t\t\t\t\tcurrentValue = input[j];\r\n\t\t\t\t\tif (currentValue >= n && currentValue < m) {\r\n\t\t\t\t\t\tm = currentValue;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// Increase `delta` enough to advance the decoder's state to ,\r\n\t\t\t\t// but guard against overflow\r\n\t\t\t\thandledCPCountPlusOne = handledCPCount + 1;\r\n\t\t\t\tif (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) {\r\n\t\t\t\t\terror('overflow');\r\n\t\t\t\t}\r\n\r\n\t\t\t\tdelta += (m - n) * handledCPCountPlusOne;\r\n\t\t\t\tn = m;\r\n\r\n\t\t\t\tfor (j = 0; j < inputLength; ++j) {\r\n\t\t\t\t\tcurrentValue = input[j];\r\n\r\n\t\t\t\t\tif (currentValue < n && ++delta > maxInt) {\r\n\t\t\t\t\t\terror('overflow');\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (currentValue == n) {\r\n\t\t\t\t\t\t// Represent delta as a generalized variable-length integer\r\n\t\t\t\t\t\tfor (q = delta, k = base; /* no condition */; k += base) {\r\n\t\t\t\t\t\t\tt = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);\r\n\t\t\t\t\t\t\tif (q < t) {\r\n\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tqMinusT = q - t;\r\n\t\t\t\t\t\t\tbaseMinusT = base - t;\r\n\t\t\t\t\t\t\toutput.push(\r\n\t\t\t\t\t\t\t\tstringFromCharCode(digitToBasic(t + qMinusT % baseMinusT, 0))\r\n\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\tq = floor(qMinusT / baseMinusT);\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\toutput.push(stringFromCharCode(digitToBasic(q, 0)));\r\n\t\t\t\t\t\tbias = adapt(delta, handledCPCountPlusOne, handledCPCount == basicLength);\r\n\t\t\t\t\t\tdelta = 0;\r\n\t\t\t\t\t\t++handledCPCount;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t++delta;\r\n\t\t\t\t++n;\r\n\r\n\t\t\t}\r\n\t\t\treturn output.join('');\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * Converts a Punycode string representing a domain name or an email address\r\n\t\t * to Unicode. Only the Punycoded parts of the input will be converted, i.e.\r\n\t\t * it doesn't matter if you call it on a string that has already been\r\n\t\t * converted to Unicode.\r\n\t\t * @memberOf punycode\r\n\t\t * @param {String} input The Punycoded domain name or email address to\r\n\t\t * convert to Unicode.\r\n\t\t * @returns {String} The Unicode representation of the given Punycode\r\n\t\t * string.\r\n\t\t */\r\n\t\tfunction toUnicode(input) {\r\n\t\t\treturn mapDomain(input, function(string) {\r\n\t\t\t\treturn regexPunycode.test(string)\r\n\t\t\t\t\t? decode(string.slice(4).toLowerCase())\r\n\t\t\t\t\t: string;\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * Converts a Unicode string representing a domain name or an email address to\r\n\t\t * Punycode. Only the non-ASCII parts of the domain name will be converted,\r\n\t\t * i.e. it doesn't matter if you call it with a domain that's already in\r\n\t\t * ASCII.\r\n\t\t * @memberOf punycode\r\n\t\t * @param {String} input The domain name or email address to convert, as a\r\n\t\t * Unicode string.\r\n\t\t * @returns {String} The Punycode representation of the given domain name or\r\n\t\t * email address.\r\n\t\t */\r\n\t\tfunction toASCII(input) {\r\n\t\t\treturn mapDomain(input, function(string) {\r\n\t\t\t\treturn regexNonASCII.test(string)\r\n\t\t\t\t\t? 'xn--' + encode(string)\r\n\t\t\t\t\t: string;\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\t/*--------------------------------------------------------------------------*/\r\n\r\n\t\t/** Define the public API */\r\n\t\tpunycode = {\r\n\t\t\t/**\r\n\t\t\t * A string representing the current Punycode.js version number.\r\n\t\t\t * @memberOf punycode\r\n\t\t\t * @type String\r\n\t\t\t */\r\n\t\t\t'version': '1.3.2',\r\n\t\t\t/**\r\n\t\t\t * An object of methods to convert from JavaScript's internal character\r\n\t\t\t * representation (UCS-2) to Unicode code points, and back.\r\n\t\t\t * @see \r\n\t\t\t * @memberOf punycode\r\n\t\t\t * @type Object\r\n\t\t\t */\r\n\t\t\t'ucs2': {\r\n\t\t\t\t'decode': ucs2decode,\r\n\t\t\t\t'encode': ucs2encode\r\n\t\t\t},\r\n\t\t\t'decode': decode,\r\n\t\t\t'encode': encode,\r\n\t\t\t'toASCII': toASCII,\r\n\t\t\t'toUnicode': toUnicode\r\n\t\t};\r\n\r\n\t\t/** Expose `punycode` */\r\n\t\t// Some AMD build optimizers, like r.js, check for specific condition patterns\r\n\t\t// like the following:\r\n\t\tif (\r\n\t\t\ttrue\r\n\t\t) {\r\n\t\t\t!(__WEBPACK_AMD_DEFINE_RESULT__ = function() {\r\n\t\t\t\treturn punycode;\r\n\t\t\t}.call(exports, __webpack_require__, exports, module), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\r\n\t\t} else if (freeExports && freeModule) {\r\n\t\t\tif (module.exports == freeExports) { // in Node.js or RingoJS v0.8.0+\r\n\t\t\t\tfreeModule.exports = punycode;\r\n\t\t\t} else { // in Narwhal or RingoJS v0.7.0-\r\n\t\t\t\tfor (key in punycode) {\r\n\t\t\t\t\tpunycode.hasOwnProperty(key) && (freeExports[key] = punycode[key]);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t} else { // in Rhino or a web browser\r\n\t\t\troot.punycode = punycode;\r\n\t\t}\r\n\r\n\t}(this));\r\n\r\n\t/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(6)(module), (function() { return this; }())))\r\n\r\n/***/ },\r\n/* 6 */\r\n/***/ function(module, exports) {\r\n\r\n\tmodule.exports = function(module) {\r\n\t\tif(!module.webpackPolyfill) {\r\n\t\t\tmodule.deprecate = function() {};\r\n\t\t\tmodule.paths = [];\r\n\t\t\t// module.parent = undefined by default\r\n\t\t\tmodule.children = [];\r\n\t\t\tmodule.webpackPolyfill = 1;\r\n\t\t}\r\n\t\treturn module;\r\n\t}\r\n\r\n\r\n/***/ },\r\n/* 7 */\r\n/***/ function(module, exports, __webpack_require__) {\r\n\r\n\t'use strict';\r\n\r\n\texports.decode = exports.parse = __webpack_require__(8);\r\n\texports.encode = exports.stringify = __webpack_require__(9);\r\n\r\n\r\n/***/ },\r\n/* 8 */\r\n/***/ function(module, exports) {\r\n\r\n\t// Copyright Joyent, Inc. and other Node contributors.\r\n\t//\r\n\t// Permission is hereby granted, free of charge, to any person obtaining a\r\n\t// copy of this software and associated documentation files (the\r\n\t// \"Software\"), to deal in the Software without restriction, including\r\n\t// without limitation the rights to use, copy, modify, merge, publish,\r\n\t// distribute, sublicense, and/or sell copies of the Software, and to permit\r\n\t// persons to whom the Software is furnished to do so, subject to the\r\n\t// following conditions:\r\n\t//\r\n\t// The above copyright notice and this permission notice shall be included\r\n\t// in all copies or substantial portions of the Software.\r\n\t//\r\n\t// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\r\n\t// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\r\n\t// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\r\n\t// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\r\n\t// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\r\n\t// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\r\n\t// USE OR OTHER DEALINGS IN THE SOFTWARE.\r\n\r\n\t'use strict';\r\n\r\n\t// If obj.hasOwnProperty has been overridden, then calling\r\n\t// obj.hasOwnProperty(prop) will break.\r\n\t// See: https://github.com/joyent/node/issues/1707\r\n\tfunction hasOwnProperty(obj, prop) {\r\n\t return Object.prototype.hasOwnProperty.call(obj, prop);\r\n\t}\r\n\r\n\tmodule.exports = function(qs, sep, eq, options) {\r\n\t sep = sep || '&';\r\n\t eq = eq || '=';\r\n\t var obj = {};\r\n\r\n\t if (typeof qs !== 'string' || qs.length === 0) {\r\n\t return obj;\r\n\t }\r\n\r\n\t var regexp = /\\+/g;\r\n\t qs = qs.split(sep);\r\n\r\n\t var maxKeys = 1000;\r\n\t if (options && typeof options.maxKeys === 'number') {\r\n\t maxKeys = options.maxKeys;\r\n\t }\r\n\r\n\t var len = qs.length;\r\n\t // maxKeys <= 0 means that we should not limit keys count\r\n\t if (maxKeys > 0 && len > maxKeys) {\r\n\t len = maxKeys;\r\n\t }\r\n\r\n\t for (var i = 0; i < len; ++i) {\r\n\t var x = qs[i].replace(regexp, '%20'),\r\n\t idx = x.indexOf(eq),\r\n\t kstr, vstr, k, v;\r\n\r\n\t if (idx >= 0) {\r\n\t kstr = x.substr(0, idx);\r\n\t vstr = x.substr(idx + 1);\r\n\t } else {\r\n\t kstr = x;\r\n\t vstr = '';\r\n\t }\r\n\r\n\t k = decodeURIComponent(kstr);\r\n\t v = decodeURIComponent(vstr);\r\n\r\n\t if (!hasOwnProperty(obj, k)) {\r\n\t obj[k] = v;\r\n\t } else if (Array.isArray(obj[k])) {\r\n\t obj[k].push(v);\r\n\t } else {\r\n\t obj[k] = [obj[k], v];\r\n\t }\r\n\t }\r\n\r\n\t return obj;\r\n\t};\r\n\r\n\r\n/***/ },\r\n/* 9 */\r\n/***/ function(module, exports) {\r\n\r\n\t// Copyright Joyent, Inc. and other Node contributors.\r\n\t//\r\n\t// Permission is hereby granted, free of charge, to any person obtaining a\r\n\t// copy of this software and associated documentation files (the\r\n\t// \"Software\"), to deal in the Software without restriction, including\r\n\t// without limitation the rights to use, copy, modify, merge, publish,\r\n\t// distribute, sublicense, and/or sell copies of the Software, and to permit\r\n\t// persons to whom the Software is furnished to do so, subject to the\r\n\t// following conditions:\r\n\t//\r\n\t// The above copyright notice and this permission notice shall be included\r\n\t// in all copies or substantial portions of the Software.\r\n\t//\r\n\t// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\r\n\t// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\r\n\t// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\r\n\t// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\r\n\t// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\r\n\t// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\r\n\t// USE OR OTHER DEALINGS IN THE SOFTWARE.\r\n\r\n\t'use strict';\r\n\r\n\tvar stringifyPrimitive = function(v) {\r\n\t switch (typeof v) {\r\n\t case 'string':\r\n\t return v;\r\n\r\n\t case 'boolean':\r\n\t return v ? 'true' : 'false';\r\n\r\n\t case 'number':\r\n\t return isFinite(v) ? v : '';\r\n\r\n\t default:\r\n\t return '';\r\n\t }\r\n\t};\r\n\r\n\tmodule.exports = function(obj, sep, eq, name) {\r\n\t sep = sep || '&';\r\n\t eq = eq || '=';\r\n\t if (obj === null) {\r\n\t obj = undefined;\r\n\t }\r\n\r\n\t if (typeof obj === 'object') {\r\n\t return Object.keys(obj).map(function(k) {\r\n\t var ks = encodeURIComponent(stringifyPrimitive(k)) + eq;\r\n\t if (Array.isArray(obj[k])) {\r\n\t return obj[k].map(function(v) {\r\n\t return ks + encodeURIComponent(stringifyPrimitive(v));\r\n\t }).join(sep);\r\n\t } else {\r\n\t return ks + encodeURIComponent(stringifyPrimitive(obj[k]));\r\n\t }\r\n\t }).join(sep);\r\n\r\n\t }\r\n\r\n\t if (!name) return '';\r\n\t return encodeURIComponent(stringifyPrimitive(name)) + eq +\r\n\t encodeURIComponent(stringifyPrimitive(obj));\r\n\t};\r\n\r\n\r\n/***/ },\r\n/* 10 */\r\n/***/ function(module, exports) {\r\n\r\n\t'use strict';\r\n\r\n\tmodule.exports = function equal(a, b) {\r\n\t if (a === b) return true;\r\n\r\n\t var arrA = Array.isArray(a)\r\n\t , arrB = Array.isArray(b)\r\n\t , i;\r\n\r\n\t if (arrA && arrB) {\r\n\t if (a.length != b.length) return false;\r\n\t for (i = 0; i < a.length; i++)\r\n\t if (!equal(a[i], b[i])) return false;\r\n\t return true;\r\n\t }\r\n\r\n\t if (arrA != arrB) return false;\r\n\r\n\t if (a && b && typeof a === 'object' && typeof b === 'object') {\r\n\t var keys = Object.keys(a);\r\n\r\n\t if (keys.length !== Object.keys(b).length) return false;\r\n\r\n\t for (i = 0; i < keys.length; i++)\r\n\t if (b[keys[i]] === undefined) return false;\r\n\r\n\t for (i = 0; i < keys.length; i++)\r\n\t if(!equal(a[keys[i]], b[keys[i]])) return false;\r\n\r\n\t return true;\r\n\t }\r\n\r\n\t return false;\r\n\t};\r\n\r\n\r\n/***/ },\r\n/* 11 */\r\n/***/ function(module, exports, __webpack_require__) {\r\n\r\n\t'use strict';\r\n\r\n\r\n\tmodule.exports = {\r\n\t copy: copy,\r\n\t checkDataType: checkDataType,\r\n\t checkDataTypes: checkDataTypes,\r\n\t coerceToTypes: coerceToTypes,\r\n\t toHash: toHash,\r\n\t getProperty: getProperty,\r\n\t escapeQuotes: escapeQuotes,\r\n\t ucs2length: ucs2length,\r\n\t varOccurences: varOccurences,\r\n\t varReplace: varReplace,\r\n\t cleanUpCode: cleanUpCode,\r\n\t cleanUpVarErrors: cleanUpVarErrors,\r\n\t schemaHasRules: schemaHasRules,\r\n\t stableStringify: __webpack_require__(12),\r\n\t toQuotedString: toQuotedString,\r\n\t getPathExpr: getPathExpr,\r\n\t getPath: getPath,\r\n\t getData: getData,\r\n\t unescapeFragment: unescapeFragment,\r\n\t escapeFragment: escapeFragment,\r\n\t escapeJsonPointer: escapeJsonPointer\r\n\t};\r\n\r\n\r\n\tfunction copy(o, to) {\r\n\t to = to || {};\r\n\t for (var key in o) to[key] = o[key];\r\n\t return to;\r\n\t}\r\n\r\n\r\n\tfunction checkDataType(dataType, data, negate) {\r\n\t var EQUAL = negate ? ' !== ' : ' === '\r\n\t , AND = negate ? ' || ' : ' && '\r\n\t , OK = negate ? '!' : ''\r\n\t , NOT = negate ? '' : '!';\r\n\t switch (dataType) {\r\n\t case 'null': return data + EQUAL + 'null';\r\n\t case 'array': return OK + 'Array.isArray(' + data + ')';\r\n\t case 'object': return '(' + OK + data + AND +\r\n\t 'typeof ' + data + EQUAL + '\"object\"' + AND +\r\n\t NOT + 'Array.isArray(' + data + '))';\r\n\t case 'integer': return '(typeof ' + data + EQUAL + '\"number\"' + AND +\r\n\t NOT + '(' + data + ' % 1))';\r\n\t default: return 'typeof ' + data + EQUAL + '\"' + dataType + '\"';\r\n\t }\r\n\t}\r\n\r\n\r\n\tfunction checkDataTypes(dataTypes, data) {\r\n\t switch (dataTypes.length) {\r\n\t case 1: return checkDataType(dataTypes[0], data, true);\r\n\t default:\r\n\t var code = '';\r\n\t var types = toHash(dataTypes);\r\n\t if (types.array && types.object) {\r\n\t code = types.null ? '(': '(!' + data + ' || ';\r\n\t code += 'typeof ' + data + ' !== \"object\")';\r\n\t delete types.null;\r\n\t delete types.array;\r\n\t delete types.object;\r\n\t }\r\n\t if (types.number) delete types.integer;\r\n\t for (var t in types)\r\n\t code += (code ? ' && ' : '' ) + checkDataType(t, data, true);\r\n\r\n\t return code;\r\n\t }\r\n\t}\r\n\r\n\r\n\tvar COERCE_TO_TYPES = toHash([ 'string', 'number', 'integer', 'boolean', 'null' ]);\r\n\tfunction coerceToTypes(dataTypes) {\r\n\t if (Array.isArray(dataTypes)) {\r\n\t var types = [];\r\n\t for (var i=0; i= 0xD800 && value <= 0xDBFF && pos < len) {\r\n\t // high surrogate, and there is a next character\r\n\t value = str.charCodeAt(pos);\r\n\t if ((value & 0xFC00) == 0xDC00) pos++; // low surrogate\r\n\t }\r\n\t }\r\n\t return length;\r\n\t}\r\n\r\n\r\n\tfunction varOccurences(str, dataVar) {\r\n\t dataVar += '[^0-9]';\r\n\t var matches = str.match(new RegExp(dataVar, 'g'));\r\n\t return matches ? matches.length : 0;\r\n\t}\r\n\r\n\r\n\tfunction varReplace(str, dataVar, expr) {\r\n\t dataVar += '([^0-9])';\r\n\t expr = expr.replace(/\\$/g, '$$$$');\r\n\t return str.replace(new RegExp(dataVar, 'g'), expr + '$1');\r\n\t}\r\n\r\n\r\n\tvar EMPTY_ELSE = /else\\s*{\\s*}/g\r\n\t , EMPTY_IF_NO_ELSE = /if\\s*\\([^)]+\\)\\s*\\{\\s*\\}(?!\\s*else)/g\r\n\t , EMPTY_IF_WITH_ELSE = /if\\s*\\(([^)]+)\\)\\s*\\{\\s*\\}\\s*else(?!\\s*if)/g;\r\n\tfunction cleanUpCode(out) {\r\n\t return out.replace(EMPTY_ELSE, '')\r\n\t .replace(EMPTY_IF_NO_ELSE, '')\r\n\t .replace(EMPTY_IF_WITH_ELSE, 'if (!($1))');\r\n\t}\r\n\r\n\r\n\tvar ERRORS_REGEXP = /[^v\\.]errors/g\r\n\t , REMOVE_ERRORS = /var errors = 0;|var vErrors = null;|validate.errors = vErrors;/g\r\n\t , REMOVE_ERRORS_ASYNC = /var errors = 0;|var vErrors = null;/g\r\n\t , RETURN_VALID = 'return errors === 0;'\r\n\t , RETURN_TRUE = 'validate.errors = null; return true;'\r\n\t , RETURN_ASYNC = /if \\(errors === 0\\) return true;\\s*else throw new ValidationError\\(vErrors\\);/\r\n\t , RETURN_TRUE_ASYNC = 'return true;';\r\n\r\n\tfunction cleanUpVarErrors(out, async) {\r\n\t var matches = out.match(ERRORS_REGEXP);\r\n\t if (!matches || matches.length !== 2) return out;\r\n\t return async\r\n\t ? out.replace(REMOVE_ERRORS_ASYNC, '')\r\n\t .replace(RETURN_ASYNC, RETURN_TRUE_ASYNC)\r\n\t : out.replace(REMOVE_ERRORS, '')\r\n\t .replace(RETURN_VALID, RETURN_TRUE);\r\n\t}\r\n\r\n\r\n\tfunction schemaHasRules(schema, rules) {\r\n\t for (var key in schema) if (rules[key]) return true;\r\n\t}\r\n\r\n\r\n\tfunction toQuotedString(str) {\r\n\t return '\\'' + escapeQuotes(str) + '\\'';\r\n\t}\r\n\r\n\r\n\tfunction getPathExpr(currentPath, expr, jsonPointers, isNumber) {\r\n\t var path = jsonPointers // false by default\r\n\t ? '\\'/\\' + ' + expr + (isNumber ? '' : '.replace(/~/g, \\'~0\\').replace(/\\\\//g, \\'~1\\')')\r\n\t : (isNumber ? '\\'[\\' + ' + expr + ' + \\']\\'' : '\\'[\\\\\\'\\' + ' + expr + ' + \\'\\\\\\']\\'');\r\n\t return joinPaths(currentPath, path);\r\n\t}\r\n\r\n\r\n\tfunction getPath(currentPath, prop, jsonPointers) {\r\n\t var path = jsonPointers // false by default\r\n\t ? toQuotedString('/' + escapeJsonPointer(prop))\r\n\t : toQuotedString(getProperty(prop));\r\n\t return joinPaths(currentPath, path);\r\n\t}\r\n\r\n\r\n\tvar RELATIVE_JSON_POINTER = /^([0-9]+)(#|\\/(?:[^~]|~0|~1)*)?$/;\r\n\tfunction getData($data, lvl, paths) {\r\n\t var matches = $data.match(RELATIVE_JSON_POINTER);\r\n\t if (!matches) throw new Error('Invalid relative JSON-pointer: ' + $data);\r\n\t var up = +matches[1];\r\n\t var jsonPointer = matches[2];\r\n\t if (jsonPointer == '#') {\r\n\t if (up >= lvl) throw new Error('Cannot access property/index ' + up + ' levels up, current level is ' + lvl);\r\n\t return paths[lvl - up];\r\n\t }\r\n\r\n\t if (up > lvl) throw new Error('Cannot access data ' + up + ' levels up, current level is ' + lvl);\r\n\t var data = 'data' + ((lvl - up) || '');\r\n\t if (!jsonPointer) return data;\r\n\r\n\t var expr = data;\r\n\t var segments = jsonPointer.split('/');\r\n\t for (var i=0; i= '0' && ch <= '9') {\r\n\t string += ch;\r\n\t next();\r\n\t }\r\n\t if (ch === '.') {\r\n\t string += '.';\r\n\t while (next() && ch >= '0' && ch <= '9') {\r\n\t string += ch;\r\n\t }\r\n\t }\r\n\t if (ch === 'e' || ch === 'E') {\r\n\t string += ch;\r\n\t next();\r\n\t if (ch === '-' || ch === '+') {\r\n\t string += ch;\r\n\t next();\r\n\t }\r\n\t while (ch >= '0' && ch <= '9') {\r\n\t string += ch;\r\n\t next();\r\n\t }\r\n\t }\r\n\t number = +string;\r\n\t if (!isFinite(number)) {\r\n\t error(\"Bad number\");\r\n\t } else {\r\n\t return number;\r\n\t }\r\n\t },\r\n\t \r\n\t string = function () {\r\n\t // Parse a string value.\r\n\t var hex,\r\n\t i,\r\n\t string = '',\r\n\t uffff;\r\n\t \r\n\t // When parsing for string values, we must look for \" and \\ characters.\r\n\t if (ch === '\"') {\r\n\t while (next()) {\r\n\t if (ch === '\"') {\r\n\t next();\r\n\t return string;\r\n\t } else if (ch === '\\\\') {\r\n\t next();\r\n\t if (ch === 'u') {\r\n\t uffff = 0;\r\n\t for (i = 0; i < 4; i += 1) {\r\n\t hex = parseInt(next(), 16);\r\n\t if (!isFinite(hex)) {\r\n\t break;\r\n\t }\r\n\t uffff = uffff * 16 + hex;\r\n\t }\r\n\t string += String.fromCharCode(uffff);\r\n\t } else if (typeof escapee[ch] === 'string') {\r\n\t string += escapee[ch];\r\n\t } else {\r\n\t break;\r\n\t }\r\n\t } else {\r\n\t string += ch;\r\n\t }\r\n\t }\r\n\t }\r\n\t error(\"Bad string\");\r\n\t },\r\n\r\n\t white = function () {\r\n\r\n\t// Skip whitespace.\r\n\r\n\t while (ch && ch <= ' ') {\r\n\t next();\r\n\t }\r\n\t },\r\n\r\n\t word = function () {\r\n\r\n\t// true, false, or null.\r\n\r\n\t switch (ch) {\r\n\t case 't':\r\n\t next('t');\r\n\t next('r');\r\n\t next('u');\r\n\t next('e');\r\n\t return true;\r\n\t case 'f':\r\n\t next('f');\r\n\t next('a');\r\n\t next('l');\r\n\t next('s');\r\n\t next('e');\r\n\t return false;\r\n\t case 'n':\r\n\t next('n');\r\n\t next('u');\r\n\t next('l');\r\n\t next('l');\r\n\t return null;\r\n\t }\r\n\t error(\"Unexpected '\" + ch + \"'\");\r\n\t },\r\n\r\n\t value, // Place holder for the value function.\r\n\r\n\t array = function () {\r\n\r\n\t// Parse an array value.\r\n\r\n\t var array = [];\r\n\r\n\t if (ch === '[') {\r\n\t next('[');\r\n\t white();\r\n\t if (ch === ']') {\r\n\t next(']');\r\n\t return array; // empty array\r\n\t }\r\n\t while (ch) {\r\n\t array.push(value());\r\n\t white();\r\n\t if (ch === ']') {\r\n\t next(']');\r\n\t return array;\r\n\t }\r\n\t next(',');\r\n\t white();\r\n\t }\r\n\t }\r\n\t error(\"Bad array\");\r\n\t },\r\n\r\n\t object = function () {\r\n\r\n\t// Parse an object value.\r\n\r\n\t var key,\r\n\t object = {};\r\n\r\n\t if (ch === '{') {\r\n\t next('{');\r\n\t white();\r\n\t if (ch === '}') {\r\n\t next('}');\r\n\t return object; // empty object\r\n\t }\r\n\t while (ch) {\r\n\t key = string();\r\n\t white();\r\n\t next(':');\r\n\t if (Object.hasOwnProperty.call(object, key)) {\r\n\t error('Duplicate key \"' + key + '\"');\r\n\t }\r\n\t object[key] = value();\r\n\t white();\r\n\t if (ch === '}') {\r\n\t next('}');\r\n\t return object;\r\n\t }\r\n\t next(',');\r\n\t white();\r\n\t }\r\n\t }\r\n\t error(\"Bad object\");\r\n\t };\r\n\r\n\tvalue = function () {\r\n\r\n\t// Parse a JSON value. It could be an object, an array, a string, a number,\r\n\t// or a word.\r\n\r\n\t white();\r\n\t switch (ch) {\r\n\t case '{':\r\n\t return object();\r\n\t case '[':\r\n\t return array();\r\n\t case '\"':\r\n\t return string();\r\n\t case '-':\r\n\t return number();\r\n\t default:\r\n\t return ch >= '0' && ch <= '9' ? number() : word();\r\n\t }\r\n\t};\r\n\r\n\t// Return the json_parse function. It will have access to all of the above\r\n\t// functions and variables.\r\n\r\n\tmodule.exports = function (source, reviver) {\r\n\t var result;\r\n\t \r\n\t text = source;\r\n\t at = 0;\r\n\t ch = ' ';\r\n\t result = value();\r\n\t white();\r\n\t if (ch) {\r\n\t error(\"Syntax error\");\r\n\t }\r\n\r\n\t // If there is a reviver function, we recursively walk the new structure,\r\n\t // passing each name/value pair to the reviver function for possible\r\n\t // transformation, starting with a temporary root object that holds the result\r\n\t // in an empty key. If there is not a reviver function, we simply return the\r\n\t // result.\r\n\r\n\t return typeof reviver === 'function' ? (function walk(holder, key) {\r\n\t var k, v, value = holder[key];\r\n\t if (value && typeof value === 'object') {\r\n\t for (k in value) {\r\n\t if (Object.prototype.hasOwnProperty.call(value, k)) {\r\n\t v = walk(value, k);\r\n\t if (v !== undefined) {\r\n\t value[k] = v;\r\n\t } else {\r\n\t delete value[k];\r\n\t }\r\n\t }\r\n\t }\r\n\t }\r\n\t return reviver.call(holder, key, value);\r\n\t }({'': result}, '')) : result;\r\n\t};\r\n\r\n\r\n/***/ },\r\n/* 15 */\r\n/***/ function(module, exports) {\r\n\r\n\tvar cx = /[\\u0000\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]/g,\r\n\t escapable = /[\\\\\\\"\\x00-\\x1f\\x7f-\\x9f\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]/g,\r\n\t gap,\r\n\t indent,\r\n\t meta = { // table of character substitutions\r\n\t '\\b': '\\\\b',\r\n\t '\\t': '\\\\t',\r\n\t '\\n': '\\\\n',\r\n\t '\\f': '\\\\f',\r\n\t '\\r': '\\\\r',\r\n\t '\"' : '\\\\\"',\r\n\t '\\\\': '\\\\\\\\'\r\n\t },\r\n\t rep;\r\n\r\n\tfunction quote(string) {\r\n\t // If the string contains no control characters, no quote characters, and no\r\n\t // backslash characters, then we can safely slap some quotes around it.\r\n\t // Otherwise we must also replace the offending characters with safe escape\r\n\t // sequences.\r\n\t \r\n\t escapable.lastIndex = 0;\r\n\t return escapable.test(string) ? '\"' + string.replace(escapable, function (a) {\r\n\t var c = meta[a];\r\n\t return typeof c === 'string' ? c :\r\n\t '\\\\u' + ('0000' + a.charCodeAt(0).toString(16)).slice(-4);\r\n\t }) + '\"' : '\"' + string + '\"';\r\n\t}\r\n\r\n\tfunction str(key, holder) {\r\n\t // Produce a string from holder[key].\r\n\t var i, // The loop counter.\r\n\t k, // The member key.\r\n\t v, // The member value.\r\n\t length,\r\n\t mind = gap,\r\n\t partial,\r\n\t value = holder[key];\r\n\t \r\n\t // If the value has a toJSON method, call it to obtain a replacement value.\r\n\t if (value && typeof value === 'object' &&\r\n\t typeof value.toJSON === 'function') {\r\n\t value = value.toJSON(key);\r\n\t }\r\n\t \r\n\t // If we were called with a replacer function, then call the replacer to\r\n\t // obtain a replacement value.\r\n\t if (typeof rep === 'function') {\r\n\t value = rep.call(holder, key, value);\r\n\t }\r\n\t \r\n\t // What happens next depends on the value's type.\r\n\t switch (typeof value) {\r\n\t case 'string':\r\n\t return quote(value);\r\n\t \r\n\t case 'number':\r\n\t // JSON numbers must be finite. Encode non-finite numbers as null.\r\n\t return isFinite(value) ? String(value) : 'null';\r\n\t \r\n\t case 'boolean':\r\n\t case 'null':\r\n\t // If the value is a boolean or null, convert it to a string. Note:\r\n\t // typeof null does not produce 'null'. The case is included here in\r\n\t // the remote chance that this gets fixed someday.\r\n\t return String(value);\r\n\t \r\n\t case 'object':\r\n\t if (!value) return 'null';\r\n\t gap += indent;\r\n\t partial = [];\r\n\t \r\n\t // Array.isArray\r\n\t if (Object.prototype.toString.apply(value) === '[object Array]') {\r\n\t length = value.length;\r\n\t for (i = 0; i < length; i += 1) {\r\n\t partial[i] = str(i, value) || 'null';\r\n\t }\r\n\t \r\n\t // Join all of the elements together, separated with commas, and\r\n\t // wrap them in brackets.\r\n\t v = partial.length === 0 ? '[]' : gap ?\r\n\t '[\\n' + gap + partial.join(',\\n' + gap) + '\\n' + mind + ']' :\r\n\t '[' + partial.join(',') + ']';\r\n\t gap = mind;\r\n\t return v;\r\n\t }\r\n\t \r\n\t // If the replacer is an array, use it to select the members to be\r\n\t // stringified.\r\n\t if (rep && typeof rep === 'object') {\r\n\t length = rep.length;\r\n\t for (i = 0; i < length; i += 1) {\r\n\t k = rep[i];\r\n\t if (typeof k === 'string') {\r\n\t v = str(k, value);\r\n\t if (v) {\r\n\t partial.push(quote(k) + (gap ? ': ' : ':') + v);\r\n\t }\r\n\t }\r\n\t }\r\n\t }\r\n\t else {\r\n\t // Otherwise, iterate through all of the keys in the object.\r\n\t for (k in value) {\r\n\t if (Object.prototype.hasOwnProperty.call(value, k)) {\r\n\t v = str(k, value);\r\n\t if (v) {\r\n\t partial.push(quote(k) + (gap ? ': ' : ':') + v);\r\n\t }\r\n\t }\r\n\t }\r\n\t }\r\n\t \r\n\t // Join all of the member texts together, separated with commas,\r\n\t // and wrap them in braces.\r\n\r\n\t v = partial.length === 0 ? '{}' : gap ?\r\n\t '{\\n' + gap + partial.join(',\\n' + gap) + '\\n' + mind + '}' :\r\n\t '{' + partial.join(',') + '}';\r\n\t gap = mind;\r\n\t return v;\r\n\t }\r\n\t}\r\n\r\n\tmodule.exports = function (value, replacer, space) {\r\n\t var i;\r\n\t gap = '';\r\n\t indent = '';\r\n\t \r\n\t // If the space parameter is a number, make an indent string containing that\r\n\t // many spaces.\r\n\t if (typeof space === 'number') {\r\n\t for (i = 0; i < space; i += 1) {\r\n\t indent += ' ';\r\n\t }\r\n\t }\r\n\t // If the space parameter is a string, it will be used as the indent string.\r\n\t else if (typeof space === 'string') {\r\n\t indent = space;\r\n\t }\r\n\r\n\t // If there is a replacer, it must be a function or an array.\r\n\t // Otherwise, throw an error.\r\n\t rep = replacer;\r\n\t if (replacer && typeof replacer !== 'function'\r\n\t && (typeof replacer !== 'object' || typeof replacer.length !== 'number')) {\r\n\t throw new Error('JSON.stringify');\r\n\t }\r\n\t \r\n\t // Make a fake root object containing our value under the key of ''.\r\n\t // Return the result of stringifying the value.\r\n\t return str('', {'': value});\r\n\t};\r\n\r\n\r\n/***/ },\r\n/* 16 */\r\n/***/ function(module, exports, __webpack_require__) {\r\n\r\n\t'use strict';\r\n\r\n\tvar util = __webpack_require__(11);\r\n\r\n\tmodule.exports = SchemaObject;\r\n\r\n\tfunction SchemaObject(obj) {\r\n\t util.copy(obj, this);\r\n\t}\r\n\r\n\r\n/***/ },\r\n/* 17 */\r\n/***/ function(module, exports, __webpack_require__) {\r\n\r\n\t'use strict';\r\n\r\n\tmodule.exports = {\r\n\t setup: setupAsync,\r\n\t compile: compileAsync\r\n\t};\r\n\r\n\r\n\tvar util = __webpack_require__(11);\r\n\r\n\tvar ASYNC = {\r\n\t '*': checkGenerators,\r\n\t 'co*': checkGenerators,\r\n\t 'es7': checkAsyncFunction\r\n\t};\r\n\r\n\tvar TRANSPILE = {\r\n\t 'nodent': getNodent,\r\n\t 'regenerator': getRegenerator\r\n\t};\r\n\r\n\tvar MODES = [\r\n\t { async: 'co*' },\r\n\t { async: 'es7', transpile: 'nodent' },\r\n\t { async: 'co*', transpile: 'regenerator' }\r\n\t];\r\n\r\n\r\n\tvar regenerator, nodent;\r\n\r\n\r\n\tfunction setupAsync(opts, required) {\r\n\t if (required !== false) required = true;\r\n\t var async = opts.async\r\n\t , transpile = opts.transpile\r\n\t , check;\r\n\r\n\t switch (typeof transpile) {\r\n\t case 'string':\r\n\t var get = TRANSPILE[transpile];\r\n\t if (!get) throw new Error('bad transpiler: ' + transpile);\r\n\t return (opts._transpileFunc = get(opts, required));\r\n\t case 'undefined':\r\n\t case 'boolean':\r\n\t if (typeof async == 'string') {\r\n\t check = ASYNC[async];\r\n\t if (!check) throw new Error('bad async mode: ' + async);\r\n\t return (opts.transpile = check(opts, required));\r\n\t }\r\n\r\n\t for (var i=0; i 2) res = slice.call(arguments, 1);\r\n\t resolve(res);\r\n\t });\r\n\t });\r\n\t}\r\n\r\n\t/**\r\n\t * Convert an array of \"yieldables\" to a promise.\r\n\t * Uses `Promise.all()` internally.\r\n\t *\r\n\t * @param {Array} obj\r\n\t * @return {Promise}\r\n\t * @api private\r\n\t */\r\n\r\n\tfunction arrayToPromise(obj) {\r\n\t return Promise.all(obj.map(toPromise, this));\r\n\t}\r\n\r\n\t/**\r\n\t * Convert an object of \"yieldables\" to a promise.\r\n\t * Uses `Promise.all()` internally.\r\n\t *\r\n\t * @param {Object} obj\r\n\t * @return {Promise}\r\n\t * @api private\r\n\t */\r\n\r\n\tfunction objectToPromise(obj){\r\n\t var results = new obj.constructor();\r\n\t var keys = Object.keys(obj);\r\n\t var promises = [];\r\n\t for (var i = 0; i < keys.length; i++) {\r\n\t var key = keys[i];\r\n\t var promise = toPromise.call(this, obj[key]);\r\n\t if (promise && isPromise(promise)) defer(promise, key);\r\n\t else results[key] = obj[key];\r\n\t }\r\n\t return Promise.all(promises).then(function () {\r\n\t return results;\r\n\t });\r\n\r\n\t function defer(promise, key) {\r\n\t // predefine the key in the result\r\n\t results[key] = undefined;\r\n\t promises.push(promise.then(function (res) {\r\n\t results[key] = res;\r\n\t }));\r\n\t }\r\n\t}\r\n\r\n\t/**\r\n\t * Check if `obj` is a promise.\r\n\t *\r\n\t * @param {Object} obj\r\n\t * @return {Boolean}\r\n\t * @api private\r\n\t */\r\n\r\n\tfunction isPromise(obj) {\r\n\t return 'function' == typeof obj.then;\r\n\t}\r\n\r\n\t/**\r\n\t * Check if `obj` is a generator.\r\n\t *\r\n\t * @param {Mixed} obj\r\n\t * @return {Boolean}\r\n\t * @api private\r\n\t */\r\n\r\n\tfunction isGenerator(obj) {\r\n\t return 'function' == typeof obj.next && 'function' == typeof obj.throw;\r\n\t}\r\n\r\n\t/**\r\n\t * Check if `obj` is a generator function.\r\n\t *\r\n\t * @param {Mixed} obj\r\n\t * @return {Boolean}\r\n\t * @api private\r\n\t */\r\n\tfunction isGeneratorFunction(obj) {\r\n\t var constructor = obj.constructor;\r\n\t if (!constructor) return false;\r\n\t if ('GeneratorFunction' === constructor.name || 'GeneratorFunction' === constructor.displayName) return true;\r\n\t return isGenerator(constructor.prototype);\r\n\t}\r\n\r\n\t/**\r\n\t * Check for plain object.\r\n\t *\r\n\t * @param {Mixed} val\r\n\t * @return {Boolean}\r\n\t * @api private\r\n\t */\r\n\r\n\tfunction isObject(val) {\r\n\t return Object == val.constructor;\r\n\t}\r\n\r\n\r\n/***/ },\r\n/* 20 */\r\n/***/ function(module, exports) {\r\n\r\n\t'use strict';\r\n\r\n\tmodule.exports = ValidationError;\r\n\r\n\r\n\tfunction ValidationError(errors) {\r\n\t this.message = 'validation failed';\r\n\t this.errors = errors;\r\n\t this.ajv = this.validation = true;\r\n\t}\r\n\r\n\r\n\tValidationError.prototype = Object.create(Error.prototype);\r\n\tValidationError.prototype.constructor = ValidationError;\r\n\r\n\r\n/***/ },\r\n/* 21 */\r\n/***/ function(module, exports) {\r\n\r\n\t'use strict';\r\n\r\n\r\n\tvar Cache = module.exports = function Cache() {\r\n\t this._cache = {};\r\n\t};\r\n\r\n\r\n\tCache.prototype.put = function Cache_put(key, value) {\r\n\t this._cache[key] = value;\r\n\t};\r\n\r\n\r\n\tCache.prototype.get = function Cache_get(key) {\r\n\t return this._cache[key];\r\n\t};\r\n\r\n\r\n\tCache.prototype.del = function Cache_del(key) {\r\n\t delete this._cache[key];\r\n\t};\r\n\r\n\r\n\tCache.prototype.clear = function Cache_clear() {\r\n\t this._cache = {};\r\n\t};\r\n\r\n\r\n/***/ },\r\n/* 22 */\r\n/***/ function(module, exports, __webpack_require__) {\r\n\r\n\t'use strict';\r\n\r\n\tvar util = __webpack_require__(11);\r\n\r\n\tvar DATE = /^\\d\\d\\d\\d-(\\d\\d)-(\\d\\d)$/;\r\n\tvar DAYS = [0,31,29,31,30,31,30,31,31,30,31,30,31];\r\n\tvar TIME = /^(\\d\\d):(\\d\\d):(\\d\\d)(\\.\\d+)?(z|[+-]\\d\\d:\\d\\d)?$/i;\r\n\tvar HOSTNAME = /^[a-z](?:(?:[-0-9a-z]{0,61})?[0-9a-z])?(\\.[a-z](?:(?:[-0-9a-z]{0,61})?[0-9a-z])?)*$/i;\r\n\tvar URI = /^(?:[a-z][a-z0-9+\\-.]*:)?(?:\\/?\\/(?:(?:[a-z0-9\\-._~!$&'()*+,;=:]|%[0-9a-f]{2})*@)?(?:\\[(?:(?:(?:(?:[0-9a-f]{1,4}:){6}|::(?:[0-9a-f]{1,4}:){5}|(?:[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){4}|(?:(?:[0-9a-f]{1,4}:){0,1}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){3}|(?:(?:[0-9a-f]{1,4}:){0,2}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){2}|(?:(?:[0-9a-f]{1,4}:){0,3}[0-9a-f]{1,4})?::[0-9a-f]{1,4}:|(?:(?:[0-9a-f]{1,4}:){0,4}[0-9a-f]{1,4})?::)(?:[0-9a-f]{1,4}:[0-9a-f]{1,4}|(?:(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?)\\.){3}(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?))|(?:(?:[0-9a-f]{1,4}:){0,5}[0-9a-f]{1,4})?::[0-9a-f]{1,4}|(?:(?:[0-9a-f]{1,4}:){0,6}[0-9a-f]{1,4})?::)|[Vv][0-9a-f]+\\.[a-z0-9\\-._~!$&'()*+,;=:]+)\\]|(?:(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?)\\.){3}(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?)|(?:[a-z0-9\\-._~!$&'()*+,;=]|%[0-9a-f]{2})*)(?::\\d*)?(?:\\/(?:[a-z0-9\\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*|\\/(?:(?:[a-z0-9\\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})+(?:\\/(?:[a-z0-9\\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*)?|(?:[a-z0-9\\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})+(?:\\/(?:[a-z0-9\\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*)(?:\\?(?:[a-z0-9\\-._~!$&'()*+,;=:@\\/?]|%[0-9a-f]{2})*)?(?:\\#(?:[a-z0-9\\-._~!$&'()*+,;=:@\\/?]|%[0-9a-f]{2})*)?$/i;\r\n\tvar UUID = /^(?:urn\\:uuid\\:)?[0-9a-f]{8}-(?:[0-9a-f]{4}-){3}[0-9a-f]{12}$/i;\r\n\tvar JSON_POINTER = /^(?:\\/(?:[^~\\/]|~0|~1)+)*(?:\\/)?$|^\\#(?:\\/(?:[a-z0-9_\\-\\.!$&'()*+,;:=@]|%[0-9a-f]{2}|~0|~1)+)*(?:\\/)?$/i;\r\n\tvar RELATIVE_JSON_POINTER = /^(?:0|[1-9][0-9]*)(?:\\#|(?:\\/(?:[^~\\/]|~0|~1)+)*(?:\\/)?)$/;\r\n\r\n\r\n\tmodule.exports = formats;\r\n\r\n\tfunction formats(mode) {\r\n\t mode = mode == 'full' ? 'full' : 'fast';\r\n\t var formatDefs = util.copy(formats[mode]);\r\n\t for (var fName in formats.compare) {\r\n\t formatDefs[fName] = {\r\n\t validate: formatDefs[fName],\r\n\t compare: formats.compare[fName]\r\n\t };\r\n\t }\r\n\t return formatDefs;\r\n\t}\r\n\r\n\r\n\tformats.fast = {\r\n\t // date: http://tools.ietf.org/html/rfc3339#section-5.6\r\n\t date: /^\\d\\d\\d\\d-[0-1]\\d-[0-3]\\d$/,\r\n\t // date-time: http://tools.ietf.org/html/rfc3339#section-5.6\r\n\t time: /^[0-2]\\d:[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:z|[+-]\\d\\d:\\d\\d)?$/i,\r\n\t 'date-time': /^\\d\\d\\d\\d-[0-1]\\d-[0-3]\\d[t\\s][0-2]\\d:[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:z|[+-]\\d\\d:\\d\\d)$/i,\r\n\t // uri: https://github.com/mafintosh/is-my-json-valid/blob/master/formats.js\r\n\t uri: /^(?:[a-z][a-z0-9+-.]*)?(?:\\:|\\/)\\/?[^\\s]*$/i,\r\n\t // email (sources from jsen validator):\r\n\t // http://stackoverflow.com/questions/201323/using-a-regular-expression-to-validate-an-email-address#answer-8829363\r\n\t // http://www.w3.org/TR/html5/forms.html#valid-e-mail-address (search for 'willful violation')\r\n\t email: /^[a-z0-9.!#$%&'*+\\/=?^_`{|}~-]+@[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\\.[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?)*$/i,\r\n\t hostname: HOSTNAME,\r\n\t // optimized https://www.safaribooksonline.com/library/view/regular-expressions-cookbook/9780596802837/ch07s16.html\r\n\t ipv4: /^(?:(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?)\\.){3}(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?)$/,\r\n\t // optimized http://stackoverflow.com/questions/53497/regular-expression-that-matches-valid-ipv6-addresses\r\n\t ipv6: /^\\s*(?:(?:(?:[0-9a-f]{1,4}:){7}(?:[0-9a-f]{1,4}|:))|(?:(?:[0-9a-f]{1,4}:){6}(?::[0-9a-f]{1,4}|(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3})|:))|(?:(?:[0-9a-f]{1,4}:){5}(?:(?:(?::[0-9a-f]{1,4}){1,2})|:(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3})|:))|(?:(?:[0-9a-f]{1,4}:){4}(?:(?:(?::[0-9a-f]{1,4}){1,3})|(?:(?::[0-9a-f]{1,4})?:(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){3}(?:(?:(?::[0-9a-f]{1,4}){1,4})|(?:(?::[0-9a-f]{1,4}){0,2}:(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){2}(?:(?:(?::[0-9a-f]{1,4}){1,5})|(?:(?::[0-9a-f]{1,4}){0,3}:(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){1}(?:(?:(?::[0-9a-f]{1,4}){1,6})|(?:(?::[0-9a-f]{1,4}){0,4}:(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(?::(?:(?:(?::[0-9a-f]{1,4}){1,7})|(?:(?::[0-9a-f]{1,4}){0,5}:(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:)))(?:%.+)?\\s*$/i,\r\n\t regex: regex,\r\n\t // uuid: http://tools.ietf.org/html/rfc4122\r\n\t uuid: UUID,\r\n\t // JSON-pointer: https://tools.ietf.org/html/rfc6901\r\n\t // uri fragment: https://tools.ietf.org/html/rfc3986#appendix-A\r\n\t 'json-pointer': JSON_POINTER,\r\n\t // relative JSON-pointer: http://tools.ietf.org/html/draft-luff-relative-json-pointer-00\r\n\t 'relative-json-pointer': RELATIVE_JSON_POINTER\r\n\t};\r\n\r\n\r\n\tformats.full = {\r\n\t date: date,\r\n\t time: time,\r\n\t 'date-time': date_time,\r\n\t uri: uri,\r\n\t email: /^[a-z0-9!#$%&'*+\\/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&''*+\\/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$/i,\r\n\t hostname: hostname,\r\n\t ipv4: /^(?:(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?)\\.){3}(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?)$/,\r\n\t ipv6: /^\\s*(?:(?:(?:[0-9a-f]{1,4}:){7}(?:[0-9a-f]{1,4}|:))|(?:(?:[0-9a-f]{1,4}:){6}(?::[0-9a-f]{1,4}|(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3})|:))|(?:(?:[0-9a-f]{1,4}:){5}(?:(?:(?::[0-9a-f]{1,4}){1,2})|:(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3})|:))|(?:(?:[0-9a-f]{1,4}:){4}(?:(?:(?::[0-9a-f]{1,4}){1,3})|(?:(?::[0-9a-f]{1,4})?:(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){3}(?:(?:(?::[0-9a-f]{1,4}){1,4})|(?:(?::[0-9a-f]{1,4}){0,2}:(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){2}(?:(?:(?::[0-9a-f]{1,4}){1,5})|(?:(?::[0-9a-f]{1,4}){0,3}:(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){1}(?:(?:(?::[0-9a-f]{1,4}){1,6})|(?:(?::[0-9a-f]{1,4}){0,4}:(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(?::(?:(?:(?::[0-9a-f]{1,4}){1,7})|(?:(?::[0-9a-f]{1,4}){0,5}:(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:)))(?:%.+)?\\s*$/i,\r\n\t regex: regex,\r\n\t uuid: UUID,\r\n\t 'json-pointer': JSON_POINTER,\r\n\t 'relative-json-pointer': RELATIVE_JSON_POINTER\r\n\t};\r\n\r\n\r\n\tformats.compare = {\r\n\t date: compareDate,\r\n\t time: compareTime,\r\n\t 'date-time': compareDateTime\r\n\t};\r\n\r\n\r\n\tfunction date(str) {\r\n\t // full-date from http://tools.ietf.org/html/rfc3339#section-5.6\r\n\t var matches = str.match(DATE);\r\n\t if (!matches) return false;\r\n\r\n\t var month = +matches[1];\r\n\t var day = +matches[2];\r\n\t return month >= 1 && month <= 12 && day >= 1 && day <= DAYS[month];\r\n\t}\r\n\r\n\r\n\tfunction time(str, full) {\r\n\t var matches = str.match(TIME);\r\n\t if (!matches) return false;\r\n\r\n\t var hour = matches[1];\r\n\t var minute = matches[2];\r\n\t var second = matches[3];\r\n\t var timeZone = matches[5];\r\n\t return hour <= 23 && minute <= 59 && second <= 59 && (!full || timeZone);\r\n\t}\r\n\r\n\r\n\tvar DATE_TIME_SEPARATOR = /t|\\s/i;\r\n\tfunction date_time(str) {\r\n\t // http://tools.ietf.org/html/rfc3339#section-5.6\r\n\t var dateTime = str.split(DATE_TIME_SEPARATOR);\r\n\t return date(dateTime[0]) && time(dateTime[1], true);\r\n\t}\r\n\r\n\r\n\tfunction hostname(str) {\r\n\t // http://tools.ietf.org/html/rfc1034#section-3.5\r\n\t return str.length <= 255 && HOSTNAME.test(str);\r\n\t}\r\n\r\n\r\n\tvar NOT_URI_FRAGMENT = /\\/|\\:/;\r\n\tfunction uri(str) {\r\n\t // http://jmrware.com/articles/2009/uri_regexp/URI_regex.html + optional protocol + required \".\"\r\n\t return NOT_URI_FRAGMENT.test(str) && URI.test(str);\r\n\t}\r\n\r\n\r\n\tfunction regex(str) {\r\n\t try {\r\n\t new RegExp(str);\r\n\t return true;\r\n\t } catch(e) {\r\n\t return false;\r\n\t }\r\n\t}\r\n\r\n\r\n\tfunction compareDate(d1, d2) {\r\n\t if (!(d1 && d2)) return;\r\n\t if (d1 > d2) return 1;\r\n\t if (d1 < d2) return -1;\r\n\t if (d1 === d2) return 0;\r\n\t}\r\n\r\n\r\n\tfunction compareTime(t1, t2) {\r\n\t if (!(t1 && t2)) return;\r\n\t t1 = t1.match(TIME);\r\n\t t2 = t2.match(TIME);\r\n\t if (!(t1 && t2)) return;\r\n\t t1 = t1[1] + t1[2] + t1[3] + (t1[4]||'');\r\n\t t2 = t2[1] + t2[2] + t2[3] + (t2[4]||'');\r\n\t if (t1 > t2) return 1;\r\n\t if (t1 < t2) return -1;\r\n\t if (t1 === t2) return 0;\r\n\t}\r\n\r\n\r\n\tfunction compareDateTime(dt1, dt2) {\r\n\t if (!(dt1 && dt2)) return;\r\n\t dt1 = dt1.split(DATE_TIME_SEPARATOR);\r\n\t dt2 = dt2.split(DATE_TIME_SEPARATOR);\r\n\t var res = compareDate(dt1[0], dt2[0]);\r\n\t if (res === undefined) return;\r\n\t return res || compareTime(dt1[1], dt2[1]);\r\n\t}\r\n\r\n\r\n/***/ },\r\n/* 23 */\r\n/***/ function(module, exports, __webpack_require__) {\r\n\r\n\t'use strict';\r\n\r\n\tvar ruleModules = __webpack_require__(24)\r\n\t , util = __webpack_require__(11);\r\n\r\n\tmodule.exports = function rules() {\r\n\t var RULES = [\r\n\t { type: 'number',\r\n\t rules: [ 'maximum', 'minimum', 'multipleOf'] },\r\n\t { type: 'string',\r\n\t rules: [ 'maxLength', 'minLength', 'pattern', 'format' ] },\r\n\t { type: 'array',\r\n\t rules: [ 'maxItems', 'minItems', 'uniqueItems', 'items' ] },\r\n\t { type: 'object',\r\n\t rules: [ 'maxProperties', 'minProperties', 'required', 'dependencies', 'properties' ] },\r\n\t { rules: [ '$ref', 'enum', 'not', 'anyOf', 'oneOf', 'allOf' ] }\r\n\t ];\r\n\r\n\t RULES.all = [ 'type', 'additionalProperties', 'patternProperties' ];\r\n\t RULES.keywords = [ 'additionalItems', '$schema', 'id', 'title', 'description', 'default' ];\r\n\t RULES.types = [ 'number', 'integer', 'string', 'array', 'object', 'boolean', 'null' ];\r\n\r\n\t RULES.forEach(function (group) {\r\n\t group.rules = group.rules.map(function (keyword) {\r\n\t RULES.all.push(keyword);\r\n\t return {\r\n\t keyword: keyword,\r\n\t code: ruleModules[keyword]\r\n\t };\r\n\t });\r\n\t });\r\n\r\n\t RULES.keywords = util.toHash(RULES.all.concat(RULES.keywords));\r\n\t RULES.all = util.toHash(RULES.all);\r\n\t RULES.types = util.toHash(RULES.types);\r\n\r\n\t return RULES;\r\n\t};\r\n\r\n\r\n/***/ },\r\n/* 24 */\r\n/***/ function(module, exports, __webpack_require__) {\r\n\r\n\t'use strict';\r\n\r\n\t//all requires must be explicit because browserify won't work with dynamic requires\r\n\tmodule.exports = {\r\n\t '$ref': __webpack_require__(25),\r\n\t allOf: __webpack_require__(26),\r\n\t anyOf: __webpack_require__(27),\r\n\t dependencies: __webpack_require__(28),\r\n\t enum: __webpack_require__(29),\r\n\t format: __webpack_require__(30),\r\n\t items: __webpack_require__(31),\r\n\t maximum: __webpack_require__(32),\r\n\t minimum: __webpack_require__(32),\r\n\t maxItems: __webpack_require__(33),\r\n\t minItems: __webpack_require__(33),\r\n\t maxLength: __webpack_require__(34),\r\n\t minLength: __webpack_require__(34),\r\n\t maxProperties: __webpack_require__(35),\r\n\t minProperties: __webpack_require__(35),\r\n\t multipleOf: __webpack_require__(36),\r\n\t not: __webpack_require__(37),\r\n\t oneOf: __webpack_require__(38),\r\n\t pattern: __webpack_require__(39),\r\n\t properties: __webpack_require__(40),\r\n\t required: __webpack_require__(41),\r\n\t uniqueItems: __webpack_require__(42),\r\n\t validate: __webpack_require__(18)\r\n\t};\r\n\r\n\r\n/***/ },\r\n/* 25 */\r\n/***/ function(module, exports) {\r\n\r\n\t'use strict';\r\n\tmodule.exports = function generate_ref(it, $keyword) {\r\n\t var out = ' ';\r\n\t var $lvl = it.level;\r\n\t var $dataLvl = it.dataLevel;\r\n\t var $schema = it.schema[$keyword];\r\n\t var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\r\n\t var $breakOnError = !it.opts.allErrors;\r\n\t var $errorKeyword;\r\n\t var $data = 'data' + ($dataLvl || '');\r\n\t var $valid = 'valid' + $lvl;\r\n\t var $async, $refCode;\r\n\t if ($schema == '#' || $schema == '#/') {\r\n\t if (it.isRoot) {\r\n\t $async = it.async;\r\n\t $refCode = 'validate';\r\n\t } else {\r\n\t $async = it.root.schema.$async === true;\r\n\t $refCode = 'root.refVal[0]';\r\n\t }\r\n\t } else {\r\n\t var $refVal = it.resolveRef(it.baseId, $schema, it.isRoot);\r\n\t if ($refVal === undefined) {\r\n\t var $message = 'can\\'t resolve reference ' + $schema + ' from id ' + it.baseId;\r\n\t if (it.opts.missingRefs == 'fail') {\r\n\t console.log($message);\r\n\t var $$outStack = $$outStack || [];\r\n\t $$outStack.push(out);\r\n\t out = ''; /* istanbul ignore else */\r\n\t if (it.createErrors !== false) {\r\n\t out += ' { keyword: \\'' + ($errorKeyword || '$ref') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: \"' + ($errSchemaPath) + '\" , params: { ref: \\'' + (it.util.escapeQuotes($schema)) + '\\' } ';\r\n\t if (it.opts.messages !== false) {\r\n\t out += ' , message: \\'can\\\\\\'t resolve reference ' + (it.util.escapeQuotes($schema)) + '\\' ';\r\n\t }\r\n\t if (it.opts.verbose) {\r\n\t out += ' , schema: ' + (it.util.toQuotedString($schema)) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\r\n\t }\r\n\t out += ' } ';\r\n\t } else {\r\n\t out += ' {} ';\r\n\t }\r\n\t var __err = out;\r\n\t out = $$outStack.pop();\r\n\t if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */\r\n\t if (it.async) {\r\n\t out += ' throw new ValidationError([' + (__err) + ']); ';\r\n\t } else {\r\n\t out += ' validate.errors = [' + (__err) + ']; return false; ';\r\n\t }\r\n\t } else {\r\n\t out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\r\n\t }\r\n\t if ($breakOnError) {\r\n\t out += ' if (false) { ';\r\n\t }\r\n\t } else if (it.opts.missingRefs == 'ignore') {\r\n\t console.log($message);\r\n\t if ($breakOnError) {\r\n\t out += ' if (true) { ';\r\n\t }\r\n\t } else {\r\n\t var $error = new Error($message);\r\n\t $error.missingRef = it.resolve.url(it.baseId, $schema);\r\n\t $error.missingSchema = it.resolve.normalizeId(it.resolve.fullPath($error.missingRef));\r\n\t throw $error;\r\n\t }\r\n\t } else if ($refVal.inline) {\r\n\t var $it = it.util.copy(it);\r\n\t $it.level++;\r\n\t $it.schema = $refVal.schema;\r\n\t $it.schemaPath = '';\r\n\t $it.errSchemaPath = $schema;\r\n\t var $code = it.validate($it).replace(/validate\\.schema/g, $refVal.code);\r\n\t out += ' ' + ($code) + ' ';\r\n\t if ($breakOnError) {\r\n\t out += ' if (valid' + ($it.level) + ') { ';\r\n\t }\r\n\t } else {\r\n\t $async = $refVal.async;\r\n\t $refCode = $refVal.code;\r\n\t }\r\n\t }\r\n\t if ($refCode) {\r\n\t var $$outStack = $$outStack || [];\r\n\t $$outStack.push(out);\r\n\t out = '';\r\n\t if (it.opts.passContext) {\r\n\t out += ' ' + ($refCode) + '.call(this, ';\r\n\t } else {\r\n\t out += ' ' + ($refCode) + '( ';\r\n\t }\r\n\t out += ' ' + ($data) + ', (dataPath || \\'\\')';\r\n\t if (it.errorPath != '\"\"') {\r\n\t out += ' + ' + (it.errorPath);\r\n\t }\r\n\t if ($dataLvl) {\r\n\t out += ' , data' + (($dataLvl - 1) || '') + ' , ' + (it.dataPathArr[$dataLvl]) + ' ';\r\n\t } else {\r\n\t out += ' , parentData , parentDataProperty ';\r\n\t }\r\n\t out += ') ';\r\n\t var __callValidate = out;\r\n\t out = $$outStack.pop();\r\n\t if ($async) {\r\n\t if (!it.async) throw new Error('async schema referenced by sync schema');\r\n\t out += ' try { ';\r\n\t if ($breakOnError) {\r\n\t out += 'var ' + ($valid) + ' =';\r\n\t }\r\n\t out += ' ' + (it.yieldAwait) + ' ' + (__callValidate) + '; } catch (e) { if (!(e instanceof ValidationError)) throw e; if (vErrors === null) vErrors = e.errors; else vErrors = vErrors.concat(e.errors); errors = vErrors.length; } ';\r\n\t if ($breakOnError) {\r\n\t out += ' if (' + ($valid) + ') { ';\r\n\t }\r\n\t } else {\r\n\t out += ' if (!' + (__callValidate) + ') { if (vErrors === null) vErrors = ' + ($refCode) + '.errors; else vErrors = vErrors.concat(' + ($refCode) + '.errors); errors = vErrors.length; } ';\r\n\t if ($breakOnError) {\r\n\t out += ' else { ';\r\n\t }\r\n\t }\r\n\t }\r\n\t return out;\r\n\t}\r\n\r\n\r\n/***/ },\r\n/* 26 */\r\n/***/ function(module, exports) {\r\n\r\n\t'use strict';\r\n\tmodule.exports = function generate_allOf(it, $keyword) {\r\n\t var out = ' ';\r\n\t var $schema = it.schema[$keyword];\r\n\t var $schemaPath = it.schemaPath + '.' + $keyword;\r\n\t var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\r\n\t var $breakOnError = !it.opts.allErrors;\r\n\t var $it = it.util.copy(it);\r\n\t var $closingBraces = '';\r\n\t $it.level++;\r\n\t var arr1 = $schema;\r\n\t if (arr1) {\r\n\t var $sch, $i = -1,\r\n\t l1 = arr1.length - 1;\r\n\t while ($i < l1) {\r\n\t $sch = arr1[$i += 1];\r\n\t if (it.util.schemaHasRules($sch, it.RULES.all)) {\r\n\t $it.schema = $sch;\r\n\t $it.schemaPath = $schemaPath + '[' + $i + ']';\r\n\t $it.errSchemaPath = $errSchemaPath + '/' + $i;\r\n\t out += ' ' + (it.validate($it)) + ' ';\r\n\t if ($breakOnError) {\r\n\t out += ' if (valid' + ($it.level) + ') { ';\r\n\t $closingBraces += '}';\r\n\t }\r\n\t }\r\n\t }\r\n\t }\r\n\t if ($breakOnError) {\r\n\t out += ' ' + ($closingBraces.slice(0, -1));\r\n\t }\r\n\t out = it.util.cleanUpCode(out);\r\n\t return out;\r\n\t}\r\n\r\n\r\n/***/ },\r\n/* 27 */\r\n/***/ function(module, exports) {\r\n\r\n\t'use strict';\r\n\tmodule.exports = function generate_anyOf(it, $keyword) {\r\n\t var out = ' ';\r\n\t var $lvl = it.level;\r\n\t var $dataLvl = it.dataLevel;\r\n\t var $schema = it.schema[$keyword];\r\n\t var $schemaPath = it.schemaPath + '.' + $keyword;\r\n\t var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\r\n\t var $breakOnError = !it.opts.allErrors;\r\n\t var $errorKeyword;\r\n\t var $data = 'data' + ($dataLvl || '');\r\n\t var $valid = 'valid' + $lvl;\r\n\t var $errs = 'errs__' + $lvl;\r\n\t var $it = it.util.copy(it);\r\n\t var $closingBraces = '';\r\n\t $it.level++;\r\n\t var $noEmptySchema = $schema.every(function($sch) {\r\n\t return it.util.schemaHasRules($sch, it.RULES.all);\r\n\t });\r\n\t if ($noEmptySchema) {\r\n\t out += ' var ' + ($errs) + ' = errors; var ' + ($valid) + ' = false; ';\r\n\t var $wasComposite = it.compositeRule;\r\n\t it.compositeRule = $it.compositeRule = true;\r\n\t var arr1 = $schema;\r\n\t if (arr1) {\r\n\t var $sch, $i = -1,\r\n\t l1 = arr1.length - 1;\r\n\t while ($i < l1) {\r\n\t $sch = arr1[$i += 1];\r\n\t $it.schema = $sch;\r\n\t $it.schemaPath = $schemaPath + '[' + $i + ']';\r\n\t $it.errSchemaPath = $errSchemaPath + '/' + $i;\r\n\t out += ' ' + (it.validate($it)) + ' ' + ($valid) + ' = ' + ($valid) + ' || valid' + ($it.level) + '; if (!' + ($valid) + ') { ';\r\n\t $closingBraces += '}';\r\n\t }\r\n\t }\r\n\t it.compositeRule = $it.compositeRule = $wasComposite;\r\n\t out += ' ' + ($closingBraces) + ' if (!' + ($valid) + ') { var err = '; /* istanbul ignore else */\r\n\t if (it.createErrors !== false) {\r\n\t out += ' { keyword: \\'' + ($errorKeyword || 'anyOf') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: \"' + ($errSchemaPath) + '\" , params: {} ';\r\n\t if (it.opts.messages !== false) {\r\n\t out += ' , message: \\'should match some schema in anyOf\\' ';\r\n\t }\r\n\t if (it.opts.verbose) {\r\n\t out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\r\n\t }\r\n\t out += ' } ';\r\n\t } else {\r\n\t out += ' {} ';\r\n\t }\r\n\t out += '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; } else { errors = ' + ($errs) + '; if (vErrors !== null) { if (' + ($errs) + ') vErrors.length = ' + ($errs) + '; else vErrors = null; } ';\r\n\t if (it.opts.allErrors) {\r\n\t out += ' } ';\r\n\t }\r\n\t out = it.util.cleanUpCode(out);\r\n\t } else {\r\n\t if ($breakOnError) {\r\n\t out += ' if (true) { ';\r\n\t }\r\n\t }\r\n\t return out;\r\n\t}\r\n\r\n\r\n/***/ },\r\n/* 28 */\r\n/***/ function(module, exports) {\r\n\r\n\t'use strict';\r\n\tmodule.exports = function generate_dependencies(it, $keyword) {\r\n\t var out = ' ';\r\n\t var $lvl = it.level;\r\n\t var $dataLvl = it.dataLevel;\r\n\t var $schema = it.schema[$keyword];\r\n\t var $schemaPath = it.schemaPath + '.' + $keyword;\r\n\t var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\r\n\t var $breakOnError = !it.opts.allErrors;\r\n\t var $errorKeyword;\r\n\t var $data = 'data' + ($dataLvl || '');\r\n\t var $errs = 'errs__' + $lvl;\r\n\t var $it = it.util.copy(it);\r\n\t var $closingBraces = '';\r\n\t $it.level++;\r\n\t var $schemaDeps = {},\r\n\t $propertyDeps = {};\r\n\t for ($property in $schema) {\r\n\t var $sch = $schema[$property];\r\n\t var $deps = Array.isArray($sch) ? $propertyDeps : $schemaDeps;\r\n\t $deps[$property] = $sch;\r\n\t }\r\n\t out += 'var ' + ($errs) + ' = errors;';\r\n\t var $currentErrorPath = it.errorPath;\r\n\t out += 'var missing' + ($lvl) + ';';\r\n\t for (var $property in $propertyDeps) {\r\n\t $deps = $propertyDeps[$property];\r\n\t out += ' if (' + ($data) + (it.util.getProperty($property)) + ' !== undefined && ( ';\r\n\t var arr1 = $deps;\r\n\t if (arr1) {\r\n\t var _$property, $i = -1,\r\n\t l1 = arr1.length - 1;\r\n\t while ($i < l1) {\r\n\t _$property = arr1[$i += 1];\r\n\t if ($i) {\r\n\t out += ' || ';\r\n\t }\r\n\t var $prop = it.util.getProperty(_$property);\r\n\t out += ' ( ' + ($data) + ($prop) + ' === undefined && (missing' + ($lvl) + ' = ' + (it.util.toQuotedString(it.opts.jsonPointers ? _$property : $prop)) + ') ) ';\r\n\t }\r\n\t }\r\n\t out += ')) { ';\r\n\t var $propertyPath = 'missing' + $lvl,\r\n\t $missingProperty = '\\' + ' + $propertyPath + ' + \\'';\r\n\t if (it.opts._errorDataPathProperty) {\r\n\t it.errorPath = it.opts.jsonPointers ? it.util.getPathExpr($currentErrorPath, $propertyPath, true) : $currentErrorPath + ' + ' + $propertyPath;\r\n\t }\r\n\t var $$outStack = $$outStack || [];\r\n\t $$outStack.push(out);\r\n\t out = ''; /* istanbul ignore else */\r\n\t if (it.createErrors !== false) {\r\n\t out += ' { keyword: \\'' + ($errorKeyword || 'dependencies') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: \"' + ($errSchemaPath) + '\" , params: { property: \\'' + (it.util.escapeQuotes($property)) + '\\', missingProperty: \\'' + ($missingProperty) + '\\', depsCount: ' + ($deps.length) + ', deps: \\'' + (it.util.escapeQuotes($deps.length == 1 ? $deps[0] : $deps.join(\", \"))) + '\\' } ';\r\n\t if (it.opts.messages !== false) {\r\n\t out += ' , message: \\'should have ';\r\n\t if ($deps.length == 1) {\r\n\t out += 'property ' + (it.util.escapeQuotes($deps[0]));\r\n\t } else {\r\n\t out += 'properties ' + (it.util.escapeQuotes($deps.join(\", \")));\r\n\t }\r\n\t out += ' when property ' + (it.util.escapeQuotes($property)) + ' is present\\' ';\r\n\t }\r\n\t if (it.opts.verbose) {\r\n\t out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\r\n\t }\r\n\t out += ' } ';\r\n\t } else {\r\n\t out += ' {} ';\r\n\t }\r\n\t var __err = out;\r\n\t out = $$outStack.pop();\r\n\t if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */\r\n\t if (it.async) {\r\n\t out += ' throw new ValidationError([' + (__err) + ']); ';\r\n\t } else {\r\n\t out += ' validate.errors = [' + (__err) + ']; return false; ';\r\n\t }\r\n\t } else {\r\n\t out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\r\n\t }\r\n\t out += ' } ';\r\n\t if ($breakOnError) {\r\n\t $closingBraces += '}';\r\n\t out += ' else { ';\r\n\t }\r\n\t }\r\n\t it.errorPath = $currentErrorPath;\r\n\t for (var $property in $schemaDeps) {\r\n\t var $sch = $schemaDeps[$property];\r\n\t if (it.util.schemaHasRules($sch, it.RULES.all)) {\r\n\t out += ' valid' + ($it.level) + ' = true; if (' + ($data) + '[\\'' + ($property) + '\\'] !== undefined) { ';\r\n\t $it.schema = $sch;\r\n\t $it.schemaPath = $schemaPath + it.util.getProperty($property);\r\n\t $it.errSchemaPath = $errSchemaPath + '/' + it.util.escapeFragment($property);\r\n\t out += ' ' + (it.validate($it)) + ' } ';\r\n\t if ($breakOnError) {\r\n\t out += ' if (valid' + ($it.level) + ') { ';\r\n\t $closingBraces += '}';\r\n\t }\r\n\t }\r\n\t }\r\n\t if ($breakOnError) {\r\n\t out += ' ' + ($closingBraces) + ' if (' + ($errs) + ' == errors) {';\r\n\t }\r\n\t out = it.util.cleanUpCode(out);\r\n\t return out;\r\n\t}\r\n\r\n\r\n/***/ },\r\n/* 29 */\r\n/***/ function(module, exports) {\r\n\r\n\t'use strict';\r\n\tmodule.exports = function generate_enum(it, $keyword) {\r\n\t var out = ' ';\r\n\t var $lvl = it.level;\r\n\t var $dataLvl = it.dataLevel;\r\n\t var $schema = it.schema[$keyword];\r\n\t var $schemaPath = it.schemaPath + '.' + $keyword;\r\n\t var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\r\n\t var $breakOnError = !it.opts.allErrors;\r\n\t var $errorKeyword;\r\n\t var $data = 'data' + ($dataLvl || '');\r\n\t var $valid = 'valid' + $lvl;\r\n\t var $isData = it.opts.v5 && $schema.$data;\r\n\t var $schemaValue = $isData ? it.util.getData($schema.$data, $dataLvl, it.dataPathArr) : $schema;\r\n\t if ($isData) {\r\n\t out += ' var schema' + ($lvl) + ' = ' + ($schemaValue) + '; ';\r\n\t $schemaValue = 'schema' + $lvl;\r\n\t }\r\n\t var $i = 'i' + $lvl;\r\n\t if (!$isData) {\r\n\t out += ' var schema' + ($lvl) + ' = validate.schema' + ($schemaPath) + ';';\r\n\t }\r\n\t out += 'var ' + ($valid) + ';';\r\n\t if ($isData) {\r\n\t out += ' if (schema' + ($lvl) + ' === undefined) ' + ($valid) + ' = true; else if (!Array.isArray(schema' + ($lvl) + ')) ' + ($valid) + ' = false; else {';\r\n\t }\r\n\t out += '' + ($valid) + ' = false;for (var ' + ($i) + '=0; ' + ($i) + ' ' + ($i) + ') { ';\r\n\t var $passData = $data + '[' + $i + ']';\r\n\t $it.schema = $sch;\r\n\t $it.schemaPath = $schemaPath + '[' + $i + ']';\r\n\t $it.errSchemaPath = $errSchemaPath + '/' + $i;\r\n\t $it.errorPath = it.util.getPathExpr(it.errorPath, $i, it.opts.jsonPointers, true);\r\n\t $it.dataPathArr[$dataNxt] = $i;\r\n\t var $code = it.validate($it);\r\n\t if (it.util.varOccurences($code, $nextData) < 2) {\r\n\t out += ' ' + (it.util.varReplace($code, $nextData, $passData)) + ' ';\r\n\t } else {\r\n\t out += ' var ' + ($nextData) + ' = ' + ($passData) + '; ' + ($code) + ' ';\r\n\t }\r\n\t out += ' } ';\r\n\t if ($breakOnError) {\r\n\t out += ' if (valid' + ($it.level) + ') { ';\r\n\t $closingBraces += '}';\r\n\t }\r\n\t }\r\n\t }\r\n\t }\r\n\t if (typeof $additionalItems == 'object' && it.util.schemaHasRules($additionalItems, it.RULES.all)) {\r\n\t $it.schema = $additionalItems;\r\n\t $it.schemaPath = it.schemaPath + '.additionalItems';\r\n\t $it.errSchemaPath = it.errSchemaPath + '/additionalItems';\r\n\t out += ' valid' + ($it.level) + ' = true; if (' + ($data) + '.length > ' + ($schema.length) + ') { for (var i' + ($lvl) + ' = ' + ($schema.length) + '; i' + ($lvl) + ' < ' + ($data) + '.length; i' + ($lvl) + '++) { ';\r\n\t $it.errorPath = it.util.getPathExpr(it.errorPath, 'i' + $lvl, it.opts.jsonPointers, true);\r\n\t var $passData = $data + '[i' + $lvl + ']';\r\n\t $it.dataPathArr[$dataNxt] = 'i' + $lvl;\r\n\t var $code = it.validate($it);\r\n\t if (it.util.varOccurences($code, $nextData) < 2) {\r\n\t out += ' ' + (it.util.varReplace($code, $nextData, $passData)) + ' ';\r\n\t } else {\r\n\t out += ' var ' + ($nextData) + ' = ' + ($passData) + '; ' + ($code) + ' ';\r\n\t }\r\n\t if ($breakOnError) {\r\n\t out += ' if (!valid' + ($it.level) + ') break; ';\r\n\t }\r\n\t out += ' } } ';\r\n\t if ($breakOnError) {\r\n\t out += ' if (valid' + ($it.level) + ') { ';\r\n\t $closingBraces += '}';\r\n\t }\r\n\t }\r\n\t } else if (it.util.schemaHasRules($schema, it.RULES.all)) {\r\n\t $it.schema = $schema;\r\n\t $it.schemaPath = $schemaPath;\r\n\t $it.errSchemaPath = $errSchemaPath;\r\n\t out += ' for (var i' + ($lvl) + ' = ' + (0) + '; i' + ($lvl) + ' < ' + ($data) + '.length; i' + ($lvl) + '++) { ';\r\n\t $it.errorPath = it.util.getPathExpr(it.errorPath, 'i' + $lvl, it.opts.jsonPointers, true);\r\n\t var $passData = $data + '[i' + $lvl + ']';\r\n\t $it.dataPathArr[$dataNxt] = 'i' + $lvl;\r\n\t var $code = it.validate($it);\r\n\t if (it.util.varOccurences($code, $nextData) < 2) {\r\n\t out += ' ' + (it.util.varReplace($code, $nextData, $passData)) + ' ';\r\n\t } else {\r\n\t out += ' var ' + ($nextData) + ' = ' + ($passData) + '; ' + ($code) + ' ';\r\n\t }\r\n\t if ($breakOnError) {\r\n\t out += ' if (!valid' + ($it.level) + ') break; ';\r\n\t }\r\n\t out += ' } ';\r\n\t if ($breakOnError) {\r\n\t out += ' if (valid' + ($it.level) + ') { ';\r\n\t $closingBraces += '}';\r\n\t }\r\n\t }\r\n\t if ($breakOnError) {\r\n\t out += ' ' + ($closingBraces) + ' if (' + ($errs) + ' == errors) {';\r\n\t }\r\n\t out = it.util.cleanUpCode(out);\r\n\t return out;\r\n\t}\r\n\r\n\r\n/***/ },\r\n/* 32 */\r\n/***/ function(module, exports) {\r\n\r\n\t'use strict';\r\n\tmodule.exports = function generate__limit(it, $keyword) {\r\n\t var out = ' ';\r\n\t var $lvl = it.level;\r\n\t var $dataLvl = it.dataLevel;\r\n\t var $schema = it.schema[$keyword];\r\n\t var $schemaPath = it.schemaPath + '.' + $keyword;\r\n\t var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\r\n\t var $breakOnError = !it.opts.allErrors;\r\n\t var $errorKeyword;\r\n\t var $data = 'data' + ($dataLvl || '');\r\n\t var $isData = it.opts.v5 && $schema.$data;\r\n\t var $schemaValue = $isData ? it.util.getData($schema.$data, $dataLvl, it.dataPathArr) : $schema;\r\n\t if ($isData) {\r\n\t out += ' var schema' + ($lvl) + ' = ' + ($schemaValue) + '; ';\r\n\t $schemaValue = 'schema' + $lvl;\r\n\t }\r\n\t var $isMax = $keyword == 'maximum',\r\n\t $exclusiveKeyword = $isMax ? 'exclusiveMaximum' : 'exclusiveMinimum',\r\n\t $schemaExcl = it.schema[$exclusiveKeyword],\r\n\t $isDataExcl = it.opts.v5 && $schemaExcl && $schemaExcl.$data,\r\n\t $op = $isMax ? '<' : '>',\r\n\t $notOp = $isMax ? '>' : '<';\r\n\t if ($isDataExcl) {\r\n\t var $schemaValueExcl = it.util.getData($schemaExcl.$data, $dataLvl, it.dataPathArr),\r\n\t $exclusive = 'exclusive' + $lvl,\r\n\t $opExpr = 'op' + $lvl,\r\n\t $opStr = '\\' + ' + $opExpr + ' + \\'';\r\n\t out += ' var schemaExcl' + ($lvl) + ' = ' + ($schemaValueExcl) + '; ';\r\n\t $schemaValueExcl = 'schemaExcl' + $lvl;\r\n\t out += ' var exclusive' + ($lvl) + '; if (typeof ' + ($schemaValueExcl) + ' != \\'boolean\\' && typeof ' + ($schemaValueExcl) + ' != \\'undefined\\') { ';\r\n\t var $errorKeyword = $exclusiveKeyword;\r\n\t var $$outStack = $$outStack || [];\r\n\t $$outStack.push(out);\r\n\t out = ''; /* istanbul ignore else */\r\n\t if (it.createErrors !== false) {\r\n\t out += ' { keyword: \\'' + ($errorKeyword || '_exclusiveLimit') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: \"' + ($errSchemaPath) + '\" , params: {} ';\r\n\t if (it.opts.messages !== false) {\r\n\t out += ' , message: \\'' + ($exclusiveKeyword) + ' should be boolean\\' ';\r\n\t }\r\n\t if (it.opts.verbose) {\r\n\t out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\r\n\t }\r\n\t out += ' } ';\r\n\t } else {\r\n\t out += ' {} ';\r\n\t }\r\n\t var __err = out;\r\n\t out = $$outStack.pop();\r\n\t if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */\r\n\t if (it.async) {\r\n\t out += ' throw new ValidationError([' + (__err) + ']); ';\r\n\t } else {\r\n\t out += ' validate.errors = [' + (__err) + ']; return false; ';\r\n\t }\r\n\t } else {\r\n\t out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\r\n\t }\r\n\t out += ' } else if( ';\r\n\t if ($isData) {\r\n\t out += ' (' + ($schemaValue) + ' !== undefined && typeof ' + ($schemaValue) + ' != \\'number\\') || ';\r\n\t }\r\n\t out += ' ((exclusive' + ($lvl) + ' = ' + ($schemaValueExcl) + ' === true) ? ' + ($data) + ' ' + ($notOp) + '= ' + ($schemaValue) + ' : ' + ($data) + ' ' + ($notOp) + ' ' + ($schemaValue) + ')) { var op' + ($lvl) + ' = exclusive' + ($lvl) + ' ? \\'' + ($op) + '\\' : \\'' + ($op) + '=\\';';\r\n\t } else {\r\n\t var $exclusive = $schemaExcl === true,\r\n\t $opStr = $op;\r\n\t if (!$exclusive) $opStr += '=';\r\n\t var $opExpr = '\\'' + $opStr + '\\'';\r\n\t out += ' if ( ';\r\n\t if ($isData) {\r\n\t out += ' (' + ($schemaValue) + ' !== undefined && typeof ' + ($schemaValue) + ' != \\'number\\') || ';\r\n\t }\r\n\t out += ' ' + ($data) + ' ' + ($notOp);\r\n\t if ($exclusive) {\r\n\t out += '=';\r\n\t }\r\n\t out += ' ' + ($schemaValue) + ') {';\r\n\t }\r\n\t var $errorKeyword = $keyword;\r\n\t var $$outStack = $$outStack || [];\r\n\t $$outStack.push(out);\r\n\t out = ''; /* istanbul ignore else */\r\n\t if (it.createErrors !== false) {\r\n\t out += ' { keyword: \\'' + ($errorKeyword || '_limit') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: \"' + ($errSchemaPath) + '\" , params: { comparison: ' + ($opExpr) + ', limit: ' + ($schemaValue) + ', exclusive: ' + ($exclusive) + ' } ';\r\n\t if (it.opts.messages !== false) {\r\n\t out += ' , message: \\'should be ' + ($opStr) + ' ';\r\n\t if ($isData) {\r\n\t out += '\\' + ' + ($schemaValue);\r\n\t } else {\r\n\t out += '' + ($schema) + '\\'';\r\n\t }\r\n\t }\r\n\t if (it.opts.verbose) {\r\n\t out += ' , schema: ';\r\n\t if ($isData) {\r\n\t out += 'validate.schema' + ($schemaPath);\r\n\t } else {\r\n\t out += '' + ($schema);\r\n\t }\r\n\t out += ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\r\n\t }\r\n\t out += ' } ';\r\n\t } else {\r\n\t out += ' {} ';\r\n\t }\r\n\t var __err = out;\r\n\t out = $$outStack.pop();\r\n\t if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */\r\n\t if (it.async) {\r\n\t out += ' throw new ValidationError([' + (__err) + ']); ';\r\n\t } else {\r\n\t out += ' validate.errors = [' + (__err) + ']; return false; ';\r\n\t }\r\n\t } else {\r\n\t out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\r\n\t }\r\n\t out += ' } ';\r\n\t if ($breakOnError) {\r\n\t out += ' else { ';\r\n\t }\r\n\t return out;\r\n\t}\r\n\r\n\r\n/***/ },\r\n/* 33 */\r\n/***/ function(module, exports) {\r\n\r\n\t'use strict';\r\n\tmodule.exports = function generate__limitItems(it, $keyword) {\r\n\t var out = ' ';\r\n\t var $lvl = it.level;\r\n\t var $dataLvl = it.dataLevel;\r\n\t var $schema = it.schema[$keyword];\r\n\t var $schemaPath = it.schemaPath + '.' + $keyword;\r\n\t var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\r\n\t var $breakOnError = !it.opts.allErrors;\r\n\t var $errorKeyword;\r\n\t var $data = 'data' + ($dataLvl || '');\r\n\t var $isData = it.opts.v5 && $schema.$data;\r\n\t var $schemaValue = $isData ? it.util.getData($schema.$data, $dataLvl, it.dataPathArr) : $schema;\r\n\t if ($isData) {\r\n\t out += ' var schema' + ($lvl) + ' = ' + ($schemaValue) + '; ';\r\n\t $schemaValue = 'schema' + $lvl;\r\n\t }\r\n\t var $op = $keyword == 'maxItems' ? '>' : '<';\r\n\t out += 'if ( ';\r\n\t if ($isData) {\r\n\t out += ' (' + ($schemaValue) + ' !== undefined && typeof ' + ($schemaValue) + ' != \\'number\\') || ';\r\n\t }\r\n\t out += ' ' + ($data) + '.length ' + ($op) + ' ' + ($schemaValue) + ') { ';\r\n\t var $errorKeyword = $keyword;\r\n\t var $$outStack = $$outStack || [];\r\n\t $$outStack.push(out);\r\n\t out = ''; /* istanbul ignore else */\r\n\t if (it.createErrors !== false) {\r\n\t out += ' { keyword: \\'' + ($errorKeyword || '_limitItems') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: \"' + ($errSchemaPath) + '\" , params: { limit: ' + ($schemaValue) + ' } ';\r\n\t if (it.opts.messages !== false) {\r\n\t out += ' , message: \\'should NOT have ';\r\n\t if ($keyword == 'maxItems') {\r\n\t out += 'more';\r\n\t } else {\r\n\t out += 'less';\r\n\t }\r\n\t out += ' than ';\r\n\t if ($isData) {\r\n\t out += '\\' + ' + ($schemaValue) + ' + \\'';\r\n\t } else {\r\n\t out += '' + ($schema);\r\n\t }\r\n\t out += ' items\\' ';\r\n\t }\r\n\t if (it.opts.verbose) {\r\n\t out += ' , schema: ';\r\n\t if ($isData) {\r\n\t out += 'validate.schema' + ($schemaPath);\r\n\t } else {\r\n\t out += '' + ($schema);\r\n\t }\r\n\t out += ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\r\n\t }\r\n\t out += ' } ';\r\n\t } else {\r\n\t out += ' {} ';\r\n\t }\r\n\t var __err = out;\r\n\t out = $$outStack.pop();\r\n\t if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */\r\n\t if (it.async) {\r\n\t out += ' throw new ValidationError([' + (__err) + ']); ';\r\n\t } else {\r\n\t out += ' validate.errors = [' + (__err) + ']; return false; ';\r\n\t }\r\n\t } else {\r\n\t out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\r\n\t }\r\n\t out += '} ';\r\n\t if ($breakOnError) {\r\n\t out += ' else { ';\r\n\t }\r\n\t return out;\r\n\t}\r\n\r\n\r\n/***/ },\r\n/* 34 */\r\n/***/ function(module, exports) {\r\n\r\n\t'use strict';\r\n\tmodule.exports = function generate__limitLength(it, $keyword) {\r\n\t var out = ' ';\r\n\t var $lvl = it.level;\r\n\t var $dataLvl = it.dataLevel;\r\n\t var $schema = it.schema[$keyword];\r\n\t var $schemaPath = it.schemaPath + '.' + $keyword;\r\n\t var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\r\n\t var $breakOnError = !it.opts.allErrors;\r\n\t var $errorKeyword;\r\n\t var $data = 'data' + ($dataLvl || '');\r\n\t var $isData = it.opts.v5 && $schema.$data;\r\n\t var $schemaValue = $isData ? it.util.getData($schema.$data, $dataLvl, it.dataPathArr) : $schema;\r\n\t if ($isData) {\r\n\t out += ' var schema' + ($lvl) + ' = ' + ($schemaValue) + '; ';\r\n\t $schemaValue = 'schema' + $lvl;\r\n\t }\r\n\t var $op = $keyword == 'maxLength' ? '>' : '<';\r\n\t out += 'if ( ';\r\n\t if ($isData) {\r\n\t out += ' (' + ($schemaValue) + ' !== undefined && typeof ' + ($schemaValue) + ' != \\'number\\') || ';\r\n\t }\r\n\t if (it.opts.unicode === false) {\r\n\t out += ' ' + ($data) + '.length ';\r\n\t } else {\r\n\t out += ' ucs2length(' + ($data) + ') ';\r\n\t }\r\n\t out += ' ' + ($op) + ' ' + ($schemaValue) + ') { ';\r\n\t var $errorKeyword = $keyword;\r\n\t var $$outStack = $$outStack || [];\r\n\t $$outStack.push(out);\r\n\t out = ''; /* istanbul ignore else */\r\n\t if (it.createErrors !== false) {\r\n\t out += ' { keyword: \\'' + ($errorKeyword || '_limitLength') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: \"' + ($errSchemaPath) + '\" , params: { limit: ' + ($schemaValue) + ' } ';\r\n\t if (it.opts.messages !== false) {\r\n\t out += ' , message: \\'should NOT be ';\r\n\t if ($keyword == 'maxLength') {\r\n\t out += 'longer';\r\n\t } else {\r\n\t out += 'shorter';\r\n\t }\r\n\t out += ' than ';\r\n\t if ($isData) {\r\n\t out += '\\' + ' + ($schemaValue) + ' + \\'';\r\n\t } else {\r\n\t out += '' + ($schema);\r\n\t }\r\n\t out += ' characters\\' ';\r\n\t }\r\n\t if (it.opts.verbose) {\r\n\t out += ' , schema: ';\r\n\t if ($isData) {\r\n\t out += 'validate.schema' + ($schemaPath);\r\n\t } else {\r\n\t out += '' + ($schema);\r\n\t }\r\n\t out += ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\r\n\t }\r\n\t out += ' } ';\r\n\t } else {\r\n\t out += ' {} ';\r\n\t }\r\n\t var __err = out;\r\n\t out = $$outStack.pop();\r\n\t if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */\r\n\t if (it.async) {\r\n\t out += ' throw new ValidationError([' + (__err) + ']); ';\r\n\t } else {\r\n\t out += ' validate.errors = [' + (__err) + ']; return false; ';\r\n\t }\r\n\t } else {\r\n\t out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\r\n\t }\r\n\t out += '} ';\r\n\t if ($breakOnError) {\r\n\t out += ' else { ';\r\n\t }\r\n\t return out;\r\n\t}\r\n\r\n\r\n/***/ },\r\n/* 35 */\r\n/***/ function(module, exports) {\r\n\r\n\t'use strict';\r\n\tmodule.exports = function generate__limitProperties(it, $keyword) {\r\n\t var out = ' ';\r\n\t var $lvl = it.level;\r\n\t var $dataLvl = it.dataLevel;\r\n\t var $schema = it.schema[$keyword];\r\n\t var $schemaPath = it.schemaPath + '.' + $keyword;\r\n\t var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\r\n\t var $breakOnError = !it.opts.allErrors;\r\n\t var $errorKeyword;\r\n\t var $data = 'data' + ($dataLvl || '');\r\n\t var $isData = it.opts.v5 && $schema.$data;\r\n\t var $schemaValue = $isData ? it.util.getData($schema.$data, $dataLvl, it.dataPathArr) : $schema;\r\n\t if ($isData) {\r\n\t out += ' var schema' + ($lvl) + ' = ' + ($schemaValue) + '; ';\r\n\t $schemaValue = 'schema' + $lvl;\r\n\t }\r\n\t var $op = $keyword == 'maxProperties' ? '>' : '<';\r\n\t out += 'if ( ';\r\n\t if ($isData) {\r\n\t out += ' (' + ($schemaValue) + ' !== undefined && typeof ' + ($schemaValue) + ' != \\'number\\') || ';\r\n\t }\r\n\t out += ' Object.keys(' + ($data) + ').length ' + ($op) + ' ' + ($schemaValue) + ') { ';\r\n\t var $errorKeyword = $keyword;\r\n\t var $$outStack = $$outStack || [];\r\n\t $$outStack.push(out);\r\n\t out = ''; /* istanbul ignore else */\r\n\t if (it.createErrors !== false) {\r\n\t out += ' { keyword: \\'' + ($errorKeyword || '_limitProperties') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: \"' + ($errSchemaPath) + '\" , params: { limit: ' + ($schemaValue) + ' } ';\r\n\t if (it.opts.messages !== false) {\r\n\t out += ' , message: \\'should NOT have ';\r\n\t if ($keyword == 'maxProperties') {\r\n\t out += 'more';\r\n\t } else {\r\n\t out += 'less';\r\n\t }\r\n\t out += ' than ';\r\n\t if ($isData) {\r\n\t out += '\\' + ' + ($schemaValue) + ' + \\'';\r\n\t } else {\r\n\t out += '' + ($schema);\r\n\t }\r\n\t out += ' properties\\' ';\r\n\t }\r\n\t if (it.opts.verbose) {\r\n\t out += ' , schema: ';\r\n\t if ($isData) {\r\n\t out += 'validate.schema' + ($schemaPath);\r\n\t } else {\r\n\t out += '' + ($schema);\r\n\t }\r\n\t out += ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\r\n\t }\r\n\t out += ' } ';\r\n\t } else {\r\n\t out += ' {} ';\r\n\t }\r\n\t var __err = out;\r\n\t out = $$outStack.pop();\r\n\t if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */\r\n\t if (it.async) {\r\n\t out += ' throw new ValidationError([' + (__err) + ']); ';\r\n\t } else {\r\n\t out += ' validate.errors = [' + (__err) + ']; return false; ';\r\n\t }\r\n\t } else {\r\n\t out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\r\n\t }\r\n\t out += '} ';\r\n\t if ($breakOnError) {\r\n\t out += ' else { ';\r\n\t }\r\n\t return out;\r\n\t}\r\n\r\n\r\n/***/ },\r\n/* 36 */\r\n/***/ function(module, exports) {\r\n\r\n\t'use strict';\r\n\tmodule.exports = function generate_multipleOf(it, $keyword) {\r\n\t var out = ' ';\r\n\t var $lvl = it.level;\r\n\t var $dataLvl = it.dataLevel;\r\n\t var $schema = it.schema[$keyword];\r\n\t var $schemaPath = it.schemaPath + '.' + $keyword;\r\n\t var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\r\n\t var $breakOnError = !it.opts.allErrors;\r\n\t var $errorKeyword;\r\n\t var $data = 'data' + ($dataLvl || '');\r\n\t var $isData = it.opts.v5 && $schema.$data;\r\n\t var $schemaValue = $isData ? it.util.getData($schema.$data, $dataLvl, it.dataPathArr) : $schema;\r\n\t if ($isData) {\r\n\t out += ' var schema' + ($lvl) + ' = ' + ($schemaValue) + '; ';\r\n\t $schemaValue = 'schema' + $lvl;\r\n\t }\r\n\t out += 'var division' + ($lvl) + ';if (';\r\n\t if ($isData) {\r\n\t out += ' ' + ($schemaValue) + ' !== undefined && ( typeof ' + ($schemaValue) + ' != \\'number\\' || ';\r\n\t }\r\n\t out += ' (division' + ($lvl) + ' = ' + ($data) + ' / ' + ($schemaValue) + ', ';\r\n\t if (it.opts.multipleOfPrecision) {\r\n\t out += ' Math.abs(Math.round(division' + ($lvl) + ') - division' + ($lvl) + ') > 1e-' + (it.opts.multipleOfPrecision) + ' ';\r\n\t } else {\r\n\t out += ' division' + ($lvl) + ' !== parseInt(division' + ($lvl) + ') ';\r\n\t }\r\n\t out += ' ) ';\r\n\t if ($isData) {\r\n\t out += ' ) ';\r\n\t }\r\n\t out += ' ) { ';\r\n\t var $$outStack = $$outStack || [];\r\n\t $$outStack.push(out);\r\n\t out = ''; /* istanbul ignore else */\r\n\t if (it.createErrors !== false) {\r\n\t out += ' { keyword: \\'' + ($errorKeyword || 'multipleOf') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: \"' + ($errSchemaPath) + '\" , params: { multipleOf: ' + ($schemaValue) + ' } ';\r\n\t if (it.opts.messages !== false) {\r\n\t out += ' , message: \\'should be multiple of ';\r\n\t if ($isData) {\r\n\t out += '\\' + ' + ($schemaValue);\r\n\t } else {\r\n\t out += '' + ($schema) + '\\'';\r\n\t }\r\n\t }\r\n\t if (it.opts.verbose) {\r\n\t out += ' , schema: ';\r\n\t if ($isData) {\r\n\t out += 'validate.schema' + ($schemaPath);\r\n\t } else {\r\n\t out += '' + ($schema);\r\n\t }\r\n\t out += ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\r\n\t }\r\n\t out += ' } ';\r\n\t } else {\r\n\t out += ' {} ';\r\n\t }\r\n\t var __err = out;\r\n\t out = $$outStack.pop();\r\n\t if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */\r\n\t if (it.async) {\r\n\t out += ' throw new ValidationError([' + (__err) + ']); ';\r\n\t } else {\r\n\t out += ' validate.errors = [' + (__err) + ']; return false; ';\r\n\t }\r\n\t } else {\r\n\t out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\r\n\t }\r\n\t out += '} ';\r\n\t if ($breakOnError) {\r\n\t out += ' else { ';\r\n\t }\r\n\t return out;\r\n\t}\r\n\r\n\r\n/***/ },\r\n/* 37 */\r\n/***/ function(module, exports) {\r\n\r\n\t'use strict';\r\n\tmodule.exports = function generate_not(it, $keyword) {\r\n\t var out = ' ';\r\n\t var $lvl = it.level;\r\n\t var $dataLvl = it.dataLevel;\r\n\t var $schema = it.schema[$keyword];\r\n\t var $schemaPath = it.schemaPath + '.' + $keyword;\r\n\t var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\r\n\t var $breakOnError = !it.opts.allErrors;\r\n\t var $errorKeyword;\r\n\t var $data = 'data' + ($dataLvl || '');\r\n\t var $errs = 'errs__' + $lvl;\r\n\t var $it = it.util.copy(it);\r\n\t $it.level++;\r\n\t if (it.util.schemaHasRules($schema, it.RULES.all)) {\r\n\t $it.schema = $schema;\r\n\t $it.schemaPath = $schemaPath;\r\n\t $it.errSchemaPath = $errSchemaPath;\r\n\t out += ' var ' + ($errs) + ' = errors; ';\r\n\t var $wasComposite = it.compositeRule;\r\n\t it.compositeRule = $it.compositeRule = true;\r\n\t $it.createErrors = false;\r\n\t var $allErrorsOption;\r\n\t if ($it.opts.allErrors) {\r\n\t $allErrorsOption = $it.opts.allErrors;\r\n\t $it.opts.allErrors = false;\r\n\t }\r\n\t out += ' ' + (it.validate($it)) + ' ';\r\n\t $it.createErrors = true;\r\n\t if ($allErrorsOption) $it.opts.allErrors = $allErrorsOption;\r\n\t it.compositeRule = $it.compositeRule = $wasComposite;\r\n\t out += ' if (valid' + ($it.level) + ') { ';\r\n\t var $$outStack = $$outStack || [];\r\n\t $$outStack.push(out);\r\n\t out = ''; /* istanbul ignore else */\r\n\t if (it.createErrors !== false) {\r\n\t out += ' { keyword: \\'' + ($errorKeyword || 'not') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: \"' + ($errSchemaPath) + '\" , params: {} ';\r\n\t if (it.opts.messages !== false) {\r\n\t out += ' , message: \\'should NOT be valid\\' ';\r\n\t }\r\n\t if (it.opts.verbose) {\r\n\t out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\r\n\t }\r\n\t out += ' } ';\r\n\t } else {\r\n\t out += ' {} ';\r\n\t }\r\n\t var __err = out;\r\n\t out = $$outStack.pop();\r\n\t if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */\r\n\t if (it.async) {\r\n\t out += ' throw new ValidationError([' + (__err) + ']); ';\r\n\t } else {\r\n\t out += ' validate.errors = [' + (__err) + ']; return false; ';\r\n\t }\r\n\t } else {\r\n\t out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\r\n\t }\r\n\t out += ' } else { errors = ' + ($errs) + '; if (vErrors !== null) { if (' + ($errs) + ') vErrors.length = ' + ($errs) + '; else vErrors = null; } ';\r\n\t if (it.opts.allErrors) {\r\n\t out += ' } ';\r\n\t }\r\n\t } else {\r\n\t out += ' var err = '; /* istanbul ignore else */\r\n\t if (it.createErrors !== false) {\r\n\t out += ' { keyword: \\'' + ($errorKeyword || 'not') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: \"' + ($errSchemaPath) + '\" , params: {} ';\r\n\t if (it.opts.messages !== false) {\r\n\t out += ' , message: \\'should NOT be valid\\' ';\r\n\t }\r\n\t if (it.opts.verbose) {\r\n\t out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\r\n\t }\r\n\t out += ' } ';\r\n\t } else {\r\n\t out += ' {} ';\r\n\t }\r\n\t out += '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\r\n\t if ($breakOnError) {\r\n\t out += ' if (false) { ';\r\n\t }\r\n\t }\r\n\t return out;\r\n\t}\r\n\r\n\r\n/***/ },\r\n/* 38 */\r\n/***/ function(module, exports) {\r\n\r\n\t'use strict';\r\n\tmodule.exports = function generate_oneOf(it, $keyword) {\r\n\t var out = ' ';\r\n\t var $lvl = it.level;\r\n\t var $dataLvl = it.dataLevel;\r\n\t var $schema = it.schema[$keyword];\r\n\t var $schemaPath = it.schemaPath + '.' + $keyword;\r\n\t var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\r\n\t var $breakOnError = !it.opts.allErrors;\r\n\t var $errorKeyword;\r\n\t var $data = 'data' + ($dataLvl || '');\r\n\t var $valid = 'valid' + $lvl;\r\n\t var $errs = 'errs__' + $lvl;\r\n\t var $it = it.util.copy(it);\r\n\t var $closingBraces = '';\r\n\t $it.level++;\r\n\t out += 'var ' + ($errs) + ' = errors;var prevValid' + ($lvl) + ' = false;var ' + ($valid) + ' = false; ';\r\n\t var $wasComposite = it.compositeRule;\r\n\t it.compositeRule = $it.compositeRule = true;\r\n\t var arr1 = $schema;\r\n\t if (arr1) {\r\n\t var $sch, $i = -1,\r\n\t l1 = arr1.length - 1;\r\n\t while ($i < l1) {\r\n\t $sch = arr1[$i += 1];\r\n\t if (it.util.schemaHasRules($sch, it.RULES.all)) {\r\n\t $it.schema = $sch;\r\n\t $it.schemaPath = $schemaPath + '[' + $i + ']';\r\n\t $it.errSchemaPath = $errSchemaPath + '/' + $i;\r\n\t out += ' ' + (it.validate($it)) + ' ';\r\n\t } else {\r\n\t out += ' var valid' + ($it.level) + ' = true; ';\r\n\t }\r\n\t if ($i) {\r\n\t out += ' if (valid' + ($it.level) + ' && prevValid' + ($lvl) + ') ' + ($valid) + ' = false; else { ';\r\n\t $closingBraces += '}';\r\n\t }\r\n\t out += ' if (valid' + ($it.level) + ') ' + ($valid) + ' = prevValid' + ($lvl) + ' = true;';\r\n\t }\r\n\t }\r\n\t it.compositeRule = $it.compositeRule = $wasComposite;\r\n\t out += '' + ($closingBraces) + 'if (!' + ($valid) + ') { ';\r\n\t var $$outStack = $$outStack || [];\r\n\t $$outStack.push(out);\r\n\t out = ''; /* istanbul ignore else */\r\n\t if (it.createErrors !== false) {\r\n\t out += ' { keyword: \\'' + ($errorKeyword || 'oneOf') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: \"' + ($errSchemaPath) + '\" , params: {} ';\r\n\t if (it.opts.messages !== false) {\r\n\t out += ' , message: \\'should match exactly one schema in oneOf\\' ';\r\n\t }\r\n\t if (it.opts.verbose) {\r\n\t out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\r\n\t }\r\n\t out += ' } ';\r\n\t } else {\r\n\t out += ' {} ';\r\n\t }\r\n\t var __err = out;\r\n\t out = $$outStack.pop();\r\n\t if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */\r\n\t if (it.async) {\r\n\t out += ' throw new ValidationError([' + (__err) + ']); ';\r\n\t } else {\r\n\t out += ' validate.errors = [' + (__err) + ']; return false; ';\r\n\t }\r\n\t } else {\r\n\t out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\r\n\t }\r\n\t out += '} else { errors = ' + ($errs) + '; if (vErrors !== null) { if (' + ($errs) + ') vErrors.length = ' + ($errs) + '; else vErrors = null; }';\r\n\t if (it.opts.allErrors) {\r\n\t out += ' } ';\r\n\t }\r\n\t return out;\r\n\t}\r\n\r\n\r\n/***/ },\r\n/* 39 */\r\n/***/ function(module, exports) {\r\n\r\n\t'use strict';\r\n\tmodule.exports = function generate_pattern(it, $keyword) {\r\n\t var out = ' ';\r\n\t var $lvl = it.level;\r\n\t var $dataLvl = it.dataLevel;\r\n\t var $schema = it.schema[$keyword];\r\n\t var $schemaPath = it.schemaPath + '.' + $keyword;\r\n\t var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\r\n\t var $breakOnError = !it.opts.allErrors;\r\n\t var $errorKeyword;\r\n\t var $data = 'data' + ($dataLvl || '');\r\n\t var $isData = it.opts.v5 && $schema.$data;\r\n\t var $schemaValue = $isData ? it.util.getData($schema.$data, $dataLvl, it.dataPathArr) : $schema;\r\n\t if ($isData) {\r\n\t out += ' var schema' + ($lvl) + ' = ' + ($schemaValue) + '; ';\r\n\t $schemaValue = 'schema' + $lvl;\r\n\t }\r\n\t var $regexp = $isData ? '(new RegExp(' + $schemaValue + '))' : it.usePattern($schema);\r\n\t out += 'if ( ';\r\n\t if ($isData) {\r\n\t out += ' (' + ($schemaValue) + ' !== undefined && typeof ' + ($schemaValue) + ' != \\'string\\') || ';\r\n\t }\r\n\t out += ' !' + ($regexp) + '.test(' + ($data) + ') ) { ';\r\n\t var $$outStack = $$outStack || [];\r\n\t $$outStack.push(out);\r\n\t out = ''; /* istanbul ignore else */\r\n\t if (it.createErrors !== false) {\r\n\t out += ' { keyword: \\'' + ($errorKeyword || 'pattern') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: \"' + ($errSchemaPath) + '\" , params: { pattern: ';\r\n\t if ($isData) {\r\n\t out += '' + ($schemaValue);\r\n\t } else {\r\n\t out += '' + (it.util.toQuotedString($schema));\r\n\t }\r\n\t out += ' } ';\r\n\t if (it.opts.messages !== false) {\r\n\t out += ' , message: \\'should match pattern \"';\r\n\t if ($isData) {\r\n\t out += '\\' + ' + ($schemaValue) + ' + \\'';\r\n\t } else {\r\n\t out += '' + (it.util.escapeQuotes($schema));\r\n\t }\r\n\t out += '\"\\' ';\r\n\t }\r\n\t if (it.opts.verbose) {\r\n\t out += ' , schema: ';\r\n\t if ($isData) {\r\n\t out += 'validate.schema' + ($schemaPath);\r\n\t } else {\r\n\t out += '' + (it.util.toQuotedString($schema));\r\n\t }\r\n\t out += ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\r\n\t }\r\n\t out += ' } ';\r\n\t } else {\r\n\t out += ' {} ';\r\n\t }\r\n\t var __err = out;\r\n\t out = $$outStack.pop();\r\n\t if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */\r\n\t if (it.async) {\r\n\t out += ' throw new ValidationError([' + (__err) + ']); ';\r\n\t } else {\r\n\t out += ' validate.errors = [' + (__err) + ']; return false; ';\r\n\t }\r\n\t } else {\r\n\t out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\r\n\t }\r\n\t out += '} ';\r\n\t if ($breakOnError) {\r\n\t out += ' else { ';\r\n\t }\r\n\t return out;\r\n\t}\r\n\r\n\r\n/***/ },\r\n/* 40 */\r\n/***/ function(module, exports) {\r\n\r\n\t'use strict';\r\n\tmodule.exports = function generate_properties(it, $keyword) {\r\n\t var out = ' ';\r\n\t var $lvl = it.level;\r\n\t var $dataLvl = it.dataLevel;\r\n\t var $schema = it.schema[$keyword];\r\n\t var $schemaPath = it.schemaPath + '.' + $keyword;\r\n\t var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\r\n\t var $breakOnError = !it.opts.allErrors;\r\n\t var $errorKeyword;\r\n\t var $data = 'data' + ($dataLvl || '');\r\n\t var $valid = 'valid' + $lvl;\r\n\t var $errs = 'errs__' + $lvl;\r\n\t var $it = it.util.copy(it);\r\n\t var $closingBraces = '';\r\n\t $it.level++;\r\n\t var $dataNxt = $it.dataLevel = it.dataLevel + 1,\r\n\t $nextData = 'data' + $dataNxt;\r\n\t var $schemaKeys = Object.keys($schema || {}),\r\n\t $pProperties = it.schema.patternProperties || {},\r\n\t $pPropertyKeys = Object.keys($pProperties),\r\n\t $aProperties = it.schema.additionalProperties,\r\n\t $someProperties = $schemaKeys.length || $pPropertyKeys.length,\r\n\t $noAdditional = $aProperties === false,\r\n\t $additionalIsSchema = typeof $aProperties == 'object' && Object.keys($aProperties).length,\r\n\t $removeAdditional = it.opts.removeAdditional,\r\n\t $checkAdditional = $noAdditional || $additionalIsSchema || $removeAdditional;\r\n\t var $required = it.schema.required;\r\n\t if ($required && !(it.opts.v5 && $required.$data) && $required.length < it.opts.loopRequired) var $requiredHash = it.util.toHash($required);\r\n\t if (it.opts.v5) {\r\n\t var $pgProperties = it.schema.patternGroups || {},\r\n\t $pgPropertyKeys = Object.keys($pgProperties);\r\n\t }\r\n\t out += 'var ' + ($errs) + ' = errors;var valid' + ($it.level) + ' = true;';\r\n\t if ($checkAdditional) {\r\n\t out += ' for (var key' + ($lvl) + ' in ' + ($data) + ') { ';\r\n\t if ($someProperties) {\r\n\t out += ' var isAdditional' + ($lvl) + ' = !(false ';\r\n\t if ($schemaKeys.length) {\r\n\t if ($schemaKeys.length > 5) {\r\n\t out += ' || validate.schema' + ($schemaPath) + '[key' + ($lvl) + '] ';\r\n\t } else {\r\n\t var arr1 = $schemaKeys;\r\n\t if (arr1) {\r\n\t var $propertyKey, i1 = -1,\r\n\t l1 = arr1.length - 1;\r\n\t while (i1 < l1) {\r\n\t $propertyKey = arr1[i1 += 1];\r\n\t out += ' || key' + ($lvl) + ' == ' + (it.util.toQuotedString($propertyKey)) + ' ';\r\n\t }\r\n\t }\r\n\t }\r\n\t }\r\n\t if ($pPropertyKeys.length) {\r\n\t var arr2 = $pPropertyKeys;\r\n\t if (arr2) {\r\n\t var $pProperty, $i = -1,\r\n\t l2 = arr2.length - 1;\r\n\t while ($i < l2) {\r\n\t $pProperty = arr2[$i += 1];\r\n\t out += ' || ' + (it.usePattern($pProperty)) + '.test(key' + ($lvl) + ') ';\r\n\t }\r\n\t }\r\n\t }\r\n\t if (it.opts.v5 && $pgPropertyKeys && $pgPropertyKeys.length) {\r\n\t var arr3 = $pgPropertyKeys;\r\n\t if (arr3) {\r\n\t var $pgProperty, $i = -1,\r\n\t l3 = arr3.length - 1;\r\n\t while ($i < l3) {\r\n\t $pgProperty = arr3[$i += 1];\r\n\t out += ' || ' + (it.usePattern($pgProperty)) + '.test(key' + ($lvl) + ') ';\r\n\t }\r\n\t }\r\n\t }\r\n\t out += ' ); if (isAdditional' + ($lvl) + ') { ';\r\n\t }\r\n\t if ($removeAdditional == 'all') {\r\n\t out += ' delete ' + ($data) + '[key' + ($lvl) + ']; ';\r\n\t } else {\r\n\t var $currentErrorPath = it.errorPath;\r\n\t var $additionalProperty = '\\' + key' + $lvl + ' + \\'';\r\n\t if (it.opts._errorDataPathProperty) {\r\n\t it.errorPath = it.util.getPathExpr(it.errorPath, 'key' + $lvl, it.opts.jsonPointers);\r\n\t }\r\n\t if ($noAdditional) {\r\n\t if ($removeAdditional) {\r\n\t out += ' delete ' + ($data) + '[key' + ($lvl) + ']; ';\r\n\t } else {\r\n\t out += ' valid' + ($it.level) + ' = false; ';\r\n\t var $currErrSchemaPath = $errSchemaPath;\r\n\t $errSchemaPath = it.errSchemaPath + '/additionalProperties';\r\n\t var $$outStack = $$outStack || [];\r\n\t $$outStack.push(out);\r\n\t out = ''; /* istanbul ignore else */\r\n\t if (it.createErrors !== false) {\r\n\t out += ' { keyword: \\'' + ($errorKeyword || 'additionalProperties') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: \"' + ($errSchemaPath) + '\" , params: { additionalProperty: \\'' + ($additionalProperty) + '\\' } ';\r\n\t if (it.opts.messages !== false) {\r\n\t out += ' , message: \\'should NOT have additional properties\\' ';\r\n\t }\r\n\t if (it.opts.verbose) {\r\n\t out += ' , schema: false , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\r\n\t }\r\n\t out += ' } ';\r\n\t } else {\r\n\t out += ' {} ';\r\n\t }\r\n\t var __err = out;\r\n\t out = $$outStack.pop();\r\n\t if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */\r\n\t if (it.async) {\r\n\t out += ' throw new ValidationError([' + (__err) + ']); ';\r\n\t } else {\r\n\t out += ' validate.errors = [' + (__err) + ']; return false; ';\r\n\t }\r\n\t } else {\r\n\t out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\r\n\t }\r\n\t $errSchemaPath = $currErrSchemaPath;\r\n\t if ($breakOnError) {\r\n\t out += ' break; ';\r\n\t }\r\n\t }\r\n\t } else if ($additionalIsSchema) {\r\n\t if ($removeAdditional == 'failing') {\r\n\t out += ' var ' + ($errs) + ' = errors; ';\r\n\t var $wasComposite = it.compositeRule;\r\n\t it.compositeRule = $it.compositeRule = true;\r\n\t $it.schema = $aProperties;\r\n\t $it.schemaPath = it.schemaPath + '.additionalProperties';\r\n\t $it.errSchemaPath = it.errSchemaPath + '/additionalProperties';\r\n\t $it.errorPath = it.opts._errorDataPathProperty ? it.errorPath : it.util.getPathExpr(it.errorPath, 'key' + $lvl, it.opts.jsonPointers);\r\n\t var $passData = $data + '[key' + $lvl + ']';\r\n\t $it.dataPathArr[$dataNxt] = 'key' + $lvl;\r\n\t var $code = it.validate($it);\r\n\t if (it.util.varOccurences($code, $nextData) < 2) {\r\n\t out += ' ' + (it.util.varReplace($code, $nextData, $passData)) + ' ';\r\n\t } else {\r\n\t out += ' var ' + ($nextData) + ' = ' + ($passData) + '; ' + ($code) + ' ';\r\n\t }\r\n\t out += ' if (!valid' + ($it.level) + ') { errors = ' + ($errs) + '; if (validate.errors !== null) { if (errors) validate.errors.length = errors; else validate.errors = null; } delete ' + ($data) + '[key' + ($lvl) + ']; } ';\r\n\t it.compositeRule = $it.compositeRule = $wasComposite;\r\n\t } else {\r\n\t $it.schema = $aProperties;\r\n\t $it.schemaPath = it.schemaPath + '.additionalProperties';\r\n\t $it.errSchemaPath = it.errSchemaPath + '/additionalProperties';\r\n\t $it.errorPath = it.opts._errorDataPathProperty ? it.errorPath : it.util.getPathExpr(it.errorPath, 'key' + $lvl, it.opts.jsonPointers);\r\n\t var $passData = $data + '[key' + $lvl + ']';\r\n\t $it.dataPathArr[$dataNxt] = 'key' + $lvl;\r\n\t var $code = it.validate($it);\r\n\t if (it.util.varOccurences($code, $nextData) < 2) {\r\n\t out += ' ' + (it.util.varReplace($code, $nextData, $passData)) + ' ';\r\n\t } else {\r\n\t out += ' var ' + ($nextData) + ' = ' + ($passData) + '; ' + ($code) + ' ';\r\n\t }\r\n\t if ($breakOnError) {\r\n\t out += ' if (!valid' + ($it.level) + ') break; ';\r\n\t }\r\n\t }\r\n\t }\r\n\t it.errorPath = $currentErrorPath;\r\n\t }\r\n\t if ($someProperties) {\r\n\t out += ' } ';\r\n\t }\r\n\t out += ' } ';\r\n\t if ($breakOnError) {\r\n\t out += ' if (valid' + ($it.level) + ') { ';\r\n\t $closingBraces += '}';\r\n\t }\r\n\t }\r\n\t var $useDefaults = it.opts.useDefaults && !it.compositeRule;\r\n\t if ($schemaKeys.length) {\r\n\t var arr4 = $schemaKeys;\r\n\t if (arr4) {\r\n\t var $propertyKey, i4 = -1,\r\n\t l4 = arr4.length - 1;\r\n\t while (i4 < l4) {\r\n\t $propertyKey = arr4[i4 += 1];\r\n\t var $sch = $schema[$propertyKey];\r\n\t if (it.util.schemaHasRules($sch, it.RULES.all)) {\r\n\t var $prop = it.util.getProperty($propertyKey),\r\n\t $passData = $data + $prop,\r\n\t $hasDefault = $useDefaults && $sch.default !== undefined;\r\n\t $it.schema = $sch;\r\n\t $it.schemaPath = $schemaPath + $prop;\r\n\t $it.errSchemaPath = $errSchemaPath + '/' + it.util.escapeFragment($propertyKey);\r\n\t $it.errorPath = it.util.getPath(it.errorPath, $propertyKey, it.opts.jsonPointers);\r\n\t $it.dataPathArr[$dataNxt] = it.util.toQuotedString($propertyKey);\r\n\t var $code = it.validate($it);\r\n\t if (it.util.varOccurences($code, $nextData) < 2) {\r\n\t $code = it.util.varReplace($code, $nextData, $passData);\r\n\t var $useData = $passData;\r\n\t } else {\r\n\t var $useData = $nextData;\r\n\t out += ' var ' + ($nextData) + ' = ' + ($passData) + '; ';\r\n\t }\r\n\t if ($hasDefault) {\r\n\t out += ' ' + ($code) + ' ';\r\n\t } else {\r\n\t if ($requiredHash && $requiredHash[$propertyKey]) {\r\n\t out += ' if (' + ($useData) + ' === undefined) { valid' + ($it.level) + ' = false; ';\r\n\t var $currentErrorPath = it.errorPath,\r\n\t $currErrSchemaPath = $errSchemaPath,\r\n\t $missingProperty = it.util.escapeQuotes($propertyKey);\r\n\t if (it.opts._errorDataPathProperty) {\r\n\t it.errorPath = it.util.getPath($currentErrorPath, $propertyKey, it.opts.jsonPointers);\r\n\t }\r\n\t $errSchemaPath = it.errSchemaPath + '/required';\r\n\t var $$outStack = $$outStack || [];\r\n\t $$outStack.push(out);\r\n\t out = ''; /* istanbul ignore else */\r\n\t if (it.createErrors !== false) {\r\n\t out += ' { keyword: \\'' + ($errorKeyword || 'required') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: \"' + ($errSchemaPath) + '\" , params: { missingProperty: \\'' + ($missingProperty) + '\\' } ';\r\n\t if (it.opts.messages !== false) {\r\n\t out += ' , message: \\'';\r\n\t if (it.opts._errorDataPathProperty) {\r\n\t out += 'is a required property';\r\n\t } else {\r\n\t out += 'should have required property \\\\\\'' + ($missingProperty) + '\\\\\\'';\r\n\t }\r\n\t out += '\\' ';\r\n\t }\r\n\t if (it.opts.verbose) {\r\n\t out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\r\n\t }\r\n\t out += ' } ';\r\n\t } else {\r\n\t out += ' {} ';\r\n\t }\r\n\t var __err = out;\r\n\t out = $$outStack.pop();\r\n\t if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */\r\n\t if (it.async) {\r\n\t out += ' throw new ValidationError([' + (__err) + ']); ';\r\n\t } else {\r\n\t out += ' validate.errors = [' + (__err) + ']; return false; ';\r\n\t }\r\n\t } else {\r\n\t out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\r\n\t }\r\n\t $errSchemaPath = $currErrSchemaPath;\r\n\t it.errorPath = $currentErrorPath;\r\n\t out += ' } else { ';\r\n\t } else {\r\n\t if ($breakOnError) {\r\n\t out += ' if (' + ($useData) + ' === undefined) { valid' + ($it.level) + ' = true; } else { ';\r\n\t } else {\r\n\t out += ' if (' + ($useData) + ' !== undefined) { ';\r\n\t }\r\n\t }\r\n\t out += ' ' + ($code) + ' } ';\r\n\t }\r\n\t }\r\n\t if ($breakOnError) {\r\n\t out += ' if (valid' + ($it.level) + ') { ';\r\n\t $closingBraces += '}';\r\n\t }\r\n\t }\r\n\t }\r\n\t }\r\n\t var arr5 = $pPropertyKeys;\r\n\t if (arr5) {\r\n\t var $pProperty, i5 = -1,\r\n\t l5 = arr5.length - 1;\r\n\t while (i5 < l5) {\r\n\t $pProperty = arr5[i5 += 1];\r\n\t var $sch = $pProperties[$pProperty];\r\n\t if (it.util.schemaHasRules($sch, it.RULES.all)) {\r\n\t $it.schema = $sch;\r\n\t $it.schemaPath = it.schemaPath + '.patternProperties' + it.util.getProperty($pProperty);\r\n\t $it.errSchemaPath = it.errSchemaPath + '/patternProperties/' + it.util.escapeFragment($pProperty);\r\n\t out += ' for (var key' + ($lvl) + ' in ' + ($data) + ') { if (' + (it.usePattern($pProperty)) + '.test(key' + ($lvl) + ')) { ';\r\n\t $it.errorPath = it.util.getPathExpr(it.errorPath, 'key' + $lvl, it.opts.jsonPointers);\r\n\t var $passData = $data + '[key' + $lvl + ']';\r\n\t $it.dataPathArr[$dataNxt] = 'key' + $lvl;\r\n\t var $code = it.validate($it);\r\n\t if (it.util.varOccurences($code, $nextData) < 2) {\r\n\t out += ' ' + (it.util.varReplace($code, $nextData, $passData)) + ' ';\r\n\t } else {\r\n\t out += ' var ' + ($nextData) + ' = ' + ($passData) + '; ' + ($code) + ' ';\r\n\t }\r\n\t if ($breakOnError) {\r\n\t out += ' if (!valid' + ($it.level) + ') break; ';\r\n\t }\r\n\t out += ' } ';\r\n\t if ($breakOnError) {\r\n\t out += ' else valid' + ($it.level) + ' = true; ';\r\n\t }\r\n\t out += ' } ';\r\n\t if ($breakOnError) {\r\n\t out += ' if (valid' + ($it.level) + ') { ';\r\n\t $closingBraces += '}';\r\n\t }\r\n\t }\r\n\t }\r\n\t }\r\n\t if (it.opts.v5) {\r\n\t var arr6 = $pgPropertyKeys;\r\n\t if (arr6) {\r\n\t var $pgProperty, i6 = -1,\r\n\t l6 = arr6.length - 1;\r\n\t while (i6 < l6) {\r\n\t $pgProperty = arr6[i6 += 1];\r\n\t var $pgSchema = $pgProperties[$pgProperty],\r\n\t $sch = $pgSchema.schema;\r\n\t if (it.util.schemaHasRules($sch, it.RULES.all)) {\r\n\t $it.schema = $sch;\r\n\t $it.schemaPath = it.schemaPath + '.patternGroups' + it.util.getProperty($pgProperty) + '.schema';\r\n\t $it.errSchemaPath = it.errSchemaPath + '/patternGroups/' + it.util.escapeFragment($pgProperty) + '/schema';\r\n\t out += ' var pgPropCount' + ($lvl) + ' = 0; for (var key' + ($lvl) + ' in ' + ($data) + ') { if (' + (it.usePattern($pgProperty)) + '.test(key' + ($lvl) + ')) { pgPropCount' + ($lvl) + '++; ';\r\n\t $it.errorPath = it.util.getPathExpr(it.errorPath, 'key' + $lvl, it.opts.jsonPointers);\r\n\t var $passData = $data + '[key' + $lvl + ']';\r\n\t $it.dataPathArr[$dataNxt] = 'key' + $lvl;\r\n\t var $code = it.validate($it);\r\n\t if (it.util.varOccurences($code, $nextData) < 2) {\r\n\t out += ' ' + (it.util.varReplace($code, $nextData, $passData)) + ' ';\r\n\t } else {\r\n\t out += ' var ' + ($nextData) + ' = ' + ($passData) + '; ' + ($code) + ' ';\r\n\t }\r\n\t if ($breakOnError) {\r\n\t out += ' if (!valid' + ($it.level) + ') break; ';\r\n\t }\r\n\t out += ' } ';\r\n\t if ($breakOnError) {\r\n\t out += ' else valid' + ($it.level) + ' = true; ';\r\n\t }\r\n\t out += ' } ';\r\n\t if ($breakOnError) {\r\n\t out += ' if (valid' + ($it.level) + ') { ';\r\n\t $closingBraces += '}';\r\n\t }\r\n\t var $pgMin = $pgSchema.minimum,\r\n\t $pgMax = $pgSchema.maximum;\r\n\t if ($pgMin !== undefined || $pgMax !== undefined) {\r\n\t out += ' var ' + ($valid) + ' = true; ';\r\n\t var $currErrSchemaPath = $errSchemaPath;\r\n\t if ($pgMin !== undefined) {\r\n\t var $limit = $pgMin,\r\n\t $reason = 'minimum',\r\n\t $moreOrLess = 'less';\r\n\t out += ' ' + ($valid) + ' = pgPropCount' + ($lvl) + ' >= ' + ($pgMin) + '; ';\r\n\t $errSchemaPath = it.errSchemaPath + '/patternGroups/minimum';\r\n\t out += ' if (!' + ($valid) + ') { ';\r\n\t var $$outStack = $$outStack || [];\r\n\t $$outStack.push(out);\r\n\t out = ''; /* istanbul ignore else */\r\n\t if (it.createErrors !== false) {\r\n\t out += ' { keyword: \\'' + ($errorKeyword || 'patternGroups') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: \"' + ($errSchemaPath) + '\" , params: { reason: \\'' + ($reason) + '\\', limit: ' + ($limit) + ', pattern: \\'' + (it.util.escapeQuotes($pgProperty)) + '\\' } ';\r\n\t if (it.opts.messages !== false) {\r\n\t out += ' , message: \\'should NOT have ' + ($moreOrLess) + ' than ' + ($limit) + ' properties matching pattern \"' + (it.util.escapeQuotes($pgProperty)) + '\"\\' ';\r\n\t }\r\n\t if (it.opts.verbose) {\r\n\t out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\r\n\t }\r\n\t out += ' } ';\r\n\t } else {\r\n\t out += ' {} ';\r\n\t }\r\n\t var __err = out;\r\n\t out = $$outStack.pop();\r\n\t if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */\r\n\t if (it.async) {\r\n\t out += ' throw new ValidationError([' + (__err) + ']); ';\r\n\t } else {\r\n\t out += ' validate.errors = [' + (__err) + ']; return false; ';\r\n\t }\r\n\t } else {\r\n\t out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\r\n\t }\r\n\t out += ' } ';\r\n\t if ($pgMax !== undefined) {\r\n\t out += ' else ';\r\n\t }\r\n\t }\r\n\t if ($pgMax !== undefined) {\r\n\t var $limit = $pgMax,\r\n\t $reason = 'maximum',\r\n\t $moreOrLess = 'more';\r\n\t out += ' ' + ($valid) + ' = pgPropCount' + ($lvl) + ' <= ' + ($pgMax) + '; ';\r\n\t $errSchemaPath = it.errSchemaPath + '/patternGroups/maximum';\r\n\t out += ' if (!' + ($valid) + ') { ';\r\n\t var $$outStack = $$outStack || [];\r\n\t $$outStack.push(out);\r\n\t out = ''; /* istanbul ignore else */\r\n\t if (it.createErrors !== false) {\r\n\t out += ' { keyword: \\'' + ($errorKeyword || 'patternGroups') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: \"' + ($errSchemaPath) + '\" , params: { reason: \\'' + ($reason) + '\\', limit: ' + ($limit) + ', pattern: \\'' + (it.util.escapeQuotes($pgProperty)) + '\\' } ';\r\n\t if (it.opts.messages !== false) {\r\n\t out += ' , message: \\'should NOT have ' + ($moreOrLess) + ' than ' + ($limit) + ' properties matching pattern \"' + (it.util.escapeQuotes($pgProperty)) + '\"\\' ';\r\n\t }\r\n\t if (it.opts.verbose) {\r\n\t out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\r\n\t }\r\n\t out += ' } ';\r\n\t } else {\r\n\t out += ' {} ';\r\n\t }\r\n\t var __err = out;\r\n\t out = $$outStack.pop();\r\n\t if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */\r\n\t if (it.async) {\r\n\t out += ' throw new ValidationError([' + (__err) + ']); ';\r\n\t } else {\r\n\t out += ' validate.errors = [' + (__err) + ']; return false; ';\r\n\t }\r\n\t } else {\r\n\t out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\r\n\t }\r\n\t out += ' } ';\r\n\t }\r\n\t $errSchemaPath = $currErrSchemaPath;\r\n\t if ($breakOnError) {\r\n\t out += ' if (' + ($valid) + ') { ';\r\n\t $closingBraces += '}';\r\n\t }\r\n\t }\r\n\t }\r\n\t }\r\n\t }\r\n\t }\r\n\t if ($breakOnError) {\r\n\t out += ' ' + ($closingBraces) + ' if (' + ($errs) + ' == errors) {';\r\n\t }\r\n\t out = it.util.cleanUpCode(out);\r\n\t return out;\r\n\t}\r\n\r\n\r\n/***/ },\r\n/* 41 */\r\n/***/ function(module, exports) {\r\n\r\n\t'use strict';\r\n\tmodule.exports = function generate_required(it, $keyword) {\r\n\t var out = ' ';\r\n\t var $lvl = it.level;\r\n\t var $dataLvl = it.dataLevel;\r\n\t var $schema = it.schema[$keyword];\r\n\t var $schemaPath = it.schemaPath + '.' + $keyword;\r\n\t var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\r\n\t var $breakOnError = !it.opts.allErrors;\r\n\t var $errorKeyword;\r\n\t var $data = 'data' + ($dataLvl || '');\r\n\t var $valid = 'valid' + $lvl;\r\n\t var $isData = it.opts.v5 && $schema.$data;\r\n\t var $schemaValue = $isData ? it.util.getData($schema.$data, $dataLvl, it.dataPathArr) : $schema;\r\n\t if ($isData) {\r\n\t out += ' var schema' + ($lvl) + ' = ' + ($schemaValue) + '; ';\r\n\t $schemaValue = 'schema' + $lvl;\r\n\t }\r\n\t if (!$isData) {\r\n\t if ($schema.length < it.opts.loopRequired && it.schema.properties && Object.keys(it.schema.properties).length) {\r\n\t var $required = [];\r\n\t var arr1 = $schema;\r\n\t if (arr1) {\r\n\t var $property, i1 = -1,\r\n\t l1 = arr1.length - 1;\r\n\t while (i1 < l1) {\r\n\t $property = arr1[i1 += 1];\r\n\t var $propertySch = it.schema.properties[$property];\r\n\t if (!($propertySch && it.util.schemaHasRules($propertySch, it.RULES.all))) {\r\n\t $required[$required.length] = $property;\r\n\t }\r\n\t }\r\n\t }\r\n\t } else {\r\n\t var $required = $schema;\r\n\t }\r\n\t }\r\n\t if ($isData || $required.length) {\r\n\t var $currentErrorPath = it.errorPath,\r\n\t $loopRequired = $isData || $required.length >= it.opts.loopRequired;\r\n\t if ($breakOnError) {\r\n\t out += ' var missing' + ($lvl) + '; ';\r\n\t if ($loopRequired) {\r\n\t if (!$isData) {\r\n\t out += ' var schema' + ($lvl) + ' = validate.schema' + ($schemaPath) + '; ';\r\n\t }\r\n\t var $i = 'i' + $lvl,\r\n\t $propertyPath = 'schema' + $lvl + '[' + $i + ']',\r\n\t $missingProperty = '\\' + ' + $propertyPath + ' + \\'';\r\n\t if (it.opts._errorDataPathProperty) {\r\n\t it.errorPath = it.util.getPathExpr($currentErrorPath, $propertyPath, it.opts.jsonPointers);\r\n\t }\r\n\t out += ' var ' + ($valid) + ' = true; ';\r\n\t if ($isData) {\r\n\t out += ' if (schema' + ($lvl) + ' === undefined) ' + ($valid) + ' = true; else if (!Array.isArray(schema' + ($lvl) + ')) ' + ($valid) + ' = false; else {';\r\n\t }\r\n\t out += ' for (var ' + ($i) + ' = 0; ' + ($i) + ' < schema' + ($lvl) + '.length; ' + ($i) + '++) { ' + ($valid) + ' = ' + ($data) + '[schema' + ($lvl) + '[' + ($i) + ']] !== undefined; if (!' + ($valid) + ') break; } ';\r\n\t if ($isData) {\r\n\t out += ' } ';\r\n\t }\r\n\t out += ' if (!' + ($valid) + ') { ';\r\n\t var $$outStack = $$outStack || [];\r\n\t $$outStack.push(out);\r\n\t out = ''; /* istanbul ignore else */\r\n\t if (it.createErrors !== false) {\r\n\t out += ' { keyword: \\'' + ($errorKeyword || 'required') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: \"' + ($errSchemaPath) + '\" , params: { missingProperty: \\'' + ($missingProperty) + '\\' } ';\r\n\t if (it.opts.messages !== false) {\r\n\t out += ' , message: \\'';\r\n\t if (it.opts._errorDataPathProperty) {\r\n\t out += 'is a required property';\r\n\t } else {\r\n\t out += 'should have required property \\\\\\'' + ($missingProperty) + '\\\\\\'';\r\n\t }\r\n\t out += '\\' ';\r\n\t }\r\n\t if (it.opts.verbose) {\r\n\t out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\r\n\t }\r\n\t out += ' } ';\r\n\t } else {\r\n\t out += ' {} ';\r\n\t }\r\n\t var __err = out;\r\n\t out = $$outStack.pop();\r\n\t if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */\r\n\t if (it.async) {\r\n\t out += ' throw new ValidationError([' + (__err) + ']); ';\r\n\t } else {\r\n\t out += ' validate.errors = [' + (__err) + ']; return false; ';\r\n\t }\r\n\t } else {\r\n\t out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\r\n\t }\r\n\t out += ' } else { ';\r\n\t } else {\r\n\t out += ' if ( ';\r\n\t var arr2 = $required;\r\n\t if (arr2) {\r\n\t var _$property, $i = -1,\r\n\t l2 = arr2.length - 1;\r\n\t while ($i < l2) {\r\n\t _$property = arr2[$i += 1];\r\n\t if ($i) {\r\n\t out += ' || ';\r\n\t }\r\n\t var $prop = it.util.getProperty(_$property);\r\n\t out += ' ( ' + ($data) + ($prop) + ' === undefined && (missing' + ($lvl) + ' = ' + (it.util.toQuotedString(it.opts.jsonPointers ? _$property : $prop)) + ') ) ';\r\n\t }\r\n\t }\r\n\t out += ') { ';\r\n\t var $propertyPath = 'missing' + $lvl,\r\n\t $missingProperty = '\\' + ' + $propertyPath + ' + \\'';\r\n\t if (it.opts._errorDataPathProperty) {\r\n\t it.errorPath = it.opts.jsonPointers ? it.util.getPathExpr($currentErrorPath, $propertyPath, true) : $currentErrorPath + ' + ' + $propertyPath;\r\n\t }\r\n\t var $$outStack = $$outStack || [];\r\n\t $$outStack.push(out);\r\n\t out = ''; /* istanbul ignore else */\r\n\t if (it.createErrors !== false) {\r\n\t out += ' { keyword: \\'' + ($errorKeyword || 'required') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: \"' + ($errSchemaPath) + '\" , params: { missingProperty: \\'' + ($missingProperty) + '\\' } ';\r\n\t if (it.opts.messages !== false) {\r\n\t out += ' , message: \\'';\r\n\t if (it.opts._errorDataPathProperty) {\r\n\t out += 'is a required property';\r\n\t } else {\r\n\t out += 'should have required property \\\\\\'' + ($missingProperty) + '\\\\\\'';\r\n\t }\r\n\t out += '\\' ';\r\n\t }\r\n\t if (it.opts.verbose) {\r\n\t out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\r\n\t }\r\n\t out += ' } ';\r\n\t } else {\r\n\t out += ' {} ';\r\n\t }\r\n\t var __err = out;\r\n\t out = $$outStack.pop();\r\n\t if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */\r\n\t if (it.async) {\r\n\t out += ' throw new ValidationError([' + (__err) + ']); ';\r\n\t } else {\r\n\t out += ' validate.errors = [' + (__err) + ']; return false; ';\r\n\t }\r\n\t } else {\r\n\t out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\r\n\t }\r\n\t out += ' } else { ';\r\n\t }\r\n\t } else {\r\n\t if ($loopRequired) {\r\n\t if (!$isData) {\r\n\t out += ' var schema' + ($lvl) + ' = validate.schema' + ($schemaPath) + '; ';\r\n\t }\r\n\t var $i = 'i' + $lvl,\r\n\t $propertyPath = 'schema' + $lvl + '[' + $i + ']',\r\n\t $missingProperty = '\\' + ' + $propertyPath + ' + \\'';\r\n\t if (it.opts._errorDataPathProperty) {\r\n\t it.errorPath = it.util.getPathExpr($currentErrorPath, $propertyPath, it.opts.jsonPointers);\r\n\t }\r\n\t if ($isData) {\r\n\t out += ' if (schema' + ($lvl) + ' && !Array.isArray(schema' + ($lvl) + ')) { var err = '; /* istanbul ignore else */\r\n\t if (it.createErrors !== false) {\r\n\t out += ' { keyword: \\'' + ($errorKeyword || 'required') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: \"' + ($errSchemaPath) + '\" , params: { missingProperty: \\'' + ($missingProperty) + '\\' } ';\r\n\t if (it.opts.messages !== false) {\r\n\t out += ' , message: \\'';\r\n\t if (it.opts._errorDataPathProperty) {\r\n\t out += 'is a required property';\r\n\t } else {\r\n\t out += 'should have required property \\\\\\'' + ($missingProperty) + '\\\\\\'';\r\n\t }\r\n\t out += '\\' ';\r\n\t }\r\n\t if (it.opts.verbose) {\r\n\t out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\r\n\t }\r\n\t out += ' } ';\r\n\t } else {\r\n\t out += ' {} ';\r\n\t }\r\n\t out += '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; } else if (schema' + ($lvl) + ' !== undefined) { ';\r\n\t }\r\n\t out += ' for (var ' + ($i) + ' = 0; ' + ($i) + ' < schema' + ($lvl) + '.length; ' + ($i) + '++) { if (' + ($data) + '[schema' + ($lvl) + '[' + ($i) + ']] === undefined) { var err = '; /* istanbul ignore else */\r\n\t if (it.createErrors !== false) {\r\n\t out += ' { keyword: \\'' + ($errorKeyword || 'required') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: \"' + ($errSchemaPath) + '\" , params: { missingProperty: \\'' + ($missingProperty) + '\\' } ';\r\n\t if (it.opts.messages !== false) {\r\n\t out += ' , message: \\'';\r\n\t if (it.opts._errorDataPathProperty) {\r\n\t out += 'is a required property';\r\n\t } else {\r\n\t out += 'should have required property \\\\\\'' + ($missingProperty) + '\\\\\\'';\r\n\t }\r\n\t out += '\\' ';\r\n\t }\r\n\t if (it.opts.verbose) {\r\n\t out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\r\n\t }\r\n\t out += ' } ';\r\n\t } else {\r\n\t out += ' {} ';\r\n\t }\r\n\t out += '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; } } ';\r\n\t if ($isData) {\r\n\t out += ' } ';\r\n\t }\r\n\t } else {\r\n\t var arr3 = $required;\r\n\t if (arr3) {\r\n\t var $property, $i = -1,\r\n\t l3 = arr3.length - 1;\r\n\t while ($i < l3) {\r\n\t $property = arr3[$i += 1];\r\n\t var $prop = it.util.getProperty($property),\r\n\t $missingProperty = it.util.escapeQuotes($property);\r\n\t if (it.opts._errorDataPathProperty) {\r\n\t it.errorPath = it.util.getPath($currentErrorPath, $property, it.opts.jsonPointers);\r\n\t }\r\n\t out += ' if (' + ($data) + ($prop) + ' === undefined) { var err = '; /* istanbul ignore else */\r\n\t if (it.createErrors !== false) {\r\n\t out += ' { keyword: \\'' + ($errorKeyword || 'required') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: \"' + ($errSchemaPath) + '\" , params: { missingProperty: \\'' + ($missingProperty) + '\\' } ';\r\n\t if (it.opts.messages !== false) {\r\n\t out += ' , message: \\'';\r\n\t if (it.opts._errorDataPathProperty) {\r\n\t out += 'is a required property';\r\n\t } else {\r\n\t out += 'should have required property \\\\\\'' + ($missingProperty) + '\\\\\\'';\r\n\t }\r\n\t out += '\\' ';\r\n\t }\r\n\t if (it.opts.verbose) {\r\n\t out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\r\n\t }\r\n\t out += ' } ';\r\n\t } else {\r\n\t out += ' {} ';\r\n\t }\r\n\t out += '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; } ';\r\n\t }\r\n\t }\r\n\t }\r\n\t }\r\n\t it.errorPath = $currentErrorPath;\r\n\t } else if ($breakOnError) {\r\n\t out += ' if (true) {';\r\n\t }\r\n\t return out;\r\n\t}\r\n\r\n\r\n/***/ },\r\n/* 42 */\r\n/***/ function(module, exports) {\r\n\r\n\t'use strict';\r\n\tmodule.exports = function generate_uniqueItems(it, $keyword) {\r\n\t var out = ' ';\r\n\t var $lvl = it.level;\r\n\t var $dataLvl = it.dataLevel;\r\n\t var $schema = it.schema[$keyword];\r\n\t var $schemaPath = it.schemaPath + '.' + $keyword;\r\n\t var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\r\n\t var $breakOnError = !it.opts.allErrors;\r\n\t var $errorKeyword;\r\n\t var $data = 'data' + ($dataLvl || '');\r\n\t var $valid = 'valid' + $lvl;\r\n\t var $isData = it.opts.v5 && $schema.$data;\r\n\t var $schemaValue = $isData ? it.util.getData($schema.$data, $dataLvl, it.dataPathArr) : $schema;\r\n\t if ($isData) {\r\n\t out += ' var schema' + ($lvl) + ' = ' + ($schemaValue) + '; ';\r\n\t $schemaValue = 'schema' + $lvl;\r\n\t }\r\n\t if (($schema || $isData) && it.opts.uniqueItems !== false) {\r\n\t if ($isData) {\r\n\t out += ' var ' + ($valid) + '; if (' + ($schemaValue) + ' === false || ' + ($schemaValue) + ' === undefined) ' + ($valid) + ' = true; else if (typeof ' + ($schemaValue) + ' != \\'boolean\\') ' + ($valid) + ' = false; else { ';\r\n\t }\r\n\t out += ' var ' + ($valid) + ' = true; if (' + ($data) + '.length > 1) { var i = ' + ($data) + '.length, j; outer: for (;i--;) { for (j = i; j--;) { if (equal(' + ($data) + '[i], ' + ($data) + '[j])) { ' + ($valid) + ' = false; break outer; } } } } ';\r\n\t if ($isData) {\r\n\t out += ' } ';\r\n\t }\r\n\t out += ' if (!' + ($valid) + ') { ';\r\n\t var $$outStack = $$outStack || [];\r\n\t $$outStack.push(out);\r\n\t out = ''; /* istanbul ignore else */\r\n\t if (it.createErrors !== false) {\r\n\t out += ' { keyword: \\'' + ($errorKeyword || 'uniqueItems') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: \"' + ($errSchemaPath) + '\" , params: { i: i, j: j } ';\r\n\t if (it.opts.messages !== false) {\r\n\t out += ' , message: \\'should NOT have duplicate items (items ## \\' + j + \\' and \\' + i + \\' are identical)\\' ';\r\n\t }\r\n\t if (it.opts.verbose) {\r\n\t out += ' , schema: ';\r\n\t if ($isData) {\r\n\t out += 'validate.schema' + ($schemaPath);\r\n\t } else {\r\n\t out += '' + ($schema);\r\n\t }\r\n\t out += ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\r\n\t }\r\n\t out += ' } ';\r\n\t } else {\r\n\t out += ' {} ';\r\n\t }\r\n\t var __err = out;\r\n\t out = $$outStack.pop();\r\n\t if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */\r\n\t if (it.async) {\r\n\t out += ' throw new ValidationError([' + (__err) + ']); ';\r\n\t } else {\r\n\t out += ' validate.errors = [' + (__err) + ']; return false; ';\r\n\t }\r\n\t } else {\r\n\t out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\r\n\t }\r\n\t out += ' } ';\r\n\t if ($breakOnError) {\r\n\t out += ' else { ';\r\n\t }\r\n\t } else {\r\n\t if ($breakOnError) {\r\n\t out += ' if (true) { ';\r\n\t }\r\n\t }\r\n\t return out;\r\n\t}\r\n\r\n\r\n/***/ },\r\n/* 43 */\r\n/***/ function(module, exports, __webpack_require__) {\r\n\r\n\t'use strict';\r\n\r\n\tvar META_SCHEMA_ID = 'https://raw.githubusercontent.com/epoberezkin/ajv/master/lib/refs/json-schema-v5.json';\r\n\r\n\tmodule.exports = {\r\n\t enable: enableV5,\r\n\t META_SCHEMA_ID: META_SCHEMA_ID\r\n\t};\r\n\r\n\r\n\tfunction enableV5(ajv) {\r\n\t var inlineFunctions = {\r\n\t 'switch': __webpack_require__(44),\r\n\t 'constant': __webpack_require__(45),\r\n\t '_formatLimit': __webpack_require__(46),\r\n\t 'patternRequired': __webpack_require__(47)\r\n\t };\r\n\r\n\t if (ajv._opts.meta !== false) {\r\n\t var metaSchema = __webpack_require__(48);\r\n\t ajv.addMetaSchema(metaSchema, META_SCHEMA_ID);\r\n\t }\r\n\t _addKeyword('constant');\r\n\t ajv.addKeyword('contains', { type: 'array', macro: containsMacro });\r\n\r\n\t _addKeyword('formatMaximum', 'string', inlineFunctions._formatLimit);\r\n\t _addKeyword('formatMinimum', 'string', inlineFunctions._formatLimit);\r\n\t ajv.addKeyword('exclusiveFormatMaximum');\r\n\t ajv.addKeyword('exclusiveFormatMinimum');\r\n\r\n\t ajv.addKeyword('patternGroups'); // implemented in properties.jst\r\n\t _addKeyword('patternRequired', 'object');\r\n\t _addKeyword('switch');\r\n\r\n\r\n\t function _addKeyword(keyword, types, inlineFunc) {\r\n\t var definition = {\r\n\t inline: inlineFunc || inlineFunctions[keyword],\r\n\t statements: true,\r\n\t errors: 'full'\r\n\t };\r\n\t if (types) definition.type = types;\r\n\t ajv.addKeyword(keyword, definition);\r\n\t }\r\n\t}\r\n\r\n\r\n\tfunction containsMacro(schema) {\r\n\t return {\r\n\t not: { items: { not: schema } }\r\n\t };\r\n\t}\r\n\r\n\r\n/***/ },\r\n/* 44 */\r\n/***/ function(module, exports) {\r\n\r\n\t'use strict';\r\n\tmodule.exports = function generate_switch(it, $keyword) {\r\n\t var out = ' ';\r\n\t var $lvl = it.level;\r\n\t var $dataLvl = it.dataLevel;\r\n\t var $schema = it.schema[$keyword];\r\n\t var $schemaPath = it.schemaPath + '.' + $keyword;\r\n\t var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\r\n\t var $breakOnError = !it.opts.allErrors;\r\n\t var $errorKeyword;\r\n\t var $data = 'data' + ($dataLvl || '');\r\n\t var $valid = 'valid' + $lvl;\r\n\t var $errs = 'errs__' + $lvl;\r\n\t var $it = it.util.copy(it);\r\n\t var $closingBraces = '';\r\n\t $it.level++;\r\n\t var $ifPassed = 'ifPassed' + it.level,\r\n\t $shouldContinue;\r\n\t out += 'var ' + ($ifPassed) + ';';\r\n\t var arr1 = $schema;\r\n\t if (arr1) {\r\n\t var $sch, $caseIndex = -1,\r\n\t l1 = arr1.length - 1;\r\n\t while ($caseIndex < l1) {\r\n\t $sch = arr1[$caseIndex += 1];\r\n\t if ($caseIndex && !$shouldContinue) {\r\n\t out += ' if (!' + ($ifPassed) + ') { ';\r\n\t $closingBraces += '}';\r\n\t }\r\n\t if ($sch.if && it.util.schemaHasRules($sch.if, it.RULES.all)) {\r\n\t out += ' var ' + ($errs) + ' = errors; ';\r\n\t var $wasComposite = it.compositeRule;\r\n\t it.compositeRule = $it.compositeRule = true;\r\n\t $it.createErrors = false;\r\n\t $it.schema = $sch.if;\r\n\t $it.schemaPath = $schemaPath + '[' + $caseIndex + '].if';\r\n\t $it.errSchemaPath = $errSchemaPath + '/' + $caseIndex + '/if';\r\n\t out += ' ' + (it.validate($it)) + ' ';\r\n\t $it.createErrors = true;\r\n\t it.compositeRule = $it.compositeRule = $wasComposite;\r\n\t out += ' ' + ($ifPassed) + ' = valid' + ($it.level) + '; if (' + ($ifPassed) + ') { ';\r\n\t if (typeof $sch.then == 'boolean') {\r\n\t if ($sch.then === false) {\r\n\t var $$outStack = $$outStack || [];\r\n\t $$outStack.push(out);\r\n\t out = ''; /* istanbul ignore else */\r\n\t if (it.createErrors !== false) {\r\n\t out += ' { keyword: \\'' + ($errorKeyword || 'switch') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: \"' + ($errSchemaPath) + '\" , params: { caseIndex: ' + ($caseIndex) + ' } ';\r\n\t if (it.opts.messages !== false) {\r\n\t out += ' , message: \\'should pass \"switch\" keyword validation\\' ';\r\n\t }\r\n\t if (it.opts.verbose) {\r\n\t out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\r\n\t }\r\n\t out += ' } ';\r\n\t } else {\r\n\t out += ' {} ';\r\n\t }\r\n\t var __err = out;\r\n\t out = $$outStack.pop();\r\n\t if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */\r\n\t if (it.async) {\r\n\t out += ' throw new ValidationError([' + (__err) + ']); ';\r\n\t } else {\r\n\t out += ' validate.errors = [' + (__err) + ']; return false; ';\r\n\t }\r\n\t } else {\r\n\t out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\r\n\t }\r\n\t }\r\n\t out += ' var valid' + ($it.level) + ' = ' + ($sch.then) + '; ';\r\n\t } else {\r\n\t $it.schema = $sch.then;\r\n\t $it.schemaPath = $schemaPath + '[' + $caseIndex + '].then';\r\n\t $it.errSchemaPath = $errSchemaPath + '/' + $caseIndex + '/then';\r\n\t out += ' ' + (it.validate($it)) + ' ';\r\n\t }\r\n\t out += ' } else { errors = ' + ($errs) + '; if (vErrors !== null) { if (' + ($errs) + ') vErrors.length = ' + ($errs) + '; else vErrors = null; } } ';\r\n\t } else {\r\n\t out += ' ' + ($ifPassed) + ' = true; ';\r\n\t if (typeof $sch.then == 'boolean') {\r\n\t if ($sch.then === false) {\r\n\t var $$outStack = $$outStack || [];\r\n\t $$outStack.push(out);\r\n\t out = ''; /* istanbul ignore else */\r\n\t if (it.createErrors !== false) {\r\n\t out += ' { keyword: \\'' + ($errorKeyword || 'switch') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: \"' + ($errSchemaPath) + '\" , params: { caseIndex: ' + ($caseIndex) + ' } ';\r\n\t if (it.opts.messages !== false) {\r\n\t out += ' , message: \\'should pass \"switch\" keyword validation\\' ';\r\n\t }\r\n\t if (it.opts.verbose) {\r\n\t out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\r\n\t }\r\n\t out += ' } ';\r\n\t } else {\r\n\t out += ' {} ';\r\n\t }\r\n\t var __err = out;\r\n\t out = $$outStack.pop();\r\n\t if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */\r\n\t if (it.async) {\r\n\t out += ' throw new ValidationError([' + (__err) + ']); ';\r\n\t } else {\r\n\t out += ' validate.errors = [' + (__err) + ']; return false; ';\r\n\t }\r\n\t } else {\r\n\t out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\r\n\t }\r\n\t }\r\n\t out += ' var valid' + ($it.level) + ' = ' + ($sch.then) + '; ';\r\n\t } else {\r\n\t $it.schema = $sch.then;\r\n\t $it.schemaPath = $schemaPath + '[' + $caseIndex + '].then';\r\n\t $it.errSchemaPath = $errSchemaPath + '/' + $caseIndex + '/then';\r\n\t out += ' ' + (it.validate($it)) + ' ';\r\n\t }\r\n\t }\r\n\t $shouldContinue = $sch.continue\r\n\t }\r\n\t }\r\n\t out += '' + ($closingBraces) + 'var ' + ($valid) + ' = valid' + ($it.level) + '; ';\r\n\t out = it.util.cleanUpCode(out);\r\n\t return out;\r\n\t}\r\n\r\n\r\n/***/ },\r\n/* 45 */\r\n/***/ function(module, exports) {\r\n\r\n\t'use strict';\r\n\tmodule.exports = function generate_constant(it, $keyword) {\r\n\t var out = ' ';\r\n\t var $lvl = it.level;\r\n\t var $dataLvl = it.dataLevel;\r\n\t var $schema = it.schema[$keyword];\r\n\t var $schemaPath = it.schemaPath + '.' + $keyword;\r\n\t var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\r\n\t var $breakOnError = !it.opts.allErrors;\r\n\t var $errorKeyword;\r\n\t var $data = 'data' + ($dataLvl || '');\r\n\t var $valid = 'valid' + $lvl;\r\n\t var $isData = it.opts.v5 && $schema.$data;\r\n\t var $schemaValue = $isData ? it.util.getData($schema.$data, $dataLvl, it.dataPathArr) : $schema;\r\n\t if ($isData) {\r\n\t out += ' var schema' + ($lvl) + ' = ' + ($schemaValue) + '; ';\r\n\t $schemaValue = 'schema' + $lvl;\r\n\t }\r\n\t if (!$isData) {\r\n\t out += ' var schema' + ($lvl) + ' = validate.schema' + ($schemaPath) + ';';\r\n\t }\r\n\t out += 'var ' + ($valid) + ' = equal(' + ($data) + ', schema' + ($lvl) + '); if (!' + ($valid) + ') { ';\r\n\t var $$outStack = $$outStack || [];\r\n\t $$outStack.push(out);\r\n\t out = ''; /* istanbul ignore else */\r\n\t if (it.createErrors !== false) {\r\n\t out += ' { keyword: \\'' + ($errorKeyword || 'constant') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: \"' + ($errSchemaPath) + '\" , params: {} ';\r\n\t if (it.opts.messages !== false) {\r\n\t out += ' , message: \\'should be equal to constant\\' ';\r\n\t }\r\n\t if (it.opts.verbose) {\r\n\t out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\r\n\t }\r\n\t out += ' } ';\r\n\t } else {\r\n\t out += ' {} ';\r\n\t }\r\n\t var __err = out;\r\n\t out = $$outStack.pop();\r\n\t if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */\r\n\t if (it.async) {\r\n\t out += ' throw new ValidationError([' + (__err) + ']); ';\r\n\t } else {\r\n\t out += ' validate.errors = [' + (__err) + ']; return false; ';\r\n\t }\r\n\t } else {\r\n\t out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\r\n\t }\r\n\t out += ' }';\r\n\t return out;\r\n\t}\r\n\r\n\r\n/***/ },\r\n/* 46 */\r\n/***/ function(module, exports) {\r\n\r\n\t'use strict';\r\n\tmodule.exports = function generate__formatLimit(it, $keyword) {\r\n\t var out = ' ';\r\n\t var $lvl = it.level;\r\n\t var $dataLvl = it.dataLevel;\r\n\t var $schema = it.schema[$keyword];\r\n\t var $schemaPath = it.schemaPath + '.' + $keyword;\r\n\t var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\r\n\t var $breakOnError = !it.opts.allErrors;\r\n\t var $errorKeyword;\r\n\t var $data = 'data' + ($dataLvl || '');\r\n\t var $valid = 'valid' + $lvl;\r\n\t out += 'var ' + ($valid) + ' = undefined;';\r\n\t if (it.opts.format === false) {\r\n\t out += ' ' + ($valid) + ' = true; ';\r\n\t return out;\r\n\t }\r\n\t var $schemaFormat = it.schema.format,\r\n\t $isDataFormat = it.opts.v5 && $schemaFormat.$data,\r\n\t $closingBraces = '';\r\n\t if ($isDataFormat) {\r\n\t var $schemaValueFormat = it.util.getData($schemaFormat.$data, $dataLvl, it.dataPathArr),\r\n\t $format = 'format' + $lvl,\r\n\t $compare = 'compare' + $lvl;\r\n\t out += ' var ' + ($format) + ' = formats[' + ($schemaValueFormat) + '] , ' + ($compare) + ' = ' + ($format) + ' && ' + ($format) + '.compare;';\r\n\t } else {\r\n\t var $format = it.formats[$schemaFormat];\r\n\t if (!($format && $format.compare)) {\r\n\t out += ' ' + ($valid) + ' = true; ';\r\n\t return out;\r\n\t }\r\n\t var $compare = 'formats' + it.util.getProperty($schemaFormat) + '.compare';\r\n\t }\r\n\t var $isMax = $keyword == 'formatMaximum',\r\n\t $exclusiveKeyword = 'exclusiveFormat' + ($isMax ? 'Maximum' : 'Minimum'),\r\n\t $schemaExcl = it.schema[$exclusiveKeyword],\r\n\t $isDataExcl = it.opts.v5 && $schemaExcl && $schemaExcl.$data,\r\n\t $op = $isMax ? '<' : '>',\r\n\t $result = 'result' + $lvl;\r\n\t var $isData = it.opts.v5 && $schema.$data;\r\n\t var $schemaValue = $isData ? it.util.getData($schema.$data, $dataLvl, it.dataPathArr) : $schema;\r\n\t if ($isData) {\r\n\t out += ' var schema' + ($lvl) + ' = ' + ($schemaValue) + '; ';\r\n\t $schemaValue = 'schema' + $lvl;\r\n\t }\r\n\t if ($isDataExcl) {\r\n\t var $schemaValueExcl = it.util.getData($schemaExcl.$data, $dataLvl, it.dataPathArr),\r\n\t $exclusive = 'exclusive' + $lvl,\r\n\t $opExpr = 'op' + $lvl,\r\n\t $opStr = '\\' + ' + $opExpr + ' + \\'';\r\n\t out += ' var schemaExcl' + ($lvl) + ' = ' + ($schemaValueExcl) + '; ';\r\n\t $schemaValueExcl = 'schemaExcl' + $lvl;\r\n\t out += ' if (typeof ' + ($schemaValueExcl) + ' != \\'boolean\\' && ' + ($schemaValueExcl) + ' !== undefined) { ' + ($valid) + ' = false; ';\r\n\t var $errorKeyword = $exclusiveKeyword;\r\n\t var $$outStack = $$outStack || [];\r\n\t $$outStack.push(out);\r\n\t out = ''; /* istanbul ignore else */\r\n\t if (it.createErrors !== false) {\r\n\t out += ' { keyword: \\'' + ($errorKeyword || '_exclusiveFormatLimit') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: \"' + ($errSchemaPath) + '\" , params: {} ';\r\n\t if (it.opts.messages !== false) {\r\n\t out += ' , message: \\'' + ($exclusiveKeyword) + ' should be boolean\\' ';\r\n\t }\r\n\t if (it.opts.verbose) {\r\n\t out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\r\n\t }\r\n\t out += ' } ';\r\n\t } else {\r\n\t out += ' {} ';\r\n\t }\r\n\t var __err = out;\r\n\t out = $$outStack.pop();\r\n\t if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */\r\n\t if (it.async) {\r\n\t out += ' throw new ValidationError([' + (__err) + ']); ';\r\n\t } else {\r\n\t out += ' validate.errors = [' + (__err) + ']; return false; ';\r\n\t }\r\n\t } else {\r\n\t out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\r\n\t }\r\n\t out += ' } ';\r\n\t if ($breakOnError) {\r\n\t $closingBraces += '}';\r\n\t out += ' else { ';\r\n\t }\r\n\t if ($isData) {\r\n\t out += ' if (' + ($schemaValue) + ' === undefined) ' + ($valid) + ' = true; else if (typeof ' + ($schemaValue) + ' != \\'string\\') ' + ($valid) + ' = false; else { ';\r\n\t $closingBraces += '}';\r\n\t }\r\n\t if ($isDataFormat) {\r\n\t out += ' if (!' + ($compare) + ') ' + ($valid) + ' = true; else { ';\r\n\t $closingBraces += '}';\r\n\t }\r\n\t out += ' var ' + ($result) + ' = ' + ($compare) + '(' + ($data) + ', ';\r\n\t if ($isData) {\r\n\t out += '' + ($schemaValue);\r\n\t } else {\r\n\t out += '' + (it.util.toQuotedString($schema));\r\n\t }\r\n\t out += ' ); if (' + ($result) + ' === undefined) ' + ($valid) + ' = false; var exclusive' + ($lvl) + ' = ' + ($schemaValueExcl) + ' === true; if (' + ($valid) + ' === undefined) { ' + ($valid) + ' = exclusive' + ($lvl) + ' ? ' + ($result) + ' ' + ($op) + ' 0 : ' + ($result) + ' ' + ($op) + '= 0; } if (!' + ($valid) + ') var op' + ($lvl) + ' = exclusive' + ($lvl) + ' ? \\'' + ($op) + '\\' : \\'' + ($op) + '=\\';';\r\n\t } else {\r\n\t var $exclusive = $schemaExcl === true,\r\n\t $opStr = $op;\r\n\t if (!$exclusive) $opStr += '=';\r\n\t var $opExpr = '\\'' + $opStr + '\\'';\r\n\t if ($isData) {\r\n\t out += ' if (' + ($schemaValue) + ' === undefined) ' + ($valid) + ' = true; else if (typeof ' + ($schemaValue) + ' != \\'string\\') ' + ($valid) + ' = false; else { ';\r\n\t $closingBraces += '}';\r\n\t }\r\n\t if ($isDataFormat) {\r\n\t out += ' if (!' + ($compare) + ') ' + ($valid) + ' = true; else { ';\r\n\t $closingBraces += '}';\r\n\t }\r\n\t out += ' var ' + ($result) + ' = ' + ($compare) + '(' + ($data) + ', ';\r\n\t if ($isData) {\r\n\t out += '' + ($schemaValue);\r\n\t } else {\r\n\t out += '' + (it.util.toQuotedString($schema));\r\n\t }\r\n\t out += ' ); if (' + ($result) + ' === undefined) ' + ($valid) + ' = false; if (' + ($valid) + ' === undefined) ' + ($valid) + ' = ' + ($result) + ' ' + ($op);\r\n\t if (!$exclusive) {\r\n\t out += '=';\r\n\t }\r\n\t out += ' 0;';\r\n\t }\r\n\t out += '' + ($closingBraces) + 'if (!' + ($valid) + ') { ';\r\n\t var $errorKeyword = $keyword;\r\n\t var $$outStack = $$outStack || [];\r\n\t $$outStack.push(out);\r\n\t out = ''; /* istanbul ignore else */\r\n\t if (it.createErrors !== false) {\r\n\t out += ' { keyword: \\'' + ($errorKeyword || '_formatLimit') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: \"' + ($errSchemaPath) + '\" , params: { limit: ';\r\n\t if ($isData) {\r\n\t out += '' + ($schemaValue);\r\n\t } else {\r\n\t out += '' + (it.util.toQuotedString($schema));\r\n\t }\r\n\t out += ' } ';\r\n\t if (it.opts.messages !== false) {\r\n\t out += ' , message: \\'should be ' + ($opStr) + ' \"';\r\n\t if ($isData) {\r\n\t out += '\\' + ' + ($schemaValue) + ' + \\'';\r\n\t } else {\r\n\t out += '' + (it.util.escapeQuotes($schema));\r\n\t }\r\n\t out += '\"\\' ';\r\n\t }\r\n\t if (it.opts.verbose) {\r\n\t out += ' , schema: ';\r\n\t if ($isData) {\r\n\t out += 'validate.schema' + ($schemaPath);\r\n\t } else {\r\n\t out += '' + (it.util.toQuotedString($schema));\r\n\t }\r\n\t out += ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\r\n\t }\r\n\t out += ' } ';\r\n\t } else {\r\n\t out += ' {} ';\r\n\t }\r\n\t var __err = out;\r\n\t out = $$outStack.pop();\r\n\t if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */\r\n\t if (it.async) {\r\n\t out += ' throw new ValidationError([' + (__err) + ']); ';\r\n\t } else {\r\n\t out += ' validate.errors = [' + (__err) + ']; return false; ';\r\n\t }\r\n\t } else {\r\n\t out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\r\n\t }\r\n\t out += '}';\r\n\t return out;\r\n\t}\r\n\r\n\r\n/***/ },\r\n/* 47 */\r\n/***/ function(module, exports) {\r\n\r\n\t'use strict';\r\n\tmodule.exports = function generate_patternRequired(it, $keyword) {\r\n\t var out = ' ';\r\n\t var $lvl = it.level;\r\n\t var $dataLvl = it.dataLevel;\r\n\t var $schema = it.schema[$keyword];\r\n\t var $schemaPath = it.schemaPath + '.' + $keyword;\r\n\t var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\r\n\t var $breakOnError = !it.opts.allErrors;\r\n\t var $errorKeyword;\r\n\t var $data = 'data' + ($dataLvl || '');\r\n\t var $valid = 'valid' + $lvl;\r\n\t var $key = 'key' + $lvl,\r\n\t $matched = 'patternMatched' + $lvl,\r\n\t $closingBraces = '';\r\n\t out += 'var ' + ($valid) + ' = true;';\r\n\t var arr1 = $schema;\r\n\t if (arr1) {\r\n\t var $pProperty, i1 = -1,\r\n\t l1 = arr1.length - 1;\r\n\t while (i1 < l1) {\r\n\t $pProperty = arr1[i1 += 1];\r\n\t out += ' var ' + ($matched) + ' = false; for (var ' + ($key) + ' in ' + ($data) + ') { ' + ($matched) + ' = ' + (it.usePattern($pProperty)) + '.test(' + ($key) + '); if (' + ($matched) + ') break; } ';\r\n\t var $missingPattern = it.util.escapeQuotes($pProperty);\r\n\t out += ' if (!' + ($matched) + ') { ' + ($valid) + ' = false; var err = '; /* istanbul ignore else */\r\n\t if (it.createErrors !== false) {\r\n\t out += ' { keyword: \\'' + ($errorKeyword || 'patternRequired') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: \"' + ($errSchemaPath) + '\" , params: { missingPattern: \\'' + ($missingPattern) + '\\' } ';\r\n\t if (it.opts.messages !== false) {\r\n\t out += ' , message: \\'should have property matching pattern \\\\\\'' + ($missingPattern) + '\\\\\\'\\' ';\r\n\t }\r\n\t if (it.opts.verbose) {\r\n\t out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\r\n\t }\r\n\t out += ' } ';\r\n\t } else {\r\n\t out += ' {} ';\r\n\t }\r\n\t out += '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; } ';\r\n\t if ($breakOnError) {\r\n\t $closingBraces += '}';\r\n\t out += ' else { ';\r\n\t }\r\n\t }\r\n\t }\r\n\t out += '' + ($closingBraces);\r\n\t return out;\r\n\t}\r\n\r\n\r\n/***/ },\r\n/* 48 */\r\n/***/ function(module, exports) {\r\n\r\n\tmodule.exports = {\r\n\t\t\"id\": \"https://raw.githubusercontent.com/epoberezkin/ajv/master/lib/refs/json-schema-v5.json#\",\r\n\t\t\"$schema\": \"http://json-schema.org/draft-04/schema#\",\r\n\t\t\"description\": \"Core schema meta-schema (v5 proposals)\",\r\n\t\t\"definitions\": {\r\n\t\t\t\"schemaArray\": {\r\n\t\t\t\t\"type\": \"array\",\r\n\t\t\t\t\"minItems\": 1,\r\n\t\t\t\t\"items\": {\r\n\t\t\t\t\t\"$ref\": \"#\"\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\t\"positiveInteger\": {\r\n\t\t\t\t\"type\": \"integer\",\r\n\t\t\t\t\"minimum\": 0\r\n\t\t\t},\r\n\t\t\t\"positiveIntegerDefault0\": {\r\n\t\t\t\t\"allOf\": [\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\"$ref\": \"#/definitions/positiveInteger\"\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\"default\": 0\r\n\t\t\t\t\t}\r\n\t\t\t\t]\r\n\t\t\t},\r\n\t\t\t\"simpleTypes\": {\r\n\t\t\t\t\"enum\": [\r\n\t\t\t\t\t\"array\",\r\n\t\t\t\t\t\"boolean\",\r\n\t\t\t\t\t\"integer\",\r\n\t\t\t\t\t\"null\",\r\n\t\t\t\t\t\"number\",\r\n\t\t\t\t\t\"object\",\r\n\t\t\t\t\t\"string\"\r\n\t\t\t\t]\r\n\t\t\t},\r\n\t\t\t\"stringArray\": {\r\n\t\t\t\t\"type\": \"array\",\r\n\t\t\t\t\"items\": {\r\n\t\t\t\t\t\"type\": \"string\"\r\n\t\t\t\t},\r\n\t\t\t\t\"minItems\": 1,\r\n\t\t\t\t\"uniqueItems\": true\r\n\t\t\t},\r\n\t\t\t\"$data\": {\r\n\t\t\t\t\"type\": \"object\",\r\n\t\t\t\t\"required\": [\r\n\t\t\t\t\t\"$data\"\r\n\t\t\t\t],\r\n\t\t\t\t\"properties\": {\r\n\t\t\t\t\t\"$data\": {\r\n\t\t\t\t\t\t\"type\": \"string\",\r\n\t\t\t\t\t\t\"format\": \"relative-json-pointer\"\r\n\t\t\t\t\t}\r\n\t\t\t\t},\r\n\t\t\t\t\"additionalProperties\": false\r\n\t\t\t}\r\n\t\t},\r\n\t\t\"type\": \"object\",\r\n\t\t\"properties\": {\r\n\t\t\t\"id\": {\r\n\t\t\t\t\"type\": \"string\",\r\n\t\t\t\t\"format\": \"uri\"\r\n\t\t\t},\r\n\t\t\t\"$schema\": {\r\n\t\t\t\t\"type\": \"string\",\r\n\t\t\t\t\"format\": \"uri\"\r\n\t\t\t},\r\n\t\t\t\"title\": {\r\n\t\t\t\t\"type\": \"string\"\r\n\t\t\t},\r\n\t\t\t\"description\": {\r\n\t\t\t\t\"type\": \"string\"\r\n\t\t\t},\r\n\t\t\t\"default\": {},\r\n\t\t\t\"multipleOf\": {\r\n\t\t\t\t\"anyOf\": [\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\"type\": \"number\",\r\n\t\t\t\t\t\t\"minimum\": 0,\r\n\t\t\t\t\t\t\"exclusiveMinimum\": true\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\"$ref\": \"#/definitions/$data\"\r\n\t\t\t\t\t}\r\n\t\t\t\t]\r\n\t\t\t},\r\n\t\t\t\"maximum\": {\r\n\t\t\t\t\"anyOf\": [\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\"type\": \"number\"\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\"$ref\": \"#/definitions/$data\"\r\n\t\t\t\t\t}\r\n\t\t\t\t]\r\n\t\t\t},\r\n\t\t\t\"exclusiveMaximum\": {\r\n\t\t\t\t\"anyOf\": [\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\"type\": \"boolean\",\r\n\t\t\t\t\t\t\"default\": false\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\"$ref\": \"#/definitions/$data\"\r\n\t\t\t\t\t}\r\n\t\t\t\t]\r\n\t\t\t},\r\n\t\t\t\"minimum\": {\r\n\t\t\t\t\"anyOf\": [\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\"type\": \"number\"\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\"$ref\": \"#/definitions/$data\"\r\n\t\t\t\t\t}\r\n\t\t\t\t]\r\n\t\t\t},\r\n\t\t\t\"exclusiveMinimum\": {\r\n\t\t\t\t\"anyOf\": [\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\"type\": \"boolean\",\r\n\t\t\t\t\t\t\"default\": false\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\"$ref\": \"#/definitions/$data\"\r\n\t\t\t\t\t}\r\n\t\t\t\t]\r\n\t\t\t},\r\n\t\t\t\"maxLength\": {\r\n\t\t\t\t\"anyOf\": [\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\"$ref\": \"#/definitions/positiveInteger\"\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\"$ref\": \"#/definitions/$data\"\r\n\t\t\t\t\t}\r\n\t\t\t\t]\r\n\t\t\t},\r\n\t\t\t\"minLength\": {\r\n\t\t\t\t\"anyOf\": [\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\"$ref\": \"#/definitions/positiveIntegerDefault0\"\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\"$ref\": \"#/definitions/$data\"\r\n\t\t\t\t\t}\r\n\t\t\t\t]\r\n\t\t\t},\r\n\t\t\t\"pattern\": {\r\n\t\t\t\t\"anyOf\": [\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\"type\": \"string\",\r\n\t\t\t\t\t\t\"format\": \"regex\"\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\"$ref\": \"#/definitions/$data\"\r\n\t\t\t\t\t}\r\n\t\t\t\t]\r\n\t\t\t},\r\n\t\t\t\"additionalItems\": {\r\n\t\t\t\t\"anyOf\": [\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\"type\": \"boolean\"\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\"$ref\": \"#\"\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\"$ref\": \"#/definitions/$data\"\r\n\t\t\t\t\t}\r\n\t\t\t\t],\r\n\t\t\t\t\"default\": {}\r\n\t\t\t},\r\n\t\t\t\"items\": {\r\n\t\t\t\t\"anyOf\": [\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\"$ref\": \"#\"\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\"$ref\": \"#/definitions/schemaArray\"\r\n\t\t\t\t\t}\r\n\t\t\t\t],\r\n\t\t\t\t\"default\": {}\r\n\t\t\t},\r\n\t\t\t\"maxItems\": {\r\n\t\t\t\t\"anyOf\": [\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\"$ref\": \"#/definitions/positiveInteger\"\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\"$ref\": \"#/definitions/$data\"\r\n\t\t\t\t\t}\r\n\t\t\t\t]\r\n\t\t\t},\r\n\t\t\t\"minItems\": {\r\n\t\t\t\t\"anyOf\": [\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\"$ref\": \"#/definitions/positiveIntegerDefault0\"\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\"$ref\": \"#/definitions/$data\"\r\n\t\t\t\t\t}\r\n\t\t\t\t]\r\n\t\t\t},\r\n\t\t\t\"uniqueItems\": {\r\n\t\t\t\t\"anyOf\": [\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\"type\": \"boolean\",\r\n\t\t\t\t\t\t\"default\": false\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\"$ref\": \"#/definitions/$data\"\r\n\t\t\t\t\t}\r\n\t\t\t\t]\r\n\t\t\t},\r\n\t\t\t\"maxProperties\": {\r\n\t\t\t\t\"anyOf\": [\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\"$ref\": \"#/definitions/positiveInteger\"\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\"$ref\": \"#/definitions/$data\"\r\n\t\t\t\t\t}\r\n\t\t\t\t]\r\n\t\t\t},\r\n\t\t\t\"minProperties\": {\r\n\t\t\t\t\"anyOf\": [\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\"$ref\": \"#/definitions/positiveIntegerDefault0\"\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\"$ref\": \"#/definitions/$data\"\r\n\t\t\t\t\t}\r\n\t\t\t\t]\r\n\t\t\t},\r\n\t\t\t\"required\": {\r\n\t\t\t\t\"anyOf\": [\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\"$ref\": \"#/definitions/stringArray\"\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\"$ref\": \"#/definitions/$data\"\r\n\t\t\t\t\t}\r\n\t\t\t\t]\r\n\t\t\t},\r\n\t\t\t\"additionalProperties\": {\r\n\t\t\t\t\"anyOf\": [\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\"type\": \"boolean\"\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\"$ref\": \"#\"\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\"$ref\": \"#/definitions/$data\"\r\n\t\t\t\t\t}\r\n\t\t\t\t],\r\n\t\t\t\t\"default\": {}\r\n\t\t\t},\r\n\t\t\t\"definitions\": {\r\n\t\t\t\t\"type\": \"object\",\r\n\t\t\t\t\"additionalProperties\": {\r\n\t\t\t\t\t\"$ref\": \"#\"\r\n\t\t\t\t},\r\n\t\t\t\t\"default\": {}\r\n\t\t\t},\r\n\t\t\t\"properties\": {\r\n\t\t\t\t\"type\": \"object\",\r\n\t\t\t\t\"additionalProperties\": {\r\n\t\t\t\t\t\"$ref\": \"#\"\r\n\t\t\t\t},\r\n\t\t\t\t\"default\": {}\r\n\t\t\t},\r\n\t\t\t\"patternProperties\": {\r\n\t\t\t\t\"type\": \"object\",\r\n\t\t\t\t\"additionalProperties\": {\r\n\t\t\t\t\t\"$ref\": \"#\"\r\n\t\t\t\t},\r\n\t\t\t\t\"default\": {}\r\n\t\t\t},\r\n\t\t\t\"dependencies\": {\r\n\t\t\t\t\"type\": \"object\",\r\n\t\t\t\t\"additionalProperties\": {\r\n\t\t\t\t\t\"anyOf\": [\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\"$ref\": \"#\"\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\"$ref\": \"#/definitions/stringArray\"\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t]\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\t\"enum\": {\r\n\t\t\t\t\"anyOf\": [\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\"type\": \"array\",\r\n\t\t\t\t\t\t\"minItems\": 1,\r\n\t\t\t\t\t\t\"uniqueItems\": true\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\"$ref\": \"#/definitions/$data\"\r\n\t\t\t\t\t}\r\n\t\t\t\t]\r\n\t\t\t},\r\n\t\t\t\"type\": {\r\n\t\t\t\t\"anyOf\": [\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\"$ref\": \"#/definitions/simpleTypes\"\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\"type\": \"array\",\r\n\t\t\t\t\t\t\"items\": {\r\n\t\t\t\t\t\t\t\"$ref\": \"#/definitions/simpleTypes\"\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\"minItems\": 1,\r\n\t\t\t\t\t\t\"uniqueItems\": true\r\n\t\t\t\t\t}\r\n\t\t\t\t]\r\n\t\t\t},\r\n\t\t\t\"allOf\": {\r\n\t\t\t\t\"$ref\": \"#/definitions/schemaArray\"\r\n\t\t\t},\r\n\t\t\t\"anyOf\": {\r\n\t\t\t\t\"$ref\": \"#/definitions/schemaArray\"\r\n\t\t\t},\r\n\t\t\t\"oneOf\": {\r\n\t\t\t\t\"$ref\": \"#/definitions/schemaArray\"\r\n\t\t\t},\r\n\t\t\t\"not\": {\r\n\t\t\t\t\"$ref\": \"#\"\r\n\t\t\t},\r\n\t\t\t\"format\": {\r\n\t\t\t\t\"anyOf\": [\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\"type\": \"string\"\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\"$ref\": \"#/definitions/$data\"\r\n\t\t\t\t\t}\r\n\t\t\t\t]\r\n\t\t\t},\r\n\t\t\t\"formatMaximum\": {\r\n\t\t\t\t\"anyOf\": [\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\"type\": \"string\"\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\"$ref\": \"#/definitions/$data\"\r\n\t\t\t\t\t}\r\n\t\t\t\t]\r\n\t\t\t},\r\n\t\t\t\"formatMinimum\": {\r\n\t\t\t\t\"anyOf\": [\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\"type\": \"string\"\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\"$ref\": \"#/definitions/$data\"\r\n\t\t\t\t\t}\r\n\t\t\t\t]\r\n\t\t\t},\r\n\t\t\t\"exclusiveFormatMaximum\": {\r\n\t\t\t\t\"anyOf\": [\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\"type\": \"boolean\",\r\n\t\t\t\t\t\t\"default\": false\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\"$ref\": \"#/definitions/$data\"\r\n\t\t\t\t\t}\r\n\t\t\t\t]\r\n\t\t\t},\r\n\t\t\t\"exclusiveFormatMinimum\": {\r\n\t\t\t\t\"anyOf\": [\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\"type\": \"boolean\",\r\n\t\t\t\t\t\t\"default\": false\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\"$ref\": \"#/definitions/$data\"\r\n\t\t\t\t\t}\r\n\t\t\t\t]\r\n\t\t\t},\r\n\t\t\t\"constant\": {\r\n\t\t\t\t\"anyOf\": [\r\n\t\t\t\t\t{},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\"$ref\": \"#/definitions/$data\"\r\n\t\t\t\t\t}\r\n\t\t\t\t]\r\n\t\t\t},\r\n\t\t\t\"contains\": {\r\n\t\t\t\t\"$ref\": \"#\"\r\n\t\t\t},\r\n\t\t\t\"patternGroups\": {\r\n\t\t\t\t\"type\": \"object\",\r\n\t\t\t\t\"additionalProperties\": {\r\n\t\t\t\t\t\"type\": \"object\",\r\n\t\t\t\t\t\"required\": [\r\n\t\t\t\t\t\t\"schema\"\r\n\t\t\t\t\t],\r\n\t\t\t\t\t\"properties\": {\r\n\t\t\t\t\t\t\"maximum\": {\r\n\t\t\t\t\t\t\t\"anyOf\": [\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\"$ref\": \"#/definitions/positiveInteger\"\r\n\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\"$ref\": \"#/definitions/$data\"\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t]\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\"minimum\": {\r\n\t\t\t\t\t\t\t\"anyOf\": [\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\"$ref\": \"#/definitions/positiveIntegerDefault0\"\r\n\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\"$ref\": \"#/definitions/$data\"\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t]\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\"schema\": {\r\n\t\t\t\t\t\t\t\"$ref\": \"#\"\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t},\r\n\t\t\t\t\t\"additionalProperties\": false\r\n\t\t\t\t},\r\n\t\t\t\t\"default\": {}\r\n\t\t\t},\r\n\t\t\t\"switch\": {\r\n\t\t\t\t\"type\": \"array\",\r\n\t\t\t\t\"items\": {\r\n\t\t\t\t\t\"required\": [\r\n\t\t\t\t\t\t\"then\"\r\n\t\t\t\t\t],\r\n\t\t\t\t\t\"properties\": {\r\n\t\t\t\t\t\t\"if\": {\r\n\t\t\t\t\t\t\t\"$ref\": \"#\"\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\"then\": {\r\n\t\t\t\t\t\t\t\"anyOf\": [\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\"type\": \"boolean\"\r\n\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\"$ref\": \"#\"\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t]\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\"continue\": {\r\n\t\t\t\t\t\t\t\"type\": \"boolean\"\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t},\r\n\t\t\t\t\t\"additionalProperties\": false,\r\n\t\t\t\t\t\"dependencies\": {\r\n\t\t\t\t\t\t\"continue\": [\r\n\t\t\t\t\t\t\t\"if\"\r\n\t\t\t\t\t\t]\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\t\t\"dependencies\": {\r\n\t\t\t\"exclusiveMaximum\": [\r\n\t\t\t\t\"maximum\"\r\n\t\t\t],\r\n\t\t\t\"exclusiveMinimum\": [\r\n\t\t\t\t\"minimum\"\r\n\t\t\t],\r\n\t\t\t\"formatMaximum\": [\r\n\t\t\t\t\"format\"\r\n\t\t\t],\r\n\t\t\t\"formatMinimum\": [\r\n\t\t\t\t\"format\"\r\n\t\t\t],\r\n\t\t\t\"exclusiveFormatMaximum\": [\r\n\t\t\t\t\"formatMaximum\"\r\n\t\t\t],\r\n\t\t\t\"exclusiveFormatMinimum\": [\r\n\t\t\t\t\"formatMinimum\"\r\n\t\t\t]\r\n\t\t},\r\n\t\t\"default\": {}\r\n\t};\r\n\r\n/***/ },\r\n/* 49 */\r\n/***/ function(module, exports) {\r\n\r\n\t'use strict';\r\n\r\n\tvar IDENTIFIER = /^[a-z_$][a-z0-9_$]*$/i;\r\n\r\n\t/**\r\n\t * Define custom keyword\r\n\t * @this Ajv\r\n\t * @param {String} keyword custom keyword, should be a valid identifier, should be different from all standard, custom and macro keywords.\r\n\t * @param {Object} definition keyword definition object with properties `type` (type(s) which the keyword applies to), `validate` or `compile`.\r\n\t */\r\n\tmodule.exports = function addKeyword(keyword, definition) {\r\n\t /* eslint no-shadow: 0 */\r\n\t var self = this;\r\n\t if (this.RULES.keywords[keyword])\r\n\t throw new Error('Keyword ' + keyword + ' is already defined');\r\n\r\n\t if (!IDENTIFIER.test(keyword))\r\n\t throw new Error('Keyword ' + keyword + ' is not a valid identifier');\r\n\r\n\t if (definition) {\r\n\t var dataType = definition.type;\r\n\t if (Array.isArray(dataType)) {\r\n\t var i, len = dataType.length;\r\n\t for (i=0; i 0) {\r\n\t this.autoScrollStep = ((top + margin) - mouseY) / 3;\r\n\t }\r\n\t else if (mouseY > bottom - margin &&\r\n\t height + content.scrollTop < content.scrollHeight) {\r\n\t this.autoScrollStep = ((bottom - margin) - mouseY) / 3;\r\n\t }\r\n\t else {\r\n\t this.autoScrollStep = undefined;\r\n\t }\r\n\r\n\t if (this.autoScrollStep) {\r\n\t if (!this.autoScrollTimer) {\r\n\t this.autoScrollTimer = setInterval(function () {\r\n\t if (me.autoScrollStep) {\r\n\t content.scrollTop -= me.autoScrollStep;\r\n\t }\r\n\t else {\r\n\t me.stopAutoScroll();\r\n\t }\r\n\t }, interval);\r\n\t }\r\n\t }\r\n\t else {\r\n\t this.stopAutoScroll();\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Stop auto scrolling. Only applicable when scrolling\r\n\t */\r\n\ttreemode.stopAutoScroll = function () {\r\n\t if (this.autoScrollTimer) {\r\n\t clearTimeout(this.autoScrollTimer);\r\n\t delete this.autoScrollTimer;\r\n\t }\r\n\t if (this.autoScrollStep) {\r\n\t delete this.autoScrollStep;\r\n\t }\r\n\t};\r\n\r\n\r\n\t/**\r\n\t * Set the focus to an element in the editor, set text selection, and\r\n\t * set scroll position.\r\n\t * @param {Object} selection An object containing fields:\r\n\t * {Element | undefined} dom The dom element\r\n\t * which has focus\r\n\t * {Range | TextRange} range A text selection\r\n\t * {Node[]} nodes Nodes in case of multi selection\r\n\t * {Number} scrollTop Scroll position\r\n\t */\r\n\ttreemode.setSelection = function (selection) {\r\n\t if (!selection) {\r\n\t return;\r\n\t }\r\n\r\n\t if ('scrollTop' in selection && this.content) {\r\n\t // TODO: animated scroll\r\n\t this.content.scrollTop = selection.scrollTop;\r\n\t }\r\n\t if (selection.nodes) {\r\n\t // multi-select\r\n\t this.select(selection.nodes);\r\n\t }\r\n\t if (selection.range) {\r\n\t util.setSelectionOffset(selection.range);\r\n\t }\r\n\t if (selection.dom) {\r\n\t selection.dom.focus();\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Get the current focus\r\n\t * @return {Object} selection An object containing fields:\r\n\t * {Element | undefined} dom The dom element\r\n\t * which has focus\r\n\t * {Range | TextRange} range A text selection\r\n\t * {Node[]} nodes Nodes in case of multi selection\r\n\t * {Number} scrollTop Scroll position\r\n\t */\r\n\ttreemode.getSelection = function () {\r\n\t var range = util.getSelectionOffset();\r\n\t if (range && range.container.nodeName !== 'DIV') { // filter on (editable) divs)\r\n\t range = null;\r\n\t }\r\n\r\n\t return {\r\n\t dom: this.focusTarget,\r\n\t range: range,\r\n\t nodes: this.multiselection.nodes.slice(0),\r\n\t scrollTop: this.content ? this.content.scrollTop : 0\r\n\t };\r\n\t};\r\n\r\n\t/**\r\n\t * Adjust the scroll position such that given top position is shown at 1/4\r\n\t * of the window height.\r\n\t * @param {Number} top\r\n\t * @param {function(boolean)} [callback] Callback, executed when animation is\r\n\t * finished. The callback returns true\r\n\t * when animation is finished, or false\r\n\t * when not.\r\n\t */\r\n\ttreemode.scrollTo = function (top, callback) {\r\n\t var content = this.content;\r\n\t if (content) {\r\n\t var editor = this;\r\n\t // cancel any running animation\r\n\t if (editor.animateTimeout) {\r\n\t clearTimeout(editor.animateTimeout);\r\n\t delete editor.animateTimeout;\r\n\t }\r\n\t if (editor.animateCallback) {\r\n\t editor.animateCallback(false);\r\n\t delete editor.animateCallback;\r\n\t }\r\n\r\n\t // calculate final scroll position\r\n\t var height = content.clientHeight;\r\n\t var bottom = content.scrollHeight - height;\r\n\t var finalScrollTop = Math.min(Math.max(top - height / 4, 0), bottom);\r\n\r\n\t // animate towards the new scroll position\r\n\t var animate = function () {\r\n\t var scrollTop = content.scrollTop;\r\n\t var diff = (finalScrollTop - scrollTop);\r\n\t if (Math.abs(diff) > 3) {\r\n\t content.scrollTop += diff / 3;\r\n\t editor.animateCallback = callback;\r\n\t editor.animateTimeout = setTimeout(animate, 50);\r\n\t }\r\n\t else {\r\n\t // finished\r\n\t if (callback) {\r\n\t callback(true);\r\n\t }\r\n\t content.scrollTop = finalScrollTop;\r\n\t delete editor.animateTimeout;\r\n\t delete editor.animateCallback;\r\n\t }\r\n\t };\r\n\t animate();\r\n\t }\r\n\t else {\r\n\t if (callback) {\r\n\t callback(false);\r\n\t }\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Create main frame\r\n\t * @private\r\n\t */\r\n\ttreemode._createFrame = function () {\r\n\t // create the frame\r\n\t this.frame = document.createElement('div');\r\n\t this.frame.className = 'jsoneditor jsoneditor-mode-' + this.options.mode;\r\n\t this.container.appendChild(this.frame);\r\n\r\n\t // create one global event listener to handle all events from all nodes\r\n\t var editor = this;\r\n\t function onEvent(event) {\r\n\t // when switching to mode \"code\" or \"text\" via the menu, some events\r\n\t // are still fired whilst the _onEvent methods is already removed.\r\n\t if (editor._onEvent) {\r\n\t editor._onEvent(event);\r\n\t }\r\n\t }\r\n\t this.frame.onclick = function (event) {\r\n\t var target = event.target;// || event.srcElement;\r\n\r\n\t onEvent(event);\r\n\r\n\t // prevent default submit action of buttons when editor is located\r\n\t // inside a form\r\n\t if (target.nodeName == 'BUTTON') {\r\n\t event.preventDefault();\r\n\t }\r\n\t };\r\n\t this.frame.oninput = onEvent;\r\n\t this.frame.onchange = onEvent;\r\n\t this.frame.onkeydown = onEvent;\r\n\t this.frame.onkeyup = onEvent;\r\n\t this.frame.oncut = onEvent;\r\n\t this.frame.onpaste = onEvent;\r\n\t this.frame.onmousedown = onEvent;\r\n\t this.frame.onmouseup = onEvent;\r\n\t this.frame.onmouseover = onEvent;\r\n\t this.frame.onmouseout = onEvent;\r\n\t // Note: focus and blur events do not propagate, therefore they defined\r\n\t // using an eventListener with useCapture=true\r\n\t // see http://www.quirksmode.org/blog/archives/2008/04/delegating_the.html\r\n\t util.addEventListener(this.frame, 'focus', onEvent, true);\r\n\t util.addEventListener(this.frame, 'blur', onEvent, true);\r\n\t this.frame.onfocusin = onEvent; // for IE\r\n\t this.frame.onfocusout = onEvent; // for IE\r\n\r\n\t // create menu\r\n\t this.menu = document.createElement('div');\r\n\t this.menu.className = 'jsoneditor-menu';\r\n\t this.frame.appendChild(this.menu);\r\n\r\n\t // create expand all button\r\n\t var expandAll = document.createElement('button');\r\n\t expandAll.type = 'button';\r\n\t expandAll.className = 'jsoneditor-expand-all';\r\n\t expandAll.title = 'Expand all fields';\r\n\t expandAll.onclick = function () {\r\n\t editor.expandAll();\r\n\t };\r\n\t this.menu.appendChild(expandAll);\r\n\r\n\t // create expand all button\r\n\t var collapseAll = document.createElement('button');\r\n\t collapseAll.type = 'button';\r\n\t collapseAll.title = 'Collapse all fields';\r\n\t collapseAll.className = 'jsoneditor-collapse-all';\r\n\t collapseAll.onclick = function () {\r\n\t editor.collapseAll();\r\n\t };\r\n\t this.menu.appendChild(collapseAll);\r\n\r\n\t // create undo/redo buttons\r\n\t if (this.history) {\r\n\t // create undo button\r\n\t var undo = document.createElement('button');\r\n\t undo.type = 'button';\r\n\t undo.className = 'jsoneditor-undo jsoneditor-separator';\r\n\t undo.title = 'Undo last action (Ctrl+Z)';\r\n\t undo.onclick = function () {\r\n\t editor._onUndo();\r\n\t };\r\n\t this.menu.appendChild(undo);\r\n\t this.dom.undo = undo;\r\n\r\n\t // create redo button\r\n\t var redo = document.createElement('button');\r\n\t redo.type = 'button';\r\n\t redo.className = 'jsoneditor-redo';\r\n\t redo.title = 'Redo (Ctrl+Shift+Z)';\r\n\t redo.onclick = function () {\r\n\t editor._onRedo();\r\n\t };\r\n\t this.menu.appendChild(redo);\r\n\t this.dom.redo = redo;\r\n\r\n\t // register handler for onchange of history\r\n\t this.history.onChange = function () {\r\n\t undo.disabled = !editor.history.canUndo();\r\n\t redo.disabled = !editor.history.canRedo();\r\n\t };\r\n\t this.history.onChange();\r\n\t }\r\n\r\n\t // create mode box\r\n\t if (this.options && this.options.modes && this.options.modes.length) {\r\n\t var me = this;\r\n\t this.modeSwitcher = new ModeSwitcher(this.menu, this.options.modes, this.options.mode, function onSwitch(mode) {\r\n\t me.modeSwitcher.destroy();\r\n\r\n\t // switch mode and restore focus\r\n\t me.setMode(mode);\r\n\t me.modeSwitcher.focus();\r\n\t });\r\n\t }\r\n\r\n\t // create search box\r\n\t if (this.options.search) {\r\n\t this.searchBox = new SearchBox(this, this.menu);\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Perform an undo action\r\n\t * @private\r\n\t */\r\n\ttreemode._onUndo = function () {\r\n\t if (this.history) {\r\n\t // undo last action\r\n\t this.history.undo();\r\n\r\n\t // fire change event\r\n\t this._onChange();\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Perform a redo action\r\n\t * @private\r\n\t */\r\n\ttreemode._onRedo = function () {\r\n\t if (this.history) {\r\n\t // redo last action\r\n\t this.history.redo();\r\n\r\n\t // fire change event\r\n\t this._onChange();\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Event handler\r\n\t * @param event\r\n\t * @private\r\n\t */\r\n\ttreemode._onEvent = function (event) {\r\n\t if (event.type == 'keydown') {\r\n\t this._onKeyDown(event);\r\n\t }\r\n\r\n\t if (event.type == 'focus') {\r\n\t this.focusTarget = event.target;\r\n\t }\r\n\r\n\t if (event.type == 'mousedown') {\r\n\t this._startDragDistance(event);\r\n\t }\r\n\t if (event.type == 'mousemove' || event.type == 'mouseup' || event.type == 'click') {\r\n\t this._updateDragDistance(event);\r\n\t }\r\n\r\n\t var node = Node.getNodeFromTarget(event.target);\r\n\r\n\t if (node && node.selected) {\r\n\t if (event.type == 'click') {\r\n\t if (event.target == node.dom.menu) {\r\n\t this.showContextMenu(event.target);\r\n\r\n\t // stop propagation (else we will open the context menu of a single node)\r\n\t return;\r\n\t }\r\n\r\n\t // deselect a multi selection\r\n\t if (!event.hasMoved) {\r\n\t this.deselect();\r\n\t }\r\n\t }\r\n\r\n\t if (event.type == 'mousedown') {\r\n\t // drag multiple nodes\r\n\t Node.onDragStart(this.multiselection.nodes, event);\r\n\t }\r\n\t }\r\n\t else {\r\n\t if (event.type == 'mousedown') {\r\n\t this.deselect();\r\n\r\n\t if (node && event.target == node.dom.drag) {\r\n\t // drag a singe node\r\n\t Node.onDragStart(node, event);\r\n\t }\r\n\t else if (!node || (event.target != node.dom.field && event.target != node.dom.value && event.target != node.dom.select)) {\r\n\t // select multiple nodes\r\n\t this._onMultiSelectStart(event);\r\n\t }\r\n\t }\r\n\t }\r\n\r\n\t if (node) {\r\n\t node.onEvent(event);\r\n\t }\r\n\t};\r\n\r\n\ttreemode._startDragDistance = function (event) {\r\n\t this.dragDistanceEvent = {\r\n\t initialTarget: event.target,\r\n\t initialPageX: event.pageX,\r\n\t initialPageY: event.pageY,\r\n\t dragDistance: 0,\r\n\t hasMoved: false\r\n\t };\r\n\t};\r\n\r\n\ttreemode._updateDragDistance = function (event) {\r\n\t if (!this.dragDistanceEvent) {\r\n\t this._startDragDistance(event);\r\n\t }\r\n\r\n\t var diffX = event.pageX - this.dragDistanceEvent.initialPageX;\r\n\t var diffY = event.pageY - this.dragDistanceEvent.initialPageY;\r\n\r\n\t this.dragDistanceEvent.dragDistance = Math.sqrt(diffX * diffX + diffY * diffY);\r\n\t this.dragDistanceEvent.hasMoved =\r\n\t this.dragDistanceEvent.hasMoved || this.dragDistanceEvent.dragDistance > 10;\r\n\r\n\t event.dragDistance = this.dragDistanceEvent.dragDistance;\r\n\t event.hasMoved = this.dragDistanceEvent.hasMoved;\r\n\r\n\t return event.dragDistance;\r\n\t};\r\n\r\n\t/**\r\n\t * Start multi selection of nodes by dragging the mouse\r\n\t * @param event\r\n\t * @private\r\n\t */\r\n\ttreemode._onMultiSelectStart = function (event) {\r\n\t var node = Node.getNodeFromTarget(event.target);\r\n\r\n\t if (this.options.mode !== 'tree' || this.options.onEditable !== undefined) {\r\n\t // dragging not allowed in modes 'view' and 'form'\r\n\t // TODO: allow multiselection of items when option onEditable is specified\r\n\t return;\r\n\t }\r\n\r\n\t this.multiselection = {\r\n\t start: node || null,\r\n\t end: null,\r\n\t nodes: []\r\n\t };\r\n\r\n\t this._startDragDistance(event);\r\n\r\n\t var editor = this;\r\n\t if (!this.mousemove) {\r\n\t this.mousemove = util.addEventListener(window, 'mousemove', function (event) {\r\n\t editor._onMultiSelect(event);\r\n\t });\r\n\t }\r\n\t if (!this.mouseup) {\r\n\t this.mouseup = util.addEventListener(window, 'mouseup', function (event ) {\r\n\t editor._onMultiSelectEnd(event);\r\n\t });\r\n\t }\r\n\r\n\t};\r\n\r\n\t/**\r\n\t * Multiselect nodes by dragging\r\n\t * @param event\r\n\t * @private\r\n\t */\r\n\ttreemode._onMultiSelect = function (event) {\r\n\t event.preventDefault();\r\n\r\n\t this._updateDragDistance(event);\r\n\t if (!event.hasMoved) {\r\n\t return;\r\n\t }\r\n\r\n\t var node = Node.getNodeFromTarget(event.target);\r\n\r\n\t if (node) {\r\n\t if (this.multiselection.start == null) {\r\n\t this.multiselection.start = node;\r\n\t }\r\n\t this.multiselection.end = node;\r\n\t }\r\n\r\n\t // deselect previous selection\r\n\t this.deselect();\r\n\r\n\t // find the selected nodes in the range from first to last\r\n\t var start = this.multiselection.start;\r\n\t var end = this.multiselection.end || this.multiselection.start;\r\n\t if (start && end) {\r\n\t // find the top level childs, all having the same parent\r\n\t this.multiselection.nodes = this._findTopLevelNodes(start, end);\r\n\t this.select(this.multiselection.nodes);\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * End of multiselect nodes by dragging\r\n\t * @param event\r\n\t * @private\r\n\t */\r\n\ttreemode._onMultiSelectEnd = function (event) {\r\n\t // set focus to the context menu button of the first node\r\n\t if (this.multiselection.nodes[0]) {\r\n\t this.multiselection.nodes[0].dom.menu.focus();\r\n\t }\r\n\r\n\t this.multiselection.start = null;\r\n\t this.multiselection.end = null;\r\n\r\n\t // cleanup global event listeners\r\n\t if (this.mousemove) {\r\n\t util.removeEventListener(window, 'mousemove', this.mousemove);\r\n\t delete this.mousemove;\r\n\t }\r\n\t if (this.mouseup) {\r\n\t util.removeEventListener(window, 'mouseup', this.mouseup);\r\n\t delete this.mouseup;\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * deselect currently selected nodes\r\n\t * @param {boolean} [clearStartAndEnd=false] If true, the `start` and `end`\r\n\t * state is cleared too.\r\n\t */\r\n\ttreemode.deselect = function (clearStartAndEnd) {\r\n\t this.multiselection.nodes.forEach(function (node) {\r\n\t node.setSelected(false);\r\n\t });\r\n\t this.multiselection.nodes = [];\r\n\r\n\t if (clearStartAndEnd) {\r\n\t this.multiselection.start = null;\r\n\t this.multiselection.end = null;\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * select nodes\r\n\t * @param {Node[] | Node} nodes\r\n\t */\r\n\ttreemode.select = function (nodes) {\r\n\t if (!Array.isArray(nodes)) {\r\n\t return this.select([nodes]);\r\n\t }\r\n\r\n\t if (nodes) {\r\n\t this.deselect();\r\n\r\n\t this.multiselection.nodes = nodes.slice(0);\r\n\r\n\t var first = nodes[0];\r\n\t nodes.forEach(function (node) {\r\n\t node.setSelected(true, node === first);\r\n\t });\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * From two arbitrary selected nodes, find their shared parent node.\r\n\t * From that parent node, select the two child nodes in the brances going to\r\n\t * nodes `start` and `end`, and select all childs in between.\r\n\t * @param {Node} start\r\n\t * @param {Node} end\r\n\t * @return {Array.} Returns an ordered list with child nodes\r\n\t * @private\r\n\t */\r\n\ttreemode._findTopLevelNodes = function (start, end) {\r\n\t var startPath = start.getNodePath();\r\n\t var endPath = end.getNodePath();\r\n\t var i = 0;\r\n\t while (i < startPath.length && startPath[i] === endPath[i]) {\r\n\t i++;\r\n\t }\r\n\t var root = startPath[i - 1];\r\n\t var startChild = startPath[i];\r\n\t var endChild = endPath[i];\r\n\r\n\t if (!startChild || !endChild) {\r\n\t if (root.parent) {\r\n\t // startChild is a parent of endChild or vice versa\r\n\t startChild = root;\r\n\t endChild = root;\r\n\t root = root.parent\r\n\t }\r\n\t else {\r\n\t // we have selected the root node (which doesn't have a parent)\r\n\t startChild = root.childs[0];\r\n\t endChild = root.childs[root.childs.length - 1];\r\n\t }\r\n\t }\r\n\r\n\t if (root && startChild && endChild) {\r\n\t var startIndex = root.childs.indexOf(startChild);\r\n\t var endIndex = root.childs.indexOf(endChild);\r\n\t var firstIndex = Math.min(startIndex, endIndex);\r\n\t var lastIndex = Math.max(startIndex, endIndex);\r\n\r\n\t return root.childs.slice(firstIndex, lastIndex + 1);\r\n\t }\r\n\t else {\r\n\t return [];\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Event handler for keydown. Handles shortcut keys\r\n\t * @param {Event} event\r\n\t * @private\r\n\t */\r\n\ttreemode._onKeyDown = function (event) {\r\n\t var keynum = event.which || event.keyCode;\r\n\t var ctrlKey = event.ctrlKey;\r\n\t var shiftKey = event.shiftKey;\r\n\t var handled = false;\r\n\r\n\t if (keynum == 9) { // Tab or Shift+Tab\r\n\t var me = this;\r\n\t setTimeout(function () {\r\n\t // select all text when moving focus to an editable div\r\n\t util.selectContentEditable(me.focusTarget);\r\n\t }, 0);\r\n\t }\r\n\r\n\t if (this.searchBox) {\r\n\t if (ctrlKey && keynum == 70) { // Ctrl+F\r\n\t this.searchBox.dom.search.focus();\r\n\t this.searchBox.dom.search.select();\r\n\t handled = true;\r\n\t }\r\n\t else if (keynum == 114 || (ctrlKey && keynum == 71)) { // F3 or Ctrl+G\r\n\t var focus = true;\r\n\t if (!shiftKey) {\r\n\t // select next search result (F3 or Ctrl+G)\r\n\t this.searchBox.next(focus);\r\n\t }\r\n\t else {\r\n\t // select previous search result (Shift+F3 or Ctrl+Shift+G)\r\n\t this.searchBox.previous(focus);\r\n\t }\r\n\r\n\t handled = true;\r\n\t }\r\n\t }\r\n\r\n\t if (this.history) {\r\n\t if (ctrlKey && !shiftKey && keynum == 90) { // Ctrl+Z\r\n\t // undo\r\n\t this._onUndo();\r\n\t handled = true;\r\n\t }\r\n\t else if (ctrlKey && shiftKey && keynum == 90) { // Ctrl+Shift+Z\r\n\t // redo\r\n\t this._onRedo();\r\n\t handled = true;\r\n\t }\r\n\t }\r\n\r\n\t if (handled) {\r\n\t event.preventDefault();\r\n\t event.stopPropagation();\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Create main table\r\n\t * @private\r\n\t */\r\n\ttreemode._createTable = function () {\r\n\t var contentOuter = document.createElement('div');\r\n\t contentOuter.className = 'jsoneditor-outer';\r\n\t this.contentOuter = contentOuter;\r\n\r\n\t this.content = document.createElement('div');\r\n\t this.content.className = 'jsoneditor-tree';\r\n\t contentOuter.appendChild(this.content);\r\n\r\n\t this.table = document.createElement('table');\r\n\t this.table.className = 'jsoneditor-tree';\r\n\t this.content.appendChild(this.table);\r\n\r\n\t // create colgroup where the first two columns don't have a fixed\r\n\t // width, and the edit columns do have a fixed width\r\n\t var col;\r\n\t this.colgroupContent = document.createElement('colgroup');\r\n\t if (this.options.mode === 'tree') {\r\n\t col = document.createElement('col');\r\n\t col.width = \"24px\";\r\n\t this.colgroupContent.appendChild(col);\r\n\t }\r\n\t col = document.createElement('col');\r\n\t col.width = \"24px\";\r\n\t this.colgroupContent.appendChild(col);\r\n\t col = document.createElement('col');\r\n\t this.colgroupContent.appendChild(col);\r\n\t this.table.appendChild(this.colgroupContent);\r\n\r\n\t this.tbody = document.createElement('tbody');\r\n\t this.table.appendChild(this.tbody);\r\n\r\n\t this.frame.appendChild(contentOuter);\r\n\t};\r\n\r\n\t/**\r\n\t * Show a contextmenu for this node.\r\n\t * Used for multiselection\r\n\t * @param {HTMLElement} anchor Anchor element to attache the context menu to.\r\n\t * @param {function} [onClose] Callback method called when the context menu\r\n\t * is being closed.\r\n\t */\r\n\ttreemode.showContextMenu = function (anchor, onClose) {\r\n\t var items = [];\r\n\t var editor = this;\r\n\r\n\t // create duplicate button\r\n\t items.push({\r\n\t text: 'Duplicate',\r\n\t title: 'Duplicate selected fields (Ctrl+D)',\r\n\t className: 'jsoneditor-duplicate',\r\n\t click: function () {\r\n\t Node.onDuplicate(editor.multiselection.nodes);\r\n\t }\r\n\t });\r\n\r\n\t // create remove button\r\n\t items.push({\r\n\t text: 'Remove',\r\n\t title: 'Remove selected fields (Ctrl+Del)',\r\n\t className: 'jsoneditor-remove',\r\n\t click: function () {\r\n\t Node.onRemove(editor.multiselection.nodes);\r\n\t }\r\n\t });\r\n\r\n\t var menu = new ContextMenu(items, {close: onClose});\r\n\t menu.show(anchor, this.content);\r\n\t};\r\n\r\n\r\n\t// define modes\r\n\tmodule.exports = [\r\n\t {\r\n\t mode: 'tree',\r\n\t mixin: treemode,\r\n\t data: 'json'\r\n\t },\r\n\t {\r\n\t mode: 'view',\r\n\t mixin: treemode,\r\n\t data: 'json'\r\n\t },\r\n\t {\r\n\t mode: 'form',\r\n\t mixin: treemode,\r\n\t data: 'json'\r\n\t }\r\n\t];\r\n\r\n\r\n/***/ },\r\n/* 52 */\r\n/***/ function(module, exports) {\r\n\r\n\t'use strict';\r\n\r\n\t/**\r\n\t * The highlighter can highlight/unhighlight a node, and\r\n\t * animate the visibility of a context menu.\r\n\t * @constructor Highlighter\r\n\t */\r\n\tfunction Highlighter () {\r\n\t this.locked = false;\r\n\t}\r\n\r\n\t/**\r\n\t * Hightlight given node and its childs\r\n\t * @param {Node} node\r\n\t */\r\n\tHighlighter.prototype.highlight = function (node) {\r\n\t if (this.locked) {\r\n\t return;\r\n\t }\r\n\r\n\t if (this.node != node) {\r\n\t // unhighlight current node\r\n\t if (this.node) {\r\n\t this.node.setHighlight(false);\r\n\t }\r\n\r\n\t // highlight new node\r\n\t this.node = node;\r\n\t this.node.setHighlight(true);\r\n\t }\r\n\r\n\t // cancel any current timeout\r\n\t this._cancelUnhighlight();\r\n\t};\r\n\r\n\t/**\r\n\t * Unhighlight currently highlighted node.\r\n\t * Will be done after a delay\r\n\t */\r\n\tHighlighter.prototype.unhighlight = function () {\r\n\t if (this.locked) {\r\n\t return;\r\n\t }\r\n\r\n\t var me = this;\r\n\t if (this.node) {\r\n\t this._cancelUnhighlight();\r\n\r\n\t // do the unhighlighting after a small delay, to prevent re-highlighting\r\n\t // the same node when moving from the drag-icon to the contextmenu-icon\r\n\t // or vice versa.\r\n\t this.unhighlightTimer = setTimeout(function () {\r\n\t me.node.setHighlight(false);\r\n\t me.node = undefined;\r\n\t me.unhighlightTimer = undefined;\r\n\t }, 0);\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Cancel an unhighlight action (if before the timeout of the unhighlight action)\r\n\t * @private\r\n\t */\r\n\tHighlighter.prototype._cancelUnhighlight = function () {\r\n\t if (this.unhighlightTimer) {\r\n\t clearTimeout(this.unhighlightTimer);\r\n\t this.unhighlightTimer = undefined;\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Lock highlighting or unhighlighting nodes.\r\n\t * methods highlight and unhighlight do not work while locked.\r\n\t */\r\n\tHighlighter.prototype.lock = function () {\r\n\t this.locked = true;\r\n\t};\r\n\r\n\t/**\r\n\t * Unlock highlighting or unhighlighting nodes\r\n\t */\r\n\tHighlighter.prototype.unlock = function () {\r\n\t this.locked = false;\r\n\t};\r\n\r\n\tmodule.exports = Highlighter;\r\n\r\n\r\n/***/ },\r\n/* 53 */\r\n/***/ function(module, exports, __webpack_require__) {\r\n\r\n\t'use strict';\r\n\r\n\tvar util = __webpack_require__(54);\r\n\r\n\t/**\r\n\t * @constructor History\r\n\t * Store action history, enables undo and redo\r\n\t * @param {JSONEditor} editor\r\n\t */\r\n\tfunction History (editor) {\r\n\t this.editor = editor;\r\n\t this.history = [];\r\n\t this.index = -1;\r\n\r\n\t this.clear();\r\n\r\n\t // map with all supported actions\r\n\t this.actions = {\r\n\t 'editField': {\r\n\t 'undo': function (params) {\r\n\t params.node.updateField(params.oldValue);\r\n\t },\r\n\t 'redo': function (params) {\r\n\t params.node.updateField(params.newValue);\r\n\t }\r\n\t },\r\n\t 'editValue': {\r\n\t 'undo': function (params) {\r\n\t params.node.updateValue(params.oldValue);\r\n\t },\r\n\t 'redo': function (params) {\r\n\t params.node.updateValue(params.newValue);\r\n\t }\r\n\t },\r\n\t 'changeType': {\r\n\t 'undo': function (params) {\r\n\t params.node.changeType(params.oldType);\r\n\t },\r\n\t 'redo': function (params) {\r\n\t params.node.changeType(params.newType);\r\n\t }\r\n\t },\r\n\r\n\t 'appendNodes': {\r\n\t 'undo': function (params) {\r\n\t params.nodes.forEach(function (node) {\r\n\t params.parent.removeChild(node);\r\n\t });\r\n\t },\r\n\t 'redo': function (params) {\r\n\t params.nodes.forEach(function (node) {\r\n\t params.parent.appendChild(node);\r\n\t });\r\n\t }\r\n\t },\r\n\t 'insertBeforeNodes': {\r\n\t 'undo': function (params) {\r\n\t params.nodes.forEach(function (node) {\r\n\t params.parent.removeChild(node);\r\n\t });\r\n\t },\r\n\t 'redo': function (params) {\r\n\t params.nodes.forEach(function (node) {\r\n\t params.parent.insertBefore(node, params.beforeNode);\r\n\t });\r\n\t }\r\n\t },\r\n\t 'insertAfterNodes': {\r\n\t 'undo': function (params) {\r\n\t params.nodes.forEach(function (node) {\r\n\t params.parent.removeChild(node);\r\n\t });\r\n\t },\r\n\t 'redo': function (params) {\r\n\t var afterNode = params.afterNode;\r\n\t params.nodes.forEach(function (node) {\r\n\t params.parent.insertAfter(params.node, afterNode);\r\n\t afterNode = node;\r\n\t });\r\n\t }\r\n\t },\r\n\t 'removeNodes': {\r\n\t 'undo': function (params) {\r\n\t var parent = params.parent;\r\n\t var beforeNode = parent.childs[params.index] || parent.append;\r\n\t params.nodes.forEach(function (node) {\r\n\t parent.insertBefore(node, beforeNode);\r\n\t });\r\n\t },\r\n\t 'redo': function (params) {\r\n\t params.nodes.forEach(function (node) {\r\n\t params.parent.removeChild(node);\r\n\t });\r\n\t }\r\n\t },\r\n\t 'duplicateNodes': {\r\n\t 'undo': function (params) {\r\n\t params.nodes.forEach(function (node) {\r\n\t params.parent.removeChild(node);\r\n\t });\r\n\t },\r\n\t 'redo': function (params) {\r\n\t var afterNode = params.afterNode;\r\n\t params.nodes.forEach(function (node) {\r\n\t params.parent.insertAfter(node, afterNode);\r\n\t afterNode = node;\r\n\t });\r\n\t }\r\n\t },\r\n\t 'moveNodes': {\r\n\t 'undo': function (params) {\r\n\t params.nodes.forEach(function (node) {\r\n\t params.oldBeforeNode.parent.moveBefore(node, params.oldBeforeNode);\r\n\t });\r\n\t },\r\n\t 'redo': function (params) {\r\n\t params.nodes.forEach(function (node) {\r\n\t params.newBeforeNode.parent.moveBefore(node, params.newBeforeNode);\r\n\t });\r\n\t }\r\n\t },\r\n\r\n\t 'sort': {\r\n\t 'undo': function (params) {\r\n\t var node = params.node;\r\n\t node.hideChilds();\r\n\t node.sort = params.oldSort;\r\n\t node.childs = params.oldChilds;\r\n\t node.showChilds();\r\n\t },\r\n\t 'redo': function (params) {\r\n\t var node = params.node;\r\n\t node.hideChilds();\r\n\t node.sort = params.newSort;\r\n\t node.childs = params.newChilds;\r\n\t node.showChilds();\r\n\t }\r\n\t }\r\n\r\n\t // TODO: restore the original caret position and selection with each undo\r\n\t // TODO: implement history for actions \"expand\", \"collapse\", \"scroll\", \"setDocument\"\r\n\t };\r\n\t}\r\n\r\n\t/**\r\n\t * The method onChange is executed when the History is changed, and can\r\n\t * be overloaded.\r\n\t */\r\n\tHistory.prototype.onChange = function () {};\r\n\r\n\t/**\r\n\t * Add a new action to the history\r\n\t * @param {String} action The executed action. Available actions: \"editField\",\r\n\t * \"editValue\", \"changeType\", \"appendNode\",\r\n\t * \"removeNode\", \"duplicateNode\", \"moveNode\"\r\n\t * @param {Object} params Object containing parameters describing the change.\r\n\t * The parameters in params depend on the action (for\r\n\t * example for \"editValue\" the Node, old value, and new\r\n\t * value are provided). params contains all information\r\n\t * needed to undo or redo the action.\r\n\t */\r\n\tHistory.prototype.add = function (action, params) {\r\n\t this.index++;\r\n\t this.history[this.index] = {\r\n\t 'action': action,\r\n\t 'params': params,\r\n\t 'timestamp': new Date()\r\n\t };\r\n\r\n\t // remove redo actions which are invalid now\r\n\t if (this.index < this.history.length - 1) {\r\n\t this.history.splice(this.index + 1, this.history.length - this.index - 1);\r\n\t }\r\n\r\n\t // fire onchange event\r\n\t this.onChange();\r\n\t};\r\n\r\n\t/**\r\n\t * Clear history\r\n\t */\r\n\tHistory.prototype.clear = function () {\r\n\t this.history = [];\r\n\t this.index = -1;\r\n\r\n\t // fire onchange event\r\n\t this.onChange();\r\n\t};\r\n\r\n\t/**\r\n\t * Check if there is an action available for undo\r\n\t * @return {Boolean} canUndo\r\n\t */\r\n\tHistory.prototype.canUndo = function () {\r\n\t return (this.index >= 0);\r\n\t};\r\n\r\n\t/**\r\n\t * Check if there is an action available for redo\r\n\t * @return {Boolean} canRedo\r\n\t */\r\n\tHistory.prototype.canRedo = function () {\r\n\t return (this.index < this.history.length - 1);\r\n\t};\r\n\r\n\t/**\r\n\t * Undo the last action\r\n\t */\r\n\tHistory.prototype.undo = function () {\r\n\t if (this.canUndo()) {\r\n\t var obj = this.history[this.index];\r\n\t if (obj) {\r\n\t var action = this.actions[obj.action];\r\n\t if (action && action.undo) {\r\n\t action.undo(obj.params);\r\n\t if (obj.params.oldSelection) {\r\n\t this.editor.setSelection(obj.params.oldSelection);\r\n\t }\r\n\t }\r\n\t else {\r\n\t console.error(new Error('unknown action \"' + obj.action + '\"'));\r\n\t }\r\n\t }\r\n\t this.index--;\r\n\r\n\t // fire onchange event\r\n\t this.onChange();\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Redo the last action\r\n\t */\r\n\tHistory.prototype.redo = function () {\r\n\t if (this.canRedo()) {\r\n\t this.index++;\r\n\r\n\t var obj = this.history[this.index];\r\n\t if (obj) {\r\n\t var action = this.actions[obj.action];\r\n\t if (action && action.redo) {\r\n\t action.redo(obj.params);\r\n\t if (obj.params.newSelection) {\r\n\t this.editor.setSelection(obj.params.newSelection);\r\n\t }\r\n\t }\r\n\t else {\r\n\t console.error(new Error('unknown action \"' + obj.action + '\"'));\r\n\t }\r\n\t }\r\n\r\n\t // fire onchange event\r\n\t this.onChange();\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Destroy history\r\n\t */\r\n\tHistory.prototype.destroy = function () {\r\n\t this.editor = null;\r\n\r\n\t this.history = [];\r\n\t this.index = -1;\r\n\t};\r\n\r\n\tmodule.exports = History;\r\n\r\n\r\n/***/ },\r\n/* 54 */\r\n/***/ function(module, exports, __webpack_require__) {\r\n\r\n\t'use strict';\r\n\r\n\tvar jsonlint = __webpack_require__(55);\r\n\r\n\t/**\r\n\t * Parse JSON using the parser built-in in the browser.\r\n\t * On exception, the jsonString is validated and a detailed error is thrown.\r\n\t * @param {String} jsonString\r\n\t * @return {JSON} json\r\n\t */\r\n\texports.parse = function parse(jsonString) {\r\n\t try {\r\n\t return JSON.parse(jsonString);\r\n\t }\r\n\t catch (err) {\r\n\t // try to throw a more detailed error message using validate\r\n\t exports.validate(jsonString);\r\n\r\n\t // rethrow the original error\r\n\t throw err;\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Sanitize a JSON-like string containing. For example changes JavaScript\r\n\t * notation into JSON notation.\r\n\t * This function for example changes a string like \"{a: 2, 'b': {c: 'd'}\"\r\n\t * into '{\"a\": 2, \"b\": {\"c\": \"d\"}'\r\n\t * @param {string} jsString\r\n\t * @returns {string} json\r\n\t */\r\n\texports.sanitize = function (jsString) {\r\n\t // escape all single and double quotes inside strings\r\n\t var chars = [];\r\n\t var i = 0;\r\n\r\n\t //If JSON starts with a function (characters/digits/\"_-\"), remove this function.\r\n\t //This is useful for \"stripping\" JSONP objects to become JSON\r\n\t //For example: /* some comment */ function_12321321 ( [{\"a\":\"b\"}] ); => [{\"a\":\"b\"}]\r\n\t var match = jsString.match(/^\\s*(\\/\\*(.|[\\r\\n])*?\\*\\/)?\\s*[\\da-zA-Z_$]+\\s*\\(([\\s\\S]*)\\)\\s*;?\\s*$/);\r\n\t if (match) {\r\n\t jsString = match[3];\r\n\t }\r\n\r\n\t // helper functions to get the current/prev/next character\r\n\t function curr () { return jsString.charAt(i); }\r\n\t function next() { return jsString.charAt(i + 1); }\r\n\t function prev() { return jsString.charAt(i - 1); }\r\n\r\n\t // get the last parsed non-whitespace character\r\n\t function lastNonWhitespace () {\r\n\t var p = chars.length - 1;\r\n\r\n\t while (p >= 0) {\r\n\t var pp = chars[p];\r\n\t if (pp !== ' ' && pp !== '\\n' && pp !== '\\r' && pp !== '\\t') { // non whitespace\r\n\t return pp;\r\n\t }\r\n\t p--;\r\n\t }\r\n\r\n\t return '';\r\n\t }\r\n\r\n\t // skip a block comment '/* ... */'\r\n\t function skipBlockComment () {\r\n\t i += 2;\r\n\t while (i < jsString.length && (curr() !== '*' || next() !== '/')) {\r\n\t i++;\r\n\t }\r\n\t i += 2;\r\n\t }\r\n\r\n\t // skip a comment '// ...'\r\n\t function skipComment () {\r\n\t i += 2;\r\n\t while (i < jsString.length && (curr() !== '\\n')) {\r\n\t i++;\r\n\t }\r\n\t }\r\n\r\n\t // parse single or double quoted string\r\n\t function parseString(quote) {\r\n\t chars.push('\"');\r\n\t i++;\r\n\t var c = curr();\r\n\t while (i < jsString.length && c !== quote) {\r\n\t if (c === '\"' && prev() !== '\\\\') {\r\n\t // unescaped double quote, escape it\r\n\t chars.push('\\\\');\r\n\t }\r\n\r\n\t // handle escape character\r\n\t if (c === '\\\\') {\r\n\t i++;\r\n\t c = curr();\r\n\r\n\t // remove the escape character when followed by a single quote ', not needed\r\n\t if (c !== '\\'') {\r\n\t chars.push('\\\\');\r\n\t }\r\n\t }\r\n\t chars.push(c);\r\n\r\n\t i++;\r\n\t c = curr();\r\n\t }\r\n\t if (c === quote) {\r\n\t chars.push('\"');\r\n\t i++;\r\n\t }\r\n\t }\r\n\r\n\t // parse an unquoted key\r\n\t function parseKey() {\r\n\t var specialValues = ['null', 'true', 'false'];\r\n\t var key = '';\r\n\t var c = curr();\r\n\r\n\t var regexp = /[a-zA-Z_$\\d]/; // letter, number, underscore, dollar character\r\n\t while (regexp.test(c)) {\r\n\t key += c;\r\n\t i++;\r\n\t c = curr();\r\n\t }\r\n\r\n\t if (specialValues.indexOf(key) === -1) {\r\n\t chars.push('\"' + key + '\"');\r\n\t }\r\n\t else {\r\n\t chars.push(key);\r\n\t }\r\n\t }\r\n\r\n\t while(i < jsString.length) {\r\n\t var c = curr();\r\n\r\n\t if (c === '/' && next() === '*') {\r\n\t skipBlockComment();\r\n\t }\r\n\t else if (c === '/' && next() === '/') {\r\n\t skipComment();\r\n\t }\r\n\t else if (c === '\\'' || c === '\"') {\r\n\t parseString(c);\r\n\t }\r\n\t else if (/[a-zA-Z_$]/.test(c) && ['{', ','].indexOf(lastNonWhitespace()) !== -1) {\r\n\t // an unquoted object key (like a in '{a:2}')\r\n\t parseKey();\r\n\t }\r\n\t else {\r\n\t chars.push(c);\r\n\t i++;\r\n\t }\r\n\t }\r\n\r\n\t return chars.join('');\r\n\t};\r\n\r\n\t/**\r\n\t * Escape unicode characters.\r\n\t * For example input '\\u2661' (length 1) will output '\\\\u2661' (length 5).\r\n\t * @param {string} text\r\n\t * @return {string}\r\n\t */\r\n\texports.escapeUnicodeChars = function (text) {\r\n\t // see https://www.wikiwand.com/en/UTF-16\r\n\t // note: we leave surrogate pairs as two individual chars,\r\n\t // as JSON doesn't interpret them as a single unicode char.\r\n\t return text.replace(/[\\u007F-\\uFFFF]/g, function(c) {\r\n\t return '\\\\u'+('0000' + c.charCodeAt(0).toString(16)).slice(-4);\r\n\t })\r\n\t};\r\n\r\n\t/**\r\n\t * Validate a string containing a JSON object\r\n\t * This method uses JSONLint to validate the String. If JSONLint is not\r\n\t * available, the built-in JSON parser of the browser is used.\r\n\t * @param {String} jsonString String with an (invalid) JSON object\r\n\t * @throws Error\r\n\t */\r\n\texports.validate = function validate(jsonString) {\r\n\t if (typeof(jsonlint) != 'undefined') {\r\n\t jsonlint.parse(jsonString);\r\n\t }\r\n\t else {\r\n\t JSON.parse(jsonString);\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Extend object a with the properties of object b\r\n\t * @param {Object} a\r\n\t * @param {Object} b\r\n\t * @return {Object} a\r\n\t */\r\n\texports.extend = function extend(a, b) {\r\n\t for (var prop in b) {\r\n\t if (b.hasOwnProperty(prop)) {\r\n\t a[prop] = b[prop];\r\n\t }\r\n\t }\r\n\t return a;\r\n\t};\r\n\r\n\t/**\r\n\t * Remove all properties from object a\r\n\t * @param {Object} a\r\n\t * @return {Object} a\r\n\t */\r\n\texports.clear = function clear (a) {\r\n\t for (var prop in a) {\r\n\t if (a.hasOwnProperty(prop)) {\r\n\t delete a[prop];\r\n\t }\r\n\t }\r\n\t return a;\r\n\t};\r\n\r\n\t/**\r\n\t * Get the type of an object\r\n\t * @param {*} object\r\n\t * @return {String} type\r\n\t */\r\n\texports.type = function type (object) {\r\n\t if (object === null) {\r\n\t return 'null';\r\n\t }\r\n\t if (object === undefined) {\r\n\t return 'undefined';\r\n\t }\r\n\t if ((object instanceof Number) || (typeof object === 'number')) {\r\n\t return 'number';\r\n\t }\r\n\t if ((object instanceof String) || (typeof object === 'string')) {\r\n\t return 'string';\r\n\t }\r\n\t if ((object instanceof Boolean) || (typeof object === 'boolean')) {\r\n\t return 'boolean';\r\n\t }\r\n\t if ((object instanceof RegExp) || (typeof object === 'regexp')) {\r\n\t return 'regexp';\r\n\t }\r\n\t if (exports.isArray(object)) {\r\n\t return 'array';\r\n\t }\r\n\r\n\t return 'object';\r\n\t};\r\n\r\n\t/**\r\n\t * Test whether a text contains a url (matches when a string starts\r\n\t * with 'http://*' or 'https://*' and has no whitespace characters)\r\n\t * @param {String} text\r\n\t */\r\n\tvar isUrlRegex = /^https?:\\/\\/\\S+$/;\r\n\texports.isUrl = function isUrl (text) {\r\n\t return (typeof text == 'string' || text instanceof String) &&\r\n\t isUrlRegex.test(text);\r\n\t};\r\n\r\n\t/**\r\n\t * Tes whether given object is an Array\r\n\t * @param {*} obj\r\n\t * @returns {boolean} returns true when obj is an array\r\n\t */\r\n\texports.isArray = function (obj) {\r\n\t return Object.prototype.toString.call(obj) === '[object Array]';\r\n\t};\r\n\r\n\t/**\r\n\t * Retrieve the absolute left value of a DOM element\r\n\t * @param {Element} elem A dom element, for example a div\r\n\t * @return {Number} left The absolute left position of this element\r\n\t * in the browser page.\r\n\t */\r\n\texports.getAbsoluteLeft = function getAbsoluteLeft(elem) {\r\n\t var rect = elem.getBoundingClientRect();\r\n\t return rect.left + window.pageXOffset || document.scrollLeft || 0;\r\n\t};\r\n\r\n\t/**\r\n\t * Retrieve the absolute top value of a DOM element\r\n\t * @param {Element} elem A dom element, for example a div\r\n\t * @return {Number} top The absolute top position of this element\r\n\t * in the browser page.\r\n\t */\r\n\texports.getAbsoluteTop = function getAbsoluteTop(elem) {\r\n\t var rect = elem.getBoundingClientRect();\r\n\t return rect.top + window.pageYOffset || document.scrollTop || 0;\r\n\t};\r\n\r\n\t/**\r\n\t * add a className to the given elements style\r\n\t * @param {Element} elem\r\n\t * @param {String} className\r\n\t */\r\n\texports.addClassName = function addClassName(elem, className) {\r\n\t var classes = elem.className.split(' ');\r\n\t if (classes.indexOf(className) == -1) {\r\n\t classes.push(className); // add the class to the array\r\n\t elem.className = classes.join(' ');\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * add a className to the given elements style\r\n\t * @param {Element} elem\r\n\t * @param {String} className\r\n\t */\r\n\texports.removeClassName = function removeClassName(elem, className) {\r\n\t var classes = elem.className.split(' ');\r\n\t var index = classes.indexOf(className);\r\n\t if (index != -1) {\r\n\t classes.splice(index, 1); // remove the class from the array\r\n\t elem.className = classes.join(' ');\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Strip the formatting from the contents of a div\r\n\t * the formatting from the div itself is not stripped, only from its childs.\r\n\t * @param {Element} divElement\r\n\t */\r\n\texports.stripFormatting = function stripFormatting(divElement) {\r\n\t var childs = divElement.childNodes;\r\n\t for (var i = 0, iMax = childs.length; i < iMax; i++) {\r\n\t var child = childs[i];\r\n\r\n\t // remove the style\r\n\t if (child.style) {\r\n\t // TODO: test if child.attributes does contain style\r\n\t child.removeAttribute('style');\r\n\t }\r\n\r\n\t // remove all attributes\r\n\t var attributes = child.attributes;\r\n\t if (attributes) {\r\n\t for (var j = attributes.length - 1; j >= 0; j--) {\r\n\t var attribute = attributes[j];\r\n\t if (attribute.specified === true) {\r\n\t child.removeAttribute(attribute.name);\r\n\t }\r\n\t }\r\n\t }\r\n\r\n\t // recursively strip childs\r\n\t exports.stripFormatting(child);\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Set focus to the end of an editable div\r\n\t * code from Nico Burns\r\n\t * http://stackoverflow.com/users/140293/nico-burns\r\n\t * http://stackoverflow.com/questions/1125292/how-to-move-cursor-to-end-of-contenteditable-entity\r\n\t * @param {Element} contentEditableElement A content editable div\r\n\t */\r\n\texports.setEndOfContentEditable = function setEndOfContentEditable(contentEditableElement) {\r\n\t var range, selection;\r\n\t if(document.createRange) {\r\n\t range = document.createRange();//Create a range (a range is a like the selection but invisible)\r\n\t range.selectNodeContents(contentEditableElement);//Select the entire contents of the element with the range\r\n\t range.collapse(false);//collapse the range to the end point. false means collapse to end rather than the start\r\n\t selection = window.getSelection();//get the selection object (allows you to change selection)\r\n\t selection.removeAllRanges();//remove any selections already made\r\n\t selection.addRange(range);//make the range you have just created the visible selection\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Select all text of a content editable div.\r\n\t * http://stackoverflow.com/a/3806004/1262753\r\n\t * @param {Element} contentEditableElement A content editable div\r\n\t */\r\n\texports.selectContentEditable = function selectContentEditable(contentEditableElement) {\r\n\t if (!contentEditableElement || contentEditableElement.nodeName != 'DIV') {\r\n\t return;\r\n\t }\r\n\r\n\t var sel, range;\r\n\t if (window.getSelection && document.createRange) {\r\n\t range = document.createRange();\r\n\t range.selectNodeContents(contentEditableElement);\r\n\t sel = window.getSelection();\r\n\t sel.removeAllRanges();\r\n\t sel.addRange(range);\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Get text selection\r\n\t * http://stackoverflow.com/questions/4687808/contenteditable-selected-text-save-and-restore\r\n\t * @return {Range | TextRange | null} range\r\n\t */\r\n\texports.getSelection = function getSelection() {\r\n\t if (window.getSelection) {\r\n\t var sel = window.getSelection();\r\n\t if (sel.getRangeAt && sel.rangeCount) {\r\n\t return sel.getRangeAt(0);\r\n\t }\r\n\t }\r\n\t return null;\r\n\t};\r\n\r\n\t/**\r\n\t * Set text selection\r\n\t * http://stackoverflow.com/questions/4687808/contenteditable-selected-text-save-and-restore\r\n\t * @param {Range | TextRange | null} range\r\n\t */\r\n\texports.setSelection = function setSelection(range) {\r\n\t if (range) {\r\n\t if (window.getSelection) {\r\n\t var sel = window.getSelection();\r\n\t sel.removeAllRanges();\r\n\t sel.addRange(range);\r\n\t }\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Get selected text range\r\n\t * @return {Object} params object containing parameters:\r\n\t * {Number} startOffset\r\n\t * {Number} endOffset\r\n\t * {Element} container HTML element holding the\r\n\t * selected text element\r\n\t * Returns null if no text selection is found\r\n\t */\r\n\texports.getSelectionOffset = function getSelectionOffset() {\r\n\t var range = exports.getSelection();\r\n\r\n\t if (range && 'startOffset' in range && 'endOffset' in range &&\r\n\t range.startContainer && (range.startContainer == range.endContainer)) {\r\n\t return {\r\n\t startOffset: range.startOffset,\r\n\t endOffset: range.endOffset,\r\n\t container: range.startContainer.parentNode\r\n\t };\r\n\t }\r\n\r\n\t return null;\r\n\t};\r\n\r\n\t/**\r\n\t * Set selected text range in given element\r\n\t * @param {Object} params An object containing:\r\n\t * {Element} container\r\n\t * {Number} startOffset\r\n\t * {Number} endOffset\r\n\t */\r\n\texports.setSelectionOffset = function setSelectionOffset(params) {\r\n\t if (document.createRange && window.getSelection) {\r\n\t var selection = window.getSelection();\r\n\t if(selection) {\r\n\t var range = document.createRange();\r\n\r\n\t if (!params.container.firstChild) {\r\n\t params.container.appendChild(document.createTextNode(''));\r\n\t }\r\n\r\n\t // TODO: do not suppose that the first child of the container is a textnode,\r\n\t // but recursively find the textnodes\r\n\t range.setStart(params.container.firstChild, params.startOffset);\r\n\t range.setEnd(params.container.firstChild, params.endOffset);\r\n\r\n\t exports.setSelection(range);\r\n\t }\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Get the inner text of an HTML element (for example a div element)\r\n\t * @param {Element} element\r\n\t * @param {Object} [buffer]\r\n\t * @return {String} innerText\r\n\t */\r\n\texports.getInnerText = function getInnerText(element, buffer) {\r\n\t var first = (buffer == undefined);\r\n\t if (first) {\r\n\t buffer = {\r\n\t 'text': '',\r\n\t 'flush': function () {\r\n\t var text = this.text;\r\n\t this.text = '';\r\n\t return text;\r\n\t },\r\n\t 'set': function (text) {\r\n\t this.text = text;\r\n\t }\r\n\t };\r\n\t }\r\n\r\n\t // text node\r\n\t if (element.nodeValue) {\r\n\t return buffer.flush() + element.nodeValue;\r\n\t }\r\n\r\n\t // divs or other HTML elements\r\n\t if (element.hasChildNodes()) {\r\n\t var childNodes = element.childNodes;\r\n\t var innerText = '';\r\n\r\n\t for (var i = 0, iMax = childNodes.length; i < iMax; i++) {\r\n\t var child = childNodes[i];\r\n\r\n\t if (child.nodeName == 'DIV' || child.nodeName == 'P') {\r\n\t var prevChild = childNodes[i - 1];\r\n\t var prevName = prevChild ? prevChild.nodeName : undefined;\r\n\t if (prevName && prevName != 'DIV' && prevName != 'P' && prevName != 'BR') {\r\n\t innerText += '\\n';\r\n\t buffer.flush();\r\n\t }\r\n\t innerText += exports.getInnerText(child, buffer);\r\n\t buffer.set('\\n');\r\n\t }\r\n\t else if (child.nodeName == 'BR') {\r\n\t innerText += buffer.flush();\r\n\t buffer.set('\\n');\r\n\t }\r\n\t else {\r\n\t innerText += exports.getInnerText(child, buffer);\r\n\t }\r\n\t }\r\n\r\n\t return innerText;\r\n\t }\r\n\t else {\r\n\t if (element.nodeName == 'P' && exports.getInternetExplorerVersion() != -1) {\r\n\t // On Internet Explorer, a

with hasChildNodes()==false is\r\n\t // rendered with a new line. Note that a

with\r\n\t // hasChildNodes()==true is rendered without a new line\r\n\t // Other browsers always ensure there is a
inside the

,\r\n\t // and if not, the

does not render a new line\r\n\t return buffer.flush();\r\n\t }\r\n\t }\r\n\r\n\t // br or unknown\r\n\t return '';\r\n\t};\r\n\r\n\t/**\r\n\t * Returns the version of Internet Explorer or a -1\r\n\t * (indicating the use of another browser).\r\n\t * Source: http://msdn.microsoft.com/en-us/library/ms537509(v=vs.85).aspx\r\n\t * @return {Number} Internet Explorer version, or -1 in case of an other browser\r\n\t */\r\n\texports.getInternetExplorerVersion = function getInternetExplorerVersion() {\r\n\t if (_ieVersion == -1) {\r\n\t var rv = -1; // Return value assumes failure.\r\n\t if (navigator.appName == 'Microsoft Internet Explorer')\r\n\t {\r\n\t var ua = navigator.userAgent;\r\n\t var re = new RegExp(\"MSIE ([0-9]{1,}[\\.0-9]{0,})\");\r\n\t if (re.exec(ua) != null) {\r\n\t rv = parseFloat( RegExp.$1 );\r\n\t }\r\n\t }\r\n\r\n\t _ieVersion = rv;\r\n\t }\r\n\r\n\t return _ieVersion;\r\n\t};\r\n\r\n\t/**\r\n\t * Test whether the current browser is Firefox\r\n\t * @returns {boolean} isFirefox\r\n\t */\r\n\texports.isFirefox = function isFirefox () {\r\n\t return (navigator.userAgent.indexOf(\"Firefox\") != -1);\r\n\t};\r\n\r\n\t/**\r\n\t * cached internet explorer version\r\n\t * @type {Number}\r\n\t * @private\r\n\t */\r\n\tvar _ieVersion = -1;\r\n\r\n\t/**\r\n\t * Add and event listener. Works for all browsers\r\n\t * @param {Element} element An html element\r\n\t * @param {string} action The action, for example \"click\",\r\n\t * without the prefix \"on\"\r\n\t * @param {function} listener The callback function to be executed\r\n\t * @param {boolean} [useCapture] false by default\r\n\t * @return {function} the created event listener\r\n\t */\r\n\texports.addEventListener = function addEventListener(element, action, listener, useCapture) {\r\n\t if (element.addEventListener) {\r\n\t if (useCapture === undefined)\r\n\t useCapture = false;\r\n\r\n\t if (action === \"mousewheel\" && exports.isFirefox()) {\r\n\t action = \"DOMMouseScroll\"; // For Firefox\r\n\t }\r\n\r\n\t element.addEventListener(action, listener, useCapture);\r\n\t return listener;\r\n\t } else if (element.attachEvent) {\r\n\t // Old IE browsers\r\n\t var f = function () {\r\n\t return listener.call(element, window.event);\r\n\t };\r\n\t element.attachEvent(\"on\" + action, f);\r\n\t return f;\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Remove an event listener from an element\r\n\t * @param {Element} element An html dom element\r\n\t * @param {string} action The name of the event, for example \"mousedown\"\r\n\t * @param {function} listener The listener function\r\n\t * @param {boolean} [useCapture] false by default\r\n\t */\r\n\texports.removeEventListener = function removeEventListener(element, action, listener, useCapture) {\r\n\t if (element.removeEventListener) {\r\n\t if (useCapture === undefined)\r\n\t useCapture = false;\r\n\r\n\t if (action === \"mousewheel\" && exports.isFirefox()) {\r\n\t action = \"DOMMouseScroll\"; // For Firefox\r\n\t }\r\n\r\n\t element.removeEventListener(action, listener, useCapture);\r\n\t } else if (element.detachEvent) {\r\n\t // Old IE browsers\r\n\t element.detachEvent(\"on\" + action, listener);\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Parse a JSON path like '.items[3].name' into an array\r\n\t * @param {string} jsonPath\r\n\t * @return {Array}\r\n\t */\r\n\texports.parsePath = function parsePath(jsonPath) {\r\n\t var prop, remainder;\r\n\r\n\t if (jsonPath.length === 0) {\r\n\t return [];\r\n\t }\r\n\r\n\t // find a match like '.prop'\r\n\t var match = jsonPath.match(/^\\.(\\w+)/);\r\n\t if (match) {\r\n\t prop = match[1];\r\n\t remainder = jsonPath.substr(prop.length + 1);\r\n\t }\r\n\t else if (jsonPath[0] === '[') {\r\n\t // find a match like\r\n\t var end = jsonPath.indexOf(']');\r\n\t if (end === -1) {\r\n\t throw new SyntaxError('Character ] expected in path');\r\n\t }\r\n\t if (end === 1) {\r\n\t throw new SyntaxError('Index expected after [');\r\n\t }\r\n\r\n\t var value = jsonPath.substring(1, end);\r\n\t if (value[0] === '\\'') {\r\n\t // ajv produces string prop names with single quotes, so we need\r\n\t // to reformat them into valid double-quoted JSON strings\r\n\t value = '\\\"' + value.substring(1, value.length - 1) + '\\\"';\r\n\t }\r\n\r\n\t prop = value === '*' ? value : JSON.parse(value); // parse string and number\r\n\t remainder = jsonPath.substr(end + 1);\r\n\t }\r\n\t else {\r\n\t throw new SyntaxError('Failed to parse path');\r\n\t }\r\n\r\n\t return [prop].concat(parsePath(remainder))\r\n\t};\r\n\r\n\t/**\r\n\t * Improve the error message of a JSON schema error\r\n\t * @param {Object} error\r\n\t * @return {Object} The error\r\n\t */\r\n\texports.improveSchemaError = function (error) {\r\n\t if (error.keyword === 'enum' && Array.isArray(error.schema)) {\r\n\t var enums = error.schema;\r\n\t if (enums) {\r\n\t enums = enums.map(function (value) {\r\n\t return JSON.stringify(value);\r\n\t });\r\n\r\n\t if (enums.length > 5) {\r\n\t var more = ['(' + (enums.length - 5) + ' more...)'];\r\n\t enums = enums.slice(0, 5);\r\n\t enums.push(more);\r\n\t }\r\n\t error.message = 'should be equal to one of: ' + enums.join(', ');\r\n\t }\r\n\t }\r\n\r\n\t if (error.keyword === 'additionalProperties') {\r\n\t error.message = 'should NOT have additional property: ' + error.params.additionalProperty;\r\n\t }\r\n\r\n\t return error;\r\n\t};\r\n\r\n\t/**\r\n\t * Test whether the child rect fits completely inside the parent rect.\r\n\t * @param {ClientRect} parent\r\n\t * @param {ClientRect} child\r\n\t * @param {number} margin\r\n\t */\r\n\texports.insideRect = function (parent, child, margin) {\r\n\t var _margin = margin !== undefined ? margin : 0;\r\n\t return child.left - _margin >= parent.left\r\n\t && child.right + _margin <= parent.right\r\n\t && child.top - _margin >= parent.top\r\n\t && child.bottom + _margin <= parent.bottom;\r\n\t};\r\n\r\n\t/**\r\n\t * Returns a function, that, as long as it continues to be invoked, will not\r\n\t * be triggered. The function will be called after it stops being called for\r\n\t * N milliseconds.\r\n\t *\r\n\t * Source: https://davidwalsh.name/javascript-debounce-function\r\n\t *\r\n\t * @param {function} func\r\n\t * @param {number} wait Number in milliseconds\r\n\t * @param {boolean} [immediate=false] If `immediate` is passed, trigger the\r\n\t * function on the leading edge, instead\r\n\t * of the trailing.\r\n\t * @return {function} Return the debounced function\r\n\t */\r\n\texports.debounce = function debounce(func, wait, immediate) {\r\n\t var timeout;\r\n\t return function() {\r\n\t var context = this, args = arguments;\r\n\t var later = function() {\r\n\t timeout = null;\r\n\t if (!immediate) func.apply(context, args);\r\n\t };\r\n\t var callNow = immediate && !timeout;\r\n\t clearTimeout(timeout);\r\n\t timeout = setTimeout(later, wait);\r\n\t if (callNow) func.apply(context, args);\r\n\t };\r\n\t};\r\n\r\n\t/**\r\n\t * Determines the difference between two texts.\r\n\t * Can only detect one removed or inserted block of characters.\r\n\t * @param {string} oldText\r\n\t * @param {string} newText\r\n\t * @return {{start: number, end: number}} Returns the start and end\r\n\t * of the changed part in newText.\r\n\t */\r\n\texports.textDiff = function textDiff(oldText, newText) {\r\n\t var len = newText.length;\r\n\t var start = 0;\r\n\t var oldEnd = oldText.length;\r\n\t var newEnd = newText.length;\r\n\r\n\t while (newText.charAt(start) === oldText.charAt(start)\r\n\t && start < len) {\r\n\t start++;\r\n\t }\r\n\r\n\t while (newText.charAt(newEnd - 1) === oldText.charAt(oldEnd - 1)\r\n\t && newEnd > start && oldEnd > 0) {\r\n\t newEnd--;\r\n\t oldEnd--;\r\n\t }\r\n\r\n\t return {start: start, end: newEnd};\r\n\t};\r\n\r\n\r\n/***/ },\r\n/* 55 */\r\n/***/ function(module, exports, __webpack_require__) {\r\n\r\n\t/* Jison generated parser */\r\n\tvar jsonlint = (function(){\r\n\tvar parser = {trace: function trace() { },\r\n\tyy: {},\r\n\tsymbols_: {\"error\":2,\"JSONString\":3,\"STRING\":4,\"JSONNumber\":5,\"NUMBER\":6,\"JSONNullLiteral\":7,\"NULL\":8,\"JSONBooleanLiteral\":9,\"TRUE\":10,\"FALSE\":11,\"JSONText\":12,\"JSONValue\":13,\"EOF\":14,\"JSONObject\":15,\"JSONArray\":16,\"{\":17,\"}\":18,\"JSONMemberList\":19,\"JSONMember\":20,\":\":21,\",\":22,\"[\":23,\"]\":24,\"JSONElementList\":25,\"$accept\":0,\"$end\":1},\r\n\tterminals_: {2:\"error\",4:\"STRING\",6:\"NUMBER\",8:\"NULL\",10:\"TRUE\",11:\"FALSE\",14:\"EOF\",17:\"{\",18:\"}\",21:\":\",22:\",\",23:\"[\",24:\"]\"},\r\n\tproductions_: [0,[3,1],[5,1],[7,1],[9,1],[9,1],[12,2],[13,1],[13,1],[13,1],[13,1],[13,1],[13,1],[15,2],[15,3],[20,3],[19,1],[19,3],[16,2],[16,3],[25,1],[25,3]],\r\n\tperformAction: function anonymous(yytext,yyleng,yylineno,yy,yystate,$$,_$) {\r\n\r\n\tvar $0 = $$.length - 1;\r\n\tswitch (yystate) {\r\n\tcase 1: // replace escaped characters with actual character\r\n\t this.$ = yytext.replace(/\\\\(\\\\|\")/g, \"$\"+\"1\")\r\n\t .replace(/\\\\n/g,'\\n')\r\n\t .replace(/\\\\r/g,'\\r')\r\n\t .replace(/\\\\t/g,'\\t')\r\n\t .replace(/\\\\v/g,'\\v')\r\n\t .replace(/\\\\f/g,'\\f')\r\n\t .replace(/\\\\b/g,'\\b');\r\n\t \r\n\tbreak;\r\n\tcase 2:this.$ = Number(yytext);\r\n\tbreak;\r\n\tcase 3:this.$ = null;\r\n\tbreak;\r\n\tcase 4:this.$ = true;\r\n\tbreak;\r\n\tcase 5:this.$ = false;\r\n\tbreak;\r\n\tcase 6:return this.$ = $$[$0-1];\r\n\tbreak;\r\n\tcase 13:this.$ = {};\r\n\tbreak;\r\n\tcase 14:this.$ = $$[$0-1];\r\n\tbreak;\r\n\tcase 15:this.$ = [$$[$0-2], $$[$0]];\r\n\tbreak;\r\n\tcase 16:this.$ = {}; this.$[$$[$0][0]] = $$[$0][1];\r\n\tbreak;\r\n\tcase 17:this.$ = $$[$0-2]; $$[$0-2][$$[$0][0]] = $$[$0][1];\r\n\tbreak;\r\n\tcase 18:this.$ = [];\r\n\tbreak;\r\n\tcase 19:this.$ = $$[$0-1];\r\n\tbreak;\r\n\tcase 20:this.$ = [$$[$0]];\r\n\tbreak;\r\n\tcase 21:this.$ = $$[$0-2]; $$[$0-2].push($$[$0]);\r\n\tbreak;\r\n\t}\r\n\t},\r\n\ttable: [{3:5,4:[1,12],5:6,6:[1,13],7:3,8:[1,9],9:4,10:[1,10],11:[1,11],12:1,13:2,15:7,16:8,17:[1,14],23:[1,15]},{1:[3]},{14:[1,16]},{14:[2,7],18:[2,7],22:[2,7],24:[2,7]},{14:[2,8],18:[2,8],22:[2,8],24:[2,8]},{14:[2,9],18:[2,9],22:[2,9],24:[2,9]},{14:[2,10],18:[2,10],22:[2,10],24:[2,10]},{14:[2,11],18:[2,11],22:[2,11],24:[2,11]},{14:[2,12],18:[2,12],22:[2,12],24:[2,12]},{14:[2,3],18:[2,3],22:[2,3],24:[2,3]},{14:[2,4],18:[2,4],22:[2,4],24:[2,4]},{14:[2,5],18:[2,5],22:[2,5],24:[2,5]},{14:[2,1],18:[2,1],21:[2,1],22:[2,1],24:[2,1]},{14:[2,2],18:[2,2],22:[2,2],24:[2,2]},{3:20,4:[1,12],18:[1,17],19:18,20:19},{3:5,4:[1,12],5:6,6:[1,13],7:3,8:[1,9],9:4,10:[1,10],11:[1,11],13:23,15:7,16:8,17:[1,14],23:[1,15],24:[1,21],25:22},{1:[2,6]},{14:[2,13],18:[2,13],22:[2,13],24:[2,13]},{18:[1,24],22:[1,25]},{18:[2,16],22:[2,16]},{21:[1,26]},{14:[2,18],18:[2,18],22:[2,18],24:[2,18]},{22:[1,28],24:[1,27]},{22:[2,20],24:[2,20]},{14:[2,14],18:[2,14],22:[2,14],24:[2,14]},{3:20,4:[1,12],20:29},{3:5,4:[1,12],5:6,6:[1,13],7:3,8:[1,9],9:4,10:[1,10],11:[1,11],13:30,15:7,16:8,17:[1,14],23:[1,15]},{14:[2,19],18:[2,19],22:[2,19],24:[2,19]},{3:5,4:[1,12],5:6,6:[1,13],7:3,8:[1,9],9:4,10:[1,10],11:[1,11],13:31,15:7,16:8,17:[1,14],23:[1,15]},{18:[2,17],22:[2,17]},{18:[2,15],22:[2,15]},{22:[2,21],24:[2,21]}],\r\n\tdefaultActions: {16:[2,6]},\r\n\tparseError: function parseError(str, hash) {\r\n\t throw new Error(str);\r\n\t},\r\n\tparse: function parse(input) {\r\n\t var self = this,\r\n\t stack = [0],\r\n\t vstack = [null], // semantic value stack\r\n\t lstack = [], // location stack\r\n\t table = this.table,\r\n\t yytext = '',\r\n\t yylineno = 0,\r\n\t yyleng = 0,\r\n\t recovering = 0,\r\n\t TERROR = 2,\r\n\t EOF = 1;\r\n\r\n\t //this.reductionCount = this.shiftCount = 0;\r\n\r\n\t this.lexer.setInput(input);\r\n\t this.lexer.yy = this.yy;\r\n\t this.yy.lexer = this.lexer;\r\n\t if (typeof this.lexer.yylloc == 'undefined')\r\n\t this.lexer.yylloc = {};\r\n\t var yyloc = this.lexer.yylloc;\r\n\t lstack.push(yyloc);\r\n\r\n\t if (typeof this.yy.parseError === 'function')\r\n\t this.parseError = this.yy.parseError;\r\n\r\n\t function popStack (n) {\r\n\t stack.length = stack.length - 2*n;\r\n\t vstack.length = vstack.length - n;\r\n\t lstack.length = lstack.length - n;\r\n\t }\r\n\r\n\t function lex() {\r\n\t var token;\r\n\t token = self.lexer.lex() || 1; // $end = 1\r\n\t // if token isn't its numeric value, convert\r\n\t if (typeof token !== 'number') {\r\n\t token = self.symbols_[token] || token;\r\n\t }\r\n\t return token;\r\n\t }\r\n\r\n\t var symbol, preErrorSymbol, state, action, a, r, yyval={},p,len,newState, expected;\r\n\t while (true) {\r\n\t // retreive state number from top of stack\r\n\t state = stack[stack.length-1];\r\n\r\n\t // use default actions if available\r\n\t if (this.defaultActions[state]) {\r\n\t action = this.defaultActions[state];\r\n\t } else {\r\n\t if (symbol == null)\r\n\t symbol = lex();\r\n\t // read action for current state and first input\r\n\t action = table[state] && table[state][symbol];\r\n\t }\r\n\r\n\t // handle parse error\r\n\t _handle_error:\r\n\t if (typeof action === 'undefined' || !action.length || !action[0]) {\r\n\r\n\t if (!recovering) {\r\n\t // Report error\r\n\t expected = [];\r\n\t for (p in table[state]) if (this.terminals_[p] && p > 2) {\r\n\t expected.push(\"'\"+this.terminals_[p]+\"'\");\r\n\t }\r\n\t var errStr = '';\r\n\t if (this.lexer.showPosition) {\r\n\t errStr = 'Parse error on line '+(yylineno+1)+\":\\n\"+this.lexer.showPosition()+\"\\nExpecting \"+expected.join(', ') + \", got '\" + this.terminals_[symbol]+ \"'\";\r\n\t } else {\r\n\t errStr = 'Parse error on line '+(yylineno+1)+\": Unexpected \" +\r\n\t (symbol == 1 /*EOF*/ ? \"end of input\" :\r\n\t (\"'\"+(this.terminals_[symbol] || symbol)+\"'\"));\r\n\t }\r\n\t this.parseError(errStr,\r\n\t {text: this.lexer.match, token: this.terminals_[symbol] || symbol, line: this.lexer.yylineno, loc: yyloc, expected: expected});\r\n\t }\r\n\r\n\t // just recovered from another error\r\n\t if (recovering == 3) {\r\n\t if (symbol == EOF) {\r\n\t throw new Error(errStr || 'Parsing halted.');\r\n\t }\r\n\r\n\t // discard current lookahead and grab another\r\n\t yyleng = this.lexer.yyleng;\r\n\t yytext = this.lexer.yytext;\r\n\t yylineno = this.lexer.yylineno;\r\n\t yyloc = this.lexer.yylloc;\r\n\t symbol = lex();\r\n\t }\r\n\r\n\t // try to recover from error\r\n\t while (1) {\r\n\t // check for error recovery rule in this state\r\n\t if ((TERROR.toString()) in table[state]) {\r\n\t break;\r\n\t }\r\n\t if (state == 0) {\r\n\t throw new Error(errStr || 'Parsing halted.');\r\n\t }\r\n\t popStack(1);\r\n\t state = stack[stack.length-1];\r\n\t }\r\n\r\n\t preErrorSymbol = symbol; // save the lookahead token\r\n\t symbol = TERROR; // insert generic error symbol as new lookahead\r\n\t state = stack[stack.length-1];\r\n\t action = table[state] && table[state][TERROR];\r\n\t recovering = 3; // allow 3 real symbols to be shifted before reporting a new error\r\n\t }\r\n\r\n\t // this shouldn't happen, unless resolve defaults are off\r\n\t if (action[0] instanceof Array && action.length > 1) {\r\n\t throw new Error('Parse Error: multiple actions possible at state: '+state+', token: '+symbol);\r\n\t }\r\n\r\n\t switch (action[0]) {\r\n\r\n\t case 1: // shift\r\n\t //this.shiftCount++;\r\n\r\n\t stack.push(symbol);\r\n\t vstack.push(this.lexer.yytext);\r\n\t lstack.push(this.lexer.yylloc);\r\n\t stack.push(action[1]); // push state\r\n\t symbol = null;\r\n\t if (!preErrorSymbol) { // normal execution/no error\r\n\t yyleng = this.lexer.yyleng;\r\n\t yytext = this.lexer.yytext;\r\n\t yylineno = this.lexer.yylineno;\r\n\t yyloc = this.lexer.yylloc;\r\n\t if (recovering > 0)\r\n\t recovering--;\r\n\t } else { // error just occurred, resume old lookahead f/ before error\r\n\t symbol = preErrorSymbol;\r\n\t preErrorSymbol = null;\r\n\t }\r\n\t break;\r\n\r\n\t case 2: // reduce\r\n\t //this.reductionCount++;\r\n\r\n\t len = this.productions_[action[1]][1];\r\n\r\n\t // perform semantic action\r\n\t yyval.$ = vstack[vstack.length-len]; // default to $$ = $1\r\n\t // default location, uses first token for firsts, last for lasts\r\n\t yyval._$ = {\r\n\t first_line: lstack[lstack.length-(len||1)].first_line,\r\n\t last_line: lstack[lstack.length-1].last_line,\r\n\t first_column: lstack[lstack.length-(len||1)].first_column,\r\n\t last_column: lstack[lstack.length-1].last_column\r\n\t };\r\n\t r = this.performAction.call(yyval, yytext, yyleng, yylineno, this.yy, action[1], vstack, lstack);\r\n\r\n\t if (typeof r !== 'undefined') {\r\n\t return r;\r\n\t }\r\n\r\n\t // pop off stack\r\n\t if (len) {\r\n\t stack = stack.slice(0,-1*len*2);\r\n\t vstack = vstack.slice(0, -1*len);\r\n\t lstack = lstack.slice(0, -1*len);\r\n\t }\r\n\r\n\t stack.push(this.productions_[action[1]][0]); // push nonterminal (reduce)\r\n\t vstack.push(yyval.$);\r\n\t lstack.push(yyval._$);\r\n\t // goto new state = table[STATE][NONTERMINAL]\r\n\t newState = table[stack[stack.length-2]][stack[stack.length-1]];\r\n\t stack.push(newState);\r\n\t break;\r\n\r\n\t case 3: // accept\r\n\t return true;\r\n\t }\r\n\r\n\t }\r\n\r\n\t return true;\r\n\t}};\r\n\t/* Jison generated lexer */\r\n\tvar lexer = (function(){\r\n\tvar lexer = ({EOF:1,\r\n\tparseError:function parseError(str, hash) {\r\n\t if (this.yy.parseError) {\r\n\t this.yy.parseError(str, hash);\r\n\t } else {\r\n\t throw new Error(str);\r\n\t }\r\n\t },\r\n\tsetInput:function (input) {\r\n\t this._input = input;\r\n\t this._more = this._less = this.done = false;\r\n\t this.yylineno = this.yyleng = 0;\r\n\t this.yytext = this.matched = this.match = '';\r\n\t this.conditionStack = ['INITIAL'];\r\n\t this.yylloc = {first_line:1,first_column:0,last_line:1,last_column:0};\r\n\t return this;\r\n\t },\r\n\tinput:function () {\r\n\t var ch = this._input[0];\r\n\t this.yytext+=ch;\r\n\t this.yyleng++;\r\n\t this.match+=ch;\r\n\t this.matched+=ch;\r\n\t var lines = ch.match(/\\n/);\r\n\t if (lines) this.yylineno++;\r\n\t this._input = this._input.slice(1);\r\n\t return ch;\r\n\t },\r\n\tunput:function (ch) {\r\n\t this._input = ch + this._input;\r\n\t return this;\r\n\t },\r\n\tmore:function () {\r\n\t this._more = true;\r\n\t return this;\r\n\t },\r\n\tless:function (n) {\r\n\t this._input = this.match.slice(n) + this._input;\r\n\t },\r\n\tpastInput:function () {\r\n\t var past = this.matched.substr(0, this.matched.length - this.match.length);\r\n\t return (past.length > 20 ? '...':'') + past.substr(-20).replace(/\\n/g, \"\");\r\n\t },\r\n\tupcomingInput:function () {\r\n\t var next = this.match;\r\n\t if (next.length < 20) {\r\n\t next += this._input.substr(0, 20-next.length);\r\n\t }\r\n\t return (next.substr(0,20)+(next.length > 20 ? '...':'')).replace(/\\n/g, \"\");\r\n\t },\r\n\tshowPosition:function () {\r\n\t var pre = this.pastInput();\r\n\t var c = new Array(pre.length + 1).join(\"-\");\r\n\t return pre + this.upcomingInput() + \"\\n\" + c+\"^\";\r\n\t },\r\n\tnext:function () {\r\n\t if (this.done) {\r\n\t return this.EOF;\r\n\t }\r\n\t if (!this._input) this.done = true;\r\n\r\n\t var token,\r\n\t match,\r\n\t tempMatch,\r\n\t index,\r\n\t col,\r\n\t lines;\r\n\t if (!this._more) {\r\n\t this.yytext = '';\r\n\t this.match = '';\r\n\t }\r\n\t var rules = this._currentRules();\r\n\t for (var i=0;i < rules.length; i++) {\r\n\t tempMatch = this._input.match(this.rules[rules[i]]);\r\n\t if (tempMatch && (!match || tempMatch[0].length > match[0].length)) {\r\n\t match = tempMatch;\r\n\t index = i;\r\n\t if (!this.options.flex) break;\r\n\t }\r\n\t }\r\n\t if (match) {\r\n\t lines = match[0].match(/\\n.*/g);\r\n\t if (lines) this.yylineno += lines.length;\r\n\t this.yylloc = {first_line: this.yylloc.last_line,\r\n\t last_line: this.yylineno+1,\r\n\t first_column: this.yylloc.last_column,\r\n\t last_column: lines ? lines[lines.length-1].length-1 : this.yylloc.last_column + match[0].length}\r\n\t this.yytext += match[0];\r\n\t this.match += match[0];\r\n\t this.yyleng = this.yytext.length;\r\n\t this._more = false;\r\n\t this._input = this._input.slice(match[0].length);\r\n\t this.matched += match[0];\r\n\t token = this.performAction.call(this, this.yy, this, rules[index],this.conditionStack[this.conditionStack.length-1]);\r\n\t if (this.done && this._input) this.done = false;\r\n\t if (token) return token;\r\n\t else return;\r\n\t }\r\n\t if (this._input === \"\") {\r\n\t return this.EOF;\r\n\t } else {\r\n\t this.parseError('Lexical error on line '+(this.yylineno+1)+'. Unrecognized text.\\n'+this.showPosition(), \r\n\t {text: \"\", token: null, line: this.yylineno});\r\n\t }\r\n\t },\r\n\tlex:function lex() {\r\n\t var r = this.next();\r\n\t if (typeof r !== 'undefined') {\r\n\t return r;\r\n\t } else {\r\n\t return this.lex();\r\n\t }\r\n\t },\r\n\tbegin:function begin(condition) {\r\n\t this.conditionStack.push(condition);\r\n\t },\r\n\tpopState:function popState() {\r\n\t return this.conditionStack.pop();\r\n\t },\r\n\t_currentRules:function _currentRules() {\r\n\t return this.conditions[this.conditionStack[this.conditionStack.length-1]].rules;\r\n\t },\r\n\ttopState:function () {\r\n\t return this.conditionStack[this.conditionStack.length-2];\r\n\t },\r\n\tpushState:function begin(condition) {\r\n\t this.begin(condition);\r\n\t }});\r\n\tlexer.options = {};\r\n\tlexer.performAction = function anonymous(yy,yy_,$avoiding_name_collisions,YY_START) {\r\n\r\n\tvar YYSTATE=YY_START\r\n\tswitch($avoiding_name_collisions) {\r\n\tcase 0:/* skip whitespace */\r\n\tbreak;\r\n\tcase 1:return 6\r\n\tbreak;\r\n\tcase 2:yy_.yytext = yy_.yytext.substr(1,yy_.yyleng-2); return 4\r\n\tbreak;\r\n\tcase 3:return 17\r\n\tbreak;\r\n\tcase 4:return 18\r\n\tbreak;\r\n\tcase 5:return 23\r\n\tbreak;\r\n\tcase 6:return 24\r\n\tbreak;\r\n\tcase 7:return 22\r\n\tbreak;\r\n\tcase 8:return 21\r\n\tbreak;\r\n\tcase 9:return 10\r\n\tbreak;\r\n\tcase 10:return 11\r\n\tbreak;\r\n\tcase 11:return 8\r\n\tbreak;\r\n\tcase 12:return 14\r\n\tbreak;\r\n\tcase 13:return 'INVALID'\r\n\tbreak;\r\n\t}\r\n\t};\r\n\tlexer.rules = [/^(?:\\s+)/,/^(?:(-?([0-9]|[1-9][0-9]+))(\\.[0-9]+)?([eE][-+]?[0-9]+)?\\b)/,/^(?:\"(?:\\\\[\\\\\"bfnrt/]|\\\\u[a-fA-F0-9]{4}|[^\\\\\\0-\\x09\\x0a-\\x1f\"])*\")/,/^(?:\\{)/,/^(?:\\})/,/^(?:\\[)/,/^(?:\\])/,/^(?:,)/,/^(?::)/,/^(?:true\\b)/,/^(?:false\\b)/,/^(?:null\\b)/,/^(?:$)/,/^(?:.)/];\r\n\tlexer.conditions = {\"INITIAL\":{\"rules\":[0,1,2,3,4,5,6,7,8,9,10,11,12,13],\"inclusive\":true}};\r\n\r\n\r\n\t;\r\n\treturn lexer;})()\r\n\tparser.lexer = lexer;\r\n\treturn parser;\r\n\t})();\r\n\tif (true) {\r\n\t exports.parser = jsonlint;\r\n\t exports.parse = jsonlint.parse.bind(jsonlint);\r\n\t}\r\n\r\n/***/ },\r\n/* 56 */\r\n/***/ function(module, exports) {\r\n\r\n\t'use strict';\r\n\r\n\t/**\r\n\t * @constructor SearchBox\r\n\t * Create a search box in given HTML container\r\n\t * @param {JSONEditor} editor The JSON Editor to attach to\r\n\t * @param {Element} container HTML container element of where to\r\n\t * create the search box\r\n\t */\r\n\tfunction SearchBox (editor, container) {\r\n\t var searchBox = this;\r\n\r\n\t this.editor = editor;\r\n\t this.timeout = undefined;\r\n\t this.delay = 200; // ms\r\n\t this.lastText = undefined;\r\n\r\n\t this.dom = {};\r\n\t this.dom.container = container;\r\n\r\n\t var table = document.createElement('table');\r\n\t this.dom.table = table;\r\n\t table.className = 'jsoneditor-search';\r\n\t container.appendChild(table);\r\n\t var tbody = document.createElement('tbody');\r\n\t this.dom.tbody = tbody;\r\n\t table.appendChild(tbody);\r\n\t var tr = document.createElement('tr');\r\n\t tbody.appendChild(tr);\r\n\r\n\t var td = document.createElement('td');\r\n\t tr.appendChild(td);\r\n\t var results = document.createElement('div');\r\n\t this.dom.results = results;\r\n\t results.className = 'jsoneditor-results';\r\n\t td.appendChild(results);\r\n\r\n\t td = document.createElement('td');\r\n\t tr.appendChild(td);\r\n\t var divInput = document.createElement('div');\r\n\t this.dom.input = divInput;\r\n\t divInput.className = 'jsoneditor-frame';\r\n\t divInput.title = 'Search fields and values';\r\n\t td.appendChild(divInput);\r\n\r\n\t // table to contain the text input and search button\r\n\t var tableInput = document.createElement('table');\r\n\t divInput.appendChild(tableInput);\r\n\t var tbodySearch = document.createElement('tbody');\r\n\t tableInput.appendChild(tbodySearch);\r\n\t tr = document.createElement('tr');\r\n\t tbodySearch.appendChild(tr);\r\n\r\n\t var refreshSearch = document.createElement('button');\r\n\t refreshSearch.type = 'button';\r\n\t refreshSearch.className = 'jsoneditor-refresh';\r\n\t td = document.createElement('td');\r\n\t td.appendChild(refreshSearch);\r\n\t tr.appendChild(td);\r\n\r\n\t var search = document.createElement('input');\r\n\t // search.type = 'button';\r\n\t this.dom.search = search;\r\n\t search.oninput = function (event) {\r\n\t searchBox._onDelayedSearch(event);\r\n\t };\r\n\t search.onchange = function (event) { // For IE 9\r\n\t searchBox._onSearch();\r\n\t };\r\n\t search.onkeydown = function (event) {\r\n\t searchBox._onKeyDown(event);\r\n\t };\r\n\t search.onkeyup = function (event) {\r\n\t searchBox._onKeyUp(event);\r\n\t };\r\n\t refreshSearch.onclick = function (event) {\r\n\t search.select();\r\n\t };\r\n\r\n\t // TODO: ESC in FF restores the last input, is a FF bug, https://bugzilla.mozilla.org/show_bug.cgi?id=598819\r\n\t td = document.createElement('td');\r\n\t td.appendChild(search);\r\n\t tr.appendChild(td);\r\n\r\n\t var searchNext = document.createElement('button');\r\n\t searchNext.type = 'button';\r\n\t searchNext.title = 'Next result (Enter)';\r\n\t searchNext.className = 'jsoneditor-next';\r\n\t searchNext.onclick = function () {\r\n\t searchBox.next();\r\n\t };\r\n\t td = document.createElement('td');\r\n\t td.appendChild(searchNext);\r\n\t tr.appendChild(td);\r\n\r\n\t var searchPrevious = document.createElement('button');\r\n\t searchPrevious.type = 'button';\r\n\t searchPrevious.title = 'Previous result (Shift+Enter)';\r\n\t searchPrevious.className = 'jsoneditor-previous';\r\n\t searchPrevious.onclick = function () {\r\n\t searchBox.previous();\r\n\t };\r\n\t td = document.createElement('td');\r\n\t td.appendChild(searchPrevious);\r\n\t tr.appendChild(td);\r\n\t}\r\n\r\n\t/**\r\n\t * Go to the next search result\r\n\t * @param {boolean} [focus] If true, focus will be set to the next result\r\n\t * focus is false by default.\r\n\t */\r\n\tSearchBox.prototype.next = function(focus) {\r\n\t if (this.results != undefined) {\r\n\t var index = (this.resultIndex != undefined) ? this.resultIndex + 1 : 0;\r\n\t if (index > this.results.length - 1) {\r\n\t index = 0;\r\n\t }\r\n\t this._setActiveResult(index, focus);\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Go to the prevous search result\r\n\t * @param {boolean} [focus] If true, focus will be set to the next result\r\n\t * focus is false by default.\r\n\t */\r\n\tSearchBox.prototype.previous = function(focus) {\r\n\t if (this.results != undefined) {\r\n\t var max = this.results.length - 1;\r\n\t var index = (this.resultIndex != undefined) ? this.resultIndex - 1 : max;\r\n\t if (index < 0) {\r\n\t index = max;\r\n\t }\r\n\t this._setActiveResult(index, focus);\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Set new value for the current active result\r\n\t * @param {Number} index\r\n\t * @param {boolean} [focus] If true, focus will be set to the next result.\r\n\t * focus is false by default.\r\n\t * @private\r\n\t */\r\n\tSearchBox.prototype._setActiveResult = function(index, focus) {\r\n\t // de-activate current active result\r\n\t if (this.activeResult) {\r\n\t var prevNode = this.activeResult.node;\r\n\t var prevElem = this.activeResult.elem;\r\n\t if (prevElem == 'field') {\r\n\t delete prevNode.searchFieldActive;\r\n\t }\r\n\t else {\r\n\t delete prevNode.searchValueActive;\r\n\t }\r\n\t prevNode.updateDom();\r\n\t }\r\n\r\n\t if (!this.results || !this.results[index]) {\r\n\t // out of range, set to undefined\r\n\t this.resultIndex = undefined;\r\n\t this.activeResult = undefined;\r\n\t return;\r\n\t }\r\n\r\n\t this.resultIndex = index;\r\n\r\n\t // set new node active\r\n\t var node = this.results[this.resultIndex].node;\r\n\t var elem = this.results[this.resultIndex].elem;\r\n\t if (elem == 'field') {\r\n\t node.searchFieldActive = true;\r\n\t }\r\n\t else {\r\n\t node.searchValueActive = true;\r\n\t }\r\n\t this.activeResult = this.results[this.resultIndex];\r\n\t node.updateDom();\r\n\r\n\t // TODO: not so nice that the focus is only set after the animation is finished\r\n\t node.scrollTo(function () {\r\n\t if (focus) {\r\n\t node.focus(elem);\r\n\t }\r\n\t });\r\n\t};\r\n\r\n\t/**\r\n\t * Cancel any running onDelayedSearch.\r\n\t * @private\r\n\t */\r\n\tSearchBox.prototype._clearDelay = function() {\r\n\t if (this.timeout != undefined) {\r\n\t clearTimeout(this.timeout);\r\n\t delete this.timeout;\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Start a timer to execute a search after a short delay.\r\n\t * Used for reducing the number of searches while typing.\r\n\t * @param {Event} event\r\n\t * @private\r\n\t */\r\n\tSearchBox.prototype._onDelayedSearch = function (event) {\r\n\t // execute the search after a short delay (reduces the number of\r\n\t // search actions while typing in the search text box)\r\n\t this._clearDelay();\r\n\t var searchBox = this;\r\n\t this.timeout = setTimeout(function (event) {\r\n\t searchBox._onSearch();\r\n\t },\r\n\t this.delay);\r\n\t};\r\n\r\n\t/**\r\n\t * Handle onSearch event\r\n\t * @param {boolean} [forceSearch] If true, search will be executed again even\r\n\t * when the search text is not changed.\r\n\t * Default is false.\r\n\t * @private\r\n\t */\r\n\tSearchBox.prototype._onSearch = function (forceSearch) {\r\n\t this._clearDelay();\r\n\r\n\t var value = this.dom.search.value;\r\n\t var text = (value.length > 0) ? value : undefined;\r\n\t if (text != this.lastText || forceSearch) {\r\n\t // only search again when changed\r\n\t this.lastText = text;\r\n\t this.results = this.editor.search(text);\r\n\t this._setActiveResult(undefined);\r\n\r\n\t // display search results\r\n\t if (text != undefined) {\r\n\t var resultCount = this.results.length;\r\n\t switch (resultCount) {\r\n\t case 0: this.dom.results.innerHTML = 'no results'; break;\r\n\t case 1: this.dom.results.innerHTML = '1 result'; break;\r\n\t default: this.dom.results.innerHTML = resultCount + ' results'; break;\r\n\t }\r\n\t }\r\n\t else {\r\n\t this.dom.results.innerHTML = '';\r\n\t }\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Handle onKeyDown event in the input box\r\n\t * @param {Event} event\r\n\t * @private\r\n\t */\r\n\tSearchBox.prototype._onKeyDown = function (event) {\r\n\t var keynum = event.which;\r\n\t if (keynum == 27) { // ESC\r\n\t this.dom.search.value = ''; // clear search\r\n\t this._onSearch();\r\n\t event.preventDefault();\r\n\t event.stopPropagation();\r\n\t }\r\n\t else if (keynum == 13) { // Enter\r\n\t if (event.ctrlKey) {\r\n\t // force to search again\r\n\t this._onSearch(true);\r\n\t }\r\n\t else if (event.shiftKey) {\r\n\t // move to the previous search result\r\n\t this.previous();\r\n\t }\r\n\t else {\r\n\t // move to the next search result\r\n\t this.next();\r\n\t }\r\n\t event.preventDefault();\r\n\t event.stopPropagation();\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Handle onKeyUp event in the input box\r\n\t * @param {Event} event\r\n\t * @private\r\n\t */\r\n\tSearchBox.prototype._onKeyUp = function (event) {\r\n\t var keynum = event.keyCode;\r\n\t if (keynum != 27 && keynum != 13) { // !show and !Enter\r\n\t this._onDelayedSearch(event); // For IE 9\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Clear the search results\r\n\t */\r\n\tSearchBox.prototype.clear = function () {\r\n\t this.dom.search.value = '';\r\n\t this._onSearch();\r\n\t};\r\n\r\n\t/**\r\n\t * Destroy the search box\r\n\t */\r\n\tSearchBox.prototype.destroy = function () {\r\n\t this.editor = null;\r\n\t this.dom.container.removeChild(this.dom.table);\r\n\t this.dom = null;\r\n\r\n\t this.results = null;\r\n\t this.activeResult = null;\r\n\r\n\t this._clearDelay();\r\n\r\n\t};\r\n\r\n\tmodule.exports = SearchBox;\r\n\r\n\r\n/***/ },\r\n/* 57 */\r\n/***/ function(module, exports, __webpack_require__) {\r\n\r\n\t'use strict';\r\n\r\n\tvar util = __webpack_require__(54);\r\n\r\n\t/**\r\n\t * A context menu\r\n\t * @param {Object[]} items Array containing the menu structure\r\n\t * TODO: describe structure\r\n\t * @param {Object} [options] Object with options. Available options:\r\n\t * {function} close Callback called when the\r\n\t * context menu is being closed.\r\n\t * @constructor\r\n\t */\r\n\tfunction ContextMenu (items, options) {\r\n\t this.dom = {};\r\n\r\n\t var me = this;\r\n\t var dom = this.dom;\r\n\t this.anchor = undefined;\r\n\t this.items = items;\r\n\t this.eventListeners = {};\r\n\t this.selection = undefined; // holds the selection before the menu was opened\r\n\t this.onClose = options ? options.close : undefined;\r\n\r\n\t // create root element\r\n\t var root = document.createElement('div');\r\n\t root.className = 'jsoneditor-contextmenu-root';\r\n\t dom.root = root;\r\n\r\n\t // create a container element\r\n\t var menu = document.createElement('div');\r\n\t menu.className = 'jsoneditor-contextmenu';\r\n\t dom.menu = menu;\r\n\t root.appendChild(menu);\r\n\r\n\t // create a list to hold the menu items\r\n\t var list = document.createElement('ul');\r\n\t list.className = 'jsoneditor-menu';\r\n\t menu.appendChild(list);\r\n\t dom.list = list;\r\n\t dom.items = []; // list with all buttons\r\n\r\n\t // create a (non-visible) button to set the focus to the menu\r\n\t var focusButton = document.createElement('button');\r\n\t focusButton.type = 'button';\r\n\t dom.focusButton = focusButton;\r\n\t var li = document.createElement('li');\r\n\t li.style.overflow = 'hidden';\r\n\t li.style.height = '0';\r\n\t li.appendChild(focusButton);\r\n\t list.appendChild(li);\r\n\r\n\t function createMenuItems (list, domItems, items) {\r\n\t items.forEach(function (item) {\r\n\t if (item.type == 'separator') {\r\n\t // create a separator\r\n\t var separator = document.createElement('div');\r\n\t separator.className = 'jsoneditor-separator';\r\n\t li = document.createElement('li');\r\n\t li.appendChild(separator);\r\n\t list.appendChild(li);\r\n\t }\r\n\t else {\r\n\t var domItem = {};\r\n\r\n\t // create a menu item\r\n\t var li = document.createElement('li');\r\n\t list.appendChild(li);\r\n\r\n\t // create a button in the menu item\r\n\t var button = document.createElement('button');\r\n\t button.type = 'button';\r\n\t button.className = item.className;\r\n\t domItem.button = button;\r\n\t if (item.title) {\r\n\t button.title = item.title;\r\n\t }\r\n\t if (item.click) {\r\n\t button.onclick = function (event) {\r\n\t event.preventDefault();\r\n\t me.hide();\r\n\t item.click();\r\n\t };\r\n\t }\r\n\t li.appendChild(button);\r\n\r\n\t // create the contents of the button\r\n\t if (item.submenu) {\r\n\t // add the icon to the button\r\n\t var divIcon = document.createElement('div');\r\n\t divIcon.className = 'jsoneditor-icon';\r\n\t button.appendChild(divIcon);\r\n\t button.appendChild(document.createTextNode(item.text));\r\n\r\n\t var buttonSubmenu;\r\n\t if (item.click) {\r\n\t // submenu and a button with a click handler\r\n\t button.className += ' jsoneditor-default';\r\n\r\n\t var buttonExpand = document.createElement('button');\r\n\t buttonExpand.type = 'button';\r\n\t domItem.buttonExpand = buttonExpand;\r\n\t buttonExpand.className = 'jsoneditor-expand';\r\n\t buttonExpand.innerHTML = '

';\r\n\t li.appendChild(buttonExpand);\r\n\t if (item.submenuTitle) {\r\n\t buttonExpand.title = item.submenuTitle;\r\n\t }\r\n\r\n\t buttonSubmenu = buttonExpand;\r\n\t }\r\n\t else {\r\n\t // submenu and a button without a click handler\r\n\t var divExpand = document.createElement('div');\r\n\t divExpand.className = 'jsoneditor-expand';\r\n\t button.appendChild(divExpand);\r\n\r\n\t buttonSubmenu = button;\r\n\t }\r\n\r\n\t // attach a handler to expand/collapse the submenu\r\n\t buttonSubmenu.onclick = function (event) {\r\n\t event.preventDefault();\r\n\t me._onExpandItem(domItem);\r\n\t buttonSubmenu.focus();\r\n\t };\r\n\r\n\t // create the submenu\r\n\t var domSubItems = [];\r\n\t domItem.subItems = domSubItems;\r\n\t var ul = document.createElement('ul');\r\n\t domItem.ul = ul;\r\n\t ul.className = 'jsoneditor-menu';\r\n\t ul.style.height = '0';\r\n\t li.appendChild(ul);\r\n\t createMenuItems(ul, domSubItems, item.submenu);\r\n\t }\r\n\t else {\r\n\t // no submenu, just a button with clickhandler\r\n\t button.innerHTML = '
' + item.text;\r\n\t }\r\n\r\n\t domItems.push(domItem);\r\n\t }\r\n\t });\r\n\t }\r\n\t createMenuItems(list, this.dom.items, items);\r\n\r\n\t // TODO: when the editor is small, show the submenu on the right instead of inline?\r\n\r\n\t // calculate the max height of the menu with one submenu expanded\r\n\t this.maxHeight = 0; // height in pixels\r\n\t items.forEach(function (item) {\r\n\t var height = (items.length + (item.submenu ? item.submenu.length : 0)) * 24;\r\n\t me.maxHeight = Math.max(me.maxHeight, height);\r\n\t });\r\n\t}\r\n\r\n\t/**\r\n\t * Get the currently visible buttons\r\n\t * @return {Array.} buttons\r\n\t * @private\r\n\t */\r\n\tContextMenu.prototype._getVisibleButtons = function () {\r\n\t var buttons = [];\r\n\t var me = this;\r\n\t this.dom.items.forEach(function (item) {\r\n\t buttons.push(item.button);\r\n\t if (item.buttonExpand) {\r\n\t buttons.push(item.buttonExpand);\r\n\t }\r\n\t if (item.subItems && item == me.expandedItem) {\r\n\t item.subItems.forEach(function (subItem) {\r\n\t buttons.push(subItem.button);\r\n\t if (subItem.buttonExpand) {\r\n\t buttons.push(subItem.buttonExpand);\r\n\t }\r\n\t // TODO: change to fully recursive method\r\n\t });\r\n\t }\r\n\t });\r\n\r\n\t return buttons;\r\n\t};\r\n\r\n\t// currently displayed context menu, a singleton. We may only have one visible context menu\r\n\tContextMenu.visibleMenu = undefined;\r\n\r\n\t/**\r\n\t * Attach the menu to an anchor\r\n\t * @param {HTMLElement} anchor Anchor where the menu will be attached\r\n\t * as sibling.\r\n\t * @param {HTMLElement} [contentWindow] The DIV with with the (scrollable) contents\r\n\t */\r\n\tContextMenu.prototype.show = function (anchor, contentWindow) {\r\n\t this.hide();\r\n\r\n\t // determine whether to display the menu below or above the anchor\r\n\t var showBelow = true;\r\n\t if (contentWindow) {\r\n\t var anchorRect = anchor.getBoundingClientRect();\r\n\t var contentRect = contentWindow.getBoundingClientRect();\r\n\r\n\t if (anchorRect.bottom + this.maxHeight < contentRect.bottom) {\r\n\t // fits below -> show below\r\n\t }\r\n\t else if (anchorRect.top - this.maxHeight > contentRect.top) {\r\n\t // fits above -> show above\r\n\t showBelow = false;\r\n\t }\r\n\t else {\r\n\t // doesn't fit above nor below -> show below\r\n\t }\r\n\t }\r\n\r\n\t // position the menu\r\n\t if (showBelow) {\r\n\t // display the menu below the anchor\r\n\t var anchorHeight = anchor.offsetHeight;\r\n\t this.dom.menu.style.left = '0px';\r\n\t this.dom.menu.style.top = anchorHeight + 'px';\r\n\t this.dom.menu.style.bottom = '';\r\n\t }\r\n\t else {\r\n\t // display the menu above the anchor\r\n\t this.dom.menu.style.left = '0px';\r\n\t this.dom.menu.style.top = '';\r\n\t this.dom.menu.style.bottom = '0px';\r\n\t }\r\n\r\n\t // attach the menu to the parent of the anchor\r\n\t var parent = anchor.parentNode;\r\n\t parent.insertBefore(this.dom.root, parent.firstChild);\r\n\r\n\t // create and attach event listeners\r\n\t var me = this;\r\n\t var list = this.dom.list;\r\n\t this.eventListeners.mousedown = util.addEventListener(window, 'mousedown', function (event) {\r\n\t // hide menu on click outside of the menu\r\n\t var target = event.target;\r\n\t if ((target != list) && !me._isChildOf(target, list)) {\r\n\t me.hide();\r\n\t event.stopPropagation();\r\n\t event.preventDefault();\r\n\t }\r\n\t });\r\n\t this.eventListeners.keydown = util.addEventListener(window, 'keydown', function (event) {\r\n\t me._onKeyDown(event);\r\n\t });\r\n\r\n\t // move focus to the first button in the context menu\r\n\t this.selection = util.getSelection();\r\n\t this.anchor = anchor;\r\n\t setTimeout(function () {\r\n\t me.dom.focusButton.focus();\r\n\t }, 0);\r\n\r\n\t if (ContextMenu.visibleMenu) {\r\n\t ContextMenu.visibleMenu.hide();\r\n\t }\r\n\t ContextMenu.visibleMenu = this;\r\n\t};\r\n\r\n\t/**\r\n\t * Hide the context menu if visible\r\n\t */\r\n\tContextMenu.prototype.hide = function () {\r\n\t // remove the menu from the DOM\r\n\t if (this.dom.root.parentNode) {\r\n\t this.dom.root.parentNode.removeChild(this.dom.root);\r\n\t if (this.onClose) {\r\n\t this.onClose();\r\n\t }\r\n\t }\r\n\r\n\t // remove all event listeners\r\n\t // all event listeners are supposed to be attached to document.\r\n\t for (var name in this.eventListeners) {\r\n\t if (this.eventListeners.hasOwnProperty(name)) {\r\n\t var fn = this.eventListeners[name];\r\n\t if (fn) {\r\n\t util.removeEventListener(window, name, fn);\r\n\t }\r\n\t delete this.eventListeners[name];\r\n\t }\r\n\t }\r\n\r\n\t if (ContextMenu.visibleMenu == this) {\r\n\t ContextMenu.visibleMenu = undefined;\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Expand a submenu\r\n\t * Any currently expanded submenu will be hided.\r\n\t * @param {Object} domItem\r\n\t * @private\r\n\t */\r\n\tContextMenu.prototype._onExpandItem = function (domItem) {\r\n\t var me = this;\r\n\t var alreadyVisible = (domItem == this.expandedItem);\r\n\r\n\t // hide the currently visible submenu\r\n\t var expandedItem = this.expandedItem;\r\n\t if (expandedItem) {\r\n\t //var ul = expandedItem.ul;\r\n\t expandedItem.ul.style.height = '0';\r\n\t expandedItem.ul.style.padding = '';\r\n\t setTimeout(function () {\r\n\t if (me.expandedItem != expandedItem) {\r\n\t expandedItem.ul.style.display = '';\r\n\t util.removeClassName(expandedItem.ul.parentNode, 'jsoneditor-selected');\r\n\t }\r\n\t }, 300); // timeout duration must match the css transition duration\r\n\t this.expandedItem = undefined;\r\n\t }\r\n\r\n\t if (!alreadyVisible) {\r\n\t var ul = domItem.ul;\r\n\t ul.style.display = 'block';\r\n\t var height = ul.clientHeight; // force a reflow in Firefox\r\n\t setTimeout(function () {\r\n\t if (me.expandedItem == domItem) {\r\n\t ul.style.height = (ul.childNodes.length * 24) + 'px';\r\n\t ul.style.padding = '5px 10px';\r\n\t }\r\n\t }, 0);\r\n\t util.addClassName(ul.parentNode, 'jsoneditor-selected');\r\n\t this.expandedItem = domItem;\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Handle onkeydown event\r\n\t * @param {Event} event\r\n\t * @private\r\n\t */\r\n\tContextMenu.prototype._onKeyDown = function (event) {\r\n\t var target = event.target;\r\n\t var keynum = event.which;\r\n\t var handled = false;\r\n\t var buttons, targetIndex, prevButton, nextButton;\r\n\r\n\t if (keynum == 27) { // ESC\r\n\t // hide the menu on ESC key\r\n\r\n\t // restore previous selection and focus\r\n\t if (this.selection) {\r\n\t util.setSelection(this.selection);\r\n\t }\r\n\t if (this.anchor) {\r\n\t this.anchor.focus();\r\n\t }\r\n\r\n\t this.hide();\r\n\r\n\t handled = true;\r\n\t }\r\n\t else if (keynum == 9) { // Tab\r\n\t if (!event.shiftKey) { // Tab\r\n\t buttons = this._getVisibleButtons();\r\n\t targetIndex = buttons.indexOf(target);\r\n\t if (targetIndex == buttons.length - 1) {\r\n\t // move to first button\r\n\t buttons[0].focus();\r\n\t handled = true;\r\n\t }\r\n\t }\r\n\t else { // Shift+Tab\r\n\t buttons = this._getVisibleButtons();\r\n\t targetIndex = buttons.indexOf(target);\r\n\t if (targetIndex == 0) {\r\n\t // move to last button\r\n\t buttons[buttons.length - 1].focus();\r\n\t handled = true;\r\n\t }\r\n\t }\r\n\t }\r\n\t else if (keynum == 37) { // Arrow Left\r\n\t if (target.className == 'jsoneditor-expand') {\r\n\t buttons = this._getVisibleButtons();\r\n\t targetIndex = buttons.indexOf(target);\r\n\t prevButton = buttons[targetIndex - 1];\r\n\t if (prevButton) {\r\n\t prevButton.focus();\r\n\t }\r\n\t }\r\n\t handled = true;\r\n\t }\r\n\t else if (keynum == 38) { // Arrow Up\r\n\t buttons = this._getVisibleButtons();\r\n\t targetIndex = buttons.indexOf(target);\r\n\t prevButton = buttons[targetIndex - 1];\r\n\t if (prevButton && prevButton.className == 'jsoneditor-expand') {\r\n\t // skip expand button\r\n\t prevButton = buttons[targetIndex - 2];\r\n\t }\r\n\t if (!prevButton) {\r\n\t // move to last button\r\n\t prevButton = buttons[buttons.length - 1];\r\n\t }\r\n\t if (prevButton) {\r\n\t prevButton.focus();\r\n\t }\r\n\t handled = true;\r\n\t }\r\n\t else if (keynum == 39) { // Arrow Right\r\n\t buttons = this._getVisibleButtons();\r\n\t targetIndex = buttons.indexOf(target);\r\n\t nextButton = buttons[targetIndex + 1];\r\n\t if (nextButton && nextButton.className == 'jsoneditor-expand') {\r\n\t nextButton.focus();\r\n\t }\r\n\t handled = true;\r\n\t }\r\n\t else if (keynum == 40) { // Arrow Down\r\n\t buttons = this._getVisibleButtons();\r\n\t targetIndex = buttons.indexOf(target);\r\n\t nextButton = buttons[targetIndex + 1];\r\n\t if (nextButton && nextButton.className == 'jsoneditor-expand') {\r\n\t // skip expand button\r\n\t nextButton = buttons[targetIndex + 2];\r\n\t }\r\n\t if (!nextButton) {\r\n\t // move to first button\r\n\t nextButton = buttons[0];\r\n\t }\r\n\t if (nextButton) {\r\n\t nextButton.focus();\r\n\t handled = true;\r\n\t }\r\n\t handled = true;\r\n\t }\r\n\t // TODO: arrow left and right\r\n\r\n\t if (handled) {\r\n\t event.stopPropagation();\r\n\t event.preventDefault();\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Test if an element is a child of a parent element.\r\n\t * @param {Element} child\r\n\t * @param {Element} parent\r\n\t * @return {boolean} isChild\r\n\t */\r\n\tContextMenu.prototype._isChildOf = function (child, parent) {\r\n\t var e = child.parentNode;\r\n\t while (e) {\r\n\t if (e == parent) {\r\n\t return true;\r\n\t }\r\n\t e = e.parentNode;\r\n\t }\r\n\r\n\t return false;\r\n\t};\r\n\r\n\tmodule.exports = ContextMenu;\r\n\r\n\r\n/***/ },\r\n/* 58 */\r\n/***/ function(module, exports, __webpack_require__) {\r\n\r\n\t'use strict';\r\n\r\n\tvar naturalSort = __webpack_require__(59);\r\n\tvar ContextMenu = __webpack_require__(57);\r\n\tvar appendNodeFactory = __webpack_require__(60);\r\n\tvar util = __webpack_require__(54);\r\n\r\n\t/**\r\n\t * @constructor Node\r\n\t * Create a new Node\r\n\t * @param {./treemode} editor\r\n\t * @param {Object} [params] Can contain parameters:\r\n\t * {string} field\r\n\t * {boolean} fieldEditable\r\n\t * {*} value\r\n\t * {String} type Can have values 'auto', 'array',\r\n\t * 'object', or 'string'.\r\n\t */\r\n\tfunction Node (editor, params) {\r\n\t /** @type {./treemode} */\r\n\t this.editor = editor;\r\n\t this.dom = {};\r\n\t this.expanded = false;\r\n\r\n\t if(params && (params instanceof Object)) {\r\n\t this.setField(params.field, params.fieldEditable);\r\n\t this.setValue(params.value, params.type);\r\n\t }\r\n\t else {\r\n\t this.setField('');\r\n\t this.setValue(null);\r\n\t }\r\n\r\n\t this._debouncedOnChangeValue = util.debounce(this._onChangeValue.bind(this), Node.prototype.DEBOUNCE_INTERVAL);\r\n\t this._debouncedOnChangeField = util.debounce(this._onChangeField.bind(this), Node.prototype.DEBOUNCE_INTERVAL);\r\n\t}\r\n\r\n\t// debounce interval for keyboard input in milliseconds\r\n\tNode.prototype.DEBOUNCE_INTERVAL = 150;\r\n\r\n\t/**\r\n\t * Determine whether the field and/or value of this node are editable\r\n\t * @private\r\n\t */\r\n\tNode.prototype._updateEditability = function () {\r\n\t this.editable = {\r\n\t field: true,\r\n\t value: true\r\n\t };\r\n\r\n\t if (this.editor) {\r\n\t this.editable.field = this.editor.options.mode === 'tree';\r\n\t this.editable.value = this.editor.options.mode !== 'view';\r\n\r\n\t if ((this.editor.options.mode === 'tree' || this.editor.options.mode === 'form') &&\r\n\t (typeof this.editor.options.onEditable === 'function')) {\r\n\t var editable = this.editor.options.onEditable({\r\n\t field: this.field,\r\n\t value: this.value,\r\n\t path: this.getPath()\r\n\t });\r\n\r\n\t if (typeof editable === 'boolean') {\r\n\t this.editable.field = editable;\r\n\t this.editable.value = editable;\r\n\t }\r\n\t else {\r\n\t if (typeof editable.field === 'boolean') this.editable.field = editable.field;\r\n\t if (typeof editable.value === 'boolean') this.editable.value = editable.value;\r\n\t }\r\n\t }\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Get the path of this node\r\n\t * @return {String[]} Array containing the path to this node\r\n\t */\r\n\tNode.prototype.getPath = function () {\r\n\t var node = this;\r\n\t var path = [];\r\n\t while (node) {\r\n\t var field = !node.parent\r\n\t ? undefined // do not add an (optional) field name of the root node\r\n\t : (node.parent.type != 'array')\r\n\t ? node.field\r\n\t : node.index;\r\n\r\n\t if (field !== undefined) {\r\n\t path.unshift(field);\r\n\t }\r\n\t node = node.parent;\r\n\t }\r\n\t return path;\r\n\t};\r\n\r\n\t/**\r\n\t * Find a Node from a JSON path like '.items[3].name'\r\n\t * @param {string} jsonPath\r\n\t * @return {Node | null} Returns the Node when found, returns null if not found\r\n\t */\r\n\tNode.prototype.findNode = function (jsonPath) {\r\n\t var path = util.parsePath(jsonPath);\r\n\t var node = this;\r\n\t while (node && path.length > 0) {\r\n\t var prop = path.shift();\r\n\t if (typeof prop === 'number') {\r\n\t if (node.type !== 'array') {\r\n\t throw new Error('Cannot get child node at index ' + prop + ': node is no array');\r\n\t }\r\n\t node = node.childs[prop];\r\n\t }\r\n\t else { // string\r\n\t if (node.type !== 'object') {\r\n\t throw new Error('Cannot get child node ' + prop + ': node is no object');\r\n\t }\r\n\t node = node.childs.filter(function (child) {\r\n\t return child.field === prop;\r\n\t })[0];\r\n\t }\r\n\t }\r\n\r\n\t return node;\r\n\t};\r\n\r\n\t/**\r\n\t * Find all parents of this node. The parents are ordered from root node towards\r\n\t * the original node.\r\n\t * @return {Array.}\r\n\t */\r\n\tNode.prototype.findParents = function () {\r\n\t var parents = [];\r\n\t var parent = this.parent;\r\n\t while (parent) {\r\n\t parents.unshift(parent);\r\n\t parent = parent.parent;\r\n\t }\r\n\t return parents;\r\n\t};\r\n\r\n\t/**\r\n\t *\r\n\t * @param {{dataPath: string, keyword: string, message: string, params: Object, schemaPath: string} | null} error\r\n\t * @param {Node} [child] When this is the error of a parent node, pointing\r\n\t * to an invalid child node, the child node itself\r\n\t * can be provided. If provided, clicking the error\r\n\t * icon will set focus to the invalid child node.\r\n\t */\r\n\tNode.prototype.setError = function (error, child) {\r\n\t // ensure the dom exists\r\n\t this.getDom();\r\n\r\n\t this.error = error;\r\n\t var tdError = this.dom.tdError;\r\n\t if (error) {\r\n\t if (!tdError) {\r\n\t tdError = document.createElement('td');\r\n\t this.dom.tdError = tdError;\r\n\t this.dom.tdValue.parentNode.appendChild(tdError);\r\n\t }\r\n\r\n\t var popover = document.createElement('div');\r\n\t popover.className = 'jsoneditor-popover jsoneditor-right';\r\n\t popover.appendChild(document.createTextNode(error.message));\r\n\r\n\t var button = document.createElement('button');\r\n\t button.type = 'button';\r\n\t button.className = 'jsoneditor-schema-error';\r\n\t button.appendChild(popover);\r\n\r\n\t // update the direction of the popover\r\n\t button.onmouseover = button.onfocus = function updateDirection() {\r\n\t var directions = ['right', 'above', 'below', 'left'];\r\n\t for (var i = 0; i < directions.length; i++) {\r\n\t var direction = directions[i];\r\n\t popover.className = 'jsoneditor-popover jsoneditor-' + direction;\r\n\r\n\t var contentRect = this.editor.content.getBoundingClientRect();\r\n\t var popoverRect = popover.getBoundingClientRect();\r\n\t var margin = 20; // account for a scroll bar\r\n\t var fit = util.insideRect(contentRect, popoverRect, margin);\r\n\r\n\t if (fit) {\r\n\t break;\r\n\t }\r\n\t }\r\n\t }.bind(this);\r\n\r\n\t // when clicking the error icon, expand all nodes towards the invalid\r\n\t // child node, and set focus to the child node\r\n\t if (child) {\r\n\t button.onclick = function showInvalidNode() {\r\n\t child.findParents().forEach(function (parent) {\r\n\t parent.expand(false);\r\n\t });\r\n\r\n\t child.scrollTo(function () {\r\n\t child.focus();\r\n\t });\r\n\t };\r\n\t }\r\n\r\n\t // apply the error message to the node\r\n\t while (tdError.firstChild) {\r\n\t tdError.removeChild(tdError.firstChild);\r\n\t }\r\n\t tdError.appendChild(button);\r\n\t }\r\n\t else {\r\n\t if (tdError) {\r\n\t this.dom.tdError.parentNode.removeChild(this.dom.tdError);\r\n\t delete this.dom.tdError;\r\n\t }\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Get the index of this node: the index in the list of childs where this\r\n\t * node is part of\r\n\t * @return {number} Returns the index, or -1 if this is the root node\r\n\t */\r\n\tNode.prototype.getIndex = function () {\r\n\t return this.parent ? this.parent.childs.indexOf(this) : -1;\r\n\t};\r\n\r\n\t/**\r\n\t * Set parent node\r\n\t * @param {Node} parent\r\n\t */\r\n\tNode.prototype.setParent = function(parent) {\r\n\t this.parent = parent;\r\n\t};\r\n\r\n\t/**\r\n\t * Set field\r\n\t * @param {String} field\r\n\t * @param {boolean} [fieldEditable]\r\n\t */\r\n\tNode.prototype.setField = function(field, fieldEditable) {\r\n\t this.field = field;\r\n\t this.previousField = field;\r\n\t this.fieldEditable = (fieldEditable === true);\r\n\t};\r\n\r\n\t/**\r\n\t * Get field\r\n\t * @return {String}\r\n\t */\r\n\tNode.prototype.getField = function() {\r\n\t if (this.field === undefined) {\r\n\t this._getDomField();\r\n\t }\r\n\r\n\t return this.field;\r\n\t};\r\n\r\n\t/**\r\n\t * Set value. Value is a JSON structure or an element String, Boolean, etc.\r\n\t * @param {*} value\r\n\t * @param {String} [type] Specify the type of the value. Can be 'auto',\r\n\t * 'array', 'object', or 'string'\r\n\t */\r\n\tNode.prototype.setValue = function(value, type) {\r\n\t var childValue, child;\r\n\r\n\t // first clear all current childs (if any)\r\n\t var childs = this.childs;\r\n\t if (childs) {\r\n\t while (childs.length) {\r\n\t this.removeChild(childs[0]);\r\n\t }\r\n\t }\r\n\r\n\t // TODO: remove the DOM of this Node\r\n\r\n\t this.type = this._getType(value);\r\n\r\n\t // check if type corresponds with the provided type\r\n\t if (type && type != this.type) {\r\n\t if (type == 'string' && this.type == 'auto') {\r\n\t this.type = type;\r\n\t }\r\n\t else {\r\n\t throw new Error('Type mismatch: ' +\r\n\t 'cannot cast value of type \"' + this.type +\r\n\t ' to the specified type \"' + type + '\"');\r\n\t }\r\n\t }\r\n\r\n\t if (this.type == 'array') {\r\n\t // array\r\n\t this.childs = [];\r\n\t for (var i = 0, iMax = value.length; i < iMax; i++) {\r\n\t childValue = value[i];\r\n\t if (childValue !== undefined && !(childValue instanceof Function)) {\r\n\t // ignore undefined and functions\r\n\t child = new Node(this.editor, {\r\n\t value: childValue\r\n\t });\r\n\t this.appendChild(child);\r\n\t }\r\n\t }\r\n\t this.value = '';\r\n\t }\r\n\t else if (this.type == 'object') {\r\n\t // object\r\n\t this.childs = [];\r\n\t for (var childField in value) {\r\n\t if (value.hasOwnProperty(childField)) {\r\n\t childValue = value[childField];\r\n\t if (childValue !== undefined && !(childValue instanceof Function)) {\r\n\t // ignore undefined and functions\r\n\t child = new Node(this.editor, {\r\n\t field: childField,\r\n\t value: childValue\r\n\t });\r\n\t this.appendChild(child);\r\n\t }\r\n\t }\r\n\t }\r\n\t this.value = '';\r\n\r\n\t // sort object keys\r\n\t if (this.editor.options.sortObjectKeys === true) {\r\n\t this.sort('asc');\r\n\t }\r\n\t }\r\n\t else {\r\n\t // value\r\n\t this.childs = undefined;\r\n\t this.value = value;\r\n\t }\r\n\r\n\t this.previousValue = this.value;\r\n\t};\r\n\r\n\t/**\r\n\t * Get value. Value is a JSON structure\r\n\t * @return {*} value\r\n\t */\r\n\tNode.prototype.getValue = function() {\r\n\t //var childs, i, iMax;\r\n\r\n\t if (this.type == 'array') {\r\n\t var arr = [];\r\n\t this.childs.forEach (function (child) {\r\n\t arr.push(child.getValue());\r\n\t });\r\n\t return arr;\r\n\t }\r\n\t else if (this.type == 'object') {\r\n\t var obj = {};\r\n\t this.childs.forEach (function (child) {\r\n\t obj[child.getField()] = child.getValue();\r\n\t });\r\n\t return obj;\r\n\t }\r\n\t else {\r\n\t if (this.value === undefined) {\r\n\t this._getDomValue();\r\n\t }\r\n\r\n\t return this.value;\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Get the nesting level of this node\r\n\t * @return {Number} level\r\n\t */\r\n\tNode.prototype.getLevel = function() {\r\n\t return (this.parent ? this.parent.getLevel() + 1 : 0);\r\n\t};\r\n\r\n\t/**\r\n\t * Get path of the root node till the current node\r\n\t * @return {Node[]} Returns an array with nodes\r\n\t */\r\n\tNode.prototype.getNodePath = function() {\r\n\t var path = this.parent ? this.parent.getNodePath() : [];\r\n\t path.push(this);\r\n\t return path;\r\n\t};\r\n\r\n\t/**\r\n\t * Create a clone of a node\r\n\t * The complete state of a clone is copied, including whether it is expanded or\r\n\t * not. The DOM elements are not cloned.\r\n\t * @return {Node} clone\r\n\t */\r\n\tNode.prototype.clone = function() {\r\n\t var clone = new Node(this.editor);\r\n\t clone.type = this.type;\r\n\t clone.field = this.field;\r\n\t clone.fieldInnerText = this.fieldInnerText;\r\n\t clone.fieldEditable = this.fieldEditable;\r\n\t clone.value = this.value;\r\n\t clone.valueInnerText = this.valueInnerText;\r\n\t clone.expanded = this.expanded;\r\n\r\n\t if (this.childs) {\r\n\t // an object or array\r\n\t var cloneChilds = [];\r\n\t this.childs.forEach(function (child) {\r\n\t var childClone = child.clone();\r\n\t childClone.setParent(clone);\r\n\t cloneChilds.push(childClone);\r\n\t });\r\n\t clone.childs = cloneChilds;\r\n\t }\r\n\t else {\r\n\t // a value\r\n\t clone.childs = undefined;\r\n\t }\r\n\r\n\t return clone;\r\n\t};\r\n\r\n\t/**\r\n\t * Expand this node and optionally its childs.\r\n\t * @param {boolean} [recurse] Optional recursion, true by default. When\r\n\t * true, all childs will be expanded recursively\r\n\t */\r\n\tNode.prototype.expand = function(recurse) {\r\n\t if (!this.childs) {\r\n\t return;\r\n\t }\r\n\r\n\t // set this node expanded\r\n\t this.expanded = true;\r\n\t if (this.dom.expand) {\r\n\t this.dom.expand.className = 'jsoneditor-expanded';\r\n\t }\r\n\r\n\t this.showChilds();\r\n\r\n\t if (recurse !== false) {\r\n\t this.childs.forEach(function (child) {\r\n\t child.expand(recurse);\r\n\t });\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Collapse this node and optionally its childs.\r\n\t * @param {boolean} [recurse] Optional recursion, true by default. When\r\n\t * true, all childs will be collapsed recursively\r\n\t */\r\n\tNode.prototype.collapse = function(recurse) {\r\n\t if (!this.childs) {\r\n\t return;\r\n\t }\r\n\r\n\t this.hideChilds();\r\n\r\n\t // collapse childs in case of recurse\r\n\t if (recurse !== false) {\r\n\t this.childs.forEach(function (child) {\r\n\t child.collapse(recurse);\r\n\t });\r\n\r\n\t }\r\n\r\n\t // make this node collapsed\r\n\t if (this.dom.expand) {\r\n\t this.dom.expand.className = 'jsoneditor-collapsed';\r\n\t }\r\n\t this.expanded = false;\r\n\t};\r\n\r\n\t/**\r\n\t * Recursively show all childs when they are expanded\r\n\t */\r\n\tNode.prototype.showChilds = function() {\r\n\t var childs = this.childs;\r\n\t if (!childs) {\r\n\t return;\r\n\t }\r\n\t if (!this.expanded) {\r\n\t return;\r\n\t }\r\n\r\n\t var tr = this.dom.tr;\r\n\t var table = tr ? tr.parentNode : undefined;\r\n\t if (table) {\r\n\t // show row with append button\r\n\t var append = this.getAppend();\r\n\t var nextTr = tr.nextSibling;\r\n\t if (nextTr) {\r\n\t table.insertBefore(append, nextTr);\r\n\t }\r\n\t else {\r\n\t table.appendChild(append);\r\n\t }\r\n\r\n\t // show childs\r\n\t this.childs.forEach(function (child) {\r\n\t table.insertBefore(child.getDom(), append);\r\n\t child.showChilds();\r\n\t });\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Hide the node with all its childs\r\n\t */\r\n\tNode.prototype.hide = function() {\r\n\t var tr = this.dom.tr;\r\n\t var table = tr ? tr.parentNode : undefined;\r\n\t if (table) {\r\n\t table.removeChild(tr);\r\n\t }\r\n\t this.hideChilds();\r\n\t};\r\n\r\n\r\n\t/**\r\n\t * Recursively hide all childs\r\n\t */\r\n\tNode.prototype.hideChilds = function() {\r\n\t var childs = this.childs;\r\n\t if (!childs) {\r\n\t return;\r\n\t }\r\n\t if (!this.expanded) {\r\n\t return;\r\n\t }\r\n\r\n\t // hide append row\r\n\t var append = this.getAppend();\r\n\t if (append.parentNode) {\r\n\t append.parentNode.removeChild(append);\r\n\t }\r\n\r\n\t // hide childs\r\n\t this.childs.forEach(function (child) {\r\n\t child.hide();\r\n\t });\r\n\t};\r\n\r\n\r\n\t/**\r\n\t * Add a new child to the node.\r\n\t * Only applicable when Node value is of type array or object\r\n\t * @param {Node} node\r\n\t */\r\n\tNode.prototype.appendChild = function(node) {\r\n\t if (this._hasChilds()) {\r\n\t // adjust the link to the parent\r\n\t node.setParent(this);\r\n\t node.fieldEditable = (this.type == 'object');\r\n\t if (this.type == 'array') {\r\n\t node.index = this.childs.length;\r\n\t }\r\n\t this.childs.push(node);\r\n\r\n\t if (this.expanded) {\r\n\t // insert into the DOM, before the appendRow\r\n\t var newTr = node.getDom();\r\n\t var appendTr = this.getAppend();\r\n\t var table = appendTr ? appendTr.parentNode : undefined;\r\n\t if (appendTr && table) {\r\n\t table.insertBefore(newTr, appendTr);\r\n\t }\r\n\r\n\t node.showChilds();\r\n\t }\r\n\r\n\t this.updateDom({'updateIndexes': true});\r\n\t node.updateDom({'recurse': true});\r\n\t }\r\n\t};\r\n\r\n\r\n\t/**\r\n\t * Move a node from its current parent to this node\r\n\t * Only applicable when Node value is of type array or object\r\n\t * @param {Node} node\r\n\t * @param {Node} beforeNode\r\n\t */\r\n\tNode.prototype.moveBefore = function(node, beforeNode) {\r\n\t if (this._hasChilds()) {\r\n\t // create a temporary row, to prevent the scroll position from jumping\r\n\t // when removing the node\r\n\t var tbody = (this.dom.tr) ? this.dom.tr.parentNode : undefined;\r\n\t if (tbody) {\r\n\t var trTemp = document.createElement('tr');\r\n\t trTemp.style.height = tbody.clientHeight + 'px';\r\n\t tbody.appendChild(trTemp);\r\n\t }\r\n\r\n\t if (node.parent) {\r\n\t node.parent.removeChild(node);\r\n\t }\r\n\r\n\t if (beforeNode instanceof AppendNode) {\r\n\t this.appendChild(node);\r\n\t }\r\n\t else {\r\n\t this.insertBefore(node, beforeNode);\r\n\t }\r\n\r\n\t if (tbody) {\r\n\t tbody.removeChild(trTemp);\r\n\t }\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Move a node from its current parent to this node\r\n\t * Only applicable when Node value is of type array or object.\r\n\t * If index is out of range, the node will be appended to the end\r\n\t * @param {Node} node\r\n\t * @param {Number} index\r\n\t */\r\n\tNode.prototype.moveTo = function (node, index) {\r\n\t if (node.parent == this) {\r\n\t // same parent\r\n\t var currentIndex = this.childs.indexOf(node);\r\n\t if (currentIndex < index) {\r\n\t // compensate the index for removal of the node itself\r\n\t index++;\r\n\t }\r\n\t }\r\n\r\n\t var beforeNode = this.childs[index] || this.append;\r\n\t this.moveBefore(node, beforeNode);\r\n\t};\r\n\r\n\t/**\r\n\t * Insert a new child before a given node\r\n\t * Only applicable when Node value is of type array or object\r\n\t * @param {Node} node\r\n\t * @param {Node} beforeNode\r\n\t */\r\n\tNode.prototype.insertBefore = function(node, beforeNode) {\r\n\t if (this._hasChilds()) {\r\n\t if (beforeNode == this.append) {\r\n\t // append to the child nodes\r\n\r\n\t // adjust the link to the parent\r\n\t node.setParent(this);\r\n\t node.fieldEditable = (this.type == 'object');\r\n\t this.childs.push(node);\r\n\t }\r\n\t else {\r\n\t // insert before a child node\r\n\t var index = this.childs.indexOf(beforeNode);\r\n\t if (index == -1) {\r\n\t throw new Error('Node not found');\r\n\t }\r\n\r\n\t // adjust the link to the parent\r\n\t node.setParent(this);\r\n\t node.fieldEditable = (this.type == 'object');\r\n\t this.childs.splice(index, 0, node);\r\n\t }\r\n\r\n\t if (this.expanded) {\r\n\t // insert into the DOM\r\n\t var newTr = node.getDom();\r\n\t var nextTr = beforeNode.getDom();\r\n\t var table = nextTr ? nextTr.parentNode : undefined;\r\n\t if (nextTr && table) {\r\n\t table.insertBefore(newTr, nextTr);\r\n\t }\r\n\r\n\t node.showChilds();\r\n\t }\r\n\r\n\t this.updateDom({'updateIndexes': true});\r\n\t node.updateDom({'recurse': true});\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Insert a new child before a given node\r\n\t * Only applicable when Node value is of type array or object\r\n\t * @param {Node} node\r\n\t * @param {Node} afterNode\r\n\t */\r\n\tNode.prototype.insertAfter = function(node, afterNode) {\r\n\t if (this._hasChilds()) {\r\n\t var index = this.childs.indexOf(afterNode);\r\n\t var beforeNode = this.childs[index + 1];\r\n\t if (beforeNode) {\r\n\t this.insertBefore(node, beforeNode);\r\n\t }\r\n\t else {\r\n\t this.appendChild(node);\r\n\t }\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Search in this node\r\n\t * The node will be expanded when the text is found one of its childs, else\r\n\t * it will be collapsed. Searches are case insensitive.\r\n\t * @param {String} text\r\n\t * @return {Node[]} results Array with nodes containing the search text\r\n\t */\r\n\tNode.prototype.search = function(text) {\r\n\t var results = [];\r\n\t var index;\r\n\t var search = text ? text.toLowerCase() : undefined;\r\n\r\n\t // delete old search data\r\n\t delete this.searchField;\r\n\t delete this.searchValue;\r\n\r\n\t // search in field\r\n\t if (this.field != undefined) {\r\n\t var field = String(this.field).toLowerCase();\r\n\t index = field.indexOf(search);\r\n\t if (index != -1) {\r\n\t this.searchField = true;\r\n\t results.push({\r\n\t 'node': this,\r\n\t 'elem': 'field'\r\n\t });\r\n\t }\r\n\r\n\t // update dom\r\n\t this._updateDomField();\r\n\t }\r\n\r\n\t // search in value\r\n\t if (this._hasChilds()) {\r\n\t // array, object\r\n\r\n\t // search the nodes childs\r\n\t if (this.childs) {\r\n\t var childResults = [];\r\n\t this.childs.forEach(function (child) {\r\n\t childResults = childResults.concat(child.search(text));\r\n\t });\r\n\t results = results.concat(childResults);\r\n\t }\r\n\r\n\t // update dom\r\n\t if (search != undefined) {\r\n\t var recurse = false;\r\n\t if (childResults.length == 0) {\r\n\t this.collapse(recurse);\r\n\t }\r\n\t else {\r\n\t this.expand(recurse);\r\n\t }\r\n\t }\r\n\t }\r\n\t else {\r\n\t // string, auto\r\n\t if (this.value != undefined ) {\r\n\t var value = String(this.value).toLowerCase();\r\n\t index = value.indexOf(search);\r\n\t if (index != -1) {\r\n\t this.searchValue = true;\r\n\t results.push({\r\n\t 'node': this,\r\n\t 'elem': 'value'\r\n\t });\r\n\t }\r\n\t }\r\n\r\n\t // update dom\r\n\t this._updateDomValue();\r\n\t }\r\n\r\n\t return results;\r\n\t};\r\n\r\n\t/**\r\n\t * Move the scroll position such that this node is in the visible area.\r\n\t * The node will not get the focus\r\n\t * @param {function(boolean)} [callback]\r\n\t */\r\n\tNode.prototype.scrollTo = function(callback) {\r\n\t if (!this.dom.tr || !this.dom.tr.parentNode) {\r\n\t // if the node is not visible, expand its parents\r\n\t var parent = this.parent;\r\n\t var recurse = false;\r\n\t while (parent) {\r\n\t parent.expand(recurse);\r\n\t parent = parent.parent;\r\n\t }\r\n\t }\r\n\r\n\t if (this.dom.tr && this.dom.tr.parentNode) {\r\n\t this.editor.scrollTo(this.dom.tr.offsetTop, callback);\r\n\t }\r\n\t};\r\n\r\n\r\n\t// stores the element name currently having the focus\r\n\tNode.focusElement = undefined;\r\n\r\n\t/**\r\n\t * Set focus to this node\r\n\t * @param {String} [elementName] The field name of the element to get the\r\n\t * focus available values: 'drag', 'menu',\r\n\t * 'expand', 'field', 'value' (default)\r\n\t */\r\n\tNode.prototype.focus = function(elementName) {\r\n\t Node.focusElement = elementName;\r\n\r\n\t if (this.dom.tr && this.dom.tr.parentNode) {\r\n\t var dom = this.dom;\r\n\r\n\t switch (elementName) {\r\n\t case 'drag':\r\n\t if (dom.drag) {\r\n\t dom.drag.focus();\r\n\t }\r\n\t else {\r\n\t dom.menu.focus();\r\n\t }\r\n\t break;\r\n\r\n\t case 'menu':\r\n\t dom.menu.focus();\r\n\t break;\r\n\r\n\t case 'expand':\r\n\t if (this._hasChilds()) {\r\n\t dom.expand.focus();\r\n\t }\r\n\t else if (dom.field && this.fieldEditable) {\r\n\t dom.field.focus();\r\n\t util.selectContentEditable(dom.field);\r\n\t }\r\n\t else if (dom.value && !this._hasChilds()) {\r\n\t dom.value.focus();\r\n\t util.selectContentEditable(dom.value);\r\n\t }\r\n\t else {\r\n\t dom.menu.focus();\r\n\t }\r\n\t break;\r\n\r\n\t case 'field':\r\n\t if (dom.field && this.fieldEditable) {\r\n\t dom.field.focus();\r\n\t util.selectContentEditable(dom.field);\r\n\t }\r\n\t else if (dom.value && !this._hasChilds()) {\r\n\t dom.value.focus();\r\n\t util.selectContentEditable(dom.value);\r\n\t }\r\n\t else if (this._hasChilds()) {\r\n\t dom.expand.focus();\r\n\t }\r\n\t else {\r\n\t dom.menu.focus();\r\n\t }\r\n\t break;\r\n\r\n\t case 'value':\r\n\t default:\r\n\t if (dom.value && !this._hasChilds()) {\r\n\t dom.value.focus();\r\n\t util.selectContentEditable(dom.value);\r\n\t }\r\n\t else if (dom.field && this.fieldEditable) {\r\n\t dom.field.focus();\r\n\t util.selectContentEditable(dom.field);\r\n\t }\r\n\t else if (this._hasChilds()) {\r\n\t dom.expand.focus();\r\n\t }\r\n\t else {\r\n\t dom.menu.focus();\r\n\t }\r\n\t break;\r\n\t }\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Select all text in an editable div after a delay of 0 ms\r\n\t * @param {Element} editableDiv\r\n\t */\r\n\tNode.select = function(editableDiv) {\r\n\t setTimeout(function () {\r\n\t util.selectContentEditable(editableDiv);\r\n\t }, 0);\r\n\t};\r\n\r\n\t/**\r\n\t * Update the values from the DOM field and value of this node\r\n\t */\r\n\tNode.prototype.blur = function() {\r\n\t // retrieve the actual field and value from the DOM.\r\n\t this._getDomValue(false);\r\n\t this._getDomField(false);\r\n\t};\r\n\r\n\t/**\r\n\t * Check if given node is a child. The method will check recursively to find\r\n\t * this node.\r\n\t * @param {Node} node\r\n\t * @return {boolean} containsNode\r\n\t */\r\n\tNode.prototype.containsNode = function(node) {\r\n\t if (this == node) {\r\n\t return true;\r\n\t }\r\n\r\n\t var childs = this.childs;\r\n\t if (childs) {\r\n\t // TODO: use the js5 Array.some() here?\r\n\t for (var i = 0, iMax = childs.length; i < iMax; i++) {\r\n\t if (childs[i].containsNode(node)) {\r\n\t return true;\r\n\t }\r\n\t }\r\n\t }\r\n\r\n\t return false;\r\n\t};\r\n\r\n\t/**\r\n\t * Move given node into this node\r\n\t * @param {Node} node the childNode to be moved\r\n\t * @param {Node} beforeNode node will be inserted before given\r\n\t * node. If no beforeNode is given,\r\n\t * the node is appended at the end\r\n\t * @private\r\n\t */\r\n\tNode.prototype._move = function(node, beforeNode) {\r\n\t if (node == beforeNode) {\r\n\t // nothing to do...\r\n\t return;\r\n\t }\r\n\r\n\t // check if this node is not a child of the node to be moved here\r\n\t if (node.containsNode(this)) {\r\n\t throw new Error('Cannot move a field into a child of itself');\r\n\t }\r\n\r\n\t // remove the original node\r\n\t if (node.parent) {\r\n\t node.parent.removeChild(node);\r\n\t }\r\n\r\n\t // create a clone of the node\r\n\t var clone = node.clone();\r\n\t node.clearDom();\r\n\r\n\t // insert or append the node\r\n\t if (beforeNode) {\r\n\t this.insertBefore(clone, beforeNode);\r\n\t }\r\n\t else {\r\n\t this.appendChild(clone);\r\n\t }\r\n\r\n\t /* TODO: adjust the field name (to prevent equal field names)\r\n\t if (this.type == 'object') {\r\n\t }\r\n\t */\r\n\t};\r\n\r\n\t/**\r\n\t * Remove a child from the node.\r\n\t * Only applicable when Node value is of type array or object\r\n\t * @param {Node} node The child node to be removed;\r\n\t * @return {Node | undefined} node The removed node on success,\r\n\t * else undefined\r\n\t */\r\n\tNode.prototype.removeChild = function(node) {\r\n\t if (this.childs) {\r\n\t var index = this.childs.indexOf(node);\r\n\r\n\t if (index != -1) {\r\n\t node.hide();\r\n\r\n\t // delete old search results\r\n\t delete node.searchField;\r\n\t delete node.searchValue;\r\n\r\n\t var removedNode = this.childs.splice(index, 1)[0];\r\n\t removedNode.parent = null;\r\n\r\n\t this.updateDom({'updateIndexes': true});\r\n\r\n\t return removedNode;\r\n\t }\r\n\t }\r\n\r\n\t return undefined;\r\n\t};\r\n\r\n\t/**\r\n\t * Remove a child node node from this node\r\n\t * This method is equal to Node.removeChild, except that _remove fire an\r\n\t * onChange event.\r\n\t * @param {Node} node\r\n\t * @private\r\n\t */\r\n\tNode.prototype._remove = function (node) {\r\n\t this.removeChild(node);\r\n\t};\r\n\r\n\t/**\r\n\t * Change the type of the value of this Node\r\n\t * @param {String} newType\r\n\t */\r\n\tNode.prototype.changeType = function (newType) {\r\n\t var oldType = this.type;\r\n\r\n\t if (oldType == newType) {\r\n\t // type is not changed\r\n\t return;\r\n\t }\r\n\r\n\t if ((newType == 'string' || newType == 'auto') &&\r\n\t (oldType == 'string' || oldType == 'auto')) {\r\n\t // this is an easy change\r\n\t this.type = newType;\r\n\t }\r\n\t else {\r\n\t // change from array to object, or from string/auto to object/array\r\n\t var table = this.dom.tr ? this.dom.tr.parentNode : undefined;\r\n\t var lastTr;\r\n\t if (this.expanded) {\r\n\t lastTr = this.getAppend();\r\n\t }\r\n\t else {\r\n\t lastTr = this.getDom();\r\n\t }\r\n\t var nextTr = (lastTr && lastTr.parentNode) ? lastTr.nextSibling : undefined;\r\n\r\n\t // hide current field and all its childs\r\n\t this.hide();\r\n\t this.clearDom();\r\n\r\n\t // adjust the field and the value\r\n\t this.type = newType;\r\n\r\n\t // adjust childs\r\n\t if (newType == 'object') {\r\n\t if (!this.childs) {\r\n\t this.childs = [];\r\n\t }\r\n\r\n\t this.childs.forEach(function (child, index) {\r\n\t child.clearDom();\r\n\t delete child.index;\r\n\t child.fieldEditable = true;\r\n\t if (child.field == undefined) {\r\n\t child.field = '';\r\n\t }\r\n\t });\r\n\r\n\t if (oldType == 'string' || oldType == 'auto') {\r\n\t this.expanded = true;\r\n\t }\r\n\t }\r\n\t else if (newType == 'array') {\r\n\t if (!this.childs) {\r\n\t this.childs = [];\r\n\t }\r\n\r\n\t this.childs.forEach(function (child, index) {\r\n\t child.clearDom();\r\n\t child.fieldEditable = false;\r\n\t child.index = index;\r\n\t });\r\n\r\n\t if (oldType == 'string' || oldType == 'auto') {\r\n\t this.expanded = true;\r\n\t }\r\n\t }\r\n\t else {\r\n\t this.expanded = false;\r\n\t }\r\n\r\n\t // create new DOM\r\n\t if (table) {\r\n\t if (nextTr) {\r\n\t table.insertBefore(this.getDom(), nextTr);\r\n\t }\r\n\t else {\r\n\t table.appendChild(this.getDom());\r\n\t }\r\n\t }\r\n\t this.showChilds();\r\n\t }\r\n\r\n\t if (newType == 'auto' || newType == 'string') {\r\n\t // cast value to the correct type\r\n\t if (newType == 'string') {\r\n\t this.value = String(this.value);\r\n\t }\r\n\t else {\r\n\t this.value = this._stringCast(String(this.value));\r\n\t }\r\n\r\n\t this.focus();\r\n\t }\r\n\r\n\t this.updateDom({'updateIndexes': true});\r\n\t};\r\n\r\n\t/**\r\n\t * Retrieve value from DOM\r\n\t * @param {boolean} [silent] If true (default), no errors will be thrown in\r\n\t * case of invalid data\r\n\t * @private\r\n\t */\r\n\tNode.prototype._getDomValue = function(silent) {\r\n\t if (this.dom.value && this.type != 'array' && this.type != 'object') {\r\n\t this.valueInnerText = util.getInnerText(this.dom.value);\r\n\t }\r\n\r\n\t if (this.valueInnerText != undefined) {\r\n\t try {\r\n\t // retrieve the value\r\n\t var value;\r\n\t if (this.type == 'string') {\r\n\t value = this._unescapeHTML(this.valueInnerText);\r\n\t }\r\n\t else {\r\n\t var str = this._unescapeHTML(this.valueInnerText);\r\n\t value = this._stringCast(str);\r\n\t }\r\n\t if (value !== this.value) {\r\n\t this.value = value;\r\n\t this._debouncedOnChangeValue();\r\n\t }\r\n\t }\r\n\t catch (err) {\r\n\t this.value = undefined;\r\n\t // TODO: sent an action with the new, invalid value?\r\n\t if (silent !== true) {\r\n\t throw err;\r\n\t }\r\n\t }\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Handle a changed value\r\n\t * @private\r\n\t */\r\n\tNode.prototype._onChangeValue = function () {\r\n\t // get current selection, then override the range such that we can select\r\n\t // the added/removed text on undo/redo\r\n\t var oldSelection = this.editor.getSelection();\r\n\t if (oldSelection.range) {\r\n\t var undoDiff = util.textDiff(String(this.value), String(this.previousValue));\r\n\t oldSelection.range.startOffset = undoDiff.start;\r\n\t oldSelection.range.endOffset = undoDiff.end;\r\n\t }\r\n\t var newSelection = this.editor.getSelection();\r\n\t if (newSelection.range) {\r\n\t var redoDiff = util.textDiff(String(this.previousValue), String(this.value));\r\n\t newSelection.range.startOffset = redoDiff.start;\r\n\t newSelection.range.endOffset = redoDiff.end;\r\n\t }\r\n\r\n\t this.editor._onAction('editValue', {\r\n\t node: this,\r\n\t oldValue: this.previousValue,\r\n\t newValue: this.value,\r\n\t oldSelection: oldSelection,\r\n\t newSelection: newSelection\r\n\t });\r\n\r\n\t this.previousValue = this.value;\r\n\t};\r\n\r\n\t/**\r\n\t * Handle a changed field\r\n\t * @private\r\n\t */\r\n\tNode.prototype._onChangeField = function () {\r\n\t // get current selection, then override the range such that we can select\r\n\t // the added/removed text on undo/redo\r\n\t var oldSelection = this.editor.getSelection();\r\n\t if (oldSelection.range) {\r\n\t var undoDiff = util.textDiff(this.field, this.previousField);\r\n\t oldSelection.range.startOffset = undoDiff.start;\r\n\t oldSelection.range.endOffset = undoDiff.end;\r\n\t }\r\n\t var newSelection = this.editor.getSelection();\r\n\t if (newSelection.range) {\r\n\t var redoDiff = util.textDiff(this.previousField, this.field);\r\n\t newSelection.range.startOffset = redoDiff.start;\r\n\t newSelection.range.endOffset = redoDiff.end;\r\n\t }\r\n\r\n\t this.editor._onAction('editField', {\r\n\t node: this,\r\n\t oldValue: this.previousField,\r\n\t newValue: this.field,\r\n\t oldSelection: oldSelection,\r\n\t newSelection: newSelection\r\n\t });\r\n\r\n\t this.previousField = this.field;\r\n\t};\r\n\r\n\t/**\r\n\t * Update dom value:\r\n\t * - the text color of the value, depending on the type of the value\r\n\t * - the height of the field, depending on the width\r\n\t * - background color in case it is empty\r\n\t * @private\r\n\t */\r\n\tNode.prototype._updateDomValue = function () {\r\n\t var domValue = this.dom.value;\r\n\t if (domValue) {\r\n\t var classNames = ['jsoneditor-value'];\r\n\r\n\r\n\t // set text color depending on value type\r\n\t var value = this.value;\r\n\t var type = (this.type == 'auto') ? util.type(value) : this.type;\r\n\t var isUrl = type == 'string' && util.isUrl(value);\r\n\t classNames.push('jsoneditor-' + type);\r\n\t if (isUrl) {\r\n\t classNames.push('jsoneditor-url');\r\n\t }\r\n\r\n\t // visual styling when empty\r\n\t var isEmpty = (String(this.value) == '' && this.type != 'array' && this.type != 'object');\r\n\t if (isEmpty) {\r\n\t classNames.push('jsoneditor-empty');\r\n\t }\r\n\r\n\t // highlight when there is a search result\r\n\t if (this.searchValueActive) {\r\n\t classNames.push('jsoneditor-highlight-active');\r\n\t }\r\n\t if (this.searchValue) {\r\n\t classNames.push('jsoneditor-highlight');\r\n\t }\r\n\r\n\t domValue.className = classNames.join(' ');\r\n\r\n\t // update title\r\n\t if (type == 'array' || type == 'object') {\r\n\t var count = this.childs ? this.childs.length : 0;\r\n\t domValue.title = this.type + ' containing ' + count + ' items';\r\n\t }\r\n\t else if (isUrl && this.editable.value) {\r\n\t domValue.title = 'Ctrl+Click or Ctrl+Enter to open url in new window';\r\n\t }\r\n\t else {\r\n\t domValue.title = '';\r\n\t }\r\n\r\n\t // show checkbox when the value is a boolean\r\n\t if (type === 'boolean' && this.editable.value) {\r\n\t if (!this.dom.checkbox) {\r\n\t this.dom.checkbox = document.createElement('input');\r\n\t this.dom.checkbox.type = 'checkbox';\r\n\t this.dom.tdCheckbox = document.createElement('td');\r\n\t this.dom.tdCheckbox.className = 'jsoneditor-tree';\r\n\t this.dom.tdCheckbox.appendChild(this.dom.checkbox);\r\n\r\n\t this.dom.tdValue.parentNode.insertBefore(this.dom.tdCheckbox, this.dom.tdValue);\r\n\t }\r\n\r\n\t this.dom.checkbox.checked = this.value;\r\n\t }\r\n\t else {\r\n\t // cleanup checkbox when displayed\r\n\t if (this.dom.tdCheckbox) {\r\n\t this.dom.tdCheckbox.parentNode.removeChild(this.dom.tdCheckbox);\r\n\t delete this.dom.tdCheckbox;\r\n\t delete this.dom.checkbox;\r\n\t }\r\n\t }\r\n\r\n\t if (this.enum && this.editable.value) {\r\n\t // create select box when this node has an enum object\r\n\t if (!this.dom.select) {\r\n\t this.dom.select = document.createElement('select');\r\n\t this.id = this.field + \"_\" + new Date().getUTCMilliseconds();\r\n\t this.dom.select.id = this.id;\r\n\t this.dom.select.name = this.dom.select.id;\r\n\r\n\t //Create the default empty option\r\n\t this.dom.select.option = document.createElement('option');\r\n\t this.dom.select.option.value = '';\r\n\t this.dom.select.option.innerHTML = '--';\r\n\t this.dom.select.appendChild(this.dom.select.option);\r\n\r\n\t //Iterate all enum values and add them as options\r\n\t for(var i = 0; i < this.enum.length; i++) {\r\n\t this.dom.select.option = document.createElement('option');\r\n\t this.dom.select.option.value = this.enum[i];\r\n\t this.dom.select.option.innerHTML = this.enum[i];\r\n\t if(this.dom.select.option.value == this.value){\r\n\t this.dom.select.option.selected = true;\r\n\t }\r\n\t this.dom.select.appendChild(this.dom.select.option);\r\n\t }\r\n\r\n\t this.dom.tdSelect = document.createElement('td');\r\n\t this.dom.tdSelect.className = 'jsoneditor-tree';\r\n\t this.dom.tdSelect.appendChild(this.dom.select);\r\n\t this.dom.tdValue.parentNode.insertBefore(this.dom.tdSelect, this.dom.tdValue);\r\n\t }\r\n\r\n\t // If the enum is inside a composite type display\r\n\t // both the simple input and the dropdown field\r\n\t if(this.schema && (\r\n\t !this.schema.hasOwnProperty(\"oneOf\") &&\r\n\t !this.schema.hasOwnProperty(\"anyOf\") &&\r\n\t !this.schema.hasOwnProperty(\"allOf\"))\r\n\t ) {\r\n\t this.valueFieldHTML = this.dom.tdValue.innerHTML;\r\n\t this.dom.tdValue.style.visibility = 'hidden';\r\n\t this.dom.tdValue.innerHTML = '';\r\n\t } else {\r\n\t delete this.valueFieldHTML;\r\n\t }\r\n\t }\r\n\t else {\r\n\t // cleanup select box when displayed\r\n\t if (this.dom.tdSelect) {\r\n\t this.dom.tdSelect.parentNode.removeChild(this.dom.tdSelect);\r\n\t delete this.dom.tdSelect;\r\n\t delete this.dom.select;\r\n\t this.dom.tdValue.innerHTML = this.valueFieldHTML;\r\n\t this.dom.tdValue.style.visibility = '';\r\n\t delete this.valueFieldHTML;\r\n\t }\r\n\t }\r\n\r\n\t // strip formatting from the contents of the editable div\r\n\t util.stripFormatting(domValue);\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Update dom field:\r\n\t * - the text color of the field, depending on the text\r\n\t * - the height of the field, depending on the width\r\n\t * - background color in case it is empty\r\n\t * @private\r\n\t */\r\n\tNode.prototype._updateDomField = function () {\r\n\t var domField = this.dom.field;\r\n\t if (domField) {\r\n\t // make backgound color lightgray when empty\r\n\t var isEmpty = (String(this.field) == '' && this.parent.type != 'array');\r\n\t if (isEmpty) {\r\n\t util.addClassName(domField, 'jsoneditor-empty');\r\n\t }\r\n\t else {\r\n\t util.removeClassName(domField, 'jsoneditor-empty');\r\n\t }\r\n\r\n\t // highlight when there is a search result\r\n\t if (this.searchFieldActive) {\r\n\t util.addClassName(domField, 'jsoneditor-highlight-active');\r\n\t }\r\n\t else {\r\n\t util.removeClassName(domField, 'jsoneditor-highlight-active');\r\n\t }\r\n\t if (this.searchField) {\r\n\t util.addClassName(domField, 'jsoneditor-highlight');\r\n\t }\r\n\t else {\r\n\t util.removeClassName(domField, 'jsoneditor-highlight');\r\n\t }\r\n\r\n\t // strip formatting from the contents of the editable div\r\n\t util.stripFormatting(domField);\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Retrieve field from DOM\r\n\t * @param {boolean} [silent] If true (default), no errors will be thrown in\r\n\t * case of invalid data\r\n\t * @private\r\n\t */\r\n\tNode.prototype._getDomField = function(silent) {\r\n\t if (this.dom.field && this.fieldEditable) {\r\n\t this.fieldInnerText = util.getInnerText(this.dom.field);\r\n\t }\r\n\r\n\t if (this.fieldInnerText != undefined) {\r\n\t try {\r\n\t var field = this._unescapeHTML(this.fieldInnerText);\r\n\r\n\t if (field !== this.field) {\r\n\t this.field = field;\r\n\t this._debouncedOnChangeField();\r\n\t }\r\n\t }\r\n\t catch (err) {\r\n\t this.field = undefined;\r\n\t // TODO: sent an action here, with the new, invalid value?\r\n\t if (silent !== true) {\r\n\t throw err;\r\n\t }\r\n\t }\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Validate this node and all it's childs\r\n\t * @return {Array.<{node: Node, error: {message: string}}>} Returns a list with duplicates\r\n\t */\r\n\tNode.prototype.validate = function () {\r\n\t var errors = [];\r\n\r\n\t // find duplicate keys\r\n\t if (this.type === 'object') {\r\n\t var keys = {};\r\n\t var duplicateKeys = [];\r\n\t for (var i = 0; i < this.childs.length; i++) {\r\n\t var child = this.childs[i];\r\n\t if (keys.hasOwnProperty(child.field)) {\r\n\t duplicateKeys.push(child.field);\r\n\t }\r\n\t keys[child.field] = true;\r\n\t }\r\n\r\n\t if (duplicateKeys.length > 0) {\r\n\t errors = this.childs\r\n\t .filter(function (node) {\r\n\t return duplicateKeys.indexOf(node.field) !== -1;\r\n\t })\r\n\t .map(function (node) {\r\n\t return {\r\n\t node: node,\r\n\t error: {\r\n\t message: 'duplicate key \"' + node.field + '\"'\r\n\t }\r\n\t }\r\n\t });\r\n\t }\r\n\t }\r\n\r\n\t // recurse over the childs\r\n\t if (this.childs) {\r\n\t for (var i = 0; i < this.childs.length; i++) {\r\n\t var e = this.childs[i].validate();\r\n\t if (e.length > 0) {\r\n\t errors = errors.concat(e);\r\n\t }\r\n\t }\r\n\t }\r\n\r\n\t return errors;\r\n\t};\r\n\r\n\t/**\r\n\t * Clear the dom of the node\r\n\t */\r\n\tNode.prototype.clearDom = function() {\r\n\t // TODO: hide the node first?\r\n\t //this.hide();\r\n\t // TODO: recursively clear dom?\r\n\r\n\t this.dom = {};\r\n\t};\r\n\r\n\t/**\r\n\t * Get the HTML DOM TR element of the node.\r\n\t * The dom will be generated when not yet created\r\n\t * @return {Element} tr HTML DOM TR Element\r\n\t */\r\n\tNode.prototype.getDom = function() {\r\n\t var dom = this.dom;\r\n\t if (dom.tr) {\r\n\t return dom.tr;\r\n\t }\r\n\r\n\t this._updateEditability();\r\n\r\n\t // create row\r\n\t dom.tr = document.createElement('tr');\r\n\t dom.tr.node = this;\r\n\r\n\t if (this.editor.options.mode === 'tree') { // note: we take here the global setting\r\n\t var tdDrag = document.createElement('td');\r\n\t if (this.editable.field) {\r\n\t // create draggable area\r\n\t if (this.parent) {\r\n\t var domDrag = document.createElement('button');\r\n\t domDrag.type = 'button';\r\n\t dom.drag = domDrag;\r\n\t domDrag.className = 'jsoneditor-dragarea';\r\n\t domDrag.title = 'Drag to move this field (Alt+Shift+Arrows)';\r\n\t tdDrag.appendChild(domDrag);\r\n\t }\r\n\t }\r\n\t dom.tr.appendChild(tdDrag);\r\n\r\n\t // create context menu\r\n\t var tdMenu = document.createElement('td');\r\n\t var menu = document.createElement('button');\r\n\t menu.type = 'button';\r\n\t dom.menu = menu;\r\n\t menu.className = 'jsoneditor-contextmenu';\r\n\t menu.title = 'Click to open the actions menu (Ctrl+M)';\r\n\t tdMenu.appendChild(dom.menu);\r\n\t dom.tr.appendChild(tdMenu);\r\n\t }\r\n\r\n\t // create tree and field\r\n\t var tdField = document.createElement('td');\r\n\t dom.tr.appendChild(tdField);\r\n\t dom.tree = this._createDomTree();\r\n\t tdField.appendChild(dom.tree);\r\n\r\n\t this.updateDom({'updateIndexes': true});\r\n\r\n\t return dom.tr;\r\n\t};\r\n\r\n\t/**\r\n\t * DragStart event, fired on mousedown on the dragarea at the left side of a Node\r\n\t * @param {Node[] | Node} nodes\r\n\t * @param {Event} event\r\n\t */\r\n\tNode.onDragStart = function (nodes, event) {\r\n\t if (!Array.isArray(nodes)) {\r\n\t return Node.onDragStart([nodes], event);\r\n\t }\r\n\t if (nodes.length === 0) {\r\n\t return;\r\n\t }\r\n\r\n\t var firstNode = nodes[0];\r\n\t var lastNode = nodes[nodes.length - 1];\r\n\t var draggedNode = Node.getNodeFromTarget(event.target);\r\n\t var beforeNode = lastNode._nextSibling();\r\n\t var editor = firstNode.editor;\r\n\r\n\t // in case of multiple selected nodes, offsetY prevents the selection from\r\n\t // jumping when you start dragging one of the lower down nodes in the selection\r\n\t var offsetY = util.getAbsoluteTop(draggedNode.dom.tr) - util.getAbsoluteTop(firstNode.dom.tr);\r\n\r\n\t if (!editor.mousemove) {\r\n\t editor.mousemove = util.addEventListener(window, 'mousemove', function (event) {\r\n\t Node.onDrag(nodes, event);\r\n\t });\r\n\t }\r\n\r\n\t if (!editor.mouseup) {\r\n\t editor.mouseup = util.addEventListener(window, 'mouseup',function (event ) {\r\n\t Node.onDragEnd(nodes, event);\r\n\t });\r\n\t }\r\n\r\n\t editor.highlighter.lock();\r\n\t editor.drag = {\r\n\t oldCursor: document.body.style.cursor,\r\n\t oldSelection: editor.getSelection(),\r\n\t oldBeforeNode: beforeNode,\r\n\t mouseX: event.pageX,\r\n\t offsetY: offsetY,\r\n\t level: firstNode.getLevel()\r\n\t };\r\n\t document.body.style.cursor = 'move';\r\n\r\n\t event.preventDefault();\r\n\t};\r\n\r\n\t/**\r\n\t * Drag event, fired when moving the mouse while dragging a Node\r\n\t * @param {Node[] | Node} nodes\r\n\t * @param {Event} event\r\n\t */\r\n\tNode.onDrag = function (nodes, event) {\r\n\t if (!Array.isArray(nodes)) {\r\n\t return Node.onDrag([nodes], event);\r\n\t }\r\n\t if (nodes.length === 0) {\r\n\t return;\r\n\t }\r\n\r\n\t // TODO: this method has grown too large. Split it in a number of methods\r\n\t var editor = nodes[0].editor;\r\n\t var mouseY = event.pageY - editor.drag.offsetY;\r\n\t var mouseX = event.pageX;\r\n\t var trThis, trPrev, trNext, trFirst, trLast, trRoot;\r\n\t var nodePrev, nodeNext;\r\n\t var topThis, topPrev, topFirst, heightThis, bottomNext, heightNext;\r\n\t var moved = false;\r\n\r\n\t // TODO: add an ESC option, which resets to the original position\r\n\r\n\t // move up/down\r\n\t var firstNode = nodes[0];\r\n\t trThis = firstNode.dom.tr;\r\n\t topThis = util.getAbsoluteTop(trThis);\r\n\t heightThis = trThis.offsetHeight;\r\n\t if (mouseY < topThis) {\r\n\t // move up\r\n\t trPrev = trThis;\r\n\t do {\r\n\t trPrev = trPrev.previousSibling;\r\n\t nodePrev = Node.getNodeFromTarget(trPrev);\r\n\t topPrev = trPrev ? util.getAbsoluteTop(trPrev) : 0;\r\n\t }\r\n\t while (trPrev && mouseY < topPrev);\r\n\r\n\t if (nodePrev && !nodePrev.parent) {\r\n\t nodePrev = undefined;\r\n\t }\r\n\r\n\t if (!nodePrev) {\r\n\t // move to the first node\r\n\t trRoot = trThis.parentNode.firstChild;\r\n\t trPrev = trRoot ? trRoot.nextSibling : undefined;\r\n\t nodePrev = Node.getNodeFromTarget(trPrev);\r\n\t if (nodePrev == firstNode) {\r\n\t nodePrev = undefined;\r\n\t }\r\n\t }\r\n\r\n\t if (nodePrev) {\r\n\t // check if mouseY is really inside the found node\r\n\t trPrev = nodePrev.dom.tr;\r\n\t topPrev = trPrev ? util.getAbsoluteTop(trPrev) : 0;\r\n\t if (mouseY > topPrev + heightThis) {\r\n\t nodePrev = undefined;\r\n\t }\r\n\t }\r\n\r\n\t if (nodePrev) {\r\n\t nodes.forEach(function (node) {\r\n\t nodePrev.parent.moveBefore(node, nodePrev);\r\n\t });\r\n\t moved = true;\r\n\t }\r\n\t }\r\n\t else {\r\n\t // move down\r\n\t var lastNode = nodes[nodes.length - 1];\r\n\t trLast = (lastNode.expanded && lastNode.append) ? lastNode.append.getDom() : lastNode.dom.tr;\r\n\t trFirst = trLast ? trLast.nextSibling : undefined;\r\n\t if (trFirst) {\r\n\t topFirst = util.getAbsoluteTop(trFirst);\r\n\t trNext = trFirst;\r\n\t do {\r\n\t nodeNext = Node.getNodeFromTarget(trNext);\r\n\t if (trNext) {\r\n\t bottomNext = trNext.nextSibling ?\r\n\t util.getAbsoluteTop(trNext.nextSibling) : 0;\r\n\t heightNext = trNext ? (bottomNext - topFirst) : 0;\r\n\r\n\t if (nodeNext.parent.childs.length == nodes.length &&\r\n\t nodeNext.parent.childs[nodes.length - 1] == lastNode) {\r\n\t // We are about to remove the last child of this parent,\r\n\t // which will make the parents appendNode visible.\r\n\t topThis += 27;\r\n\t // TODO: dangerous to suppose the height of the appendNode a constant of 27 px.\r\n\t }\r\n\t }\r\n\r\n\t trNext = trNext.nextSibling;\r\n\t }\r\n\t while (trNext && mouseY > topThis + heightNext);\r\n\r\n\t if (nodeNext && nodeNext.parent) {\r\n\t // calculate the desired level\r\n\t var diffX = (mouseX - editor.drag.mouseX);\r\n\t var diffLevel = Math.round(diffX / 24 / 2);\r\n\t var level = editor.drag.level + diffLevel; // desired level\r\n\t var levelNext = nodeNext.getLevel(); // level to be\r\n\r\n\t // find the best fitting level (move upwards over the append nodes)\r\n\t trPrev = nodeNext.dom.tr.previousSibling;\r\n\t while (levelNext < level && trPrev) {\r\n\t nodePrev = Node.getNodeFromTarget(trPrev);\r\n\r\n\t var isDraggedNode = nodes.some(function (node) {\r\n\t return node === nodePrev || nodePrev._isChildOf(node);\r\n\t });\r\n\r\n\t if (isDraggedNode) {\r\n\t // neglect the dragged nodes themselves and their childs\r\n\t }\r\n\t else if (nodePrev instanceof AppendNode) {\r\n\t var childs = nodePrev.parent.childs;\r\n\t if (childs.length != nodes.length || childs[nodes.length - 1] != lastNode) {\r\n\t // non-visible append node of a list of childs\r\n\t // consisting of not only this node (else the\r\n\t // append node will change into a visible \"empty\"\r\n\t // text when removing this node).\r\n\t nodeNext = Node.getNodeFromTarget(trPrev);\r\n\t levelNext = nodeNext.getLevel();\r\n\t }\r\n\t else {\r\n\t break;\r\n\t }\r\n\t }\r\n\t else {\r\n\t break;\r\n\t }\r\n\r\n\t trPrev = trPrev.previousSibling;\r\n\t }\r\n\r\n\t // move the node when its position is changed\r\n\t if (trLast.nextSibling != nodeNext.dom.tr) {\r\n\t nodes.forEach(function (node) {\r\n\t nodeNext.parent.moveBefore(node, nodeNext);\r\n\t });\r\n\t moved = true;\r\n\t }\r\n\t }\r\n\t }\r\n\t }\r\n\r\n\t if (moved) {\r\n\t // update the dragging parameters when moved\r\n\t editor.drag.mouseX = mouseX;\r\n\t editor.drag.level = firstNode.getLevel();\r\n\t }\r\n\r\n\t // auto scroll when hovering around the top of the editor\r\n\t editor.startAutoScroll(mouseY);\r\n\r\n\t event.preventDefault();\r\n\t};\r\n\r\n\t/**\r\n\t * Drag event, fired on mouseup after having dragged a node\r\n\t * @param {Node[] | Node} nodes\r\n\t * @param {Event} event\r\n\t */\r\n\tNode.onDragEnd = function (nodes, event) {\r\n\t if (!Array.isArray(nodes)) {\r\n\t return Node.onDrag([nodes], event);\r\n\t }\r\n\t if (nodes.length === 0) {\r\n\t return;\r\n\t }\r\n\r\n\t var firstNode = nodes[0];\r\n\t var editor = firstNode.editor;\r\n\t var parent = firstNode.parent;\r\n\t var firstIndex = parent.childs.indexOf(firstNode);\r\n\t var beforeNode = parent.childs[firstIndex + nodes.length] || parent.append;\r\n\r\n\t // set focus to the context menu button of the first node\r\n\t if (nodes[0]) {\r\n\t nodes[0].dom.menu.focus();\r\n\t }\r\n\r\n\t var params = {\r\n\t nodes: nodes,\r\n\t oldSelection: editor.drag.oldSelection,\r\n\t newSelection: editor.getSelection(),\r\n\t oldBeforeNode: editor.drag.oldBeforeNode,\r\n\t newBeforeNode: beforeNode\r\n\t };\r\n\r\n\t if (params.oldBeforeNode != params.newBeforeNode) {\r\n\t // only register this action if the node is actually moved to another place\r\n\t editor._onAction('moveNodes', params);\r\n\t }\r\n\r\n\t document.body.style.cursor = editor.drag.oldCursor;\r\n\t editor.highlighter.unlock();\r\n\t nodes.forEach(function (node) {\r\n\t if (event.target !== node.dom.drag && event.target !== node.dom.menu) {\r\n\t editor.highlighter.unhighlight();\r\n\t }\r\n\t });\r\n\t delete editor.drag;\r\n\r\n\t if (editor.mousemove) {\r\n\t util.removeEventListener(window, 'mousemove', editor.mousemove);\r\n\t delete editor.mousemove;\r\n\t }\r\n\t if (editor.mouseup) {\r\n\t util.removeEventListener(window, 'mouseup', editor.mouseup);\r\n\t delete editor.mouseup;\r\n\t }\r\n\r\n\t // Stop any running auto scroll\r\n\t editor.stopAutoScroll();\r\n\r\n\t event.preventDefault();\r\n\t};\r\n\r\n\t/**\r\n\t * Test if this node is a child of an other node\r\n\t * @param {Node} node\r\n\t * @return {boolean} isChild\r\n\t * @private\r\n\t */\r\n\tNode.prototype._isChildOf = function (node) {\r\n\t var n = this.parent;\r\n\t while (n) {\r\n\t if (n == node) {\r\n\t return true;\r\n\t }\r\n\t n = n.parent;\r\n\t }\r\n\r\n\t return false;\r\n\t};\r\n\r\n\t/**\r\n\t * Create an editable field\r\n\t * @return {Element} domField\r\n\t * @private\r\n\t */\r\n\tNode.prototype._createDomField = function () {\r\n\t return document.createElement('div');\r\n\t};\r\n\r\n\t/**\r\n\t * Set highlighting for this node and all its childs.\r\n\t * Only applied to the currently visible (expanded childs)\r\n\t * @param {boolean} highlight\r\n\t */\r\n\tNode.prototype.setHighlight = function (highlight) {\r\n\t if (this.dom.tr) {\r\n\t if (highlight) {\r\n\t util.addClassName(this.dom.tr, 'jsoneditor-highlight');\r\n\t }\r\n\t else {\r\n\t util.removeClassName(this.dom.tr, 'jsoneditor-highlight');\r\n\t }\r\n\r\n\t if (this.append) {\r\n\t this.append.setHighlight(highlight);\r\n\t }\r\n\r\n\t if (this.childs) {\r\n\t this.childs.forEach(function (child) {\r\n\t child.setHighlight(highlight);\r\n\t });\r\n\t }\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Select or deselect a node\r\n\t * @param {boolean} selected\r\n\t * @param {boolean} [isFirst]\r\n\t */\r\n\tNode.prototype.setSelected = function (selected, isFirst) {\r\n\t this.selected = selected;\r\n\r\n\t if (this.dom.tr) {\r\n\t if (selected) {\r\n\t util.addClassName(this.dom.tr, 'jsoneditor-selected');\r\n\t }\r\n\t else {\r\n\t util.removeClassName(this.dom.tr, 'jsoneditor-selected');\r\n\t }\r\n\r\n\t if (isFirst) {\r\n\t util.addClassName(this.dom.tr, 'jsoneditor-first');\r\n\t }\r\n\t else {\r\n\t util.removeClassName(this.dom.tr, 'jsoneditor-first');\r\n\t }\r\n\r\n\t if (this.append) {\r\n\t this.append.setSelected(selected);\r\n\t }\r\n\r\n\t if (this.childs) {\r\n\t this.childs.forEach(function (child) {\r\n\t child.setSelected(selected);\r\n\t });\r\n\t }\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Update the value of the node. Only primitive types are allowed, no Object\r\n\t * or Array is allowed.\r\n\t * @param {String | Number | Boolean | null} value\r\n\t */\r\n\tNode.prototype.updateValue = function (value) {\r\n\t this.value = value;\r\n\t this.updateDom();\r\n\t};\r\n\r\n\t/**\r\n\t * Update the field of the node.\r\n\t * @param {String} field\r\n\t */\r\n\tNode.prototype.updateField = function (field) {\r\n\t this.field = field;\r\n\t this.updateDom();\r\n\t};\r\n\r\n\t/**\r\n\t * Update the HTML DOM, optionally recursing through the childs\r\n\t * @param {Object} [options] Available parameters:\r\n\t * {boolean} [recurse] If true, the\r\n\t * DOM of the childs will be updated recursively.\r\n\t * False by default.\r\n\t * {boolean} [updateIndexes] If true, the childs\r\n\t * indexes of the node will be updated too. False by\r\n\t * default.\r\n\t */\r\n\tNode.prototype.updateDom = function (options) {\r\n\t // update level indentation\r\n\t var domTree = this.dom.tree;\r\n\t if (domTree) {\r\n\t domTree.style.marginLeft = this.getLevel() * 24 + 'px';\r\n\t }\r\n\r\n\t // apply field to DOM\r\n\t var domField = this.dom.field;\r\n\t if (domField) {\r\n\t if (this.fieldEditable) {\r\n\t // parent is an object\r\n\t domField.contentEditable = this.editable.field;\r\n\t domField.spellcheck = false;\r\n\t domField.className = 'jsoneditor-field';\r\n\t }\r\n\t else {\r\n\t // parent is an array this is the root node\r\n\t domField.className = 'jsoneditor-readonly';\r\n\t }\r\n\r\n\t var fieldText;\r\n\t if (this.index != undefined) {\r\n\t fieldText = this.index;\r\n\t }\r\n\t else if (this.field != undefined) {\r\n\t fieldText = this.field;\r\n\t }\r\n\t else if (this._hasChilds()) {\r\n\t fieldText = this.type;\r\n\t }\r\n\t else {\r\n\t fieldText = '';\r\n\t }\r\n\t domField.innerHTML = this._escapeHTML(fieldText);\r\n\r\n\t this._updateSchema();\r\n\t }\r\n\r\n\t // apply value to DOM\r\n\t var domValue = this.dom.value;\r\n\t if (domValue) {\r\n\t var count = this.childs ? this.childs.length : 0;\r\n\t if (this.type == 'array') {\r\n\t domValue.innerHTML = '[' + count + ']';\r\n\t util.addClassName(this.dom.tr, 'jsoneditor-expandable');\r\n\t }\r\n\t else if (this.type == 'object') {\r\n\t domValue.innerHTML = '{' + count + '}';\r\n\t util.addClassName(this.dom.tr, 'jsoneditor-expandable');\r\n\t }\r\n\t else {\r\n\t domValue.innerHTML = this._escapeHTML(this.value);\r\n\t util.removeClassName(this.dom.tr, 'jsoneditor-expandable');\r\n\t }\r\n\t }\r\n\r\n\t // update field and value\r\n\t this._updateDomField();\r\n\t this._updateDomValue();\r\n\r\n\t // update childs indexes\r\n\t if (options && options.updateIndexes === true) {\r\n\t // updateIndexes is true or undefined\r\n\t this._updateDomIndexes();\r\n\t }\r\n\r\n\t if (options && options.recurse === true) {\r\n\t // recurse is true or undefined. update childs recursively\r\n\t if (this.childs) {\r\n\t this.childs.forEach(function (child) {\r\n\t child.updateDom(options);\r\n\t });\r\n\t }\r\n\t }\r\n\r\n\t // update row with append button\r\n\t if (this.append) {\r\n\t this.append.updateDom();\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Locate the JSON schema of the node and check for any enum type\r\n\t * @private\r\n\t */\r\n\tNode.prototype._updateSchema = function () {\r\n\t //Locating the schema of the node and checking for any enum type\r\n\t if(this.editor && this.editor.options) {\r\n\t // find the part of the json schema matching this nodes path\r\n\t this.schema = Node._findSchema(this.editor.options.schema, this.getPath());\r\n\t if (this.schema) {\r\n\t this.enum = Node._findEnum(this.schema);\r\n\t }\r\n\t else {\r\n\t delete this.enum;\r\n\t }\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * find an enum definition in a JSON schema, as property `enum` or inside\r\n\t * one of the schemas composites (`oneOf`, `anyOf`, `allOf`)\r\n\t * @param {Object} schema\r\n\t * @return {Array | null} Returns the enum when found, null otherwise.\r\n\t * @private\r\n\t */\r\n\tNode._findEnum = function (schema) {\r\n\t if (schema.enum) {\r\n\t return schema.enum;\r\n\t }\r\n\r\n\t var composite = schema.oneOf || schema.anyOf || schema.allOf;\r\n\t if (composite) {\r\n\t var match = composite.filter(function (entry) {return entry.enum});\r\n\t if (match.length > 0) {\r\n\t return match[0].enum;\r\n\t }\r\n\t }\r\n\r\n\t return null\r\n\t};\r\n\r\n\t/**\r\n\t * Return the part of a JSON schema matching given path.\r\n\t * @param {Object} schema\r\n\t * @param {Array.} path\r\n\t * @return {Object | null}\r\n\t * @private\r\n\t */\r\n\tNode._findSchema = function (schema, path) {\r\n\t var childSchema = schema;\r\n\r\n\t for (var i = 0; i < path.length && childSchema; i++) {\r\n\t var key = path[i];\r\n\t if (typeof key === 'string' && childSchema.properties) {\r\n\t childSchema = childSchema.properties[key] || null\r\n\t }\r\n\t else if (typeof key === 'number' && childSchema.items) {\r\n\t childSchema = childSchema.items\r\n\t }\r\n\t }\r\n\r\n\t return childSchema\r\n\t};\r\n\r\n\t/**\r\n\t * Update the DOM of the childs of a node: update indexes and undefined field\r\n\t * names.\r\n\t * Only applicable when structure is an array or object\r\n\t * @private\r\n\t */\r\n\tNode.prototype._updateDomIndexes = function () {\r\n\t var domValue = this.dom.value;\r\n\t var childs = this.childs;\r\n\t if (domValue && childs) {\r\n\t if (this.type == 'array') {\r\n\t childs.forEach(function (child, index) {\r\n\t child.index = index;\r\n\t var childField = child.dom.field;\r\n\t if (childField) {\r\n\t childField.innerHTML = index;\r\n\t }\r\n\t });\r\n\t }\r\n\t else if (this.type == 'object') {\r\n\t childs.forEach(function (child) {\r\n\t if (child.index != undefined) {\r\n\t delete child.index;\r\n\r\n\t if (child.field == undefined) {\r\n\t child.field = '';\r\n\t }\r\n\t }\r\n\t });\r\n\t }\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Create an editable value\r\n\t * @private\r\n\t */\r\n\tNode.prototype._createDomValue = function () {\r\n\t var domValue;\r\n\r\n\t if (this.type == 'array') {\r\n\t domValue = document.createElement('div');\r\n\t domValue.innerHTML = '[...]';\r\n\t }\r\n\t else if (this.type == 'object') {\r\n\t domValue = document.createElement('div');\r\n\t domValue.innerHTML = '{...}';\r\n\t }\r\n\t else {\r\n\t if (!this.editable.value && util.isUrl(this.value)) {\r\n\t // create a link in case of read-only editor and value containing an url\r\n\t domValue = document.createElement('a');\r\n\t domValue.href = this.value;\r\n\t domValue.target = '_blank';\r\n\t domValue.innerHTML = this._escapeHTML(this.value);\r\n\t }\r\n\t else {\r\n\t // create an editable or read-only div\r\n\t domValue = document.createElement('div');\r\n\t domValue.contentEditable = this.editable.value;\r\n\t domValue.spellcheck = false;\r\n\t domValue.innerHTML = this._escapeHTML(this.value);\r\n\t }\r\n\t }\r\n\r\n\t return domValue;\r\n\t};\r\n\r\n\t/**\r\n\t * Create an expand/collapse button\r\n\t * @return {Element} expand\r\n\t * @private\r\n\t */\r\n\tNode.prototype._createDomExpandButton = function () {\r\n\t // create expand button\r\n\t var expand = document.createElement('button');\r\n\t expand.type = 'button';\r\n\t if (this._hasChilds()) {\r\n\t expand.className = this.expanded ? 'jsoneditor-expanded' : 'jsoneditor-collapsed';\r\n\t expand.title =\r\n\t 'Click to expand/collapse this field (Ctrl+E). \\n' +\r\n\t 'Ctrl+Click to expand/collapse including all childs.';\r\n\t }\r\n\t else {\r\n\t expand.className = 'jsoneditor-invisible';\r\n\t expand.title = '';\r\n\t }\r\n\r\n\t return expand;\r\n\t};\r\n\r\n\r\n\t/**\r\n\t * Create a DOM tree element, containing the expand/collapse button\r\n\t * @return {Element} domTree\r\n\t * @private\r\n\t */\r\n\tNode.prototype._createDomTree = function () {\r\n\t var dom = this.dom;\r\n\t var domTree = document.createElement('table');\r\n\t var tbody = document.createElement('tbody');\r\n\t domTree.style.borderCollapse = 'collapse'; // TODO: put in css\r\n\t domTree.className = 'jsoneditor-values';\r\n\t domTree.appendChild(tbody);\r\n\t var tr = document.createElement('tr');\r\n\t tbody.appendChild(tr);\r\n\r\n\t // create expand button\r\n\t var tdExpand = document.createElement('td');\r\n\t tdExpand.className = 'jsoneditor-tree';\r\n\t tr.appendChild(tdExpand);\r\n\t dom.expand = this._createDomExpandButton();\r\n\t tdExpand.appendChild(dom.expand);\r\n\t dom.tdExpand = tdExpand;\r\n\r\n\t // create the field\r\n\t var tdField = document.createElement('td');\r\n\t tdField.className = 'jsoneditor-tree';\r\n\t tr.appendChild(tdField);\r\n\t dom.field = this._createDomField();\r\n\t tdField.appendChild(dom.field);\r\n\t dom.tdField = tdField;\r\n\r\n\t // create a separator\r\n\t var tdSeparator = document.createElement('td');\r\n\t tdSeparator.className = 'jsoneditor-tree';\r\n\t tr.appendChild(tdSeparator);\r\n\t if (this.type != 'object' && this.type != 'array') {\r\n\t tdSeparator.appendChild(document.createTextNode(':'));\r\n\t tdSeparator.className = 'jsoneditor-separator';\r\n\t }\r\n\t dom.tdSeparator = tdSeparator;\r\n\r\n\t // create the value\r\n\t var tdValue = document.createElement('td');\r\n\t tdValue.className = 'jsoneditor-tree';\r\n\t tr.appendChild(tdValue);\r\n\t dom.value = this._createDomValue();\r\n\t tdValue.appendChild(dom.value);\r\n\t dom.tdValue = tdValue;\r\n\r\n\t return domTree;\r\n\t};\r\n\r\n\t/**\r\n\t * Handle an event. The event is caught centrally by the editor\r\n\t * @param {Event} event\r\n\t */\r\n\tNode.prototype.onEvent = function (event) {\r\n\t var type = event.type,\r\n\t target = event.target || event.srcElement,\r\n\t dom = this.dom,\r\n\t node = this,\r\n\t expandable = this._hasChilds();\r\n\r\n\t // check if mouse is on menu or on dragarea.\r\n\t // If so, highlight current row and its childs\r\n\t if (target == dom.drag || target == dom.menu) {\r\n\t if (type == 'mouseover') {\r\n\t this.editor.highlighter.highlight(this);\r\n\t }\r\n\t else if (type == 'mouseout') {\r\n\t this.editor.highlighter.unhighlight();\r\n\t }\r\n\t }\r\n\r\n\t // context menu events\r\n\t if (type == 'click' && target == dom.menu) {\r\n\t var highlighter = node.editor.highlighter;\r\n\t highlighter.highlight(node);\r\n\t highlighter.lock();\r\n\t util.addClassName(dom.menu, 'jsoneditor-selected');\r\n\t this.showContextMenu(dom.menu, function () {\r\n\t util.removeClassName(dom.menu, 'jsoneditor-selected');\r\n\t highlighter.unlock();\r\n\t highlighter.unhighlight();\r\n\t });\r\n\t }\r\n\r\n\t // expand events\r\n\t if (type == 'click') {\r\n\t if (target == dom.expand ||\r\n\t ((node.editor.options.mode === 'view' || node.editor.options.mode === 'form') && target.nodeName === 'DIV')) {\r\n\t if (expandable) {\r\n\t var recurse = event.ctrlKey; // with ctrl-key, expand/collapse all\r\n\t this._onExpand(recurse);\r\n\t }\r\n\t }\r\n\t }\r\n\r\n\t // swap the value of a boolean when the checkbox displayed left is clicked\r\n\t if (type == 'change' && target == dom.checkbox) {\r\n\t this.dom.value.innerHTML = !this.value;\r\n\t this._getDomValue();\r\n\t }\r\n\r\n\t // update the value of the node based on the selected option\r\n\t if (type == 'change' && target == dom.select) {\r\n\t this.dom.value.innerHTML = dom.select.value;\r\n\t this._getDomValue();\r\n\t this._updateDomValue();\r\n\t }\r\n\r\n\t // value events\r\n\t var domValue = dom.value;\r\n\t if (target == domValue) {\r\n\t //noinspection FallthroughInSwitchStatementJS\r\n\t switch (type) {\r\n\t case 'blur':\r\n\t case 'change':\r\n\t this._getDomValue(true);\r\n\t this._updateDomValue();\r\n\t if (this.value) {\r\n\t domValue.innerHTML = this._escapeHTML(this.value);\r\n\t }\r\n\t break;\r\n\r\n\t case 'input':\r\n\t //this._debouncedGetDomValue(true); // TODO\r\n\t this._getDomValue(true);\r\n\t this._updateDomValue();\r\n\t break;\r\n\r\n\t case 'keydown':\r\n\t case 'mousedown':\r\n\t // TODO: cleanup\r\n\t this.editor.selection = this.editor.getSelection();\r\n\t break;\r\n\r\n\t case 'click':\r\n\t if (event.ctrlKey || !this.editable.value) {\r\n\t if (util.isUrl(this.value)) {\r\n\t window.open(this.value, '_blank');\r\n\t }\r\n\t }\r\n\t break;\r\n\r\n\t case 'keyup':\r\n\t //this._debouncedGetDomValue(true); // TODO\r\n\t this._getDomValue(true);\r\n\t this._updateDomValue();\r\n\t break;\r\n\r\n\t case 'cut':\r\n\t case 'paste':\r\n\t setTimeout(function () {\r\n\t node._getDomValue(true);\r\n\t node._updateDomValue();\r\n\t }, 1);\r\n\t break;\r\n\t }\r\n\t }\r\n\r\n\t // field events\r\n\t var domField = dom.field;\r\n\t if (target == domField) {\r\n\t switch (type) {\r\n\t case 'blur':\r\n\t case 'change':\r\n\t this._getDomField(true);\r\n\t this._updateDomField();\r\n\t if (this.field) {\r\n\t domField.innerHTML = this._escapeHTML(this.field);\r\n\t }\r\n\t break;\r\n\r\n\t case 'input':\r\n\t this._getDomField(true);\r\n\t this._updateSchema();\r\n\t this._updateDomField();\r\n\t this._updateDomValue();\r\n\t break;\r\n\r\n\t case 'keydown':\r\n\t case 'mousedown':\r\n\t this.editor.selection = this.editor.getSelection();\r\n\t break;\r\n\r\n\t case 'keyup':\r\n\t this._getDomField(true);\r\n\t this._updateDomField();\r\n\t break;\r\n\r\n\t case 'cut':\r\n\t case 'paste':\r\n\t setTimeout(function () {\r\n\t node._getDomField(true);\r\n\t node._updateDomField();\r\n\t }, 1);\r\n\t break;\r\n\t }\r\n\t }\r\n\r\n\t // focus\r\n\t // when clicked in whitespace left or right from the field or value, set focus\r\n\t var domTree = dom.tree;\r\n\t if (target == domTree.parentNode && type == 'click' && !event.hasMoved) {\r\n\t var left = (event.offsetX != undefined) ?\r\n\t (event.offsetX < (this.getLevel() + 1) * 24) :\r\n\t (event.pageX < util.getAbsoluteLeft(dom.tdSeparator));// for FF\r\n\t if (left || expandable) {\r\n\t // node is expandable when it is an object or array\r\n\t if (domField) {\r\n\t util.setEndOfContentEditable(domField);\r\n\t domField.focus();\r\n\t }\r\n\t }\r\n\t else {\r\n\t if (domValue && !this.enum) {\r\n\t util.setEndOfContentEditable(domValue);\r\n\t domValue.focus();\r\n\t }\r\n\t }\r\n\t }\r\n\t if (((target == dom.tdExpand && !expandable) || target == dom.tdField || target == dom.tdSeparator) &&\r\n\t (type == 'click' && !event.hasMoved)) {\r\n\t if (domField) {\r\n\t util.setEndOfContentEditable(domField);\r\n\t domField.focus();\r\n\t }\r\n\t }\r\n\r\n\t if (type == 'keydown') {\r\n\t this.onKeyDown(event);\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Key down event handler\r\n\t * @param {Event} event\r\n\t */\r\n\tNode.prototype.onKeyDown = function (event) {\r\n\t var keynum = event.which || event.keyCode;\r\n\t var target = event.target || event.srcElement;\r\n\t var ctrlKey = event.ctrlKey;\r\n\t var shiftKey = event.shiftKey;\r\n\t var altKey = event.altKey;\r\n\t var handled = false;\r\n\t var prevNode, nextNode, nextDom, nextDom2;\r\n\t var editable = this.editor.options.mode === 'tree';\r\n\t var oldSelection;\r\n\t var oldBeforeNode;\r\n\t var nodes;\r\n\t var multiselection;\r\n\t var selectedNodes = this.editor.multiselection.nodes.length > 0\r\n\t ? this.editor.multiselection.nodes\r\n\t : [this];\r\n\t var firstNode = selectedNodes[0];\r\n\t var lastNode = selectedNodes[selectedNodes.length - 1];\r\n\r\n\t // console.log(ctrlKey, keynum, event.charCode); // TODO: cleanup\r\n\t if (keynum == 13) { // Enter\r\n\t if (target == this.dom.value) {\r\n\t if (!this.editable.value || event.ctrlKey) {\r\n\t if (util.isUrl(this.value)) {\r\n\t window.open(this.value, '_blank');\r\n\t handled = true;\r\n\t }\r\n\t }\r\n\t }\r\n\t else if (target == this.dom.expand) {\r\n\t var expandable = this._hasChilds();\r\n\t if (expandable) {\r\n\t var recurse = event.ctrlKey; // with ctrl-key, expand/collapse all\r\n\t this._onExpand(recurse);\r\n\t target.focus();\r\n\t handled = true;\r\n\t }\r\n\t }\r\n\t }\r\n\t else if (keynum == 68) { // D\r\n\t if (ctrlKey && editable) { // Ctrl+D\r\n\t Node.onDuplicate(selectedNodes);\r\n\t handled = true;\r\n\t }\r\n\t }\r\n\t else if (keynum == 69) { // E\r\n\t if (ctrlKey) { // Ctrl+E and Ctrl+Shift+E\r\n\t this._onExpand(shiftKey); // recurse = shiftKey\r\n\t target.focus(); // TODO: should restore focus in case of recursing expand (which takes DOM offline)\r\n\t handled = true;\r\n\t }\r\n\t }\r\n\t else if (keynum == 77 && editable) { // M\r\n\t if (ctrlKey) { // Ctrl+M\r\n\t this.showContextMenu(target);\r\n\t handled = true;\r\n\t }\r\n\t }\r\n\t else if (keynum == 46 && editable) { // Del\r\n\t if (ctrlKey) { // Ctrl+Del\r\n\t Node.onRemove(selectedNodes);\r\n\t handled = true;\r\n\t }\r\n\t }\r\n\t else if (keynum == 45 && editable) { // Ins\r\n\t if (ctrlKey && !shiftKey) { // Ctrl+Ins\r\n\t this._onInsertBefore();\r\n\t handled = true;\r\n\t }\r\n\t else if (ctrlKey && shiftKey) { // Ctrl+Shift+Ins\r\n\t this._onInsertAfter();\r\n\t handled = true;\r\n\t }\r\n\t }\r\n\t else if (keynum == 35) { // End\r\n\t if (altKey) { // Alt+End\r\n\t // find the last node\r\n\t var endNode = this._lastNode();\r\n\t if (endNode) {\r\n\t endNode.focus(Node.focusElement || this._getElementName(target));\r\n\t }\r\n\t handled = true;\r\n\t }\r\n\t }\r\n\t else if (keynum == 36) { // Home\r\n\t if (altKey) { // Alt+Home\r\n\t // find the first node\r\n\t var homeNode = this._firstNode();\r\n\t if (homeNode) {\r\n\t homeNode.focus(Node.focusElement || this._getElementName(target));\r\n\t }\r\n\t handled = true;\r\n\t }\r\n\t }\r\n\t else if (keynum == 37) { // Arrow Left\r\n\t if (altKey && !shiftKey) { // Alt + Arrow Left\r\n\t // move to left element\r\n\t var prevElement = this._previousElement(target);\r\n\t if (prevElement) {\r\n\t this.focus(this._getElementName(prevElement));\r\n\t }\r\n\t handled = true;\r\n\t }\r\n\t else if (altKey && shiftKey && editable) { // Alt + Shift + Arrow left\r\n\t if (lastNode.expanded) {\r\n\t var appendDom = lastNode.getAppend();\r\n\t nextDom = appendDom ? appendDom.nextSibling : undefined;\r\n\t }\r\n\t else {\r\n\t var dom = lastNode.getDom();\r\n\t nextDom = dom.nextSibling;\r\n\t }\r\n\t if (nextDom) {\r\n\t nextNode = Node.getNodeFromTarget(nextDom);\r\n\t nextDom2 = nextDom.nextSibling;\r\n\t nextNode2 = Node.getNodeFromTarget(nextDom2);\r\n\t if (nextNode && nextNode instanceof AppendNode &&\r\n\t !(lastNode.parent.childs.length == 1) &&\r\n\t nextNode2 && nextNode2.parent) {\r\n\t oldSelection = this.editor.getSelection();\r\n\t oldBeforeNode = lastNode._nextSibling();\r\n\r\n\t selectedNodes.forEach(function (node) {\r\n\t nextNode2.parent.moveBefore(node, nextNode2);\r\n\t });\r\n\t this.focus(Node.focusElement || this._getElementName(target));\r\n\r\n\t this.editor._onAction('moveNodes', {\r\n\t nodes: selectedNodes,\r\n\t oldBeforeNode: oldBeforeNode,\r\n\t newBeforeNode: nextNode2,\r\n\t oldSelection: oldSelection,\r\n\t newSelection: this.editor.getSelection()\r\n\t });\r\n\t }\r\n\t }\r\n\t }\r\n\t }\r\n\t else if (keynum == 38) { // Arrow Up\r\n\t if (altKey && !shiftKey) { // Alt + Arrow Up\r\n\t // find the previous node\r\n\t prevNode = this._previousNode();\r\n\t if (prevNode) {\r\n\t this.editor.deselect(true);\r\n\t prevNode.focus(Node.focusElement || this._getElementName(target));\r\n\t }\r\n\t handled = true;\r\n\t }\r\n\t else if (!altKey && ctrlKey && shiftKey && editable) { // Ctrl + Shift + Arrow Up\r\n\t // select multiple nodes\r\n\t prevNode = this._previousNode();\r\n\t if (prevNode) {\r\n\t multiselection = this.editor.multiselection;\r\n\t multiselection.start = multiselection.start || this;\r\n\t multiselection.end = prevNode;\r\n\t nodes = this.editor._findTopLevelNodes(multiselection.start, multiselection.end);\r\n\r\n\t this.editor.select(nodes);\r\n\t prevNode.focus('field'); // select field as we know this always exists\r\n\t }\r\n\t handled = true;\r\n\t }\r\n\t else if (altKey && shiftKey && editable) { // Alt + Shift + Arrow Up\r\n\t // find the previous node\r\n\t prevNode = firstNode._previousNode();\r\n\t if (prevNode && prevNode.parent) {\r\n\t oldSelection = this.editor.getSelection();\r\n\t oldBeforeNode = lastNode._nextSibling();\r\n\r\n\t selectedNodes.forEach(function (node) {\r\n\t prevNode.parent.moveBefore(node, prevNode);\r\n\t });\r\n\t this.focus(Node.focusElement || this._getElementName(target));\r\n\r\n\t this.editor._onAction('moveNodes', {\r\n\t nodes: selectedNodes,\r\n\t oldBeforeNode: oldBeforeNode,\r\n\t newBeforeNode: prevNode,\r\n\t oldSelection: oldSelection,\r\n\t newSelection: this.editor.getSelection()\r\n\t });\r\n\t }\r\n\t handled = true;\r\n\t }\r\n\t }\r\n\t else if (keynum == 39) { // Arrow Right\r\n\t if (altKey && !shiftKey) { // Alt + Arrow Right\r\n\t // move to right element\r\n\t var nextElement = this._nextElement(target);\r\n\t if (nextElement) {\r\n\t this.focus(this._getElementName(nextElement));\r\n\t }\r\n\t handled = true;\r\n\t }\r\n\t else if (altKey && shiftKey && editable) { // Alt + Shift + Arrow Right\r\n\t dom = firstNode.getDom();\r\n\t var prevDom = dom.previousSibling;\r\n\t if (prevDom) {\r\n\t prevNode = Node.getNodeFromTarget(prevDom);\r\n\t if (prevNode && prevNode.parent &&\r\n\t (prevNode instanceof AppendNode)\r\n\t && !prevNode.isVisible()) {\r\n\t oldSelection = this.editor.getSelection();\r\n\t oldBeforeNode = lastNode._nextSibling();\r\n\r\n\t selectedNodes.forEach(function (node) {\r\n\t prevNode.parent.moveBefore(node, prevNode);\r\n\t });\r\n\t this.focus(Node.focusElement || this._getElementName(target));\r\n\r\n\t this.editor._onAction('moveNodes', {\r\n\t nodes: selectedNodes,\r\n\t oldBeforeNode: oldBeforeNode,\r\n\t newBeforeNode: prevNode,\r\n\t oldSelection: oldSelection,\r\n\t newSelection: this.editor.getSelection()\r\n\t });\r\n\t }\r\n\t }\r\n\t }\r\n\t }\r\n\t else if (keynum == 40) { // Arrow Down\r\n\t if (altKey && !shiftKey) { // Alt + Arrow Down\r\n\t // find the next node\r\n\t nextNode = this._nextNode();\r\n\t if (nextNode) {\r\n\t this.editor.deselect(true);\r\n\t nextNode.focus(Node.focusElement || this._getElementName(target));\r\n\t }\r\n\t handled = true;\r\n\t }\r\n\t else if (!altKey && ctrlKey && shiftKey && editable) { // Ctrl + Shift + Arrow Down\r\n\t // select multiple nodes\r\n\t nextNode = this._nextNode();\r\n\t if (nextNode) {\r\n\t multiselection = this.editor.multiselection;\r\n\t multiselection.start = multiselection.start || this;\r\n\t multiselection.end = nextNode;\r\n\t nodes = this.editor._findTopLevelNodes(multiselection.start, multiselection.end);\r\n\r\n\t this.editor.select(nodes);\r\n\t nextNode.focus('field'); // select field as we know this always exists\r\n\t }\r\n\t handled = true;\r\n\t }\r\n\t else if (altKey && shiftKey && editable) { // Alt + Shift + Arrow Down\r\n\t // find the 2nd next node and move before that one\r\n\t if (lastNode.expanded) {\r\n\t nextNode = lastNode.append ? lastNode.append._nextNode() : undefined;\r\n\t }\r\n\t else {\r\n\t nextNode = lastNode._nextNode();\r\n\t }\r\n\t var nextNode2 = nextNode && (nextNode._nextNode() || nextNode.parent.append);\r\n\t if (nextNode2 && nextNode2.parent) {\r\n\t oldSelection = this.editor.getSelection();\r\n\t oldBeforeNode = lastNode._nextSibling();\r\n\r\n\t selectedNodes.forEach(function (node) {\r\n\t nextNode2.parent.moveBefore(node, nextNode2);\r\n\t });\r\n\t this.focus(Node.focusElement || this._getElementName(target));\r\n\r\n\t this.editor._onAction('moveNodes', {\r\n\t nodes: selectedNodes,\r\n\t oldBeforeNode: oldBeforeNode,\r\n\t newBeforeNode: nextNode2,\r\n\t oldSelection: oldSelection,\r\n\t newSelection: this.editor.getSelection()\r\n\t });\r\n\t }\r\n\t handled = true;\r\n\t }\r\n\t }\r\n\r\n\t if (handled) {\r\n\t event.preventDefault();\r\n\t event.stopPropagation();\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Handle the expand event, when clicked on the expand button\r\n\t * @param {boolean} recurse If true, child nodes will be expanded too\r\n\t * @private\r\n\t */\r\n\tNode.prototype._onExpand = function (recurse) {\r\n\t if (recurse) {\r\n\t // Take the table offline\r\n\t var table = this.dom.tr.parentNode; // TODO: not nice to access the main table like this\r\n\t var frame = table.parentNode;\r\n\t var scrollTop = frame.scrollTop;\r\n\t frame.removeChild(table);\r\n\t }\r\n\r\n\t if (this.expanded) {\r\n\t this.collapse(recurse);\r\n\t }\r\n\t else {\r\n\t this.expand(recurse);\r\n\t }\r\n\r\n\t if (recurse) {\r\n\t // Put the table online again\r\n\t frame.appendChild(table);\r\n\t frame.scrollTop = scrollTop;\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Remove nodes\r\n\t * @param {Node[] | Node} nodes\r\n\t */\r\n\tNode.onRemove = function(nodes) {\r\n\t if (!Array.isArray(nodes)) {\r\n\t return Node.onRemove([nodes]);\r\n\t }\r\n\r\n\t if (nodes && nodes.length > 0) {\r\n\t var firstNode = nodes[0];\r\n\t var parent = firstNode.parent;\r\n\t var editor = firstNode.editor;\r\n\t var firstIndex = firstNode.getIndex();\r\n\t editor.highlighter.unhighlight();\r\n\r\n\t // adjust the focus\r\n\t var oldSelection = editor.getSelection();\r\n\t Node.blurNodes(nodes);\r\n\t var newSelection = editor.getSelection();\r\n\r\n\t // remove the nodes\r\n\t nodes.forEach(function (node) {\r\n\t node.parent._remove(node);\r\n\t });\r\n\r\n\t // store history action\r\n\t editor._onAction('removeNodes', {\r\n\t nodes: nodes.slice(0), // store a copy of the array!\r\n\t parent: parent,\r\n\t index: firstIndex,\r\n\t oldSelection: oldSelection,\r\n\t newSelection: newSelection\r\n\t });\r\n\t }\r\n\t};\r\n\r\n\r\n\t/**\r\n\t * Duplicate nodes\r\n\t * duplicated nodes will be added right after the original nodes\r\n\t * @param {Node[] | Node} nodes\r\n\t */\r\n\tNode.onDuplicate = function(nodes) {\r\n\t if (!Array.isArray(nodes)) {\r\n\t return Node.onDuplicate([nodes]);\r\n\t }\r\n\r\n\t if (nodes && nodes.length > 0) {\r\n\t var lastNode = nodes[nodes.length - 1];\r\n\t var parent = lastNode.parent;\r\n\t var editor = lastNode.editor;\r\n\r\n\t editor.deselect(editor.multiselection.nodes);\r\n\r\n\t // duplicate the nodes\r\n\t var oldSelection = editor.getSelection();\r\n\t var afterNode = lastNode;\r\n\t var clones = nodes.map(function (node) {\r\n\t var clone = node.clone();\r\n\t parent.insertAfter(clone, afterNode);\r\n\t afterNode = clone;\r\n\t return clone;\r\n\t });\r\n\r\n\t // set selection to the duplicated nodes\r\n\t if (nodes.length === 1) {\r\n\t clones[0].focus();\r\n\t }\r\n\t else {\r\n\t editor.select(clones);\r\n\t }\r\n\t var newSelection = editor.getSelection();\r\n\r\n\t editor._onAction('duplicateNodes', {\r\n\t afterNode: lastNode,\r\n\t nodes: clones,\r\n\t parent: parent,\r\n\t oldSelection: oldSelection,\r\n\t newSelection: newSelection\r\n\t });\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Handle insert before event\r\n\t * @param {String} [field]\r\n\t * @param {*} [value]\r\n\t * @param {String} [type] Can be 'auto', 'array', 'object', or 'string'\r\n\t * @private\r\n\t */\r\n\tNode.prototype._onInsertBefore = function (field, value, type) {\r\n\t var oldSelection = this.editor.getSelection();\r\n\r\n\t var newNode = new Node(this.editor, {\r\n\t field: (field != undefined) ? field : '',\r\n\t value: (value != undefined) ? value : '',\r\n\t type: type\r\n\t });\r\n\t newNode.expand(true);\r\n\t this.parent.insertBefore(newNode, this);\r\n\t this.editor.highlighter.unhighlight();\r\n\t newNode.focus('field');\r\n\t var newSelection = this.editor.getSelection();\r\n\r\n\t this.editor._onAction('insertBeforeNodes', {\r\n\t nodes: [newNode],\r\n\t beforeNode: this,\r\n\t parent: this.parent,\r\n\t oldSelection: oldSelection,\r\n\t newSelection: newSelection\r\n\t });\r\n\t};\r\n\r\n\t/**\r\n\t * Handle insert after event\r\n\t * @param {String} [field]\r\n\t * @param {*} [value]\r\n\t * @param {String} [type] Can be 'auto', 'array', 'object', or 'string'\r\n\t * @private\r\n\t */\r\n\tNode.prototype._onInsertAfter = function (field, value, type) {\r\n\t var oldSelection = this.editor.getSelection();\r\n\r\n\t var newNode = new Node(this.editor, {\r\n\t field: (field != undefined) ? field : '',\r\n\t value: (value != undefined) ? value : '',\r\n\t type: type\r\n\t });\r\n\t newNode.expand(true);\r\n\t this.parent.insertAfter(newNode, this);\r\n\t this.editor.highlighter.unhighlight();\r\n\t newNode.focus('field');\r\n\t var newSelection = this.editor.getSelection();\r\n\r\n\t this.editor._onAction('insertAfterNodes', {\r\n\t nodes: [newNode],\r\n\t afterNode: this,\r\n\t parent: this.parent,\r\n\t oldSelection: oldSelection,\r\n\t newSelection: newSelection\r\n\t });\r\n\t};\r\n\r\n\t/**\r\n\t * Handle append event\r\n\t * @param {String} [field]\r\n\t * @param {*} [value]\r\n\t * @param {String} [type] Can be 'auto', 'array', 'object', or 'string'\r\n\t * @private\r\n\t */\r\n\tNode.prototype._onAppend = function (field, value, type) {\r\n\t var oldSelection = this.editor.getSelection();\r\n\r\n\t var newNode = new Node(this.editor, {\r\n\t field: (field != undefined) ? field : '',\r\n\t value: (value != undefined) ? value : '',\r\n\t type: type\r\n\t });\r\n\t newNode.expand(true);\r\n\t this.parent.appendChild(newNode);\r\n\t this.editor.highlighter.unhighlight();\r\n\t newNode.focus('field');\r\n\t var newSelection = this.editor.getSelection();\r\n\r\n\t this.editor._onAction('appendNodes', {\r\n\t nodes: [newNode],\r\n\t parent: this.parent,\r\n\t oldSelection: oldSelection,\r\n\t newSelection: newSelection\r\n\t });\r\n\t};\r\n\r\n\t/**\r\n\t * Change the type of the node's value\r\n\t * @param {String} newType\r\n\t * @private\r\n\t */\r\n\tNode.prototype._onChangeType = function (newType) {\r\n\t var oldType = this.type;\r\n\t if (newType != oldType) {\r\n\t var oldSelection = this.editor.getSelection();\r\n\t this.changeType(newType);\r\n\t var newSelection = this.editor.getSelection();\r\n\r\n\t this.editor._onAction('changeType', {\r\n\t node: this,\r\n\t oldType: oldType,\r\n\t newType: newType,\r\n\t oldSelection: oldSelection,\r\n\t newSelection: newSelection\r\n\t });\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Sort the child's of the node. Only applicable when the node has type 'object'\r\n\t * or 'array'.\r\n\t * @param {String} direction Sorting direction. Available values: \"asc\", \"desc\"\r\n\t * @private\r\n\t */\r\n\tNode.prototype.sort = function (direction) {\r\n\t if (!this._hasChilds()) {\r\n\t return;\r\n\t }\r\n\r\n\t var order = (direction == 'desc') ? -1 : 1;\r\n\t var prop = (this.type == 'array') ? 'value': 'field';\r\n\t this.hideChilds();\r\n\r\n\t var oldChilds = this.childs;\r\n\t var oldSortOrder = this.sortOrder;\r\n\r\n\t // copy the array (the old one will be kept for an undo action\r\n\t this.childs = this.childs.concat();\r\n\r\n\t // sort the arrays\r\n\t this.childs.sort(function (a, b) {\r\n\t return order * naturalSort(a[prop], b[prop]);\r\n\t });\r\n\t this.sortOrder = (order == 1) ? 'asc' : 'desc';\r\n\r\n\t this.editor._onAction('sort', {\r\n\t node: this,\r\n\t oldChilds: oldChilds,\r\n\t oldSort: oldSortOrder,\r\n\t newChilds: this.childs,\r\n\t newSort: this.sortOrder\r\n\t });\r\n\r\n\t this.showChilds();\r\n\t};\r\n\r\n\t/**\r\n\t * Create a table row with an append button.\r\n\t * @return {HTMLElement | undefined} buttonAppend or undefined when inapplicable\r\n\t */\r\n\tNode.prototype.getAppend = function () {\r\n\t if (!this.append) {\r\n\t this.append = new AppendNode(this.editor);\r\n\t this.append.setParent(this);\r\n\t }\r\n\t return this.append.getDom();\r\n\t};\r\n\r\n\t/**\r\n\t * Find the node from an event target\r\n\t * @param {Node} target\r\n\t * @return {Node | undefined} node or undefined when not found\r\n\t * @static\r\n\t */\r\n\tNode.getNodeFromTarget = function (target) {\r\n\t while (target) {\r\n\t if (target.node) {\r\n\t return target.node;\r\n\t }\r\n\t target = target.parentNode;\r\n\t }\r\n\r\n\t return undefined;\r\n\t};\r\n\r\n\t/**\r\n\t * Remove the focus of given nodes, and move the focus to the (a) node before,\r\n\t * (b) the node after, or (c) the parent node.\r\n\t * @param {Array. | Node} nodes\r\n\t */\r\n\tNode.blurNodes = function (nodes) {\r\n\t if (!Array.isArray(nodes)) {\r\n\t Node.blurNodes([nodes]);\r\n\t return;\r\n\t }\r\n\r\n\t var firstNode = nodes[0];\r\n\t var parent = firstNode.parent;\r\n\t var firstIndex = firstNode.getIndex();\r\n\r\n\t if (parent.childs[firstIndex + nodes.length]) {\r\n\t parent.childs[firstIndex + nodes.length].focus();\r\n\t }\r\n\t else if (parent.childs[firstIndex - 1]) {\r\n\t parent.childs[firstIndex - 1].focus();\r\n\t }\r\n\t else {\r\n\t parent.focus();\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Get the next sibling of current node\r\n\t * @return {Node} nextSibling\r\n\t * @private\r\n\t */\r\n\tNode.prototype._nextSibling = function () {\r\n\t var index = this.parent.childs.indexOf(this);\r\n\t return this.parent.childs[index + 1] || this.parent.append;\r\n\t};\r\n\r\n\t/**\r\n\t * Get the previously rendered node\r\n\t * @return {Node | null} previousNode\r\n\t * @private\r\n\t */\r\n\tNode.prototype._previousNode = function () {\r\n\t var prevNode = null;\r\n\t var dom = this.getDom();\r\n\t if (dom && dom.parentNode) {\r\n\t // find the previous field\r\n\t var prevDom = dom;\r\n\t do {\r\n\t prevDom = prevDom.previousSibling;\r\n\t prevNode = Node.getNodeFromTarget(prevDom);\r\n\t }\r\n\t while (prevDom && (prevNode instanceof AppendNode && !prevNode.isVisible()));\r\n\t }\r\n\t return prevNode;\r\n\t};\r\n\r\n\t/**\r\n\t * Get the next rendered node\r\n\t * @return {Node | null} nextNode\r\n\t * @private\r\n\t */\r\n\tNode.prototype._nextNode = function () {\r\n\t var nextNode = null;\r\n\t var dom = this.getDom();\r\n\t if (dom && dom.parentNode) {\r\n\t // find the previous field\r\n\t var nextDom = dom;\r\n\t do {\r\n\t nextDom = nextDom.nextSibling;\r\n\t nextNode = Node.getNodeFromTarget(nextDom);\r\n\t }\r\n\t while (nextDom && (nextNode instanceof AppendNode && !nextNode.isVisible()));\r\n\t }\r\n\r\n\t return nextNode;\r\n\t};\r\n\r\n\t/**\r\n\t * Get the first rendered node\r\n\t * @return {Node | null} firstNode\r\n\t * @private\r\n\t */\r\n\tNode.prototype._firstNode = function () {\r\n\t var firstNode = null;\r\n\t var dom = this.getDom();\r\n\t if (dom && dom.parentNode) {\r\n\t var firstDom = dom.parentNode.firstChild;\r\n\t firstNode = Node.getNodeFromTarget(firstDom);\r\n\t }\r\n\r\n\t return firstNode;\r\n\t};\r\n\r\n\t/**\r\n\t * Get the last rendered node\r\n\t * @return {Node | null} lastNode\r\n\t * @private\r\n\t */\r\n\tNode.prototype._lastNode = function () {\r\n\t var lastNode = null;\r\n\t var dom = this.getDom();\r\n\t if (dom && dom.parentNode) {\r\n\t var lastDom = dom.parentNode.lastChild;\r\n\t lastNode = Node.getNodeFromTarget(lastDom);\r\n\t while (lastDom && (lastNode instanceof AppendNode && !lastNode.isVisible())) {\r\n\t lastDom = lastDom.previousSibling;\r\n\t lastNode = Node.getNodeFromTarget(lastDom);\r\n\t }\r\n\t }\r\n\t return lastNode;\r\n\t};\r\n\r\n\t/**\r\n\t * Get the next element which can have focus.\r\n\t * @param {Element} elem\r\n\t * @return {Element | null} nextElem\r\n\t * @private\r\n\t */\r\n\tNode.prototype._previousElement = function (elem) {\r\n\t var dom = this.dom;\r\n\t // noinspection FallthroughInSwitchStatementJS\r\n\t switch (elem) {\r\n\t case dom.value:\r\n\t if (this.fieldEditable) {\r\n\t return dom.field;\r\n\t }\r\n\t // intentional fall through\r\n\t case dom.field:\r\n\t if (this._hasChilds()) {\r\n\t return dom.expand;\r\n\t }\r\n\t // intentional fall through\r\n\t case dom.expand:\r\n\t return dom.menu;\r\n\t case dom.menu:\r\n\t if (dom.drag) {\r\n\t return dom.drag;\r\n\t }\r\n\t // intentional fall through\r\n\t default:\r\n\t return null;\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Get the next element which can have focus.\r\n\t * @param {Element} elem\r\n\t * @return {Element | null} nextElem\r\n\t * @private\r\n\t */\r\n\tNode.prototype._nextElement = function (elem) {\r\n\t var dom = this.dom;\r\n\t // noinspection FallthroughInSwitchStatementJS\r\n\t switch (elem) {\r\n\t case dom.drag:\r\n\t return dom.menu;\r\n\t case dom.menu:\r\n\t if (this._hasChilds()) {\r\n\t return dom.expand;\r\n\t }\r\n\t // intentional fall through\r\n\t case dom.expand:\r\n\t if (this.fieldEditable) {\r\n\t return dom.field;\r\n\t }\r\n\t // intentional fall through\r\n\t case dom.field:\r\n\t if (!this._hasChilds()) {\r\n\t return dom.value;\r\n\t }\r\n\t default:\r\n\t return null;\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Get the dom name of given element. returns null if not found.\r\n\t * For example when element == dom.field, \"field\" is returned.\r\n\t * @param {Element} element\r\n\t * @return {String | null} elementName Available elements with name: 'drag',\r\n\t * 'menu', 'expand', 'field', 'value'\r\n\t * @private\r\n\t */\r\n\tNode.prototype._getElementName = function (element) {\r\n\t var dom = this.dom;\r\n\t for (var name in dom) {\r\n\t if (dom.hasOwnProperty(name)) {\r\n\t if (dom[name] == element) {\r\n\t return name;\r\n\t }\r\n\t }\r\n\t }\r\n\t return null;\r\n\t};\r\n\r\n\t/**\r\n\t * Test if this node has childs. This is the case when the node is an object\r\n\t * or array.\r\n\t * @return {boolean} hasChilds\r\n\t * @private\r\n\t */\r\n\tNode.prototype._hasChilds = function () {\r\n\t return this.type == 'array' || this.type == 'object';\r\n\t};\r\n\r\n\t// titles with explanation for the different types\r\n\tNode.TYPE_TITLES = {\r\n\t 'auto': 'Field type \"auto\". ' +\r\n\t 'The field type is automatically determined from the value ' +\r\n\t 'and can be a string, number, boolean, or null.',\r\n\t 'object': 'Field type \"object\". ' +\r\n\t 'An object contains an unordered set of key/value pairs.',\r\n\t 'array': 'Field type \"array\". ' +\r\n\t 'An array contains an ordered collection of values.',\r\n\t 'string': 'Field type \"string\". ' +\r\n\t 'Field type is not determined from the value, ' +\r\n\t 'but always returned as string.'\r\n\t};\r\n\r\n\t/**\r\n\t * Show a contextmenu for this node\r\n\t * @param {HTMLElement} anchor Anchor element to attach the context menu to\r\n\t * as sibling.\r\n\t * @param {function} [onClose] Callback method called when the context menu\r\n\t * is being closed.\r\n\t */\r\n\tNode.prototype.showContextMenu = function (anchor, onClose) {\r\n\t var node = this;\r\n\t var titles = Node.TYPE_TITLES;\r\n\t var items = [];\r\n\r\n\t if (this.editable.value) {\r\n\t items.push({\r\n\t text: 'Type',\r\n\t title: 'Change the type of this field',\r\n\t className: 'jsoneditor-type-' + this.type,\r\n\t submenu: [\r\n\t {\r\n\t text: 'Auto',\r\n\t className: 'jsoneditor-type-auto' +\r\n\t (this.type == 'auto' ? ' jsoneditor-selected' : ''),\r\n\t title: titles.auto,\r\n\t click: function () {\r\n\t node._onChangeType('auto');\r\n\t }\r\n\t },\r\n\t {\r\n\t text: 'Array',\r\n\t className: 'jsoneditor-type-array' +\r\n\t (this.type == 'array' ? ' jsoneditor-selected' : ''),\r\n\t title: titles.array,\r\n\t click: function () {\r\n\t node._onChangeType('array');\r\n\t }\r\n\t },\r\n\t {\r\n\t text: 'Object',\r\n\t className: 'jsoneditor-type-object' +\r\n\t (this.type == 'object' ? ' jsoneditor-selected' : ''),\r\n\t title: titles.object,\r\n\t click: function () {\r\n\t node._onChangeType('object');\r\n\t }\r\n\t },\r\n\t {\r\n\t text: 'String',\r\n\t className: 'jsoneditor-type-string' +\r\n\t (this.type == 'string' ? ' jsoneditor-selected' : ''),\r\n\t title: titles.string,\r\n\t click: function () {\r\n\t node._onChangeType('string');\r\n\t }\r\n\t }\r\n\t ]\r\n\t });\r\n\t }\r\n\r\n\t if (this._hasChilds()) {\r\n\t var direction = ((this.sortOrder == 'asc') ? 'desc': 'asc');\r\n\t items.push({\r\n\t text: 'Sort',\r\n\t title: 'Sort the childs of this ' + this.type,\r\n\t className: 'jsoneditor-sort-' + direction,\r\n\t click: function () {\r\n\t node.sort(direction);\r\n\t },\r\n\t submenu: [\r\n\t {\r\n\t text: 'Ascending',\r\n\t className: 'jsoneditor-sort-asc',\r\n\t title: 'Sort the childs of this ' + this.type + ' in ascending order',\r\n\t click: function () {\r\n\t node.sort('asc');\r\n\t }\r\n\t },\r\n\t {\r\n\t text: 'Descending',\r\n\t className: 'jsoneditor-sort-desc',\r\n\t title: 'Sort the childs of this ' + this.type +' in descending order',\r\n\t click: function () {\r\n\t node.sort('desc');\r\n\t }\r\n\t }\r\n\t ]\r\n\t });\r\n\t }\r\n\r\n\t if (this.parent && this.parent._hasChilds()) {\r\n\t if (items.length) {\r\n\t // create a separator\r\n\t items.push({\r\n\t 'type': 'separator'\r\n\t });\r\n\t }\r\n\r\n\t // create append button (for last child node only)\r\n\t var childs = node.parent.childs;\r\n\t if (node == childs[childs.length - 1]) {\r\n\t items.push({\r\n\t text: 'Append',\r\n\t title: 'Append a new field with type \\'auto\\' after this field (Ctrl+Shift+Ins)',\r\n\t submenuTitle: 'Select the type of the field to be appended',\r\n\t className: 'jsoneditor-append',\r\n\t click: function () {\r\n\t node._onAppend('', '', 'auto');\r\n\t },\r\n\t submenu: [\r\n\t {\r\n\t text: 'Auto',\r\n\t className: 'jsoneditor-type-auto',\r\n\t title: titles.auto,\r\n\t click: function () {\r\n\t node._onAppend('', '', 'auto');\r\n\t }\r\n\t },\r\n\t {\r\n\t text: 'Array',\r\n\t className: 'jsoneditor-type-array',\r\n\t title: titles.array,\r\n\t click: function () {\r\n\t node._onAppend('', []);\r\n\t }\r\n\t },\r\n\t {\r\n\t text: 'Object',\r\n\t className: 'jsoneditor-type-object',\r\n\t title: titles.object,\r\n\t click: function () {\r\n\t node._onAppend('', {});\r\n\t }\r\n\t },\r\n\t {\r\n\t text: 'String',\r\n\t className: 'jsoneditor-type-string',\r\n\t title: titles.string,\r\n\t click: function () {\r\n\t node._onAppend('', '', 'string');\r\n\t }\r\n\t }\r\n\t ]\r\n\t });\r\n\t }\r\n\r\n\t // create insert button\r\n\t items.push({\r\n\t text: 'Insert',\r\n\t title: 'Insert a new field with type \\'auto\\' before this field (Ctrl+Ins)',\r\n\t submenuTitle: 'Select the type of the field to be inserted',\r\n\t className: 'jsoneditor-insert',\r\n\t click: function () {\r\n\t node._onInsertBefore('', '', 'auto');\r\n\t },\r\n\t submenu: [\r\n\t {\r\n\t text: 'Auto',\r\n\t className: 'jsoneditor-type-auto',\r\n\t title: titles.auto,\r\n\t click: function () {\r\n\t node._onInsertBefore('', '', 'auto');\r\n\t }\r\n\t },\r\n\t {\r\n\t text: 'Array',\r\n\t className: 'jsoneditor-type-array',\r\n\t title: titles.array,\r\n\t click: function () {\r\n\t node._onInsertBefore('', []);\r\n\t }\r\n\t },\r\n\t {\r\n\t text: 'Object',\r\n\t className: 'jsoneditor-type-object',\r\n\t title: titles.object,\r\n\t click: function () {\r\n\t node._onInsertBefore('', {});\r\n\t }\r\n\t },\r\n\t {\r\n\t text: 'String',\r\n\t className: 'jsoneditor-type-string',\r\n\t title: titles.string,\r\n\t click: function () {\r\n\t node._onInsertBefore('', '', 'string');\r\n\t }\r\n\t }\r\n\t ]\r\n\t });\r\n\r\n\t if (this.editable.field) {\r\n\t // create duplicate button\r\n\t items.push({\r\n\t text: 'Duplicate',\r\n\t title: 'Duplicate this field (Ctrl+D)',\r\n\t className: 'jsoneditor-duplicate',\r\n\t click: function () {\r\n\t Node.onDuplicate(node);\r\n\t }\r\n\t });\r\n\r\n\t // create remove button\r\n\t items.push({\r\n\t text: 'Remove',\r\n\t title: 'Remove this field (Ctrl+Del)',\r\n\t className: 'jsoneditor-remove',\r\n\t click: function () {\r\n\t Node.onRemove(node);\r\n\t }\r\n\t });\r\n\t }\r\n\t }\r\n\r\n\t var menu = new ContextMenu(items, {close: onClose});\r\n\t menu.show(anchor, this.editor.content);\r\n\t};\r\n\r\n\t/**\r\n\t * get the type of a value\r\n\t * @param {*} value\r\n\t * @return {String} type Can be 'object', 'array', 'string', 'auto'\r\n\t * @private\r\n\t */\r\n\tNode.prototype._getType = function(value) {\r\n\t if (value instanceof Array) {\r\n\t return 'array';\r\n\t }\r\n\t if (value instanceof Object) {\r\n\t return 'object';\r\n\t }\r\n\t if (typeof(value) == 'string' && typeof(this._stringCast(value)) != 'string') {\r\n\t return 'string';\r\n\t }\r\n\r\n\t return 'auto';\r\n\t};\r\n\r\n\t/**\r\n\t * cast contents of a string to the correct type. This can be a string,\r\n\t * a number, a boolean, etc\r\n\t * @param {String} str\r\n\t * @return {*} castedStr\r\n\t * @private\r\n\t */\r\n\tNode.prototype._stringCast = function(str) {\r\n\t var lower = str.toLowerCase(),\r\n\t num = Number(str), // will nicely fail with '123ab'\r\n\t numFloat = parseFloat(str); // will nicely fail with ' '\r\n\r\n\t if (str == '') {\r\n\t return '';\r\n\t }\r\n\t else if (lower == 'null') {\r\n\t return null;\r\n\t }\r\n\t else if (lower == 'true') {\r\n\t return true;\r\n\t }\r\n\t else if (lower == 'false') {\r\n\t return false;\r\n\t }\r\n\t else if (!isNaN(num) && !isNaN(numFloat)) {\r\n\t return num;\r\n\t }\r\n\t else {\r\n\t return str;\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * escape a text, such that it can be displayed safely in an HTML element\r\n\t * @param {String} text\r\n\t * @return {String} escapedText\r\n\t * @private\r\n\t */\r\n\tNode.prototype._escapeHTML = function (text) {\r\n\t if (typeof text !== 'string') {\r\n\t return String(text);\r\n\t }\r\n\t else {\r\n\t var htmlEscaped = String(text)\r\n\t .replace(/&/g, '&') // must be replaced first!\r\n\t .replace(//g, '>')\r\n\t .replace(/ /g, '  ') // replace double space with an nbsp and space\r\n\t .replace(/^ /, ' ') // space at start\r\n\t .replace(/ $/, ' '); // space at end\r\n\r\n\t var json = JSON.stringify(htmlEscaped);\r\n\t var html = json.substring(1, json.length - 1);\r\n\t if (this.editor.options.escapeUnicode === true) {\r\n\t html = util.escapeUnicodeChars(html);\r\n\t }\r\n\t return html;\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * unescape a string.\r\n\t * @param {String} escapedText\r\n\t * @return {String} text\r\n\t * @private\r\n\t */\r\n\tNode.prototype._unescapeHTML = function (escapedText) {\r\n\t var json = '\"' + this._escapeJSON(escapedText) + '\"';\r\n\t var htmlEscaped = util.parse(json);\r\n\r\n\t return htmlEscaped\r\n\t .replace(/</g, '<')\r\n\t .replace(/>/g, '>')\r\n\t .replace(/ |\\u00A0/g, ' ')\r\n\t .replace(/&/g, '&'); // must be replaced last\r\n\t};\r\n\r\n\t/**\r\n\t * escape a text to make it a valid JSON string. The method will:\r\n\t * - replace unescaped double quotes with '\\\"'\r\n\t * - replace unescaped backslash with '\\\\'\r\n\t * - replace returns with '\\n'\r\n\t * @param {String} text\r\n\t * @return {String} escapedText\r\n\t * @private\r\n\t */\r\n\tNode.prototype._escapeJSON = function (text) {\r\n\t // TODO: replace with some smart regex (only when a new solution is faster!)\r\n\t var escaped = '';\r\n\t var i = 0;\r\n\t while (i < text.length) {\r\n\t var c = text.charAt(i);\r\n\t if (c == '\\n') {\r\n\t escaped += '\\\\n';\r\n\t }\r\n\t else if (c == '\\\\') {\r\n\t escaped += c;\r\n\t i++;\r\n\r\n\t c = text.charAt(i);\r\n\t if (c === '' || '\"\\\\/bfnrtu'.indexOf(c) == -1) {\r\n\t escaped += '\\\\'; // no valid escape character\r\n\t }\r\n\t escaped += c;\r\n\t }\r\n\t else if (c == '\"') {\r\n\t escaped += '\\\\\"';\r\n\t }\r\n\t else {\r\n\t escaped += c;\r\n\t }\r\n\t i++;\r\n\t }\r\n\r\n\t return escaped;\r\n\t};\r\n\r\n\t// TODO: find a nicer solution to resolve this circular dependency between Node and AppendNode\r\n\tvar AppendNode = appendNodeFactory(Node);\r\n\r\n\tmodule.exports = Node;\r\n\r\n\r\n/***/ },\r\n/* 59 */\r\n/***/ function(module, exports) {\r\n\r\n\t/*\r\n\t * Natural Sort algorithm for Javascript - Version 0.7 - Released under MIT license\r\n\t * Author: Jim Palmer (based on chunking idea from Dave Koelle)\r\n\t */\r\n\t/*jshint unused:false */\r\n\tmodule.exports = function naturalSort (a, b) {\r\n\t\t\"use strict\";\r\n\t\tvar re = /(^([+\\-]?(?:0|[1-9]\\d*)(?:\\.\\d*)?(?:[eE][+\\-]?\\d+)?)?$|^0x[0-9a-f]+$|\\d+)/gi,\r\n\t\t\tsre = /(^[ ]*|[ ]*$)/g,\r\n\t\t\tdre = /(^([\\w ]+,?[\\w ]+)?[\\w ]+,?[\\w ]+\\d+:\\d+(:\\d+)?[\\w ]?|^\\d{1,4}[\\/\\-]\\d{1,4}[\\/\\-]\\d{1,4}|^\\w+, \\w+ \\d+, \\d{4})/,\r\n\t\t\thre = /^0x[0-9a-f]+$/i,\r\n\t\t\tore = /^0/,\r\n\t\t\ti = function(s) { return naturalSort.insensitive && ('' + s).toLowerCase() || '' + s; },\r\n\t\t\t// convert all to strings strip whitespace\r\n\t\t\tx = i(a).replace(sre, '') || '',\r\n\t\t\ty = i(b).replace(sre, '') || '',\r\n\t\t\t// chunk/tokenize\r\n\t\t\txN = x.replace(re, '\\0$1\\0').replace(/\\0$/,'').replace(/^\\0/,'').split('\\0'),\r\n\t\t\tyN = y.replace(re, '\\0$1\\0').replace(/\\0$/,'').replace(/^\\0/,'').split('\\0'),\r\n\t\t\t// numeric, hex or date detection\r\n\t\t\txD = parseInt(x.match(hre), 16) || (xN.length !== 1 && x.match(dre) && Date.parse(x)),\r\n\t\t\tyD = parseInt(y.match(hre), 16) || xD && y.match(dre) && Date.parse(y) || null,\r\n\t\t\toFxNcL, oFyNcL;\r\n\t\t// first try and sort Hex codes or Dates\r\n\t\tif (yD) {\r\n\t\t\tif ( xD < yD ) { return -1; }\r\n\t\t\telse if ( xD > yD ) { return 1; }\r\n\t\t}\r\n\t\t// natural sorting through split numeric strings and default strings\r\n\t\tfor(var cLoc=0, numS=Math.max(xN.length, yN.length); cLoc < numS; cLoc++) {\r\n\t\t\t// find floats not starting with '0', string or 0 if not defined (Clint Priest)\r\n\t\t\toFxNcL = !(xN[cLoc] || '').match(ore) && parseFloat(xN[cLoc]) || xN[cLoc] || 0;\r\n\t\t\toFyNcL = !(yN[cLoc] || '').match(ore) && parseFloat(yN[cLoc]) || yN[cLoc] || 0;\r\n\t\t\t// handle numeric vs string comparison - number < string - (Kyle Adams)\r\n\t\t\tif (isNaN(oFxNcL) !== isNaN(oFyNcL)) { return (isNaN(oFxNcL)) ? 1 : -1; }\r\n\t\t\t// rely on string comparison if different types - i.e. '02' < 2 != '02' < '2'\r\n\t\t\telse if (typeof oFxNcL !== typeof oFyNcL) {\r\n\t\t\t\toFxNcL += '';\r\n\t\t\t\toFyNcL += '';\r\n\t\t\t}\r\n\t\t\tif (oFxNcL < oFyNcL) { return -1; }\r\n\t\t\tif (oFxNcL > oFyNcL) { return 1; }\r\n\t\t}\r\n\t\treturn 0;\r\n\t};\r\n\r\n\r\n/***/ },\r\n/* 60 */\r\n/***/ function(module, exports, __webpack_require__) {\r\n\r\n\t'use strict';\r\n\r\n\tvar util = __webpack_require__(54);\r\n\tvar ContextMenu = __webpack_require__(57);\r\n\r\n\t/**\r\n\t * A factory function to create an AppendNode, which depends on a Node\r\n\t * @param {Node} Node\r\n\t */\r\n\tfunction appendNodeFactory(Node) {\r\n\t /**\r\n\t * @constructor AppendNode\r\n\t * @extends Node\r\n\t * @param {TreeEditor} editor\r\n\t * Create a new AppendNode. This is a special node which is created at the\r\n\t * end of the list with childs for an object or array\r\n\t */\r\n\t function AppendNode (editor) {\r\n\t /** @type {TreeEditor} */\r\n\t this.editor = editor;\r\n\t this.dom = {};\r\n\t }\r\n\r\n\t AppendNode.prototype = new Node();\r\n\r\n\t /**\r\n\t * Return a table row with an append button.\r\n\t * @return {Element} dom TR element\r\n\t */\r\n\t AppendNode.prototype.getDom = function () {\r\n\t // TODO: implement a new solution for the append node\r\n\t var dom = this.dom;\r\n\r\n\t if (dom.tr) {\r\n\t return dom.tr;\r\n\t }\r\n\r\n\t this._updateEditability();\r\n\r\n\t // a row for the append button\r\n\t var trAppend = document.createElement('tr');\r\n\t trAppend.node = this;\r\n\t dom.tr = trAppend;\r\n\r\n\t // TODO: consistent naming\r\n\r\n\t if (this.editor.options.mode === 'tree') {\r\n\t // a cell for the dragarea column\r\n\t dom.tdDrag = document.createElement('td');\r\n\r\n\t // create context menu\r\n\t var tdMenu = document.createElement('td');\r\n\t dom.tdMenu = tdMenu;\r\n\t var menu = document.createElement('button');\r\n\t menu.type = 'button';\r\n\t menu.className = 'jsoneditor-contextmenu';\r\n\t menu.title = 'Click to open the actions menu (Ctrl+M)';\r\n\t dom.menu = menu;\r\n\t tdMenu.appendChild(dom.menu);\r\n\t }\r\n\r\n\t // a cell for the contents (showing text 'empty')\r\n\t var tdAppend = document.createElement('td');\r\n\t var domText = document.createElement('div');\r\n\t domText.innerHTML = '(empty)';\r\n\t domText.className = 'jsoneditor-readonly';\r\n\t tdAppend.appendChild(domText);\r\n\t dom.td = tdAppend;\r\n\t dom.text = domText;\r\n\r\n\t this.updateDom();\r\n\r\n\t return trAppend;\r\n\t };\r\n\r\n\t /**\r\n\t * Update the HTML dom of the Node\r\n\t */\r\n\t AppendNode.prototype.updateDom = function () {\r\n\t var dom = this.dom;\r\n\t var tdAppend = dom.td;\r\n\t if (tdAppend) {\r\n\t tdAppend.style.paddingLeft = (this.getLevel() * 24 + 26) + 'px';\r\n\t // TODO: not so nice hard coded offset\r\n\t }\r\n\r\n\t var domText = dom.text;\r\n\t if (domText) {\r\n\t domText.innerHTML = '(empty ' + this.parent.type + ')';\r\n\t }\r\n\r\n\t // attach or detach the contents of the append node:\r\n\t // hide when the parent has childs, show when the parent has no childs\r\n\t var trAppend = dom.tr;\r\n\t if (!this.isVisible()) {\r\n\t if (dom.tr.firstChild) {\r\n\t if (dom.tdDrag) {\r\n\t trAppend.removeChild(dom.tdDrag);\r\n\t }\r\n\t if (dom.tdMenu) {\r\n\t trAppend.removeChild(dom.tdMenu);\r\n\t }\r\n\t trAppend.removeChild(tdAppend);\r\n\t }\r\n\t }\r\n\t else {\r\n\t if (!dom.tr.firstChild) {\r\n\t if (dom.tdDrag) {\r\n\t trAppend.appendChild(dom.tdDrag);\r\n\t }\r\n\t if (dom.tdMenu) {\r\n\t trAppend.appendChild(dom.tdMenu);\r\n\t }\r\n\t trAppend.appendChild(tdAppend);\r\n\t }\r\n\t }\r\n\t };\r\n\r\n\t /**\r\n\t * Check whether the AppendNode is currently visible.\r\n\t * the AppendNode is visible when its parent has no childs (i.e. is empty).\r\n\t * @return {boolean} isVisible\r\n\t */\r\n\t AppendNode.prototype.isVisible = function () {\r\n\t return (this.parent.childs.length == 0);\r\n\t };\r\n\r\n\t /**\r\n\t * Show a contextmenu for this node\r\n\t * @param {HTMLElement} anchor The element to attach the menu to.\r\n\t * @param {function} [onClose] Callback method called when the context menu\r\n\t * is being closed.\r\n\t */\r\n\t AppendNode.prototype.showContextMenu = function (anchor, onClose) {\r\n\t var node = this;\r\n\t var titles = Node.TYPE_TITLES;\r\n\t var items = [\r\n\t // create append button\r\n\t {\r\n\t 'text': 'Append',\r\n\t 'title': 'Append a new field with type \\'auto\\' (Ctrl+Shift+Ins)',\r\n\t 'submenuTitle': 'Select the type of the field to be appended',\r\n\t 'className': 'jsoneditor-insert',\r\n\t 'click': function () {\r\n\t node._onAppend('', '', 'auto');\r\n\t },\r\n\t 'submenu': [\r\n\t {\r\n\t 'text': 'Auto',\r\n\t 'className': 'jsoneditor-type-auto',\r\n\t 'title': titles.auto,\r\n\t 'click': function () {\r\n\t node._onAppend('', '', 'auto');\r\n\t }\r\n\t },\r\n\t {\r\n\t 'text': 'Array',\r\n\t 'className': 'jsoneditor-type-array',\r\n\t 'title': titles.array,\r\n\t 'click': function () {\r\n\t node._onAppend('', []);\r\n\t }\r\n\t },\r\n\t {\r\n\t 'text': 'Object',\r\n\t 'className': 'jsoneditor-type-object',\r\n\t 'title': titles.object,\r\n\t 'click': function () {\r\n\t node._onAppend('', {});\r\n\t }\r\n\t },\r\n\t {\r\n\t 'text': 'String',\r\n\t 'className': 'jsoneditor-type-string',\r\n\t 'title': titles.string,\r\n\t 'click': function () {\r\n\t node._onAppend('', '', 'string');\r\n\t }\r\n\t }\r\n\t ]\r\n\t }\r\n\t ];\r\n\r\n\t var menu = new ContextMenu(items, {close: onClose});\r\n\t menu.show(anchor, this.editor.content);\r\n\t };\r\n\r\n\t /**\r\n\t * Handle an event. The event is catched centrally by the editor\r\n\t * @param {Event} event\r\n\t */\r\n\t AppendNode.prototype.onEvent = function (event) {\r\n\t var type = event.type;\r\n\t var target = event.target || event.srcElement;\r\n\t var dom = this.dom;\r\n\r\n\t // highlight the append nodes parent\r\n\t var menu = dom.menu;\r\n\t if (target == menu) {\r\n\t if (type == 'mouseover') {\r\n\t this.editor.highlighter.highlight(this.parent);\r\n\t }\r\n\t else if (type == 'mouseout') {\r\n\t this.editor.highlighter.unhighlight();\r\n\t }\r\n\t }\r\n\r\n\t // context menu events\r\n\t if (type == 'click' && target == dom.menu) {\r\n\t var highlighter = this.editor.highlighter;\r\n\t highlighter.highlight(this.parent);\r\n\t highlighter.lock();\r\n\t util.addClassName(dom.menu, 'jsoneditor-selected');\r\n\t this.showContextMenu(dom.menu, function () {\r\n\t util.removeClassName(dom.menu, 'jsoneditor-selected');\r\n\t highlighter.unlock();\r\n\t highlighter.unhighlight();\r\n\t });\r\n\t }\r\n\r\n\t if (type == 'keydown') {\r\n\t this.onKeyDown(event);\r\n\t }\r\n\t };\r\n\r\n\t return AppendNode;\r\n\t}\r\n\r\n\tmodule.exports = appendNodeFactory;\r\n\r\n\r\n/***/ },\r\n/* 61 */\r\n/***/ function(module, exports, __webpack_require__) {\r\n\r\n\t'use strict';\r\n\r\n\tvar ContextMenu = __webpack_require__(57);\r\n\r\n\t/**\r\n\t * Create a select box to be used in the editor menu's, which allows to switch mode\r\n\t * @param {HTMLElement} container\r\n\t * @param {String[]} modes Available modes: 'code', 'form', 'text', 'tree', 'view'\r\n\t * @param {String} current Available modes: 'code', 'form', 'text', 'tree', 'view'\r\n\t * @param {function(mode: string)} onSwitch Callback invoked on switch\r\n\t * @constructor\r\n\t */\r\n\tfunction ModeSwitcher(container, modes, current, onSwitch) {\r\n\t // available modes\r\n\t var availableModes = {\r\n\t code: {\r\n\t 'text': 'Code',\r\n\t 'title': 'Switch to code highlighter',\r\n\t 'click': function () {\r\n\t onSwitch('code')\r\n\t }\r\n\t },\r\n\t form: {\r\n\t 'text': 'Form',\r\n\t 'title': 'Switch to form editor',\r\n\t 'click': function () {\r\n\t onSwitch('form');\r\n\t }\r\n\t },\r\n\t text: {\r\n\t 'text': 'Text',\r\n\t 'title': 'Switch to plain text editor',\r\n\t 'click': function () {\r\n\t onSwitch('text');\r\n\t }\r\n\t },\r\n\t tree: {\r\n\t 'text': 'Tree',\r\n\t 'title': 'Switch to tree editor',\r\n\t 'click': function () {\r\n\t onSwitch('tree');\r\n\t }\r\n\t },\r\n\t view: {\r\n\t 'text': 'View',\r\n\t 'title': 'Switch to tree view',\r\n\t 'click': function () {\r\n\t onSwitch('view');\r\n\t }\r\n\t }\r\n\t };\r\n\r\n\t // list the selected modes\r\n\t var items = [];\r\n\t for (var i = 0; i < modes.length; i++) {\r\n\t var mode = modes[i];\r\n\t var item = availableModes[mode];\r\n\t if (!item) {\r\n\t throw new Error('Unknown mode \"' + mode + '\"');\r\n\t }\r\n\r\n\t item.className = 'jsoneditor-type-modes' + ((current == mode) ? ' jsoneditor-selected' : '');\r\n\t items.push(item);\r\n\t }\r\n\r\n\t // retrieve the title of current mode\r\n\t var currentMode = availableModes[current];\r\n\t if (!currentMode) {\r\n\t throw new Error('Unknown mode \"' + current + '\"');\r\n\t }\r\n\t var currentTitle = currentMode.text;\r\n\r\n\t // create the html element\r\n\t var box = document.createElement('button');\r\n\t box.type = 'button';\r\n\t box.className = 'jsoneditor-modes jsoneditor-separator';\r\n\t box.innerHTML = currentTitle + ' ▾';\r\n\t box.title = 'Switch editor mode';\r\n\t box.onclick = function () {\r\n\t var menu = new ContextMenu(items);\r\n\t menu.show(box);\r\n\t };\r\n\r\n\t var frame = document.createElement('div');\r\n\t frame.className = 'jsoneditor-modes';\r\n\t frame.style.position = 'relative';\r\n\t frame.appendChild(box);\r\n\r\n\t container.appendChild(frame);\r\n\r\n\t this.dom = {\r\n\t container: container,\r\n\t box: box,\r\n\t frame: frame\r\n\t };\r\n\t}\r\n\r\n\t/**\r\n\t * Set focus to switcher\r\n\t */\r\n\tModeSwitcher.prototype.focus = function () {\r\n\t this.dom.box.focus();\r\n\t};\r\n\r\n\t/**\r\n\t * Destroy the ModeSwitcher, remove from DOM\r\n\t */\r\n\tModeSwitcher.prototype.destroy = function () {\r\n\t if (this.dom && this.dom.frame && this.dom.frame.parentNode) {\r\n\t this.dom.frame.parentNode.removeChild(this.dom.frame);\r\n\t }\r\n\t this.dom = null;\r\n\t};\r\n\r\n\tmodule.exports = ModeSwitcher;\r\n\r\n\r\n/***/ },\r\n/* 62 */\r\n/***/ function(module, exports, __webpack_require__) {\r\n\r\n\t'use strict';\r\n\r\n\tvar ace;\r\n\ttry {\r\n\t ace = __webpack_require__(63);\r\n\t}\r\n\tcatch (err) {\r\n\t // failed to load ace, no problem, we will fall back to plain text\r\n\t}\r\n\r\n\tvar ModeSwitcher = __webpack_require__(61);\r\n\tvar util = __webpack_require__(54);\r\n\r\n\t// create a mixin with the functions for text mode\r\n\tvar textmode = {};\r\n\r\n\tvar MAX_ERRORS = 3; // maximum number of displayed errors at the bottom\r\n\r\n\tvar DEFAULT_THEME = 'ace/theme/jsoneditor';\r\n\r\n\t/**\r\n\t * Create a text editor\r\n\t * @param {Element} container\r\n\t * @param {Object} [options] Object with options. available options:\r\n\t * {String} mode Available values:\r\n\t * \"text\" (default)\r\n\t * or \"code\".\r\n\t * {Number} indentation Number of indentation\r\n\t * spaces. 2 by default.\r\n\t * {function} onChange Callback method\r\n\t * triggered on change\r\n\t * {function} onModeChange Callback method\r\n\t * triggered after setMode\r\n\t * {Object} ace A custom instance of\r\n\t * Ace editor.\r\n\t * {boolean} escapeUnicode If true, unicode\r\n\t * characters are escaped.\r\n\t * false by default.\r\n\t * @private\r\n\t */\r\n\ttextmode.create = function (container, options) {\r\n\t // read options\r\n\t options = options || {};\r\n\t this.options = options;\r\n\r\n\t // indentation\r\n\t if (options.indentation) {\r\n\t this.indentation = Number(options.indentation);\r\n\t }\r\n\t else {\r\n\t this.indentation = 2; // number of spaces\r\n\t }\r\n\r\n\t // grab ace from options if provided\r\n\t var _ace = options.ace ? options.ace : ace;\r\n\r\n\t // determine mode\r\n\t this.mode = (options.mode == 'code') ? 'code' : 'text';\r\n\t if (this.mode == 'code') {\r\n\t // verify whether Ace editor is available and supported\r\n\t if (typeof _ace === 'undefined') {\r\n\t this.mode = 'text';\r\n\t console.warn('Failed to load Ace editor, falling back to plain text mode. Please use a JSONEditor bundle including Ace, or pass Ace as via the configuration option `ace`.');\r\n\t }\r\n\t }\r\n\r\n\t // determine theme\r\n\t this.theme = options.theme || DEFAULT_THEME;\r\n\t if (this.theme === DEFAULT_THEME && window.ace) {\r\n\t __webpack_require__(70);\r\n\t }\r\n\r\n\t var me = this;\r\n\t this.container = container;\r\n\t this.dom = {};\r\n\t this.aceEditor = undefined; // ace code editor\r\n\t this.textarea = undefined; // plain text editor (fallback when Ace is not available)\r\n\t this.validateSchema = null;\r\n\r\n\t // create a debounced validate function\r\n\t this._debouncedValidate = util.debounce(this.validate.bind(this), this.DEBOUNCE_INTERVAL);\r\n\r\n\t this.width = container.clientWidth;\r\n\t this.height = container.clientHeight;\r\n\r\n\t this.frame = document.createElement('div');\r\n\t this.frame.className = 'jsoneditor jsoneditor-mode-' + this.options.mode;\r\n\t this.frame.onclick = function (event) {\r\n\t // prevent default submit action when the editor is located inside a form\r\n\t event.preventDefault();\r\n\t };\r\n\t this.frame.onkeydown = function (event) {\r\n\t me._onKeyDown(event);\r\n\t };\r\n\r\n\t // create menu\r\n\t this.menu = document.createElement('div');\r\n\t this.menu.className = 'jsoneditor-menu';\r\n\t this.frame.appendChild(this.menu);\r\n\r\n\t // create format button\r\n\t var buttonFormat = document.createElement('button');\r\n\t buttonFormat.type = 'button';\r\n\t buttonFormat.className = 'jsoneditor-format';\r\n\t buttonFormat.title = 'Format JSON data, with proper indentation and line feeds (Ctrl+\\\\)';\r\n\t this.menu.appendChild(buttonFormat);\r\n\t buttonFormat.onclick = function () {\r\n\t try {\r\n\t me.format();\r\n\t me._onChange();\r\n\t }\r\n\t catch (err) {\r\n\t me._onError(err);\r\n\t }\r\n\t };\r\n\r\n\t // create compact button\r\n\t var buttonCompact = document.createElement('button');\r\n\t buttonCompact.type = 'button';\r\n\t buttonCompact.className = 'jsoneditor-compact';\r\n\t buttonCompact.title = 'Compact JSON data, remove all whitespaces (Ctrl+Shift+\\\\)';\r\n\t this.menu.appendChild(buttonCompact);\r\n\t buttonCompact.onclick = function () {\r\n\t try {\r\n\t me.compact();\r\n\t me._onChange();\r\n\t }\r\n\t catch (err) {\r\n\t me._onError(err);\r\n\t }\r\n\t };\r\n\r\n\t // create mode box\r\n\t if (this.options && this.options.modes && this.options.modes.length) {\r\n\t this.modeSwitcher = new ModeSwitcher(this.menu, this.options.modes, this.options.mode, function onSwitch(mode) {\r\n\t // switch mode and restore focus\r\n\t me.setMode(mode);\r\n\t me.modeSwitcher.focus();\r\n\t });\r\n\t }\r\n\r\n\t this.content = document.createElement('div');\r\n\t this.content.className = 'jsoneditor-outer';\r\n\t this.frame.appendChild(this.content);\r\n\r\n\t this.container.appendChild(this.frame);\r\n\r\n\t if (this.mode == 'code') {\r\n\t this.editorDom = document.createElement('div');\r\n\t this.editorDom.style.height = '100%'; // TODO: move to css\r\n\t this.editorDom.style.width = '100%'; // TODO: move to css\r\n\t this.content.appendChild(this.editorDom);\r\n\r\n\t var aceEditor = _ace.edit(this.editorDom);\r\n\t aceEditor.$blockScrolling = Infinity;\r\n\t aceEditor.setTheme(this.theme);\r\n\t aceEditor.setShowPrintMargin(false);\r\n\t aceEditor.setFontSize(13);\r\n\t aceEditor.getSession().setMode('ace/mode/json');\r\n\t aceEditor.getSession().setTabSize(this.indentation);\r\n\t aceEditor.getSession().setUseSoftTabs(true);\r\n\t aceEditor.getSession().setUseWrapMode(true);\r\n\t aceEditor.commands.bindKey('Ctrl-L', null); // disable Ctrl+L (is used by the browser to select the address bar)\r\n\t aceEditor.commands.bindKey('Command-L', null); // disable Ctrl+L (is used by the browser to select the address bar)\r\n\t this.aceEditor = aceEditor;\r\n\r\n\t // TODO: deprecated since v5.0.0. Cleanup backward compatibility some day\r\n\t if (!this.hasOwnProperty('editor')) {\r\n\t Object.defineProperty(this, 'editor', {\r\n\t get: function () {\r\n\t console.warn('Property \"editor\" has been renamed to \"aceEditor\".');\r\n\t return me.aceEditor;\r\n\t },\r\n\t set: function (aceEditor) {\r\n\t console.warn('Property \"editor\" has been renamed to \"aceEditor\".');\r\n\t me.aceEditor = aceEditor;\r\n\t }\r\n\t });\r\n\t }\r\n\r\n\t var poweredBy = document.createElement('a');\r\n\t poweredBy.appendChild(document.createTextNode('powered by ace'));\r\n\t poweredBy.href = 'http://ace.ajax.org';\r\n\t poweredBy.target = '_blank';\r\n\t poweredBy.className = 'jsoneditor-poweredBy';\r\n\t poweredBy.onclick = function () {\r\n\t // TODO: this anchor falls below the margin of the content,\r\n\t // therefore the normal a.href does not work. We use a click event\r\n\t // for now, but this should be fixed.\r\n\t window.open(poweredBy.href, poweredBy.target);\r\n\t };\r\n\t this.menu.appendChild(poweredBy);\r\n\r\n\t // register onchange event\r\n\t aceEditor.on('change', this._onChange.bind(this));\r\n\t }\r\n\t else {\r\n\t // load a plain text textarea\r\n\t var textarea = document.createElement('textarea');\r\n\t textarea.className = 'jsoneditor-text';\r\n\t textarea.spellcheck = false;\r\n\t this.content.appendChild(textarea);\r\n\t this.textarea = textarea;\r\n\r\n\t // register onchange event\r\n\t if (this.textarea.oninput === null) {\r\n\t this.textarea.oninput = this._onChange.bind(this);\r\n\t }\r\n\t else {\r\n\t // oninput is undefined. For IE8-\r\n\t this.textarea.onchange = this._onChange.bind(this);\r\n\t }\r\n\t }\r\n\r\n\t this.setSchema(this.options.schema);\r\n\t};\r\n\r\n\t/**\r\n\t * Handle a change:\r\n\t * - Validate JSON schema\r\n\t * - Send a callback to the onChange listener if provided\r\n\t * @private\r\n\t */\r\n\ttextmode._onChange = function () {\r\n\t // validate JSON schema (if configured)\r\n\t this._debouncedValidate();\r\n\r\n\t // trigger the onChange callback\r\n\t if (this.options.onChange) {\r\n\t try {\r\n\t this.options.onChange();\r\n\t }\r\n\t catch (err) {\r\n\t console.error('Error in onChange callback: ', err);\r\n\t }\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Event handler for keydown. Handles shortcut keys\r\n\t * @param {Event} event\r\n\t * @private\r\n\t */\r\n\ttextmode._onKeyDown = function (event) {\r\n\t var keynum = event.which || event.keyCode;\r\n\t var handled = false;\r\n\r\n\t if (keynum == 220 && event.ctrlKey) {\r\n\t if (event.shiftKey) { // Ctrl+Shift+\\\r\n\t this.compact();\r\n\t this._onChange();\r\n\t }\r\n\t else { // Ctrl+\\\r\n\t this.format();\r\n\t this._onChange();\r\n\t }\r\n\t handled = true;\r\n\t }\r\n\r\n\t if (handled) {\r\n\t event.preventDefault();\r\n\t event.stopPropagation();\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Destroy the editor. Clean up DOM, event listeners, and web workers.\r\n\t */\r\n\ttextmode.destroy = function () {\r\n\t // remove old ace editor\r\n\t if (this.aceEditor) {\r\n\t this.aceEditor.destroy();\r\n\t this.aceEditor = null;\r\n\t }\r\n\r\n\t if (this.frame && this.container && this.frame.parentNode == this.container) {\r\n\t this.container.removeChild(this.frame);\r\n\t }\r\n\r\n\t if (this.modeSwitcher) {\r\n\t this.modeSwitcher.destroy();\r\n\t this.modeSwitcher = null;\r\n\t }\r\n\r\n\t this.textarea = null;\r\n\t \r\n\t this._debouncedValidate = null;\r\n\t};\r\n\r\n\t/**\r\n\t * Compact the code in the formatter\r\n\t */\r\n\ttextmode.compact = function () {\r\n\t var json = this.get();\r\n\t var text = JSON.stringify(json);\r\n\t this.setText(text);\r\n\t};\r\n\r\n\t/**\r\n\t * Format the code in the formatter\r\n\t */\r\n\ttextmode.format = function () {\r\n\t var json = this.get();\r\n\t var text = JSON.stringify(json, null, this.indentation);\r\n\t this.setText(text);\r\n\t};\r\n\r\n\t/**\r\n\t * Set focus to the formatter\r\n\t */\r\n\ttextmode.focus = function () {\r\n\t if (this.textarea) {\r\n\t this.textarea.focus();\r\n\t }\r\n\t if (this.aceEditor) {\r\n\t this.aceEditor.focus();\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Resize the formatter\r\n\t */\r\n\ttextmode.resize = function () {\r\n\t if (this.aceEditor) {\r\n\t var force = false;\r\n\t this.aceEditor.resize(force);\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Set json data in the formatter\r\n\t * @param {Object} json\r\n\t */\r\n\ttextmode.set = function(json) {\r\n\t this.setText(JSON.stringify(json, null, this.indentation));\r\n\t};\r\n\r\n\t/**\r\n\t * Get json data from the formatter\r\n\t * @return {Object} json\r\n\t */\r\n\ttextmode.get = function() {\r\n\t var text = this.getText();\r\n\t var json;\r\n\r\n\t try {\r\n\t json = util.parse(text); // this can throw an error\r\n\t }\r\n\t catch (err) {\r\n\t // try to sanitize json, replace JavaScript notation with JSON notation\r\n\t text = util.sanitize(text);\r\n\r\n\t // try to parse again\r\n\t json = util.parse(text); // this can throw an error\r\n\t }\r\n\r\n\t return json;\r\n\t};\r\n\r\n\t/**\r\n\t * Get the text contents of the editor\r\n\t * @return {String} jsonText\r\n\t */\r\n\ttextmode.getText = function() {\r\n\t if (this.textarea) {\r\n\t return this.textarea.value;\r\n\t }\r\n\t if (this.aceEditor) {\r\n\t return this.aceEditor.getValue();\r\n\t }\r\n\t return '';\r\n\t};\r\n\r\n\t/**\r\n\t * Set the text contents of the editor\r\n\t * @param {String} jsonText\r\n\t */\r\n\ttextmode.setText = function(jsonText) {\r\n\t var text;\r\n\r\n\t if (this.options.escapeUnicode === true) {\r\n\t text = util.escapeUnicodeChars(jsonText);\r\n\t }\r\n\t else {\r\n\t text = jsonText;\r\n\t }\r\n\r\n\t if (this.textarea) {\r\n\t this.textarea.value = text;\r\n\t }\r\n\t if (this.aceEditor) {\r\n\t // prevent emitting onChange events while setting new text\r\n\t var originalOnChange = this.options.onChange;\r\n\t this.options.onChange = null;\r\n\r\n\t this.aceEditor.setValue(text, -1);\r\n\r\n\t this.options.onChange = originalOnChange;\r\n\t }\r\n\r\n\t // validate JSON schema\r\n\t this.validate();\r\n\t};\r\n\r\n\t/**\r\n\t * Validate current JSON object against the configured JSON schema\r\n\t * Throws an exception when no JSON schema is configured\r\n\t */\r\n\ttextmode.validate = function () {\r\n\t // clear all current errors\r\n\t if (this.dom.validationErrors) {\r\n\t this.dom.validationErrors.parentNode.removeChild(this.dom.validationErrors);\r\n\t this.dom.validationErrors = null;\r\n\r\n\t this.content.style.marginBottom = '';\r\n\t this.content.style.paddingBottom = '';\r\n\t }\r\n\r\n\t var doValidate = false;\r\n\t var errors = [];\r\n\t var json;\r\n\t try {\r\n\t json = this.get(); // this can fail when there is no valid json\r\n\t doValidate = true;\r\n\t }\r\n\t catch (err) {\r\n\t // no valid JSON, don't validate\r\n\t }\r\n\r\n\t // only validate the JSON when parsing the JSON succeeded\r\n\t if (doValidate && this.validateSchema) {\r\n\t var valid = this.validateSchema(json);\r\n\t if (!valid) {\r\n\t errors = this.validateSchema.errors.map(function (error) {\r\n\t return util.improveSchemaError(error);\r\n\t });\r\n\t }\r\n\t }\r\n\r\n\t if (errors.length > 0) {\r\n\t // limit the number of displayed errors\r\n\t var limit = errors.length > MAX_ERRORS;\r\n\t if (limit) {\r\n\t errors = errors.slice(0, MAX_ERRORS);\r\n\t var hidden = this.validateSchema.errors.length - MAX_ERRORS;\r\n\t errors.push('(' + hidden + ' more errors...)')\r\n\t }\r\n\r\n\t var validationErrors = document.createElement('div');\r\n\t validationErrors.innerHTML = '' +\r\n\t '' +\r\n\t errors.map(function (error) {\r\n\t var message;\r\n\t if (typeof error === 'string') {\r\n\t message = '';\r\n\t }\r\n\t else {\r\n\t message = '' +\r\n\t '';\r\n\t }\r\n\r\n\t return '' + message + ''\r\n\t }).join('') +\r\n\t '' +\r\n\t '
' + error + '
' + error.dataPath + '' + error.message + '
';\r\n\r\n\t this.dom.validationErrors = validationErrors;\r\n\t this.frame.appendChild(validationErrors);\r\n\r\n\t var height = validationErrors.clientHeight;\r\n\t this.content.style.marginBottom = (-height) + 'px';\r\n\t this.content.style.paddingBottom = height + 'px';\r\n\t }\r\n\r\n\t // update the height of the ace editor\r\n\t if (this.aceEditor) {\r\n\t var force = false;\r\n\t this.aceEditor.resize(force);\r\n\t }\r\n\t};\r\n\r\n\t// define modes\r\n\tmodule.exports = [\r\n\t {\r\n\t mode: 'text',\r\n\t mixin: textmode,\r\n\t data: 'text',\r\n\t load: textmode.format\r\n\t },\r\n\t {\r\n\t mode: 'code',\r\n\t mixin: textmode,\r\n\t data: 'text',\r\n\t load: textmode.format\r\n\t }\r\n\t];\r\n\r\n\r\n/***/ },\r\n/* 63 */\r\n/***/ function(module, exports, __webpack_require__) {\r\n\r\n\t// load brace\r\n\tvar ace = __webpack_require__(64);\r\n\r\n\t// load required ace modules\r\n\t__webpack_require__(67);\r\n\t__webpack_require__(69);\r\n\r\n\tmodule.exports = ace;\r\n\r\n\r\n/***/ },\r\n/* 64 */\r\n/***/ function(module, exports, __webpack_require__) {\r\n\r\n\t/* ***** BEGIN LICENSE BLOCK *****\r\n\t * Distributed under the BSD license:\r\n\t *\r\n\t * Copyright (c) 2010, Ajax.org B.V.\r\n\t * All rights reserved.\r\n\t *\r\n\t * Redistribution and use in source and binary forms, with or without\r\n\t * modification, are permitted provided that the following conditions are met:\r\n\t * * Redistributions of source code must retain the above copyright\r\n\t * notice, this list of conditions and the following disclaimer.\r\n\t * * Redistributions in binary form must reproduce the above copyright\r\n\t * notice, this list of conditions and the following disclaimer in the\r\n\t * documentation and/or other materials provided with the distribution.\r\n\t * * Neither the name of Ajax.org B.V. nor the\r\n\t * names of its contributors may be used to endorse or promote products\r\n\t * derived from this software without specific prior written permission.\r\n\t *\r\n\t * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\r\n\t * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\r\n\t * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r\n\t * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\r\n\t * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\r\n\t * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\r\n\t * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\r\n\t * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\r\n\t * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\r\n\t * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n\t *\r\n\t * ***** END LICENSE BLOCK ***** */\r\n\r\n\t/**\r\n\t * Define a module along with a payload\r\n\t * @param module a name for the payload\r\n\t * @param payload a function to call with (acequire, exports, module) params\r\n\t */\r\n\r\n\t(function() {\r\n\r\n\tvar ACE_NAMESPACE = \"ace\";\r\n\r\n\tvar global = (function() { return this; })();\r\n\tif (!global && typeof window != \"undefined\") global = window; // strict mode\r\n\r\n\r\n\tif (!ACE_NAMESPACE && typeof acequirejs !== \"undefined\")\r\n\t return;\r\n\r\n\r\n\tvar define = function(module, deps, payload) {\r\n\t if (typeof module !== \"string\") {\r\n\t if (define.original)\r\n\t define.original.apply(this, arguments);\r\n\t else {\r\n\t console.error(\"dropping module because define wasn\\'t a string.\");\r\n\t console.trace();\r\n\t }\r\n\t return;\r\n\t }\r\n\t if (arguments.length == 2)\r\n\t payload = deps;\r\n\t if (!define.modules[module]) {\r\n\t define.payloads[module] = payload;\r\n\t define.modules[module] = null;\r\n\t }\r\n\t};\r\n\r\n\tdefine.modules = {};\r\n\tdefine.payloads = {};\r\n\r\n\t/**\r\n\t * Get at functionality define()ed using the function above\r\n\t */\r\n\tvar _acequire = function(parentId, module, callback) {\r\n\t if (typeof module === \"string\") {\r\n\t var payload = lookup(parentId, module);\r\n\t if (payload != undefined) {\r\n\t callback && callback();\r\n\t return payload;\r\n\t }\r\n\t } else if (Object.prototype.toString.call(module) === \"[object Array]\") {\r\n\t var params = [];\r\n\t for (var i = 0, l = module.length; i < l; ++i) {\r\n\t var dep = lookup(parentId, module[i]);\r\n\t if (dep == undefined && acequire.original)\r\n\t return;\r\n\t params.push(dep);\r\n\t }\r\n\t return callback && callback.apply(null, params) || true;\r\n\t }\r\n\t};\r\n\r\n\tvar acequire = function(module, callback) {\r\n\t var packagedModule = _acequire(\"\", module, callback);\r\n\t if (packagedModule == undefined && acequire.original)\r\n\t return acequire.original.apply(this, arguments);\r\n\t return packagedModule;\r\n\t};\r\n\r\n\tvar normalizeModule = function(parentId, moduleName) {\r\n\t // normalize plugin acequires\r\n\t if (moduleName.indexOf(\"!\") !== -1) {\r\n\t var chunks = moduleName.split(\"!\");\r\n\t return normalizeModule(parentId, chunks[0]) + \"!\" + normalizeModule(parentId, chunks[1]);\r\n\t }\r\n\t // normalize relative acequires\r\n\t if (moduleName.charAt(0) == \".\") {\r\n\t var base = parentId.split(\"/\").slice(0, -1).join(\"/\");\r\n\t moduleName = base + \"/\" + moduleName;\r\n\r\n\t while(moduleName.indexOf(\".\") !== -1 && previous != moduleName) {\r\n\t var previous = moduleName;\r\n\t moduleName = moduleName.replace(/\\/\\.\\//, \"/\").replace(/[^\\/]+\\/\\.\\.\\//, \"\");\r\n\t }\r\n\t }\r\n\t return moduleName;\r\n\t};\r\n\r\n\t/**\r\n\t * Internal function to lookup moduleNames and resolve them by calling the\r\n\t * definition function if needed.\r\n\t */\r\n\tvar lookup = function(parentId, moduleName) {\r\n\t moduleName = normalizeModule(parentId, moduleName);\r\n\r\n\t var module = define.modules[moduleName];\r\n\t if (!module) {\r\n\t module = define.payloads[moduleName];\r\n\t if (typeof module === 'function') {\r\n\t var exports = {};\r\n\t var mod = {\r\n\t id: moduleName,\r\n\t uri: '',\r\n\t exports: exports,\r\n\t packaged: true\r\n\t };\r\n\r\n\t var req = function(module, callback) {\r\n\t return _acequire(moduleName, module, callback);\r\n\t };\r\n\r\n\t var returnValue = module(req, exports, mod);\r\n\t exports = returnValue || mod.exports;\r\n\t define.modules[moduleName] = exports;\r\n\t delete define.payloads[moduleName];\r\n\t }\r\n\t module = define.modules[moduleName] = exports || module;\r\n\t }\r\n\t return module;\r\n\t};\r\n\r\n\tfunction exportAce(ns) {\r\n\t var root = global;\r\n\t if (ns) {\r\n\t if (!global[ns])\r\n\t global[ns] = {};\r\n\t root = global[ns];\r\n\t }\r\n\r\n\t if (!root.define || !root.define.packaged) {\r\n\t define.original = root.define;\r\n\t root.define = define;\r\n\t root.define.packaged = true;\r\n\t }\r\n\r\n\t if (!root.acequire || !root.acequire.packaged) {\r\n\t acequire.original = root.acequire;\r\n\t root.acequire = acequire;\r\n\t root.acequire.packaged = true;\r\n\t }\r\n\t}\r\n\r\n\texportAce(ACE_NAMESPACE);\r\n\r\n\t})();\r\n\r\n\tace.define(\"ace/lib/regexp\",[\"require\",\"exports\",\"module\"], function(acequire, exports, module) {\r\n\t\"use strict\";\r\n\r\n\t var real = {\r\n\t exec: RegExp.prototype.exec,\r\n\t test: RegExp.prototype.test,\r\n\t match: String.prototype.match,\r\n\t replace: String.prototype.replace,\r\n\t split: String.prototype.split\r\n\t },\r\n\t compliantExecNpcg = real.exec.call(/()??/, \"\")[1] === undefined, // check `exec` handling of nonparticipating capturing groups\r\n\t compliantLastIndexIncrement = function () {\r\n\t var x = /^/g;\r\n\t real.test.call(x, \"\");\r\n\t return !x.lastIndex;\r\n\t }();\r\n\r\n\t if (compliantLastIndexIncrement && compliantExecNpcg)\r\n\t return;\r\n\t RegExp.prototype.exec = function (str) {\r\n\t var match = real.exec.apply(this, arguments),\r\n\t name, r2;\r\n\t if ( typeof(str) == 'string' && match) {\r\n\t if (!compliantExecNpcg && match.length > 1 && indexOf(match, \"\") > -1) {\r\n\t r2 = RegExp(this.source, real.replace.call(getNativeFlags(this), \"g\", \"\"));\r\n\t real.replace.call(str.slice(match.index), r2, function () {\r\n\t for (var i = 1; i < arguments.length - 2; i++) {\r\n\t if (arguments[i] === undefined)\r\n\t match[i] = undefined;\r\n\t }\r\n\t });\r\n\t }\r\n\t if (this._xregexp && this._xregexp.captureNames) {\r\n\t for (var i = 1; i < match.length; i++) {\r\n\t name = this._xregexp.captureNames[i - 1];\r\n\t if (name)\r\n\t match[name] = match[i];\r\n\t }\r\n\t }\r\n\t if (!compliantLastIndexIncrement && this.global && !match[0].length && (this.lastIndex > match.index))\r\n\t this.lastIndex--;\r\n\t }\r\n\t return match;\r\n\t };\r\n\t if (!compliantLastIndexIncrement) {\r\n\t RegExp.prototype.test = function (str) {\r\n\t var match = real.exec.call(this, str);\r\n\t if (match && this.global && !match[0].length && (this.lastIndex > match.index))\r\n\t this.lastIndex--;\r\n\t return !!match;\r\n\t };\r\n\t }\r\n\r\n\t function getNativeFlags (regex) {\r\n\t return (regex.global ? \"g\" : \"\") +\r\n\t (regex.ignoreCase ? \"i\" : \"\") +\r\n\t (regex.multiline ? \"m\" : \"\") +\r\n\t (regex.extended ? \"x\" : \"\") + // Proposed for ES4; included in AS3\r\n\t (regex.sticky ? \"y\" : \"\");\r\n\t }\r\n\r\n\t function indexOf (array, item, from) {\r\n\t if (Array.prototype.indexOf) // Use the native array method if available\r\n\t return array.indexOf(item, from);\r\n\t for (var i = from || 0; i < array.length; i++) {\r\n\t if (array[i] === item)\r\n\t return i;\r\n\t }\r\n\t return -1;\r\n\t }\r\n\r\n\t});\r\n\r\n\tace.define(\"ace/lib/es5-shim\",[\"require\",\"exports\",\"module\"], function(acequire, exports, module) {\r\n\r\n\tfunction Empty() {}\r\n\r\n\tif (!Function.prototype.bind) {\r\n\t Function.prototype.bind = function bind(that) { // .length is 1\r\n\t var target = this;\r\n\t if (typeof target != \"function\") {\r\n\t throw new TypeError(\"Function.prototype.bind called on incompatible \" + target);\r\n\t }\r\n\t var args = slice.call(arguments, 1); // for normal call\r\n\t var bound = function () {\r\n\r\n\t if (this instanceof bound) {\r\n\r\n\t var result = target.apply(\r\n\t this,\r\n\t args.concat(slice.call(arguments))\r\n\t );\r\n\t if (Object(result) === result) {\r\n\t return result;\r\n\t }\r\n\t return this;\r\n\r\n\t } else {\r\n\t return target.apply(\r\n\t that,\r\n\t args.concat(slice.call(arguments))\r\n\t );\r\n\r\n\t }\r\n\r\n\t };\r\n\t if(target.prototype) {\r\n\t Empty.prototype = target.prototype;\r\n\t bound.prototype = new Empty();\r\n\t Empty.prototype = null;\r\n\t }\r\n\t return bound;\r\n\t };\r\n\t}\r\n\tvar call = Function.prototype.call;\r\n\tvar prototypeOfArray = Array.prototype;\r\n\tvar prototypeOfObject = Object.prototype;\r\n\tvar slice = prototypeOfArray.slice;\r\n\tvar _toString = call.bind(prototypeOfObject.toString);\r\n\tvar owns = call.bind(prototypeOfObject.hasOwnProperty);\r\n\tvar defineGetter;\r\n\tvar defineSetter;\r\n\tvar lookupGetter;\r\n\tvar lookupSetter;\r\n\tvar supportsAccessors;\r\n\tif ((supportsAccessors = owns(prototypeOfObject, \"__defineGetter__\"))) {\r\n\t defineGetter = call.bind(prototypeOfObject.__defineGetter__);\r\n\t defineSetter = call.bind(prototypeOfObject.__defineSetter__);\r\n\t lookupGetter = call.bind(prototypeOfObject.__lookupGetter__);\r\n\t lookupSetter = call.bind(prototypeOfObject.__lookupSetter__);\r\n\t}\r\n\tif ([1,2].splice(0).length != 2) {\r\n\t if(function() { // test IE < 9 to splice bug - see issue #138\r\n\t function makeArray(l) {\r\n\t var a = new Array(l+2);\r\n\t a[0] = a[1] = 0;\r\n\t return a;\r\n\t }\r\n\t var array = [], lengthBefore;\r\n\t \r\n\t array.splice.apply(array, makeArray(20));\r\n\t array.splice.apply(array, makeArray(26));\r\n\r\n\t lengthBefore = array.length; //46\r\n\t array.splice(5, 0, \"XXX\"); // add one element\r\n\r\n\t lengthBefore + 1 == array.length\r\n\r\n\t if (lengthBefore + 1 == array.length) {\r\n\t return true;// has right splice implementation without bugs\r\n\t }\r\n\t }()) {//IE 6/7\r\n\t var array_splice = Array.prototype.splice;\r\n\t Array.prototype.splice = function(start, deleteCount) {\r\n\t if (!arguments.length) {\r\n\t return [];\r\n\t } else {\r\n\t return array_splice.apply(this, [\r\n\t start === void 0 ? 0 : start,\r\n\t deleteCount === void 0 ? (this.length - start) : deleteCount\r\n\t ].concat(slice.call(arguments, 2)))\r\n\t }\r\n\t };\r\n\t } else {//IE8\r\n\t Array.prototype.splice = function(pos, removeCount){\r\n\t var length = this.length;\r\n\t if (pos > 0) {\r\n\t if (pos > length)\r\n\t pos = length;\r\n\t } else if (pos == void 0) {\r\n\t pos = 0;\r\n\t } else if (pos < 0) {\r\n\t pos = Math.max(length + pos, 0);\r\n\t }\r\n\r\n\t if (!(pos+removeCount < length))\r\n\t removeCount = length - pos;\r\n\r\n\t var removed = this.slice(pos, pos+removeCount);\r\n\t var insert = slice.call(arguments, 2);\r\n\t var add = insert.length; \r\n\t if (pos === length) {\r\n\t if (add) {\r\n\t this.push.apply(this, insert);\r\n\t }\r\n\t } else {\r\n\t var remove = Math.min(removeCount, length - pos);\r\n\t var tailOldPos = pos + remove;\r\n\t var tailNewPos = tailOldPos + add - remove;\r\n\t var tailCount = length - tailOldPos;\r\n\t var lengthAfterRemove = length - remove;\r\n\r\n\t if (tailNewPos < tailOldPos) { // case A\r\n\t for (var i = 0; i < tailCount; ++i) {\r\n\t this[tailNewPos+i] = this[tailOldPos+i];\r\n\t }\r\n\t } else if (tailNewPos > tailOldPos) { // case B\r\n\t for (i = tailCount; i--; ) {\r\n\t this[tailNewPos+i] = this[tailOldPos+i];\r\n\t }\r\n\t } // else, add == remove (nothing to do)\r\n\r\n\t if (add && pos === lengthAfterRemove) {\r\n\t this.length = lengthAfterRemove; // truncate array\r\n\t this.push.apply(this, insert);\r\n\t } else {\r\n\t this.length = lengthAfterRemove + add; // reserves space\r\n\t for (i = 0; i < add; ++i) {\r\n\t this[pos+i] = insert[i];\r\n\t }\r\n\t }\r\n\t }\r\n\t return removed;\r\n\t };\r\n\t }\r\n\t}\r\n\tif (!Array.isArray) {\r\n\t Array.isArray = function isArray(obj) {\r\n\t return _toString(obj) == \"[object Array]\";\r\n\t };\r\n\t}\r\n\tvar boxedString = Object(\"a\"),\r\n\t splitString = boxedString[0] != \"a\" || !(0 in boxedString);\r\n\r\n\tif (!Array.prototype.forEach) {\r\n\t Array.prototype.forEach = function forEach(fun /*, thisp*/) {\r\n\t var object = toObject(this),\r\n\t self = splitString && _toString(this) == \"[object String]\" ?\r\n\t this.split(\"\") :\r\n\t object,\r\n\t thisp = arguments[1],\r\n\t i = -1,\r\n\t length = self.length >>> 0;\r\n\t if (_toString(fun) != \"[object Function]\") {\r\n\t throw new TypeError(); // TODO message\r\n\t }\r\n\r\n\t while (++i < length) {\r\n\t if (i in self) {\r\n\t fun.call(thisp, self[i], i, object);\r\n\t }\r\n\t }\r\n\t };\r\n\t}\r\n\tif (!Array.prototype.map) {\r\n\t Array.prototype.map = function map(fun /*, thisp*/) {\r\n\t var object = toObject(this),\r\n\t self = splitString && _toString(this) == \"[object String]\" ?\r\n\t this.split(\"\") :\r\n\t object,\r\n\t length = self.length >>> 0,\r\n\t result = Array(length),\r\n\t thisp = arguments[1];\r\n\t if (_toString(fun) != \"[object Function]\") {\r\n\t throw new TypeError(fun + \" is not a function\");\r\n\t }\r\n\r\n\t for (var i = 0; i < length; i++) {\r\n\t if (i in self)\r\n\t result[i] = fun.call(thisp, self[i], i, object);\r\n\t }\r\n\t return result;\r\n\t };\r\n\t}\r\n\tif (!Array.prototype.filter) {\r\n\t Array.prototype.filter = function filter(fun /*, thisp */) {\r\n\t var object = toObject(this),\r\n\t self = splitString && _toString(this) == \"[object String]\" ?\r\n\t this.split(\"\") :\r\n\t object,\r\n\t length = self.length >>> 0,\r\n\t result = [],\r\n\t value,\r\n\t thisp = arguments[1];\r\n\t if (_toString(fun) != \"[object Function]\") {\r\n\t throw new TypeError(fun + \" is not a function\");\r\n\t }\r\n\r\n\t for (var i = 0; i < length; i++) {\r\n\t if (i in self) {\r\n\t value = self[i];\r\n\t if (fun.call(thisp, value, i, object)) {\r\n\t result.push(value);\r\n\t }\r\n\t }\r\n\t }\r\n\t return result;\r\n\t };\r\n\t}\r\n\tif (!Array.prototype.every) {\r\n\t Array.prototype.every = function every(fun /*, thisp */) {\r\n\t var object = toObject(this),\r\n\t self = splitString && _toString(this) == \"[object String]\" ?\r\n\t this.split(\"\") :\r\n\t object,\r\n\t length = self.length >>> 0,\r\n\t thisp = arguments[1];\r\n\t if (_toString(fun) != \"[object Function]\") {\r\n\t throw new TypeError(fun + \" is not a function\");\r\n\t }\r\n\r\n\t for (var i = 0; i < length; i++) {\r\n\t if (i in self && !fun.call(thisp, self[i], i, object)) {\r\n\t return false;\r\n\t }\r\n\t }\r\n\t return true;\r\n\t };\r\n\t}\r\n\tif (!Array.prototype.some) {\r\n\t Array.prototype.some = function some(fun /*, thisp */) {\r\n\t var object = toObject(this),\r\n\t self = splitString && _toString(this) == \"[object String]\" ?\r\n\t this.split(\"\") :\r\n\t object,\r\n\t length = self.length >>> 0,\r\n\t thisp = arguments[1];\r\n\t if (_toString(fun) != \"[object Function]\") {\r\n\t throw new TypeError(fun + \" is not a function\");\r\n\t }\r\n\r\n\t for (var i = 0; i < length; i++) {\r\n\t if (i in self && fun.call(thisp, self[i], i, object)) {\r\n\t return true;\r\n\t }\r\n\t }\r\n\t return false;\r\n\t };\r\n\t}\r\n\tif (!Array.prototype.reduce) {\r\n\t Array.prototype.reduce = function reduce(fun /*, initial*/) {\r\n\t var object = toObject(this),\r\n\t self = splitString && _toString(this) == \"[object String]\" ?\r\n\t this.split(\"\") :\r\n\t object,\r\n\t length = self.length >>> 0;\r\n\t if (_toString(fun) != \"[object Function]\") {\r\n\t throw new TypeError(fun + \" is not a function\");\r\n\t }\r\n\t if (!length && arguments.length == 1) {\r\n\t throw new TypeError(\"reduce of empty array with no initial value\");\r\n\t }\r\n\r\n\t var i = 0;\r\n\t var result;\r\n\t if (arguments.length >= 2) {\r\n\t result = arguments[1];\r\n\t } else {\r\n\t do {\r\n\t if (i in self) {\r\n\t result = self[i++];\r\n\t break;\r\n\t }\r\n\t if (++i >= length) {\r\n\t throw new TypeError(\"reduce of empty array with no initial value\");\r\n\t }\r\n\t } while (true);\r\n\t }\r\n\r\n\t for (; i < length; i++) {\r\n\t if (i in self) {\r\n\t result = fun.call(void 0, result, self[i], i, object);\r\n\t }\r\n\t }\r\n\r\n\t return result;\r\n\t };\r\n\t}\r\n\tif (!Array.prototype.reduceRight) {\r\n\t Array.prototype.reduceRight = function reduceRight(fun /*, initial*/) {\r\n\t var object = toObject(this),\r\n\t self = splitString && _toString(this) == \"[object String]\" ?\r\n\t this.split(\"\") :\r\n\t object,\r\n\t length = self.length >>> 0;\r\n\t if (_toString(fun) != \"[object Function]\") {\r\n\t throw new TypeError(fun + \" is not a function\");\r\n\t }\r\n\t if (!length && arguments.length == 1) {\r\n\t throw new TypeError(\"reduceRight of empty array with no initial value\");\r\n\t }\r\n\r\n\t var result, i = length - 1;\r\n\t if (arguments.length >= 2) {\r\n\t result = arguments[1];\r\n\t } else {\r\n\t do {\r\n\t if (i in self) {\r\n\t result = self[i--];\r\n\t break;\r\n\t }\r\n\t if (--i < 0) {\r\n\t throw new TypeError(\"reduceRight of empty array with no initial value\");\r\n\t }\r\n\t } while (true);\r\n\t }\r\n\r\n\t do {\r\n\t if (i in this) {\r\n\t result = fun.call(void 0, result, self[i], i, object);\r\n\t }\r\n\t } while (i--);\r\n\r\n\t return result;\r\n\t };\r\n\t}\r\n\tif (!Array.prototype.indexOf || ([0, 1].indexOf(1, 2) != -1)) {\r\n\t Array.prototype.indexOf = function indexOf(sought /*, fromIndex */ ) {\r\n\t var self = splitString && _toString(this) == \"[object String]\" ?\r\n\t this.split(\"\") :\r\n\t toObject(this),\r\n\t length = self.length >>> 0;\r\n\r\n\t if (!length) {\r\n\t return -1;\r\n\t }\r\n\r\n\t var i = 0;\r\n\t if (arguments.length > 1) {\r\n\t i = toInteger(arguments[1]);\r\n\t }\r\n\t i = i >= 0 ? i : Math.max(0, length + i);\r\n\t for (; i < length; i++) {\r\n\t if (i in self && self[i] === sought) {\r\n\t return i;\r\n\t }\r\n\t }\r\n\t return -1;\r\n\t };\r\n\t}\r\n\tif (!Array.prototype.lastIndexOf || ([0, 1].lastIndexOf(0, -3) != -1)) {\r\n\t Array.prototype.lastIndexOf = function lastIndexOf(sought /*, fromIndex */) {\r\n\t var self = splitString && _toString(this) == \"[object String]\" ?\r\n\t this.split(\"\") :\r\n\t toObject(this),\r\n\t length = self.length >>> 0;\r\n\r\n\t if (!length) {\r\n\t return -1;\r\n\t }\r\n\t var i = length - 1;\r\n\t if (arguments.length > 1) {\r\n\t i = Math.min(i, toInteger(arguments[1]));\r\n\t }\r\n\t i = i >= 0 ? i : length - Math.abs(i);\r\n\t for (; i >= 0; i--) {\r\n\t if (i in self && sought === self[i]) {\r\n\t return i;\r\n\t }\r\n\t }\r\n\t return -1;\r\n\t };\r\n\t}\r\n\tif (!Object.getPrototypeOf) {\r\n\t Object.getPrototypeOf = function getPrototypeOf(object) {\r\n\t return object.__proto__ || (\r\n\t object.constructor ?\r\n\t object.constructor.prototype :\r\n\t prototypeOfObject\r\n\t );\r\n\t };\r\n\t}\r\n\tif (!Object.getOwnPropertyDescriptor) {\r\n\t var ERR_NON_OBJECT = \"Object.getOwnPropertyDescriptor called on a \" +\r\n\t \"non-object: \";\r\n\t Object.getOwnPropertyDescriptor = function getOwnPropertyDescriptor(object, property) {\r\n\t if ((typeof object != \"object\" && typeof object != \"function\") || object === null)\r\n\t throw new TypeError(ERR_NON_OBJECT + object);\r\n\t if (!owns(object, property))\r\n\t return;\r\n\r\n\t var descriptor, getter, setter;\r\n\t descriptor = { enumerable: true, configurable: true };\r\n\t if (supportsAccessors) {\r\n\t var prototype = object.__proto__;\r\n\t object.__proto__ = prototypeOfObject;\r\n\r\n\t var getter = lookupGetter(object, property);\r\n\t var setter = lookupSetter(object, property);\r\n\t object.__proto__ = prototype;\r\n\r\n\t if (getter || setter) {\r\n\t if (getter) descriptor.get = getter;\r\n\t if (setter) descriptor.set = setter;\r\n\t return descriptor;\r\n\t }\r\n\t }\r\n\t descriptor.value = object[property];\r\n\t return descriptor;\r\n\t };\r\n\t}\r\n\tif (!Object.getOwnPropertyNames) {\r\n\t Object.getOwnPropertyNames = function getOwnPropertyNames(object) {\r\n\t return Object.keys(object);\r\n\t };\r\n\t}\r\n\tif (!Object.create) {\r\n\t var createEmpty;\r\n\t if (Object.prototype.__proto__ === null) {\r\n\t createEmpty = function () {\r\n\t return { \"__proto__\": null };\r\n\t };\r\n\t } else {\r\n\t createEmpty = function () {\r\n\t var empty = {};\r\n\t for (var i in empty)\r\n\t empty[i] = null;\r\n\t empty.constructor =\r\n\t empty.hasOwnProperty =\r\n\t empty.propertyIsEnumerable =\r\n\t empty.isPrototypeOf =\r\n\t empty.toLocaleString =\r\n\t empty.toString =\r\n\t empty.valueOf =\r\n\t empty.__proto__ = null;\r\n\t return empty;\r\n\t }\r\n\t }\r\n\r\n\t Object.create = function create(prototype, properties) {\r\n\t var object;\r\n\t if (prototype === null) {\r\n\t object = createEmpty();\r\n\t } else {\r\n\t if (typeof prototype != \"object\")\r\n\t throw new TypeError(\"typeof prototype[\"+(typeof prototype)+\"] != 'object'\");\r\n\t var Type = function () {};\r\n\t Type.prototype = prototype;\r\n\t object = new Type();\r\n\t object.__proto__ = prototype;\r\n\t }\r\n\t if (properties !== void 0)\r\n\t Object.defineProperties(object, properties);\r\n\t return object;\r\n\t };\r\n\t}\r\n\r\n\tfunction doesDefinePropertyWork(object) {\r\n\t try {\r\n\t Object.defineProperty(object, \"sentinel\", {});\r\n\t return \"sentinel\" in object;\r\n\t } catch (exception) {\r\n\t }\r\n\t}\r\n\tif (Object.defineProperty) {\r\n\t var definePropertyWorksOnObject = doesDefinePropertyWork({});\r\n\t var definePropertyWorksOnDom = typeof document == \"undefined\" ||\r\n\t doesDefinePropertyWork(document.createElement(\"div\"));\r\n\t if (!definePropertyWorksOnObject || !definePropertyWorksOnDom) {\r\n\t var definePropertyFallback = Object.defineProperty;\r\n\t }\r\n\t}\r\n\r\n\tif (!Object.defineProperty || definePropertyFallback) {\r\n\t var ERR_NON_OBJECT_DESCRIPTOR = \"Property description must be an object: \";\r\n\t var ERR_NON_OBJECT_TARGET = \"Object.defineProperty called on non-object: \"\r\n\t var ERR_ACCESSORS_NOT_SUPPORTED = \"getters & setters can not be defined \" +\r\n\t \"on this javascript engine\";\r\n\r\n\t Object.defineProperty = function defineProperty(object, property, descriptor) {\r\n\t if ((typeof object != \"object\" && typeof object != \"function\") || object === null)\r\n\t throw new TypeError(ERR_NON_OBJECT_TARGET + object);\r\n\t if ((typeof descriptor != \"object\" && typeof descriptor != \"function\") || descriptor === null)\r\n\t throw new TypeError(ERR_NON_OBJECT_DESCRIPTOR + descriptor);\r\n\t if (definePropertyFallback) {\r\n\t try {\r\n\t return definePropertyFallback.call(Object, object, property, descriptor);\r\n\t } catch (exception) {\r\n\t }\r\n\t }\r\n\t if (owns(descriptor, \"value\")) {\r\n\r\n\t if (supportsAccessors && (lookupGetter(object, property) ||\r\n\t lookupSetter(object, property)))\r\n\t {\r\n\t var prototype = object.__proto__;\r\n\t object.__proto__ = prototypeOfObject;\r\n\t delete object[property];\r\n\t object[property] = descriptor.value;\r\n\t object.__proto__ = prototype;\r\n\t } else {\r\n\t object[property] = descriptor.value;\r\n\t }\r\n\t } else {\r\n\t if (!supportsAccessors)\r\n\t throw new TypeError(ERR_ACCESSORS_NOT_SUPPORTED);\r\n\t if (owns(descriptor, \"get\"))\r\n\t defineGetter(object, property, descriptor.get);\r\n\t if (owns(descriptor, \"set\"))\r\n\t defineSetter(object, property, descriptor.set);\r\n\t }\r\n\r\n\t return object;\r\n\t };\r\n\t}\r\n\tif (!Object.defineProperties) {\r\n\t Object.defineProperties = function defineProperties(object, properties) {\r\n\t for (var property in properties) {\r\n\t if (owns(properties, property))\r\n\t Object.defineProperty(object, property, properties[property]);\r\n\t }\r\n\t return object;\r\n\t };\r\n\t}\r\n\tif (!Object.seal) {\r\n\t Object.seal = function seal(object) {\r\n\t return object;\r\n\t };\r\n\t}\r\n\tif (!Object.freeze) {\r\n\t Object.freeze = function freeze(object) {\r\n\t return object;\r\n\t };\r\n\t}\r\n\ttry {\r\n\t Object.freeze(function () {});\r\n\t} catch (exception) {\r\n\t Object.freeze = (function freeze(freezeObject) {\r\n\t return function freeze(object) {\r\n\t if (typeof object == \"function\") {\r\n\t return object;\r\n\t } else {\r\n\t return freezeObject(object);\r\n\t }\r\n\t };\r\n\t })(Object.freeze);\r\n\t}\r\n\tif (!Object.preventExtensions) {\r\n\t Object.preventExtensions = function preventExtensions(object) {\r\n\t return object;\r\n\t };\r\n\t}\r\n\tif (!Object.isSealed) {\r\n\t Object.isSealed = function isSealed(object) {\r\n\t return false;\r\n\t };\r\n\t}\r\n\tif (!Object.isFrozen) {\r\n\t Object.isFrozen = function isFrozen(object) {\r\n\t return false;\r\n\t };\r\n\t}\r\n\tif (!Object.isExtensible) {\r\n\t Object.isExtensible = function isExtensible(object) {\r\n\t if (Object(object) === object) {\r\n\t throw new TypeError(); // TODO message\r\n\t }\r\n\t var name = '';\r\n\t while (owns(object, name)) {\r\n\t name += '?';\r\n\t }\r\n\t object[name] = true;\r\n\t var returnValue = owns(object, name);\r\n\t delete object[name];\r\n\t return returnValue;\r\n\t };\r\n\t}\r\n\tif (!Object.keys) {\r\n\t var hasDontEnumBug = true,\r\n\t dontEnums = [\r\n\t \"toString\",\r\n\t \"toLocaleString\",\r\n\t \"valueOf\",\r\n\t \"hasOwnProperty\",\r\n\t \"isPrototypeOf\",\r\n\t \"propertyIsEnumerable\",\r\n\t \"constructor\"\r\n\t ],\r\n\t dontEnumsLength = dontEnums.length;\r\n\r\n\t for (var key in {\"toString\": null}) {\r\n\t hasDontEnumBug = false;\r\n\t }\r\n\r\n\t Object.keys = function keys(object) {\r\n\r\n\t if (\r\n\t (typeof object != \"object\" && typeof object != \"function\") ||\r\n\t object === null\r\n\t ) {\r\n\t throw new TypeError(\"Object.keys called on a non-object\");\r\n\t }\r\n\r\n\t var keys = [];\r\n\t for (var name in object) {\r\n\t if (owns(object, name)) {\r\n\t keys.push(name);\r\n\t }\r\n\t }\r\n\r\n\t if (hasDontEnumBug) {\r\n\t for (var i = 0, ii = dontEnumsLength; i < ii; i++) {\r\n\t var dontEnum = dontEnums[i];\r\n\t if (owns(object, dontEnum)) {\r\n\t keys.push(dontEnum);\r\n\t }\r\n\t }\r\n\t }\r\n\t return keys;\r\n\t };\r\n\r\n\t}\r\n\tif (!Date.now) {\r\n\t Date.now = function now() {\r\n\t return new Date().getTime();\r\n\t };\r\n\t}\r\n\tvar ws = \"\\x09\\x0A\\x0B\\x0C\\x0D\\x20\\xA0\\u1680\\u180E\\u2000\\u2001\\u2002\\u2003\" +\r\n\t \"\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u3000\\u2028\" +\r\n\t \"\\u2029\\uFEFF\";\r\n\tif (!String.prototype.trim || ws.trim()) {\r\n\t ws = \"[\" + ws + \"]\";\r\n\t var trimBeginRegexp = new RegExp(\"^\" + ws + ws + \"*\"),\r\n\t trimEndRegexp = new RegExp(ws + ws + \"*$\");\r\n\t String.prototype.trim = function trim() {\r\n\t return String(this).replace(trimBeginRegexp, \"\").replace(trimEndRegexp, \"\");\r\n\t };\r\n\t}\r\n\r\n\tfunction toInteger(n) {\r\n\t n = +n;\r\n\t if (n !== n) { // isNaN\r\n\t n = 0;\r\n\t } else if (n !== 0 && n !== (1/0) && n !== -(1/0)) {\r\n\t n = (n > 0 || -1) * Math.floor(Math.abs(n));\r\n\t }\r\n\t return n;\r\n\t}\r\n\r\n\tfunction isPrimitive(input) {\r\n\t var type = typeof input;\r\n\t return (\r\n\t input === null ||\r\n\t type === \"undefined\" ||\r\n\t type === \"boolean\" ||\r\n\t type === \"number\" ||\r\n\t type === \"string\"\r\n\t );\r\n\t}\r\n\r\n\tfunction toPrimitive(input) {\r\n\t var val, valueOf, toString;\r\n\t if (isPrimitive(input)) {\r\n\t return input;\r\n\t }\r\n\t valueOf = input.valueOf;\r\n\t if (typeof valueOf === \"function\") {\r\n\t val = valueOf.call(input);\r\n\t if (isPrimitive(val)) {\r\n\t return val;\r\n\t }\r\n\t }\r\n\t toString = input.toString;\r\n\t if (typeof toString === \"function\") {\r\n\t val = toString.call(input);\r\n\t if (isPrimitive(val)) {\r\n\t return val;\r\n\t }\r\n\t }\r\n\t throw new TypeError();\r\n\t}\r\n\tvar toObject = function (o) {\r\n\t if (o == null) { // this matches both null and undefined\r\n\t throw new TypeError(\"can't convert \"+o+\" to object\");\r\n\t }\r\n\t return Object(o);\r\n\t};\r\n\r\n\t});\r\n\r\n\tace.define(\"ace/lib/fixoldbrowsers\",[\"require\",\"exports\",\"module\",\"ace/lib/regexp\",\"ace/lib/es5-shim\"], function(acequire, exports, module) {\r\n\t\"use strict\";\r\n\r\n\tacequire(\"./regexp\");\r\n\tacequire(\"./es5-shim\");\r\n\r\n\t});\r\n\r\n\tace.define(\"ace/lib/dom\",[\"require\",\"exports\",\"module\"], function(acequire, exports, module) {\r\n\t\"use strict\";\r\n\r\n\tvar XHTML_NS = \"http://www.w3.org/1999/xhtml\";\r\n\r\n\texports.getDocumentHead = function(doc) {\r\n\t if (!doc)\r\n\t doc = document;\r\n\t return doc.head || doc.getElementsByTagName(\"head\")[0] || doc.documentElement;\r\n\t};\r\n\r\n\texports.createElement = function(tag, ns) {\r\n\t return document.createElementNS ?\r\n\t document.createElementNS(ns || XHTML_NS, tag) :\r\n\t document.createElement(tag);\r\n\t};\r\n\r\n\texports.hasCssClass = function(el, name) {\r\n\t var classes = (el.className || \"\").split(/\\s+/g);\r\n\t return classes.indexOf(name) !== -1;\r\n\t};\r\n\texports.addCssClass = function(el, name) {\r\n\t if (!exports.hasCssClass(el, name)) {\r\n\t el.className += \" \" + name;\r\n\t }\r\n\t};\r\n\texports.removeCssClass = function(el, name) {\r\n\t var classes = el.className.split(/\\s+/g);\r\n\t while (true) {\r\n\t var index = classes.indexOf(name);\r\n\t if (index == -1) {\r\n\t break;\r\n\t }\r\n\t classes.splice(index, 1);\r\n\t }\r\n\t el.className = classes.join(\" \");\r\n\t};\r\n\r\n\texports.toggleCssClass = function(el, name) {\r\n\t var classes = el.className.split(/\\s+/g), add = true;\r\n\t while (true) {\r\n\t var index = classes.indexOf(name);\r\n\t if (index == -1) {\r\n\t break;\r\n\t }\r\n\t add = false;\r\n\t classes.splice(index, 1);\r\n\t }\r\n\t if (add)\r\n\t classes.push(name);\r\n\r\n\t el.className = classes.join(\" \");\r\n\t return add;\r\n\t};\r\n\texports.setCssClass = function(node, className, include) {\r\n\t if (include) {\r\n\t exports.addCssClass(node, className);\r\n\t } else {\r\n\t exports.removeCssClass(node, className);\r\n\t }\r\n\t};\r\n\r\n\texports.hasCssString = function(id, doc) {\r\n\t var index = 0, sheets;\r\n\t doc = doc || document;\r\n\r\n\t if (doc.createStyleSheet && (sheets = doc.styleSheets)) {\r\n\t while (index < sheets.length)\r\n\t if (sheets[index++].owningElement.id === id) return true;\r\n\t } else if ((sheets = doc.getElementsByTagName(\"style\"))) {\r\n\t while (index < sheets.length)\r\n\t if (sheets[index++].id === id) return true;\r\n\t }\r\n\r\n\t return false;\r\n\t};\r\n\r\n\texports.importCssString = function importCssString(cssText, id, doc) {\r\n\t doc = doc || document;\r\n\t if (id && exports.hasCssString(id, doc))\r\n\t return null;\r\n\t \r\n\t var style;\r\n\t \r\n\t if (id)\r\n\t cssText += \"\\n/*# sourceURL=ace/css/\" + id + \" */\";\r\n\t \r\n\t if (doc.createStyleSheet) {\r\n\t style = doc.createStyleSheet();\r\n\t style.cssText = cssText;\r\n\t if (id)\r\n\t style.owningElement.id = id;\r\n\t } else {\r\n\t style = exports.createElement(\"style\");\r\n\t style.appendChild(doc.createTextNode(cssText));\r\n\t if (id)\r\n\t style.id = id;\r\n\r\n\t exports.getDocumentHead(doc).appendChild(style);\r\n\t }\r\n\t};\r\n\r\n\texports.importCssStylsheet = function(uri, doc) {\r\n\t if (doc.createStyleSheet) {\r\n\t doc.createStyleSheet(uri);\r\n\t } else {\r\n\t var link = exports.createElement('link');\r\n\t link.rel = 'stylesheet';\r\n\t link.href = uri;\r\n\r\n\t exports.getDocumentHead(doc).appendChild(link);\r\n\t }\r\n\t};\r\n\r\n\texports.getInnerWidth = function(element) {\r\n\t return (\r\n\t parseInt(exports.computedStyle(element, \"paddingLeft\"), 10) +\r\n\t parseInt(exports.computedStyle(element, \"paddingRight\"), 10) + \r\n\t element.clientWidth\r\n\t );\r\n\t};\r\n\r\n\texports.getInnerHeight = function(element) {\r\n\t return (\r\n\t parseInt(exports.computedStyle(element, \"paddingTop\"), 10) +\r\n\t parseInt(exports.computedStyle(element, \"paddingBottom\"), 10) +\r\n\t element.clientHeight\r\n\t );\r\n\t};\r\n\r\n\texports.scrollbarWidth = function(document) {\r\n\t var inner = exports.createElement(\"ace_inner\");\r\n\t inner.style.width = \"100%\";\r\n\t inner.style.minWidth = \"0px\";\r\n\t inner.style.height = \"200px\";\r\n\t inner.style.display = \"block\";\r\n\r\n\t var outer = exports.createElement(\"ace_outer\");\r\n\t var style = outer.style;\r\n\r\n\t style.position = \"absolute\";\r\n\t style.left = \"-10000px\";\r\n\t style.overflow = \"hidden\";\r\n\t style.width = \"200px\";\r\n\t style.minWidth = \"0px\";\r\n\t style.height = \"150px\";\r\n\t style.display = \"block\";\r\n\r\n\t outer.appendChild(inner);\r\n\r\n\t var body = document.documentElement;\r\n\t body.appendChild(outer);\r\n\r\n\t var noScrollbar = inner.offsetWidth;\r\n\r\n\t style.overflow = \"scroll\";\r\n\t var withScrollbar = inner.offsetWidth;\r\n\r\n\t if (noScrollbar == withScrollbar) {\r\n\t withScrollbar = outer.clientWidth;\r\n\t }\r\n\r\n\t body.removeChild(outer);\r\n\r\n\t return noScrollbar-withScrollbar;\r\n\t};\r\n\r\n\tif (typeof document == \"undefined\") {\r\n\t exports.importCssString = function() {};\r\n\t return;\r\n\t}\r\n\r\n\tif (window.pageYOffset !== undefined) {\r\n\t exports.getPageScrollTop = function() {\r\n\t return window.pageYOffset;\r\n\t };\r\n\r\n\t exports.getPageScrollLeft = function() {\r\n\t return window.pageXOffset;\r\n\t };\r\n\t}\r\n\telse {\r\n\t exports.getPageScrollTop = function() {\r\n\t return document.body.scrollTop;\r\n\t };\r\n\r\n\t exports.getPageScrollLeft = function() {\r\n\t return document.body.scrollLeft;\r\n\t };\r\n\t}\r\n\r\n\tif (window.getComputedStyle)\r\n\t exports.computedStyle = function(element, style) {\r\n\t if (style)\r\n\t return (window.getComputedStyle(element, \"\") || {})[style] || \"\";\r\n\t return window.getComputedStyle(element, \"\") || {};\r\n\t };\r\n\telse\r\n\t exports.computedStyle = function(element, style) {\r\n\t if (style)\r\n\t return element.currentStyle[style];\r\n\t return element.currentStyle;\r\n\t };\r\n\texports.setInnerHtml = function(el, innerHtml) {\r\n\t var element = el.cloneNode(false);//document.createElement(\"div\");\r\n\t element.innerHTML = innerHtml;\r\n\t el.parentNode.replaceChild(element, el);\r\n\t return element;\r\n\t};\r\n\r\n\tif (\"textContent\" in document.documentElement) {\r\n\t exports.setInnerText = function(el, innerText) {\r\n\t el.textContent = innerText;\r\n\t };\r\n\r\n\t exports.getInnerText = function(el) {\r\n\t return el.textContent;\r\n\t };\r\n\t}\r\n\telse {\r\n\t exports.setInnerText = function(el, innerText) {\r\n\t el.innerText = innerText;\r\n\t };\r\n\r\n\t exports.getInnerText = function(el) {\r\n\t return el.innerText;\r\n\t };\r\n\t}\r\n\r\n\texports.getParentWindow = function(document) {\r\n\t return document.defaultView || document.parentWindow;\r\n\t};\r\n\r\n\t});\r\n\r\n\tace.define(\"ace/lib/oop\",[\"require\",\"exports\",\"module\"], function(acequire, exports, module) {\r\n\t\"use strict\";\r\n\r\n\texports.inherits = function(ctor, superCtor) {\r\n\t ctor.super_ = superCtor;\r\n\t ctor.prototype = Object.create(superCtor.prototype, {\r\n\t constructor: {\r\n\t value: ctor,\r\n\t enumerable: false,\r\n\t writable: true,\r\n\t configurable: true\r\n\t }\r\n\t });\r\n\t};\r\n\r\n\texports.mixin = function(obj, mixin) {\r\n\t for (var key in mixin) {\r\n\t obj[key] = mixin[key];\r\n\t }\r\n\t return obj;\r\n\t};\r\n\r\n\texports.implement = function(proto, mixin) {\r\n\t exports.mixin(proto, mixin);\r\n\t};\r\n\r\n\t});\r\n\r\n\tace.define(\"ace/lib/keys\",[\"require\",\"exports\",\"module\",\"ace/lib/fixoldbrowsers\",\"ace/lib/oop\"], function(acequire, exports, module) {\r\n\t\"use strict\";\r\n\r\n\tacequire(\"./fixoldbrowsers\");\r\n\r\n\tvar oop = acequire(\"./oop\");\r\n\tvar Keys = (function() {\r\n\t var ret = {\r\n\t MODIFIER_KEYS: {\r\n\t 16: 'Shift', 17: 'Ctrl', 18: 'Alt', 224: 'Meta'\r\n\t },\r\n\r\n\t KEY_MODS: {\r\n\t \"ctrl\": 1, \"alt\": 2, \"option\" : 2, \"shift\": 4,\r\n\t \"super\": 8, \"meta\": 8, \"command\": 8, \"cmd\": 8\r\n\t },\r\n\r\n\t FUNCTION_KEYS : {\r\n\t 8 : \"Backspace\",\r\n\t 9 : \"Tab\",\r\n\t 13 : \"Return\",\r\n\t 19 : \"Pause\",\r\n\t 27 : \"Esc\",\r\n\t 32 : \"Space\",\r\n\t 33 : \"PageUp\",\r\n\t 34 : \"PageDown\",\r\n\t 35 : \"End\",\r\n\t 36 : \"Home\",\r\n\t 37 : \"Left\",\r\n\t 38 : \"Up\",\r\n\t 39 : \"Right\",\r\n\t 40 : \"Down\",\r\n\t 44 : \"Print\",\r\n\t 45 : \"Insert\",\r\n\t 46 : \"Delete\",\r\n\t 96 : \"Numpad0\",\r\n\t 97 : \"Numpad1\",\r\n\t 98 : \"Numpad2\",\r\n\t 99 : \"Numpad3\",\r\n\t 100: \"Numpad4\",\r\n\t 101: \"Numpad5\",\r\n\t 102: \"Numpad6\",\r\n\t 103: \"Numpad7\",\r\n\t 104: \"Numpad8\",\r\n\t 105: \"Numpad9\",\r\n\t '-13': \"NumpadEnter\",\r\n\t 112: \"F1\",\r\n\t 113: \"F2\",\r\n\t 114: \"F3\",\r\n\t 115: \"F4\",\r\n\t 116: \"F5\",\r\n\t 117: \"F6\",\r\n\t 118: \"F7\",\r\n\t 119: \"F8\",\r\n\t 120: \"F9\",\r\n\t 121: \"F10\",\r\n\t 122: \"F11\",\r\n\t 123: \"F12\",\r\n\t 144: \"Numlock\",\r\n\t 145: \"Scrolllock\"\r\n\t },\r\n\r\n\t PRINTABLE_KEYS: {\r\n\t 32: ' ', 48: '0', 49: '1', 50: '2', 51: '3', 52: '4', 53: '5',\r\n\t 54: '6', 55: '7', 56: '8', 57: '9', 59: ';', 61: '=', 65: 'a',\r\n\t 66: 'b', 67: 'c', 68: 'd', 69: 'e', 70: 'f', 71: 'g', 72: 'h',\r\n\t 73: 'i', 74: 'j', 75: 'k', 76: 'l', 77: 'm', 78: 'n', 79: 'o',\r\n\t 80: 'p', 81: 'q', 82: 'r', 83: 's', 84: 't', 85: 'u', 86: 'v',\r\n\t 87: 'w', 88: 'x', 89: 'y', 90: 'z', 107: '+', 109: '-', 110: '.',\r\n\t 186: ';', 187: '=', 188: ',', 189: '-', 190: '.', 191: '/', 192: '`',\r\n\t 219: '[', 220: '\\\\',221: ']', 222: \"'\", 111: '/', 106: '*'\r\n\t }\r\n\t };\r\n\t var name, i;\r\n\t for (i in ret.FUNCTION_KEYS) {\r\n\t name = ret.FUNCTION_KEYS[i].toLowerCase();\r\n\t ret[name] = parseInt(i, 10);\r\n\t }\r\n\t for (i in ret.PRINTABLE_KEYS) {\r\n\t name = ret.PRINTABLE_KEYS[i].toLowerCase();\r\n\t ret[name] = parseInt(i, 10);\r\n\t }\r\n\t oop.mixin(ret, ret.MODIFIER_KEYS);\r\n\t oop.mixin(ret, ret.PRINTABLE_KEYS);\r\n\t oop.mixin(ret, ret.FUNCTION_KEYS);\r\n\t ret.enter = ret[\"return\"];\r\n\t ret.escape = ret.esc;\r\n\t ret.del = ret[\"delete\"];\r\n\t ret[173] = '-';\r\n\t \r\n\t (function() {\r\n\t var mods = [\"cmd\", \"ctrl\", \"alt\", \"shift\"];\r\n\t for (var i = Math.pow(2, mods.length); i--;) { \r\n\t ret.KEY_MODS[i] = mods.filter(function(x) {\r\n\t return i & ret.KEY_MODS[x];\r\n\t }).join(\"-\") + \"-\";\r\n\t }\r\n\t })();\r\n\r\n\t ret.KEY_MODS[0] = \"\";\r\n\t ret.KEY_MODS[-1] = \"input-\";\r\n\r\n\t return ret;\r\n\t})();\r\n\toop.mixin(exports, Keys);\r\n\r\n\texports.keyCodeToString = function(keyCode) {\r\n\t var keyString = Keys[keyCode];\r\n\t if (typeof keyString != \"string\")\r\n\t keyString = String.fromCharCode(keyCode);\r\n\t return keyString.toLowerCase();\r\n\t};\r\n\r\n\t});\r\n\r\n\tace.define(\"ace/lib/useragent\",[\"require\",\"exports\",\"module\"], function(acequire, exports, module) {\r\n\t\"use strict\";\r\n\texports.OS = {\r\n\t LINUX: \"LINUX\",\r\n\t MAC: \"MAC\",\r\n\t WINDOWS: \"WINDOWS\"\r\n\t};\r\n\texports.getOS = function() {\r\n\t if (exports.isMac) {\r\n\t return exports.OS.MAC;\r\n\t } else if (exports.isLinux) {\r\n\t return exports.OS.LINUX;\r\n\t } else {\r\n\t return exports.OS.WINDOWS;\r\n\t }\r\n\t};\r\n\tif (typeof navigator != \"object\")\r\n\t return;\r\n\r\n\tvar os = (navigator.platform.match(/mac|win|linux/i) || [\"other\"])[0].toLowerCase();\r\n\tvar ua = navigator.userAgent;\r\n\texports.isWin = (os == \"win\");\r\n\texports.isMac = (os == \"mac\");\r\n\texports.isLinux = (os == \"linux\");\r\n\texports.isIE = \r\n\t (navigator.appName == \"Microsoft Internet Explorer\" || navigator.appName.indexOf(\"MSAppHost\") >= 0)\r\n\t ? parseFloat((ua.match(/(?:MSIE |Trident\\/[0-9]+[\\.0-9]+;.*rv:)([0-9]+[\\.0-9]+)/)||[])[1])\r\n\t : parseFloat((ua.match(/(?:Trident\\/[0-9]+[\\.0-9]+;.*rv:)([0-9]+[\\.0-9]+)/)||[])[1]); // for ie\r\n\t \r\n\texports.isOldIE = exports.isIE && exports.isIE < 9;\r\n\texports.isGecko = exports.isMozilla = (window.Controllers || window.controllers) && window.navigator.product === \"Gecko\";\r\n\texports.isOldGecko = exports.isGecko && parseInt((ua.match(/rv\\:(\\d+)/)||[])[1], 10) < 4;\r\n\texports.isOpera = window.opera && Object.prototype.toString.call(window.opera) == \"[object Opera]\";\r\n\texports.isWebKit = parseFloat(ua.split(\"WebKit/\")[1]) || undefined;\r\n\r\n\texports.isChrome = parseFloat(ua.split(\" Chrome/\")[1]) || undefined;\r\n\r\n\texports.isAIR = ua.indexOf(\"AdobeAIR\") >= 0;\r\n\r\n\texports.isIPad = ua.indexOf(\"iPad\") >= 0;\r\n\r\n\texports.isTouchPad = ua.indexOf(\"TouchPad\") >= 0;\r\n\r\n\texports.isChromeOS = ua.indexOf(\" CrOS \") >= 0;\r\n\r\n\t});\r\n\r\n\tace.define(\"ace/lib/event\",[\"require\",\"exports\",\"module\",\"ace/lib/keys\",\"ace/lib/useragent\"], function(acequire, exports, module) {\r\n\t\"use strict\";\r\n\r\n\tvar keys = acequire(\"./keys\");\r\n\tvar useragent = acequire(\"./useragent\");\r\n\r\n\tvar pressedKeys = null;\r\n\tvar ts = 0;\r\n\r\n\texports.addListener = function(elem, type, callback) {\r\n\t if (elem.addEventListener) {\r\n\t return elem.addEventListener(type, callback, false);\r\n\t }\r\n\t if (elem.attachEvent) {\r\n\t var wrapper = function() {\r\n\t callback.call(elem, window.event);\r\n\t };\r\n\t callback._wrapper = wrapper;\r\n\t elem.attachEvent(\"on\" + type, wrapper);\r\n\t }\r\n\t};\r\n\r\n\texports.removeListener = function(elem, type, callback) {\r\n\t if (elem.removeEventListener) {\r\n\t return elem.removeEventListener(type, callback, false);\r\n\t }\r\n\t if (elem.detachEvent) {\r\n\t elem.detachEvent(\"on\" + type, callback._wrapper || callback);\r\n\t }\r\n\t};\r\n\texports.stopEvent = function(e) {\r\n\t exports.stopPropagation(e);\r\n\t exports.preventDefault(e);\r\n\t return false;\r\n\t};\r\n\r\n\texports.stopPropagation = function(e) {\r\n\t if (e.stopPropagation)\r\n\t e.stopPropagation();\r\n\t else\r\n\t e.cancelBubble = true;\r\n\t};\r\n\r\n\texports.preventDefault = function(e) {\r\n\t if (e.preventDefault)\r\n\t e.preventDefault();\r\n\t else\r\n\t e.returnValue = false;\r\n\t};\r\n\texports.getButton = function(e) {\r\n\t if (e.type == \"dblclick\")\r\n\t return 0;\r\n\t if (e.type == \"contextmenu\" || (useragent.isMac && (e.ctrlKey && !e.altKey && !e.shiftKey)))\r\n\t return 2;\r\n\t if (e.preventDefault) {\r\n\t return e.button;\r\n\t }\r\n\t else {\r\n\t return {1:0, 2:2, 4:1}[e.button];\r\n\t }\r\n\t};\r\n\r\n\texports.capture = function(el, eventHandler, releaseCaptureHandler) {\r\n\t function onMouseUp(e) {\r\n\t eventHandler && eventHandler(e);\r\n\t releaseCaptureHandler && releaseCaptureHandler(e);\r\n\r\n\t exports.removeListener(document, \"mousemove\", eventHandler, true);\r\n\t exports.removeListener(document, \"mouseup\", onMouseUp, true);\r\n\t exports.removeListener(document, \"dragstart\", onMouseUp, true);\r\n\t }\r\n\r\n\t exports.addListener(document, \"mousemove\", eventHandler, true);\r\n\t exports.addListener(document, \"mouseup\", onMouseUp, true);\r\n\t exports.addListener(document, \"dragstart\", onMouseUp, true);\r\n\t \r\n\t return onMouseUp;\r\n\t};\r\n\r\n\texports.addTouchMoveListener = function (el, callback) {\r\n\t if (\"ontouchmove\" in el) {\r\n\t var startx, starty;\r\n\t exports.addListener(el, \"touchstart\", function (e) {\r\n\t var touchObj = e.changedTouches[0];\r\n\t startx = touchObj.clientX;\r\n\t starty = touchObj.clientY;\r\n\t });\r\n\t exports.addListener(el, \"touchmove\", function (e) {\r\n\t var factor = 1,\r\n\t touchObj = e.changedTouches[0];\r\n\r\n\t e.wheelX = -(touchObj.clientX - startx) / factor;\r\n\t e.wheelY = -(touchObj.clientY - starty) / factor;\r\n\r\n\t startx = touchObj.clientX;\r\n\t starty = touchObj.clientY;\r\n\r\n\t callback(e);\r\n\t });\r\n\t } \r\n\t};\r\n\r\n\texports.addMouseWheelListener = function(el, callback) {\r\n\t if (\"onmousewheel\" in el) {\r\n\t exports.addListener(el, \"mousewheel\", function(e) {\r\n\t var factor = 8;\r\n\t if (e.wheelDeltaX !== undefined) {\r\n\t e.wheelX = -e.wheelDeltaX / factor;\r\n\t e.wheelY = -e.wheelDeltaY / factor;\r\n\t } else {\r\n\t e.wheelX = 0;\r\n\t e.wheelY = -e.wheelDelta / factor;\r\n\t }\r\n\t callback(e);\r\n\t });\r\n\t } else if (\"onwheel\" in el) {\r\n\t exports.addListener(el, \"wheel\", function(e) {\r\n\t var factor = 0.35;\r\n\t switch (e.deltaMode) {\r\n\t case e.DOM_DELTA_PIXEL:\r\n\t e.wheelX = e.deltaX * factor || 0;\r\n\t e.wheelY = e.deltaY * factor || 0;\r\n\t break;\r\n\t case e.DOM_DELTA_LINE:\r\n\t case e.DOM_DELTA_PAGE:\r\n\t e.wheelX = (e.deltaX || 0) * 5;\r\n\t e.wheelY = (e.deltaY || 0) * 5;\r\n\t break;\r\n\t }\r\n\t \r\n\t callback(e);\r\n\t });\r\n\t } else {\r\n\t exports.addListener(el, \"DOMMouseScroll\", function(e) {\r\n\t if (e.axis && e.axis == e.HORIZONTAL_AXIS) {\r\n\t e.wheelX = (e.detail || 0) * 5;\r\n\t e.wheelY = 0;\r\n\t } else {\r\n\t e.wheelX = 0;\r\n\t e.wheelY = (e.detail || 0) * 5;\r\n\t }\r\n\t callback(e);\r\n\t });\r\n\t }\r\n\t};\r\n\r\n\texports.addMultiMouseDownListener = function(elements, timeouts, eventHandler, callbackName) {\r\n\t var clicks = 0;\r\n\t var startX, startY, timer; \r\n\t var eventNames = {\r\n\t 2: \"dblclick\",\r\n\t 3: \"tripleclick\",\r\n\t 4: \"quadclick\"\r\n\t };\r\n\r\n\t function onMousedown(e) {\r\n\t if (exports.getButton(e) !== 0) {\r\n\t clicks = 0;\r\n\t } else if (e.detail > 1) {\r\n\t clicks++;\r\n\t if (clicks > 4)\r\n\t clicks = 1;\r\n\t } else {\r\n\t clicks = 1;\r\n\t }\r\n\t if (useragent.isIE) {\r\n\t var isNewClick = Math.abs(e.clientX - startX) > 5 || Math.abs(e.clientY - startY) > 5;\r\n\t if (!timer || isNewClick)\r\n\t clicks = 1;\r\n\t if (timer)\r\n\t clearTimeout(timer);\r\n\t timer = setTimeout(function() {timer = null}, timeouts[clicks - 1] || 600);\r\n\r\n\t if (clicks == 1) {\r\n\t startX = e.clientX;\r\n\t startY = e.clientY;\r\n\t }\r\n\t }\r\n\t \r\n\t e._clicks = clicks;\r\n\r\n\t eventHandler[callbackName](\"mousedown\", e);\r\n\r\n\t if (clicks > 4)\r\n\t clicks = 0;\r\n\t else if (clicks > 1)\r\n\t return eventHandler[callbackName](eventNames[clicks], e);\r\n\t }\r\n\t function onDblclick(e) {\r\n\t clicks = 2;\r\n\t if (timer)\r\n\t clearTimeout(timer);\r\n\t timer = setTimeout(function() {timer = null}, timeouts[clicks - 1] || 600);\r\n\t eventHandler[callbackName](\"mousedown\", e);\r\n\t eventHandler[callbackName](eventNames[clicks], e);\r\n\t }\r\n\t if (!Array.isArray(elements))\r\n\t elements = [elements];\r\n\t elements.forEach(function(el) {\r\n\t exports.addListener(el, \"mousedown\", onMousedown);\r\n\t if (useragent.isOldIE)\r\n\t exports.addListener(el, \"dblclick\", onDblclick);\r\n\t });\r\n\t};\r\n\r\n\tvar getModifierHash = useragent.isMac && useragent.isOpera && !(\"KeyboardEvent\" in window)\r\n\t ? function(e) {\r\n\t return 0 | (e.metaKey ? 1 : 0) | (e.altKey ? 2 : 0) | (e.shiftKey ? 4 : 0) | (e.ctrlKey ? 8 : 0);\r\n\t }\r\n\t : function(e) {\r\n\t return 0 | (e.ctrlKey ? 1 : 0) | (e.altKey ? 2 : 0) | (e.shiftKey ? 4 : 0) | (e.metaKey ? 8 : 0);\r\n\t };\r\n\r\n\texports.getModifierString = function(e) {\r\n\t return keys.KEY_MODS[getModifierHash(e)];\r\n\t};\r\n\r\n\tfunction normalizeCommandKeys(callback, e, keyCode) {\r\n\t var hashId = getModifierHash(e);\r\n\r\n\t if (!useragent.isMac && pressedKeys) {\r\n\t if (pressedKeys.OSKey)\r\n\t hashId |= 8;\r\n\t if (pressedKeys.altGr) {\r\n\t if ((3 & hashId) != 3)\r\n\t pressedKeys.altGr = 0;\r\n\t else\r\n\t return;\r\n\t }\r\n\t if (keyCode === 18 || keyCode === 17) {\r\n\t var location = \"location\" in e ? e.location : e.keyLocation;\r\n\t if (keyCode === 17 && location === 1) {\r\n\t if (pressedKeys[keyCode] == 1)\r\n\t ts = e.timeStamp;\r\n\t } else if (keyCode === 18 && hashId === 3 && location === 2) {\r\n\t var dt = e.timeStamp - ts;\r\n\t if (dt < 50)\r\n\t pressedKeys.altGr = true;\r\n\t }\r\n\t }\r\n\t }\r\n\t \r\n\t if (keyCode in keys.MODIFIER_KEYS) {\r\n\t keyCode = -1;\r\n\t }\r\n\t if (hashId & 8 && (keyCode >= 91 && keyCode <= 93)) {\r\n\t keyCode = -1;\r\n\t }\r\n\t \r\n\t if (!hashId && keyCode === 13) {\r\n\t var location = \"location\" in e ? e.location : e.keyLocation;\r\n\t if (location === 3) {\r\n\t callback(e, hashId, -keyCode);\r\n\t if (e.defaultPrevented)\r\n\t return;\r\n\t }\r\n\t }\r\n\t \r\n\t if (useragent.isChromeOS && hashId & 8) {\r\n\t callback(e, hashId, keyCode);\r\n\t if (e.defaultPrevented)\r\n\t return;\r\n\t else\r\n\t hashId &= ~8;\r\n\t }\r\n\t if (!hashId && !(keyCode in keys.FUNCTION_KEYS) && !(keyCode in keys.PRINTABLE_KEYS)) {\r\n\t return false;\r\n\t }\r\n\t \r\n\t return callback(e, hashId, keyCode);\r\n\t}\r\n\r\n\r\n\texports.addCommandKeyListener = function(el, callback) {\r\n\t var addListener = exports.addListener;\r\n\t if (useragent.isOldGecko || (useragent.isOpera && !(\"KeyboardEvent\" in window))) {\r\n\t var lastKeyDownKeyCode = null;\r\n\t addListener(el, \"keydown\", function(e) {\r\n\t lastKeyDownKeyCode = e.keyCode;\r\n\t });\r\n\t addListener(el, \"keypress\", function(e) {\r\n\t return normalizeCommandKeys(callback, e, lastKeyDownKeyCode);\r\n\t });\r\n\t } else {\r\n\t var lastDefaultPrevented = null;\r\n\r\n\t addListener(el, \"keydown\", function(e) {\r\n\t var keyCode = e.keyCode;\r\n\t pressedKeys[keyCode] = (pressedKeys[keyCode] || 0) + 1;\r\n\t if (keyCode == 91 || keyCode == 92) {\r\n\t pressedKeys.OSKey = true;\r\n\t } else if (pressedKeys.OSKey) {\r\n\t if (e.timeStamp - pressedKeys.lastT > 200 && pressedKeys.count == 1)\r\n\t resetPressedKeys();\r\n\t }\r\n\t if (pressedKeys[keyCode] == 1)\r\n\t pressedKeys.count++;\r\n\t pressedKeys.lastT = e.timeStamp;\r\n\t var result = normalizeCommandKeys(callback, e, keyCode);\r\n\t lastDefaultPrevented = e.defaultPrevented;\r\n\t return result;\r\n\t });\r\n\r\n\t addListener(el, \"keypress\", function(e) {\r\n\t if (lastDefaultPrevented && (e.ctrlKey || e.altKey || e.shiftKey || e.metaKey)) {\r\n\t exports.stopEvent(e);\r\n\t lastDefaultPrevented = null;\r\n\t }\r\n\t });\r\n\r\n\t addListener(el, \"keyup\", function(e) {\r\n\t var keyCode = e.keyCode;\r\n\t if (!pressedKeys[keyCode]) {\r\n\t resetPressedKeys();\r\n\t } else {\r\n\t pressedKeys.count = Math.max(pressedKeys.count - 1, 0);\r\n\t }\r\n\t if (keyCode == 91 || keyCode == 92) {\r\n\t pressedKeys.OSKey = false;\r\n\t }\r\n\t pressedKeys[keyCode] = null;\r\n\t });\r\n\r\n\t if (!pressedKeys) {\r\n\t resetPressedKeys();\r\n\t addListener(window, \"focus\", resetPressedKeys);\r\n\t }\r\n\t }\r\n\t};\r\n\tfunction resetPressedKeys() {\r\n\t pressedKeys = Object.create(null);\r\n\t pressedKeys.count = 0;\r\n\t pressedKeys.lastT = 0;\r\n\t}\r\n\r\n\tif (typeof window == \"object\" && window.postMessage && !useragent.isOldIE) {\r\n\t var postMessageId = 1;\r\n\t exports.nextTick = function(callback, win) {\r\n\t win = win || window;\r\n\t var messageName = \"zero-timeout-message-\" + postMessageId;\r\n\t exports.addListener(win, \"message\", function listener(e) {\r\n\t if (e.data == messageName) {\r\n\t exports.stopPropagation(e);\r\n\t exports.removeListener(win, \"message\", listener);\r\n\t callback();\r\n\t }\r\n\t });\r\n\t win.postMessage(messageName, \"*\");\r\n\t };\r\n\t}\r\n\r\n\r\n\texports.nextFrame = typeof window == \"object\" && (window.requestAnimationFrame\r\n\t || window.mozRequestAnimationFrame\r\n\t || window.webkitRequestAnimationFrame\r\n\t || window.msRequestAnimationFrame\r\n\t || window.oRequestAnimationFrame);\r\n\r\n\tif (exports.nextFrame)\r\n\t exports.nextFrame = exports.nextFrame.bind(window);\r\n\telse\r\n\t exports.nextFrame = function(callback) {\r\n\t setTimeout(callback, 17);\r\n\t };\r\n\t});\r\n\r\n\tace.define(\"ace/lib/lang\",[\"require\",\"exports\",\"module\"], function(acequire, exports, module) {\r\n\t\"use strict\";\r\n\r\n\texports.last = function(a) {\r\n\t return a[a.length - 1];\r\n\t};\r\n\r\n\texports.stringReverse = function(string) {\r\n\t return string.split(\"\").reverse().join(\"\");\r\n\t};\r\n\r\n\texports.stringRepeat = function (string, count) {\r\n\t var result = '';\r\n\t while (count > 0) {\r\n\t if (count & 1)\r\n\t result += string;\r\n\r\n\t if (count >>= 1)\r\n\t string += string;\r\n\t }\r\n\t return result;\r\n\t};\r\n\r\n\tvar trimBeginRegexp = /^\\s\\s*/;\r\n\tvar trimEndRegexp = /\\s\\s*$/;\r\n\r\n\texports.stringTrimLeft = function (string) {\r\n\t return string.replace(trimBeginRegexp, '');\r\n\t};\r\n\r\n\texports.stringTrimRight = function (string) {\r\n\t return string.replace(trimEndRegexp, '');\r\n\t};\r\n\r\n\texports.copyObject = function(obj) {\r\n\t var copy = {};\r\n\t for (var key in obj) {\r\n\t copy[key] = obj[key];\r\n\t }\r\n\t return copy;\r\n\t};\r\n\r\n\texports.copyArray = function(array){\r\n\t var copy = [];\r\n\t for (var i=0, l=array.length; i 1);\r\n\t return ev.preventDefault();\r\n\t };\r\n\r\n\t this.startSelect = function(pos, waitForClickSelection) {\r\n\t pos = pos || this.editor.renderer.screenToTextCoordinates(this.x, this.y);\r\n\t var editor = this.editor;\r\n\t editor.$blockScrolling++;\r\n\t if (this.mousedownEvent.getShiftKey())\r\n\t editor.selection.selectToPosition(pos);\r\n\t else if (!waitForClickSelection)\r\n\t editor.selection.moveToPosition(pos);\r\n\t if (!waitForClickSelection)\r\n\t this.select();\r\n\t if (editor.renderer.scroller.setCapture) {\r\n\t editor.renderer.scroller.setCapture();\r\n\t }\r\n\t editor.setStyle(\"ace_selecting\");\r\n\t this.setState(\"select\");\r\n\t editor.$blockScrolling--;\r\n\t };\r\n\r\n\t this.select = function() {\r\n\t var anchor, editor = this.editor;\r\n\t var cursor = editor.renderer.screenToTextCoordinates(this.x, this.y);\r\n\t editor.$blockScrolling++;\r\n\t if (this.$clickSelection) {\r\n\t var cmp = this.$clickSelection.comparePoint(cursor);\r\n\r\n\t if (cmp == -1) {\r\n\t anchor = this.$clickSelection.end;\r\n\t } else if (cmp == 1) {\r\n\t anchor = this.$clickSelection.start;\r\n\t } else {\r\n\t var orientedRange = calcRangeOrientation(this.$clickSelection, cursor);\r\n\t cursor = orientedRange.cursor;\r\n\t anchor = orientedRange.anchor;\r\n\t }\r\n\t editor.selection.setSelectionAnchor(anchor.row, anchor.column);\r\n\t }\r\n\t editor.selection.selectToPosition(cursor);\r\n\t editor.$blockScrolling--;\r\n\t editor.renderer.scrollCursorIntoView();\r\n\t };\r\n\r\n\t this.extendSelectionBy = function(unitName) {\r\n\t var anchor, editor = this.editor;\r\n\t var cursor = editor.renderer.screenToTextCoordinates(this.x, this.y);\r\n\t var range = editor.selection[unitName](cursor.row, cursor.column);\r\n\t editor.$blockScrolling++;\r\n\t if (this.$clickSelection) {\r\n\t var cmpStart = this.$clickSelection.comparePoint(range.start);\r\n\t var cmpEnd = this.$clickSelection.comparePoint(range.end);\r\n\r\n\t if (cmpStart == -1 && cmpEnd <= 0) {\r\n\t anchor = this.$clickSelection.end;\r\n\t if (range.end.row != cursor.row || range.end.column != cursor.column)\r\n\t cursor = range.start;\r\n\t } else if (cmpEnd == 1 && cmpStart >= 0) {\r\n\t anchor = this.$clickSelection.start;\r\n\t if (range.start.row != cursor.row || range.start.column != cursor.column)\r\n\t cursor = range.end;\r\n\t } else if (cmpStart == -1 && cmpEnd == 1) {\r\n\t cursor = range.end;\r\n\t anchor = range.start;\r\n\t } else {\r\n\t var orientedRange = calcRangeOrientation(this.$clickSelection, cursor);\r\n\t cursor = orientedRange.cursor;\r\n\t anchor = orientedRange.anchor;\r\n\t }\r\n\t editor.selection.setSelectionAnchor(anchor.row, anchor.column);\r\n\t }\r\n\t editor.selection.selectToPosition(cursor);\r\n\t editor.$blockScrolling--;\r\n\t editor.renderer.scrollCursorIntoView();\r\n\t };\r\n\r\n\t this.selectEnd =\r\n\t this.selectAllEnd =\r\n\t this.selectByWordsEnd =\r\n\t this.selectByLinesEnd = function() {\r\n\t this.$clickSelection = null;\r\n\t this.editor.unsetStyle(\"ace_selecting\");\r\n\t if (this.editor.renderer.scroller.releaseCapture) {\r\n\t this.editor.renderer.scroller.releaseCapture();\r\n\t }\r\n\t };\r\n\r\n\t this.focusWait = function() {\r\n\t var distance = calcDistance(this.mousedownEvent.x, this.mousedownEvent.y, this.x, this.y);\r\n\t var time = Date.now();\r\n\r\n\t if (distance > DRAG_OFFSET || time - this.mousedownEvent.time > this.$focusTimout)\r\n\t this.startSelect(this.mousedownEvent.getDocumentPosition());\r\n\t };\r\n\r\n\t this.onDoubleClick = function(ev) {\r\n\t var pos = ev.getDocumentPosition();\r\n\t var editor = this.editor;\r\n\t var session = editor.session;\r\n\r\n\t var range = session.getBracketRange(pos);\r\n\t if (range) {\r\n\t if (range.isEmpty()) {\r\n\t range.start.column--;\r\n\t range.end.column++;\r\n\t }\r\n\t this.setState(\"select\");\r\n\t } else {\r\n\t range = editor.selection.getWordRange(pos.row, pos.column);\r\n\t this.setState(\"selectByWords\");\r\n\t }\r\n\t this.$clickSelection = range;\r\n\t this.select();\r\n\t };\r\n\r\n\t this.onTripleClick = function(ev) {\r\n\t var pos = ev.getDocumentPosition();\r\n\t var editor = this.editor;\r\n\r\n\t this.setState(\"selectByLines\");\r\n\t var range = editor.getSelectionRange();\r\n\t if (range.isMultiLine() && range.contains(pos.row, pos.column)) {\r\n\t this.$clickSelection = editor.selection.getLineRange(range.start.row);\r\n\t this.$clickSelection.end = editor.selection.getLineRange(range.end.row).end;\r\n\t } else {\r\n\t this.$clickSelection = editor.selection.getLineRange(pos.row);\r\n\t }\r\n\t this.select();\r\n\t };\r\n\r\n\t this.onQuadClick = function(ev) {\r\n\t var editor = this.editor;\r\n\r\n\t editor.selectAll();\r\n\t this.$clickSelection = editor.getSelectionRange();\r\n\t this.setState(\"selectAll\");\r\n\t };\r\n\r\n\t this.onMouseWheel = function(ev) {\r\n\t if (ev.getAccelKey())\r\n\t return;\r\n\t if (ev.getShiftKey() && ev.wheelY && !ev.wheelX) {\r\n\t ev.wheelX = ev.wheelY;\r\n\t ev.wheelY = 0;\r\n\t }\r\n\r\n\t var t = ev.domEvent.timeStamp;\r\n\t var dt = t - (this.$lastScrollTime||0);\r\n\t \r\n\t var editor = this.editor;\r\n\t var isScrolable = editor.renderer.isScrollableBy(ev.wheelX * ev.speed, ev.wheelY * ev.speed);\r\n\t if (isScrolable || dt < 200) {\r\n\t this.$lastScrollTime = t;\r\n\t editor.renderer.scrollBy(ev.wheelX * ev.speed, ev.wheelY * ev.speed);\r\n\t return ev.stop();\r\n\t }\r\n\t };\r\n\t \r\n\t this.onTouchMove = function (ev) {\r\n\t var t = ev.domEvent.timeStamp;\r\n\t var dt = t - (this.$lastScrollTime || 0);\r\n\r\n\t var editor = this.editor;\r\n\t var isScrolable = editor.renderer.isScrollableBy(ev.wheelX * ev.speed, ev.wheelY * ev.speed);\r\n\t if (isScrolable || dt < 200) {\r\n\t this.$lastScrollTime = t;\r\n\t editor.renderer.scrollBy(ev.wheelX * ev.speed, ev.wheelY * ev.speed);\r\n\t return ev.stop();\r\n\t }\r\n\t };\r\n\r\n\t}).call(DefaultHandlers.prototype);\r\n\r\n\texports.DefaultHandlers = DefaultHandlers;\r\n\r\n\tfunction calcDistance(ax, ay, bx, by) {\r\n\t return Math.sqrt(Math.pow(bx - ax, 2) + Math.pow(by - ay, 2));\r\n\t}\r\n\r\n\tfunction calcRangeOrientation(range, cursor) {\r\n\t if (range.start.row == range.end.row)\r\n\t var cmp = 2 * cursor.column - range.start.column - range.end.column;\r\n\t else if (range.start.row == range.end.row - 1 && !range.start.column && !range.end.column)\r\n\t var cmp = cursor.column - 4;\r\n\t else\r\n\t var cmp = 2 * cursor.row - range.start.row - range.end.row;\r\n\r\n\t if (cmp < 0)\r\n\t return {cursor: range.start, anchor: range.end};\r\n\t else\r\n\t return {cursor: range.end, anchor: range.start};\r\n\t}\r\n\r\n\t});\r\n\r\n\tace.define(\"ace/tooltip\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/dom\"], function(acequire, exports, module) {\r\n\t\"use strict\";\r\n\r\n\tvar oop = acequire(\"./lib/oop\");\r\n\tvar dom = acequire(\"./lib/dom\");\r\n\tfunction Tooltip (parentNode) {\r\n\t this.isOpen = false;\r\n\t this.$element = null;\r\n\t this.$parentNode = parentNode;\r\n\t}\r\n\r\n\t(function() {\r\n\t this.$init = function() {\r\n\t this.$element = dom.createElement(\"div\");\r\n\t this.$element.className = \"ace_tooltip\";\r\n\t this.$element.style.display = \"none\";\r\n\t this.$parentNode.appendChild(this.$element);\r\n\t return this.$element;\r\n\t };\r\n\t this.getElement = function() {\r\n\t return this.$element || this.$init();\r\n\t };\r\n\t this.setText = function(text) {\r\n\t dom.setInnerText(this.getElement(), text);\r\n\t };\r\n\t this.setHtml = function(html) {\r\n\t this.getElement().innerHTML = html;\r\n\t };\r\n\t this.setPosition = function(x, y) {\r\n\t this.getElement().style.left = x + \"px\";\r\n\t this.getElement().style.top = y + \"px\";\r\n\t };\r\n\t this.setClassName = function(className) {\r\n\t dom.addCssClass(this.getElement(), className);\r\n\t };\r\n\t this.show = function(text, x, y) {\r\n\t if (text != null)\r\n\t this.setText(text);\r\n\t if (x != null && y != null)\r\n\t this.setPosition(x, y);\r\n\t if (!this.isOpen) {\r\n\t this.getElement().style.display = \"block\";\r\n\t this.isOpen = true;\r\n\t }\r\n\t };\r\n\r\n\t this.hide = function() {\r\n\t if (this.isOpen) {\r\n\t this.getElement().style.display = \"none\";\r\n\t this.isOpen = false;\r\n\t }\r\n\t };\r\n\t this.getHeight = function() {\r\n\t return this.getElement().offsetHeight;\r\n\t };\r\n\t this.getWidth = function() {\r\n\t return this.getElement().offsetWidth;\r\n\t };\r\n\r\n\t}).call(Tooltip.prototype);\r\n\r\n\texports.Tooltip = Tooltip;\r\n\t});\r\n\r\n\tace.define(\"ace/mouse/default_gutter_handler\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\",\"ace/lib/oop\",\"ace/lib/event\",\"ace/tooltip\"], function(acequire, exports, module) {\r\n\t\"use strict\";\r\n\tvar dom = acequire(\"../lib/dom\");\r\n\tvar oop = acequire(\"../lib/oop\");\r\n\tvar event = acequire(\"../lib/event\");\r\n\tvar Tooltip = acequire(\"../tooltip\").Tooltip;\r\n\r\n\tfunction GutterHandler(mouseHandler) {\r\n\t var editor = mouseHandler.editor;\r\n\t var gutter = editor.renderer.$gutterLayer;\r\n\t var tooltip = new GutterTooltip(editor.container);\r\n\r\n\t mouseHandler.editor.setDefaultHandler(\"guttermousedown\", function(e) {\r\n\t if (!editor.isFocused() || e.getButton() != 0)\r\n\t return;\r\n\t var gutterRegion = gutter.getRegion(e);\r\n\r\n\t if (gutterRegion == \"foldWidgets\")\r\n\t return;\r\n\r\n\t var row = e.getDocumentPosition().row;\r\n\t var selection = editor.session.selection;\r\n\r\n\t if (e.getShiftKey())\r\n\t selection.selectTo(row, 0);\r\n\t else {\r\n\t if (e.domEvent.detail == 2) {\r\n\t editor.selectAll();\r\n\t return e.preventDefault();\r\n\t }\r\n\t mouseHandler.$clickSelection = editor.selection.getLineRange(row);\r\n\t }\r\n\t mouseHandler.setState(\"selectByLines\");\r\n\t mouseHandler.captureMouse(e);\r\n\t return e.preventDefault();\r\n\t });\r\n\r\n\r\n\t var tooltipTimeout, mouseEvent, tooltipAnnotation;\r\n\r\n\t function showTooltip() {\r\n\t var row = mouseEvent.getDocumentPosition().row;\r\n\t var annotation = gutter.$annotations[row];\r\n\t if (!annotation)\r\n\t return hideTooltip();\r\n\r\n\t var maxRow = editor.session.getLength();\r\n\t if (row == maxRow) {\r\n\t var screenRow = editor.renderer.pixelToScreenCoordinates(0, mouseEvent.y).row;\r\n\t var pos = mouseEvent.$pos;\r\n\t if (screenRow > editor.session.documentToScreenRow(pos.row, pos.column))\r\n\t return hideTooltip();\r\n\t }\r\n\r\n\t if (tooltipAnnotation == annotation)\r\n\t return;\r\n\t tooltipAnnotation = annotation.text.join(\"
\");\r\n\r\n\t tooltip.setHtml(tooltipAnnotation);\r\n\t tooltip.show();\r\n\t editor.on(\"mousewheel\", hideTooltip);\r\n\r\n\t if (mouseHandler.$tooltipFollowsMouse) {\r\n\t moveTooltip(mouseEvent);\r\n\t } else {\r\n\t var gutterElement = mouseEvent.domEvent.target;\r\n\t var rect = gutterElement.getBoundingClientRect();\r\n\t var style = tooltip.getElement().style;\r\n\t style.left = rect.right + \"px\";\r\n\t style.top = rect.bottom + \"px\";\r\n\t }\r\n\t }\r\n\r\n\t function hideTooltip() {\r\n\t if (tooltipTimeout)\r\n\t tooltipTimeout = clearTimeout(tooltipTimeout);\r\n\t if (tooltipAnnotation) {\r\n\t tooltip.hide();\r\n\t tooltipAnnotation = null;\r\n\t editor.removeEventListener(\"mousewheel\", hideTooltip);\r\n\t }\r\n\t }\r\n\r\n\t function moveTooltip(e) {\r\n\t tooltip.setPosition(e.x, e.y);\r\n\t }\r\n\r\n\t mouseHandler.editor.setDefaultHandler(\"guttermousemove\", function(e) {\r\n\t var target = e.domEvent.target || e.domEvent.srcElement;\r\n\t if (dom.hasCssClass(target, \"ace_fold-widget\"))\r\n\t return hideTooltip();\r\n\r\n\t if (tooltipAnnotation && mouseHandler.$tooltipFollowsMouse)\r\n\t moveTooltip(e);\r\n\r\n\t mouseEvent = e;\r\n\t if (tooltipTimeout)\r\n\t return;\r\n\t tooltipTimeout = setTimeout(function() {\r\n\t tooltipTimeout = null;\r\n\t if (mouseEvent && !mouseHandler.isMousePressed)\r\n\t showTooltip();\r\n\t else\r\n\t hideTooltip();\r\n\t }, 50);\r\n\t });\r\n\r\n\t event.addListener(editor.renderer.$gutter, \"mouseout\", function(e) {\r\n\t mouseEvent = null;\r\n\t if (!tooltipAnnotation || tooltipTimeout)\r\n\t return;\r\n\r\n\t tooltipTimeout = setTimeout(function() {\r\n\t tooltipTimeout = null;\r\n\t hideTooltip();\r\n\t }, 50);\r\n\t });\r\n\t \r\n\t editor.on(\"changeSession\", hideTooltip);\r\n\t}\r\n\r\n\tfunction GutterTooltip(parentNode) {\r\n\t Tooltip.call(this, parentNode);\r\n\t}\r\n\r\n\toop.inherits(GutterTooltip, Tooltip);\r\n\r\n\t(function(){\r\n\t this.setPosition = function(x, y) {\r\n\t var windowWidth = window.innerWidth || document.documentElement.clientWidth;\r\n\t var windowHeight = window.innerHeight || document.documentElement.clientHeight;\r\n\t var width = this.getWidth();\r\n\t var height = this.getHeight();\r\n\t x += 15;\r\n\t y += 15;\r\n\t if (x + width > windowWidth) {\r\n\t x -= (x + width) - windowWidth;\r\n\t }\r\n\t if (y + height > windowHeight) {\r\n\t y -= 20 + height;\r\n\t }\r\n\t Tooltip.prototype.setPosition.call(this, x, y);\r\n\t };\r\n\r\n\t}).call(GutterTooltip.prototype);\r\n\r\n\r\n\r\n\texports.GutterHandler = GutterHandler;\r\n\r\n\t});\r\n\r\n\tace.define(\"ace/mouse/mouse_event\",[\"require\",\"exports\",\"module\",\"ace/lib/event\",\"ace/lib/useragent\"], function(acequire, exports, module) {\r\n\t\"use strict\";\r\n\r\n\tvar event = acequire(\"../lib/event\");\r\n\tvar useragent = acequire(\"../lib/useragent\");\r\n\tvar MouseEvent = exports.MouseEvent = function(domEvent, editor) {\r\n\t this.domEvent = domEvent;\r\n\t this.editor = editor;\r\n\t \r\n\t this.x = this.clientX = domEvent.clientX;\r\n\t this.y = this.clientY = domEvent.clientY;\r\n\r\n\t this.$pos = null;\r\n\t this.$inSelection = null;\r\n\t \r\n\t this.propagationStopped = false;\r\n\t this.defaultPrevented = false;\r\n\t};\r\n\r\n\t(function() { \r\n\t \r\n\t this.stopPropagation = function() {\r\n\t event.stopPropagation(this.domEvent);\r\n\t this.propagationStopped = true;\r\n\t };\r\n\t \r\n\t this.preventDefault = function() {\r\n\t event.preventDefault(this.domEvent);\r\n\t this.defaultPrevented = true;\r\n\t };\r\n\t \r\n\t this.stop = function() {\r\n\t this.stopPropagation();\r\n\t this.preventDefault();\r\n\t };\r\n\t this.getDocumentPosition = function() {\r\n\t if (this.$pos)\r\n\t return this.$pos;\r\n\t \r\n\t this.$pos = this.editor.renderer.screenToTextCoordinates(this.clientX, this.clientY);\r\n\t return this.$pos;\r\n\t };\r\n\t this.inSelection = function() {\r\n\t if (this.$inSelection !== null)\r\n\t return this.$inSelection;\r\n\t \r\n\t var editor = this.editor;\r\n\t \r\n\r\n\t var selectionRange = editor.getSelectionRange();\r\n\t if (selectionRange.isEmpty())\r\n\t this.$inSelection = false;\r\n\t else {\r\n\t var pos = this.getDocumentPosition();\r\n\t this.$inSelection = selectionRange.contains(pos.row, pos.column);\r\n\t }\r\n\r\n\t return this.$inSelection;\r\n\t };\r\n\t this.getButton = function() {\r\n\t return event.getButton(this.domEvent);\r\n\t };\r\n\t this.getShiftKey = function() {\r\n\t return this.domEvent.shiftKey;\r\n\t };\r\n\t \r\n\t this.getAccelKey = useragent.isMac\r\n\t ? function() { return this.domEvent.metaKey; }\r\n\t : function() { return this.domEvent.ctrlKey; };\r\n\t \r\n\t}).call(MouseEvent.prototype);\r\n\r\n\t});\r\n\r\n\tace.define(\"ace/mouse/dragdrop_handler\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\",\"ace/lib/event\",\"ace/lib/useragent\"], function(acequire, exports, module) {\r\n\t\"use strict\";\r\n\r\n\tvar dom = acequire(\"../lib/dom\");\r\n\tvar event = acequire(\"../lib/event\");\r\n\tvar useragent = acequire(\"../lib/useragent\");\r\n\r\n\tvar AUTOSCROLL_DELAY = 200;\r\n\tvar SCROLL_CURSOR_DELAY = 200;\r\n\tvar SCROLL_CURSOR_HYSTERESIS = 5;\r\n\r\n\tfunction DragdropHandler(mouseHandler) {\r\n\r\n\t var editor = mouseHandler.editor;\r\n\r\n\t var blankImage = dom.createElement(\"img\");\r\n\t blankImage.src = \"data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\";\r\n\t if (useragent.isOpera)\r\n\t blankImage.style.cssText = \"width:1px;height:1px;position:fixed;top:0;left:0;z-index:2147483647;opacity:0;\";\r\n\r\n\t var exports = [\"dragWait\", \"dragWaitEnd\", \"startDrag\", \"dragReadyEnd\", \"onMouseDrag\"];\r\n\r\n\t exports.forEach(function(x) {\r\n\t mouseHandler[x] = this[x];\r\n\t }, this);\r\n\t editor.addEventListener(\"mousedown\", this.onMouseDown.bind(mouseHandler));\r\n\r\n\r\n\t var mouseTarget = editor.container;\r\n\t var dragSelectionMarker, x, y;\r\n\t var timerId, range;\r\n\t var dragCursor, counter = 0;\r\n\t var dragOperation;\r\n\t var isInternal;\r\n\t var autoScrollStartTime;\r\n\t var cursorMovedTime;\r\n\t var cursorPointOnCaretMoved;\r\n\r\n\t this.onDragStart = function(e) {\r\n\t if (this.cancelDrag || !mouseTarget.draggable) {\r\n\t var self = this;\r\n\t setTimeout(function(){\r\n\t self.startSelect();\r\n\t self.captureMouse(e);\r\n\t }, 0);\r\n\t return e.preventDefault();\r\n\t }\r\n\t range = editor.getSelectionRange();\r\n\r\n\t var dataTransfer = e.dataTransfer;\r\n\t dataTransfer.effectAllowed = editor.getReadOnly() ? \"copy\" : \"copyMove\";\r\n\t if (useragent.isOpera) {\r\n\t editor.container.appendChild(blankImage);\r\n\t blankImage.scrollTop = 0;\r\n\t }\r\n\t dataTransfer.setDragImage && dataTransfer.setDragImage(blankImage, 0, 0);\r\n\t if (useragent.isOpera) {\r\n\t editor.container.removeChild(blankImage);\r\n\t }\r\n\t dataTransfer.clearData();\r\n\t dataTransfer.setData(\"Text\", editor.session.getTextRange());\r\n\r\n\t isInternal = true;\r\n\t this.setState(\"drag\");\r\n\t };\r\n\r\n\t this.onDragEnd = function(e) {\r\n\t mouseTarget.draggable = false;\r\n\t isInternal = false;\r\n\t this.setState(null);\r\n\t if (!editor.getReadOnly()) {\r\n\t var dropEffect = e.dataTransfer.dropEffect;\r\n\t if (!dragOperation && dropEffect == \"move\")\r\n\t editor.session.remove(editor.getSelectionRange());\r\n\t editor.renderer.$cursorLayer.setBlinking(true);\r\n\t }\r\n\t this.editor.unsetStyle(\"ace_dragging\");\r\n\t this.editor.renderer.setCursorStyle(\"\");\r\n\t };\r\n\r\n\t this.onDragEnter = function(e) {\r\n\t if (editor.getReadOnly() || !canAccept(e.dataTransfer))\r\n\t return;\r\n\t x = e.clientX;\r\n\t y = e.clientY;\r\n\t if (!dragSelectionMarker)\r\n\t addDragMarker();\r\n\t counter++;\r\n\t e.dataTransfer.dropEffect = dragOperation = getDropEffect(e);\r\n\t return event.preventDefault(e);\r\n\t };\r\n\r\n\t this.onDragOver = function(e) {\r\n\t if (editor.getReadOnly() || !canAccept(e.dataTransfer))\r\n\t return;\r\n\t x = e.clientX;\r\n\t y = e.clientY;\r\n\t if (!dragSelectionMarker) {\r\n\t addDragMarker();\r\n\t counter++;\r\n\t }\r\n\t if (onMouseMoveTimer !== null)\r\n\t onMouseMoveTimer = null;\r\n\r\n\t e.dataTransfer.dropEffect = dragOperation = getDropEffect(e);\r\n\t return event.preventDefault(e);\r\n\t };\r\n\r\n\t this.onDragLeave = function(e) {\r\n\t counter--;\r\n\t if (counter <= 0 && dragSelectionMarker) {\r\n\t clearDragMarker();\r\n\t dragOperation = null;\r\n\t return event.preventDefault(e);\r\n\t }\r\n\t };\r\n\r\n\t this.onDrop = function(e) {\r\n\t if (!dragCursor)\r\n\t return;\r\n\t var dataTransfer = e.dataTransfer;\r\n\t if (isInternal) {\r\n\t switch (dragOperation) {\r\n\t case \"move\":\r\n\t if (range.contains(dragCursor.row, dragCursor.column)) {\r\n\t range = {\r\n\t start: dragCursor,\r\n\t end: dragCursor\r\n\t };\r\n\t } else {\r\n\t range = editor.moveText(range, dragCursor);\r\n\t }\r\n\t break;\r\n\t case \"copy\":\r\n\t range = editor.moveText(range, dragCursor, true);\r\n\t break;\r\n\t }\r\n\t } else {\r\n\t var dropData = dataTransfer.getData('Text');\r\n\t range = {\r\n\t start: dragCursor,\r\n\t end: editor.session.insert(dragCursor, dropData)\r\n\t };\r\n\t editor.focus();\r\n\t dragOperation = null;\r\n\t }\r\n\t clearDragMarker();\r\n\t return event.preventDefault(e);\r\n\t };\r\n\r\n\t event.addListener(mouseTarget, \"dragstart\", this.onDragStart.bind(mouseHandler));\r\n\t event.addListener(mouseTarget, \"dragend\", this.onDragEnd.bind(mouseHandler));\r\n\t event.addListener(mouseTarget, \"dragenter\", this.onDragEnter.bind(mouseHandler));\r\n\t event.addListener(mouseTarget, \"dragover\", this.onDragOver.bind(mouseHandler));\r\n\t event.addListener(mouseTarget, \"dragleave\", this.onDragLeave.bind(mouseHandler));\r\n\t event.addListener(mouseTarget, \"drop\", this.onDrop.bind(mouseHandler));\r\n\r\n\t function scrollCursorIntoView(cursor, prevCursor) {\r\n\t var now = Date.now();\r\n\t var vMovement = !prevCursor || cursor.row != prevCursor.row;\r\n\t var hMovement = !prevCursor || cursor.column != prevCursor.column;\r\n\t if (!cursorMovedTime || vMovement || hMovement) {\r\n\t editor.$blockScrolling += 1;\r\n\t editor.moveCursorToPosition(cursor);\r\n\t editor.$blockScrolling -= 1;\r\n\t cursorMovedTime = now;\r\n\t cursorPointOnCaretMoved = {x: x, y: y};\r\n\t } else {\r\n\t var distance = calcDistance(cursorPointOnCaretMoved.x, cursorPointOnCaretMoved.y, x, y);\r\n\t if (distance > SCROLL_CURSOR_HYSTERESIS) {\r\n\t cursorMovedTime = null;\r\n\t } else if (now - cursorMovedTime >= SCROLL_CURSOR_DELAY) {\r\n\t editor.renderer.scrollCursorIntoView();\r\n\t cursorMovedTime = null;\r\n\t }\r\n\t }\r\n\t }\r\n\r\n\t function autoScroll(cursor, prevCursor) {\r\n\t var now = Date.now();\r\n\t var lineHeight = editor.renderer.layerConfig.lineHeight;\r\n\t var characterWidth = editor.renderer.layerConfig.characterWidth;\r\n\t var editorRect = editor.renderer.scroller.getBoundingClientRect();\r\n\t var offsets = {\r\n\t x: {\r\n\t left: x - editorRect.left,\r\n\t right: editorRect.right - x\r\n\t },\r\n\t y: {\r\n\t top: y - editorRect.top,\r\n\t bottom: editorRect.bottom - y\r\n\t }\r\n\t };\r\n\t var nearestXOffset = Math.min(offsets.x.left, offsets.x.right);\r\n\t var nearestYOffset = Math.min(offsets.y.top, offsets.y.bottom);\r\n\t var scrollCursor = {row: cursor.row, column: cursor.column};\r\n\t if (nearestXOffset / characterWidth <= 2) {\r\n\t scrollCursor.column += (offsets.x.left < offsets.x.right ? -3 : +2);\r\n\t }\r\n\t if (nearestYOffset / lineHeight <= 1) {\r\n\t scrollCursor.row += (offsets.y.top < offsets.y.bottom ? -1 : +1);\r\n\t }\r\n\t var vScroll = cursor.row != scrollCursor.row;\r\n\t var hScroll = cursor.column != scrollCursor.column;\r\n\t var vMovement = !prevCursor || cursor.row != prevCursor.row;\r\n\t if (vScroll || (hScroll && !vMovement)) {\r\n\t if (!autoScrollStartTime)\r\n\t autoScrollStartTime = now;\r\n\t else if (now - autoScrollStartTime >= AUTOSCROLL_DELAY)\r\n\t editor.renderer.scrollCursorIntoView(scrollCursor);\r\n\t } else {\r\n\t autoScrollStartTime = null;\r\n\t }\r\n\t }\r\n\r\n\t function onDragInterval() {\r\n\t var prevCursor = dragCursor;\r\n\t dragCursor = editor.renderer.screenToTextCoordinates(x, y);\r\n\t scrollCursorIntoView(dragCursor, prevCursor);\r\n\t autoScroll(dragCursor, prevCursor);\r\n\t }\r\n\r\n\t function addDragMarker() {\r\n\t range = editor.selection.toOrientedRange();\r\n\t dragSelectionMarker = editor.session.addMarker(range, \"ace_selection\", editor.getSelectionStyle());\r\n\t editor.clearSelection();\r\n\t if (editor.isFocused())\r\n\t editor.renderer.$cursorLayer.setBlinking(false);\r\n\t clearInterval(timerId);\r\n\t onDragInterval();\r\n\t timerId = setInterval(onDragInterval, 20);\r\n\t counter = 0;\r\n\t event.addListener(document, \"mousemove\", onMouseMove);\r\n\t }\r\n\r\n\t function clearDragMarker() {\r\n\t clearInterval(timerId);\r\n\t editor.session.removeMarker(dragSelectionMarker);\r\n\t dragSelectionMarker = null;\r\n\t editor.$blockScrolling += 1;\r\n\t editor.selection.fromOrientedRange(range);\r\n\t editor.$blockScrolling -= 1;\r\n\t if (editor.isFocused() && !isInternal)\r\n\t editor.renderer.$cursorLayer.setBlinking(!editor.getReadOnly());\r\n\t range = null;\r\n\t dragCursor = null;\r\n\t counter = 0;\r\n\t autoScrollStartTime = null;\r\n\t cursorMovedTime = null;\r\n\t event.removeListener(document, \"mousemove\", onMouseMove);\r\n\t }\r\n\t var onMouseMoveTimer = null;\r\n\t function onMouseMove() {\r\n\t if (onMouseMoveTimer == null) {\r\n\t onMouseMoveTimer = setTimeout(function() {\r\n\t if (onMouseMoveTimer != null && dragSelectionMarker)\r\n\t clearDragMarker();\r\n\t }, 20);\r\n\t }\r\n\t }\r\n\r\n\t function canAccept(dataTransfer) {\r\n\t var types = dataTransfer.types;\r\n\t return !types || Array.prototype.some.call(types, function(type) {\r\n\t return type == 'text/plain' || type == 'Text';\r\n\t });\r\n\t }\r\n\r\n\t function getDropEffect(e) {\r\n\t var copyAllowed = ['copy', 'copymove', 'all', 'uninitialized'];\r\n\t var moveAllowed = ['move', 'copymove', 'linkmove', 'all', 'uninitialized'];\r\n\r\n\t var copyModifierState = useragent.isMac ? e.altKey : e.ctrlKey;\r\n\t var effectAllowed = \"uninitialized\";\r\n\t try {\r\n\t effectAllowed = e.dataTransfer.effectAllowed.toLowerCase();\r\n\t } catch (e) {}\r\n\t var dropEffect = \"none\";\r\n\r\n\t if (copyModifierState && copyAllowed.indexOf(effectAllowed) >= 0)\r\n\t dropEffect = \"copy\";\r\n\t else if (moveAllowed.indexOf(effectAllowed) >= 0)\r\n\t dropEffect = \"move\";\r\n\t else if (copyAllowed.indexOf(effectAllowed) >= 0)\r\n\t dropEffect = \"copy\";\r\n\r\n\t return dropEffect;\r\n\t }\r\n\t}\r\n\r\n\t(function() {\r\n\r\n\t this.dragWait = function() {\r\n\t var interval = Date.now() - this.mousedownEvent.time;\r\n\t if (interval > this.editor.getDragDelay())\r\n\t this.startDrag();\r\n\t };\r\n\r\n\t this.dragWaitEnd = function() {\r\n\t var target = this.editor.container;\r\n\t target.draggable = false;\r\n\t this.startSelect(this.mousedownEvent.getDocumentPosition());\r\n\t this.selectEnd();\r\n\t };\r\n\r\n\t this.dragReadyEnd = function(e) {\r\n\t this.editor.renderer.$cursorLayer.setBlinking(!this.editor.getReadOnly());\r\n\t this.editor.unsetStyle(\"ace_dragging\");\r\n\t this.editor.renderer.setCursorStyle(\"\");\r\n\t this.dragWaitEnd();\r\n\t };\r\n\r\n\t this.startDrag = function(){\r\n\t this.cancelDrag = false;\r\n\t var editor = this.editor;\r\n\t var target = editor.container;\r\n\t target.draggable = true;\r\n\t editor.renderer.$cursorLayer.setBlinking(false);\r\n\t editor.setStyle(\"ace_dragging\");\r\n\t var cursorStyle = useragent.isWin ? \"default\" : \"move\";\r\n\t editor.renderer.setCursorStyle(cursorStyle);\r\n\t this.setState(\"dragReady\");\r\n\t };\r\n\r\n\t this.onMouseDrag = function(e) {\r\n\t var target = this.editor.container;\r\n\t if (useragent.isIE && this.state == \"dragReady\") {\r\n\t var distance = calcDistance(this.mousedownEvent.x, this.mousedownEvent.y, this.x, this.y);\r\n\t if (distance > 3)\r\n\t target.dragDrop();\r\n\t }\r\n\t if (this.state === \"dragWait\") {\r\n\t var distance = calcDistance(this.mousedownEvent.x, this.mousedownEvent.y, this.x, this.y);\r\n\t if (distance > 0) {\r\n\t target.draggable = false;\r\n\t this.startSelect(this.mousedownEvent.getDocumentPosition());\r\n\t }\r\n\t }\r\n\t };\r\n\r\n\t this.onMouseDown = function(e) {\r\n\t if (!this.$dragEnabled)\r\n\t return;\r\n\t this.mousedownEvent = e;\r\n\t var editor = this.editor;\r\n\r\n\t var inSelection = e.inSelection();\r\n\t var button = e.getButton();\r\n\t var clickCount = e.domEvent.detail || 1;\r\n\t if (clickCount === 1 && button === 0 && inSelection) {\r\n\t if (e.editor.inMultiSelectMode && (e.getAccelKey() || e.getShiftKey()))\r\n\t return;\r\n\t this.mousedownEvent.time = Date.now();\r\n\t var eventTarget = e.domEvent.target || e.domEvent.srcElement;\r\n\t if (\"unselectable\" in eventTarget)\r\n\t eventTarget.unselectable = \"on\";\r\n\t if (editor.getDragDelay()) {\r\n\t if (useragent.isWebKit) {\r\n\t this.cancelDrag = true;\r\n\t var mouseTarget = editor.container;\r\n\t mouseTarget.draggable = true;\r\n\t }\r\n\t this.setState(\"dragWait\");\r\n\t } else {\r\n\t this.startDrag();\r\n\t }\r\n\t this.captureMouse(e, this.onMouseDrag.bind(this));\r\n\t e.defaultPrevented = true;\r\n\t }\r\n\t };\r\n\r\n\t}).call(DragdropHandler.prototype);\r\n\r\n\r\n\tfunction calcDistance(ax, ay, bx, by) {\r\n\t return Math.sqrt(Math.pow(bx - ax, 2) + Math.pow(by - ay, 2));\r\n\t}\r\n\r\n\texports.DragdropHandler = DragdropHandler;\r\n\r\n\t});\r\n\r\n\tace.define(\"ace/lib/net\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(acequire, exports, module) {\r\n\t\"use strict\";\r\n\tvar dom = acequire(\"./dom\");\r\n\r\n\texports.get = function (url, callback) {\r\n\t var xhr = new XMLHttpRequest();\r\n\t xhr.open('GET', url, true);\r\n\t xhr.onreadystatechange = function () {\r\n\t if (xhr.readyState === 4) {\r\n\t callback(xhr.responseText);\r\n\t }\r\n\t };\r\n\t xhr.send(null);\r\n\t};\r\n\r\n\texports.loadScript = function(path, callback) {\r\n\t var head = dom.getDocumentHead();\r\n\t var s = document.createElement('script');\r\n\r\n\t s.src = path;\r\n\t head.appendChild(s);\r\n\r\n\t s.onload = s.onreadystatechange = function(_, isAbort) {\r\n\t if (isAbort || !s.readyState || s.readyState == \"loaded\" || s.readyState == \"complete\") {\r\n\t s = s.onload = s.onreadystatechange = null;\r\n\t if (!isAbort)\r\n\t callback();\r\n\t }\r\n\t };\r\n\t};\r\n\texports.qualifyURL = function(url) {\r\n\t var a = document.createElement('a');\r\n\t a.href = url;\r\n\t return a.href;\r\n\t}\r\n\r\n\t});\r\n\r\n\tace.define(\"ace/lib/event_emitter\",[\"require\",\"exports\",\"module\"], function(acequire, exports, module) {\r\n\t\"use strict\";\r\n\r\n\tvar EventEmitter = {};\r\n\tvar stopPropagation = function() { this.propagationStopped = true; };\r\n\tvar preventDefault = function() { this.defaultPrevented = true; };\r\n\r\n\tEventEmitter._emit =\r\n\tEventEmitter._dispatchEvent = function(eventName, e) {\r\n\t this._eventRegistry || (this._eventRegistry = {});\r\n\t this._defaultHandlers || (this._defaultHandlers = {});\r\n\r\n\t var listeners = this._eventRegistry[eventName] || [];\r\n\t var defaultHandler = this._defaultHandlers[eventName];\r\n\t if (!listeners.length && !defaultHandler)\r\n\t return;\r\n\r\n\t if (typeof e != \"object\" || !e)\r\n\t e = {};\r\n\r\n\t if (!e.type)\r\n\t e.type = eventName;\r\n\t if (!e.stopPropagation)\r\n\t e.stopPropagation = stopPropagation;\r\n\t if (!e.preventDefault)\r\n\t e.preventDefault = preventDefault;\r\n\r\n\t listeners = listeners.slice();\r\n\t for (var i=0; i 1)\r\n\t base = parts[parts.length - 2];\r\n\t var path = options[component + \"Path\"];\r\n\t if (path == null) {\r\n\t path = options.basePath;\r\n\t } else if (sep == \"/\") {\r\n\t component = sep = \"\";\r\n\t }\r\n\t if (path && path.slice(-1) != \"/\")\r\n\t path += \"/\";\r\n\t return path + component + sep + base + this.get(\"suffix\");\r\n\t};\r\n\r\n\texports.setModuleUrl = function(name, subst) {\r\n\t return options.$moduleUrls[name] = subst;\r\n\t};\r\n\r\n\texports.$loading = {};\r\n\texports.loadModule = function(moduleName, onLoad) {\r\n\t var module, moduleType;\r\n\t if (Array.isArray(moduleName)) {\r\n\t moduleType = moduleName[0];\r\n\t moduleName = moduleName[1];\r\n\t }\r\n\r\n\t try {\r\n\t module = acequire(moduleName);\r\n\t } catch (e) {}\r\n\t if (module && !exports.$loading[moduleName])\r\n\t return onLoad && onLoad(module);\r\n\r\n\t if (!exports.$loading[moduleName])\r\n\t exports.$loading[moduleName] = [];\r\n\r\n\t exports.$loading[moduleName].push(onLoad);\r\n\r\n\t if (exports.$loading[moduleName].length > 1)\r\n\t return;\r\n\r\n\t var afterLoad = function() {\r\n\t acequire([moduleName], function(module) {\r\n\t exports._emit(\"load.module\", {name: moduleName, module: module});\r\n\t var listeners = exports.$loading[moduleName];\r\n\t exports.$loading[moduleName] = null;\r\n\t listeners.forEach(function(onLoad) {\r\n\t onLoad && onLoad(module);\r\n\t });\r\n\t });\r\n\t };\r\n\r\n\t if (!exports.get(\"packaged\"))\r\n\t return afterLoad();\r\n\t net.loadScript(exports.moduleUrl(moduleName, moduleType), afterLoad);\r\n\t};\r\n\tinit(true);function init(packaged) {\r\n\r\n\t if (!global || !global.document)\r\n\t return;\r\n\t \r\n\t options.packaged = packaged || acequire.packaged || module.packaged || (global.define && __webpack_require__(65).packaged);\r\n\r\n\t var scriptOptions = {};\r\n\t var scriptUrl = \"\";\r\n\t var currentScript = (document.currentScript || document._currentScript ); // native or polyfill\r\n\t var currentDocument = currentScript && currentScript.ownerDocument || document;\r\n\t \r\n\t var scripts = currentDocument.getElementsByTagName(\"script\");\r\n\t for (var i=0; i [\" + this.end.row + \"/\" + this.end.column + \"]\");\r\n\t };\r\n\r\n\t this.contains = function(row, column) {\r\n\t return this.compare(row, column) == 0;\r\n\t };\r\n\t this.compareRange = function(range) {\r\n\t var cmp,\r\n\t end = range.end,\r\n\t start = range.start;\r\n\r\n\t cmp = this.compare(end.row, end.column);\r\n\t if (cmp == 1) {\r\n\t cmp = this.compare(start.row, start.column);\r\n\t if (cmp == 1) {\r\n\t return 2;\r\n\t } else if (cmp == 0) {\r\n\t return 1;\r\n\t } else {\r\n\t return 0;\r\n\t }\r\n\t } else if (cmp == -1) {\r\n\t return -2;\r\n\t } else {\r\n\t cmp = this.compare(start.row, start.column);\r\n\t if (cmp == -1) {\r\n\t return -1;\r\n\t } else if (cmp == 1) {\r\n\t return 42;\r\n\t } else {\r\n\t return 0;\r\n\t }\r\n\t }\r\n\t };\r\n\t this.comparePoint = function(p) {\r\n\t return this.compare(p.row, p.column);\r\n\t };\r\n\t this.containsRange = function(range) {\r\n\t return this.comparePoint(range.start) == 0 && this.comparePoint(range.end) == 0;\r\n\t };\r\n\t this.intersects = function(range) {\r\n\t var cmp = this.compareRange(range);\r\n\t return (cmp == -1 || cmp == 0 || cmp == 1);\r\n\t };\r\n\t this.isEnd = function(row, column) {\r\n\t return this.end.row == row && this.end.column == column;\r\n\t };\r\n\t this.isStart = function(row, column) {\r\n\t return this.start.row == row && this.start.column == column;\r\n\t };\r\n\t this.setStart = function(row, column) {\r\n\t if (typeof row == \"object\") {\r\n\t this.start.column = row.column;\r\n\t this.start.row = row.row;\r\n\t } else {\r\n\t this.start.row = row;\r\n\t this.start.column = column;\r\n\t }\r\n\t };\r\n\t this.setEnd = function(row, column) {\r\n\t if (typeof row == \"object\") {\r\n\t this.end.column = row.column;\r\n\t this.end.row = row.row;\r\n\t } else {\r\n\t this.end.row = row;\r\n\t this.end.column = column;\r\n\t }\r\n\t };\r\n\t this.inside = function(row, column) {\r\n\t if (this.compare(row, column) == 0) {\r\n\t if (this.isEnd(row, column) || this.isStart(row, column)) {\r\n\t return false;\r\n\t } else {\r\n\t return true;\r\n\t }\r\n\t }\r\n\t return false;\r\n\t };\r\n\t this.insideStart = function(row, column) {\r\n\t if (this.compare(row, column) == 0) {\r\n\t if (this.isEnd(row, column)) {\r\n\t return false;\r\n\t } else {\r\n\t return true;\r\n\t }\r\n\t }\r\n\t return false;\r\n\t };\r\n\t this.insideEnd = function(row, column) {\r\n\t if (this.compare(row, column) == 0) {\r\n\t if (this.isStart(row, column)) {\r\n\t return false;\r\n\t } else {\r\n\t return true;\r\n\t }\r\n\t }\r\n\t return false;\r\n\t };\r\n\t this.compare = function(row, column) {\r\n\t if (!this.isMultiLine()) {\r\n\t if (row === this.start.row) {\r\n\t return column < this.start.column ? -1 : (column > this.end.column ? 1 : 0);\r\n\t }\r\n\t }\r\n\r\n\t if (row < this.start.row)\r\n\t return -1;\r\n\r\n\t if (row > this.end.row)\r\n\t return 1;\r\n\r\n\t if (this.start.row === row)\r\n\t return column >= this.start.column ? 0 : -1;\r\n\r\n\t if (this.end.row === row)\r\n\t return column <= this.end.column ? 0 : 1;\r\n\r\n\t return 0;\r\n\t };\r\n\t this.compareStart = function(row, column) {\r\n\t if (this.start.row == row && this.start.column == column) {\r\n\t return -1;\r\n\t } else {\r\n\t return this.compare(row, column);\r\n\t }\r\n\t };\r\n\t this.compareEnd = function(row, column) {\r\n\t if (this.end.row == row && this.end.column == column) {\r\n\t return 1;\r\n\t } else {\r\n\t return this.compare(row, column);\r\n\t }\r\n\t };\r\n\t this.compareInside = function(row, column) {\r\n\t if (this.end.row == row && this.end.column == column) {\r\n\t return 1;\r\n\t } else if (this.start.row == row && this.start.column == column) {\r\n\t return -1;\r\n\t } else {\r\n\t return this.compare(row, column);\r\n\t }\r\n\t };\r\n\t this.clipRows = function(firstRow, lastRow) {\r\n\t if (this.end.row > lastRow)\r\n\t var end = {row: lastRow + 1, column: 0};\r\n\t else if (this.end.row < firstRow)\r\n\t var end = {row: firstRow, column: 0};\r\n\r\n\t if (this.start.row > lastRow)\r\n\t var start = {row: lastRow + 1, column: 0};\r\n\t else if (this.start.row < firstRow)\r\n\t var start = {row: firstRow, column: 0};\r\n\r\n\t return Range.fromPoints(start || this.start, end || this.end);\r\n\t };\r\n\t this.extend = function(row, column) {\r\n\t var cmp = this.compare(row, column);\r\n\r\n\t if (cmp == 0)\r\n\t return this;\r\n\t else if (cmp == -1)\r\n\t var start = {row: row, column: column};\r\n\t else\r\n\t var end = {row: row, column: column};\r\n\r\n\t return Range.fromPoints(start || this.start, end || this.end);\r\n\t };\r\n\r\n\t this.isEmpty = function() {\r\n\t return (this.start.row === this.end.row && this.start.column === this.end.column);\r\n\t };\r\n\t this.isMultiLine = function() {\r\n\t return (this.start.row !== this.end.row);\r\n\t };\r\n\t this.clone = function() {\r\n\t return Range.fromPoints(this.start, this.end);\r\n\t };\r\n\t this.collapseRows = function() {\r\n\t if (this.end.column == 0)\r\n\t return new Range(this.start.row, 0, Math.max(this.start.row, this.end.row-1), 0)\r\n\t else\r\n\t return new Range(this.start.row, 0, this.end.row, 0)\r\n\t };\r\n\t this.toScreenRange = function(session) {\r\n\t var screenPosStart = session.documentToScreenPosition(this.start);\r\n\t var screenPosEnd = session.documentToScreenPosition(this.end);\r\n\r\n\t return new Range(\r\n\t screenPosStart.row, screenPosStart.column,\r\n\t screenPosEnd.row, screenPosEnd.column\r\n\t );\r\n\t };\r\n\t this.moveBy = function(row, column) {\r\n\t this.start.row += row;\r\n\t this.start.column += column;\r\n\t this.end.row += row;\r\n\t this.end.column += column;\r\n\t };\r\n\r\n\t}).call(Range.prototype);\r\n\tRange.fromPoints = function(start, end) {\r\n\t return new Range(start.row, start.column, end.row, end.column);\r\n\t};\r\n\tRange.comparePoints = comparePoints;\r\n\r\n\tRange.comparePoints = function(p1, p2) {\r\n\t return p1.row - p2.row || p1.column - p2.column;\r\n\t};\r\n\r\n\r\n\texports.Range = Range;\r\n\t});\r\n\r\n\tace.define(\"ace/selection\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/lib/event_emitter\",\"ace/range\"], function(acequire, exports, module) {\r\n\t\"use strict\";\r\n\r\n\tvar oop = acequire(\"./lib/oop\");\r\n\tvar lang = acequire(\"./lib/lang\");\r\n\tvar EventEmitter = acequire(\"./lib/event_emitter\").EventEmitter;\r\n\tvar Range = acequire(\"./range\").Range;\r\n\tvar Selection = function(session) {\r\n\t this.session = session;\r\n\t this.doc = session.getDocument();\r\n\r\n\t this.clearSelection();\r\n\t this.lead = this.selectionLead = this.doc.createAnchor(0, 0);\r\n\t this.anchor = this.selectionAnchor = this.doc.createAnchor(0, 0);\r\n\r\n\t var self = this;\r\n\t this.lead.on(\"change\", function(e) {\r\n\t self._emit(\"changeCursor\");\r\n\t if (!self.$isEmpty)\r\n\t self._emit(\"changeSelection\");\r\n\t if (!self.$keepDesiredColumnOnChange && e.old.column != e.value.column)\r\n\t self.$desiredColumn = null;\r\n\t });\r\n\r\n\t this.selectionAnchor.on(\"change\", function() {\r\n\t if (!self.$isEmpty)\r\n\t self._emit(\"changeSelection\");\r\n\t });\r\n\t};\r\n\r\n\t(function() {\r\n\r\n\t oop.implement(this, EventEmitter);\r\n\t this.isEmpty = function() {\r\n\t return (this.$isEmpty || (\r\n\t this.anchor.row == this.lead.row &&\r\n\t this.anchor.column == this.lead.column\r\n\t ));\r\n\t };\r\n\t this.isMultiLine = function() {\r\n\t if (this.isEmpty()) {\r\n\t return false;\r\n\t }\r\n\r\n\t return this.getRange().isMultiLine();\r\n\t };\r\n\t this.getCursor = function() {\r\n\t return this.lead.getPosition();\r\n\t };\r\n\t this.setSelectionAnchor = function(row, column) {\r\n\t this.anchor.setPosition(row, column);\r\n\r\n\t if (this.$isEmpty) {\r\n\t this.$isEmpty = false;\r\n\t this._emit(\"changeSelection\");\r\n\t }\r\n\t };\r\n\t this.getSelectionAnchor = function() {\r\n\t if (this.$isEmpty)\r\n\t return this.getSelectionLead();\r\n\t else\r\n\t return this.anchor.getPosition();\r\n\t };\r\n\t this.getSelectionLead = function() {\r\n\t return this.lead.getPosition();\r\n\t };\r\n\t this.shiftSelection = function(columns) {\r\n\t if (this.$isEmpty) {\r\n\t this.moveCursorTo(this.lead.row, this.lead.column + columns);\r\n\t return;\r\n\t }\r\n\r\n\t var anchor = this.getSelectionAnchor();\r\n\t var lead = this.getSelectionLead();\r\n\r\n\t var isBackwards = this.isBackwards();\r\n\r\n\t if (!isBackwards || anchor.column !== 0)\r\n\t this.setSelectionAnchor(anchor.row, anchor.column + columns);\r\n\r\n\t if (isBackwards || lead.column !== 0) {\r\n\t this.$moveSelection(function() {\r\n\t this.moveCursorTo(lead.row, lead.column + columns);\r\n\t });\r\n\t }\r\n\t };\r\n\t this.isBackwards = function() {\r\n\t var anchor = this.anchor;\r\n\t var lead = this.lead;\r\n\t return (anchor.row > lead.row || (anchor.row == lead.row && anchor.column > lead.column));\r\n\t };\r\n\t this.getRange = function() {\r\n\t var anchor = this.anchor;\r\n\t var lead = this.lead;\r\n\r\n\t if (this.isEmpty())\r\n\t return Range.fromPoints(lead, lead);\r\n\r\n\t if (this.isBackwards()) {\r\n\t return Range.fromPoints(lead, anchor);\r\n\t }\r\n\t else {\r\n\t return Range.fromPoints(anchor, lead);\r\n\t }\r\n\t };\r\n\t this.clearSelection = function() {\r\n\t if (!this.$isEmpty) {\r\n\t this.$isEmpty = true;\r\n\t this._emit(\"changeSelection\");\r\n\t }\r\n\t };\r\n\t this.selectAll = function() {\r\n\t var lastRow = this.doc.getLength() - 1;\r\n\t this.setSelectionAnchor(0, 0);\r\n\t this.moveCursorTo(lastRow, this.doc.getLine(lastRow).length);\r\n\t };\r\n\t this.setRange =\r\n\t this.setSelectionRange = function(range, reverse) {\r\n\t if (reverse) {\r\n\t this.setSelectionAnchor(range.end.row, range.end.column);\r\n\t this.selectTo(range.start.row, range.start.column);\r\n\t } else {\r\n\t this.setSelectionAnchor(range.start.row, range.start.column);\r\n\t this.selectTo(range.end.row, range.end.column);\r\n\t }\r\n\t if (this.getRange().isEmpty())\r\n\t this.$isEmpty = true;\r\n\t this.$desiredColumn = null;\r\n\t };\r\n\r\n\t this.$moveSelection = function(mover) {\r\n\t var lead = this.lead;\r\n\t if (this.$isEmpty)\r\n\t this.setSelectionAnchor(lead.row, lead.column);\r\n\r\n\t mover.call(this);\r\n\t };\r\n\t this.selectTo = function(row, column) {\r\n\t this.$moveSelection(function() {\r\n\t this.moveCursorTo(row, column);\r\n\t });\r\n\t };\r\n\t this.selectToPosition = function(pos) {\r\n\t this.$moveSelection(function() {\r\n\t this.moveCursorToPosition(pos);\r\n\t });\r\n\t };\r\n\t this.moveTo = function(row, column) {\r\n\t this.clearSelection();\r\n\t this.moveCursorTo(row, column);\r\n\t };\r\n\t this.moveToPosition = function(pos) {\r\n\t this.clearSelection();\r\n\t this.moveCursorToPosition(pos);\r\n\t };\r\n\t this.selectUp = function() {\r\n\t this.$moveSelection(this.moveCursorUp);\r\n\t };\r\n\t this.selectDown = function() {\r\n\t this.$moveSelection(this.moveCursorDown);\r\n\t };\r\n\t this.selectRight = function() {\r\n\t this.$moveSelection(this.moveCursorRight);\r\n\t };\r\n\t this.selectLeft = function() {\r\n\t this.$moveSelection(this.moveCursorLeft);\r\n\t };\r\n\t this.selectLineStart = function() {\r\n\t this.$moveSelection(this.moveCursorLineStart);\r\n\t };\r\n\t this.selectLineEnd = function() {\r\n\t this.$moveSelection(this.moveCursorLineEnd);\r\n\t };\r\n\t this.selectFileEnd = function() {\r\n\t this.$moveSelection(this.moveCursorFileEnd);\r\n\t };\r\n\t this.selectFileStart = function() {\r\n\t this.$moveSelection(this.moveCursorFileStart);\r\n\t };\r\n\t this.selectWordRight = function() {\r\n\t this.$moveSelection(this.moveCursorWordRight);\r\n\t };\r\n\t this.selectWordLeft = function() {\r\n\t this.$moveSelection(this.moveCursorWordLeft);\r\n\t };\r\n\t this.getWordRange = function(row, column) {\r\n\t if (typeof column == \"undefined\") {\r\n\t var cursor = row || this.lead;\r\n\t row = cursor.row;\r\n\t column = cursor.column;\r\n\t }\r\n\t return this.session.getWordRange(row, column);\r\n\t };\r\n\t this.selectWord = function() {\r\n\t this.setSelectionRange(this.getWordRange());\r\n\t };\r\n\t this.selectAWord = function() {\r\n\t var cursor = this.getCursor();\r\n\t var range = this.session.getAWordRange(cursor.row, cursor.column);\r\n\t this.setSelectionRange(range);\r\n\t };\r\n\r\n\t this.getLineRange = function(row, excludeLastChar) {\r\n\t var rowStart = typeof row == \"number\" ? row : this.lead.row;\r\n\t var rowEnd;\r\n\r\n\t var foldLine = this.session.getFoldLine(rowStart);\r\n\t if (foldLine) {\r\n\t rowStart = foldLine.start.row;\r\n\t rowEnd = foldLine.end.row;\r\n\t } else {\r\n\t rowEnd = rowStart;\r\n\t }\r\n\t if (excludeLastChar === true)\r\n\t return new Range(rowStart, 0, rowEnd, this.session.getLine(rowEnd).length);\r\n\t else\r\n\t return new Range(rowStart, 0, rowEnd + 1, 0);\r\n\t };\r\n\t this.selectLine = function() {\r\n\t this.setSelectionRange(this.getLineRange());\r\n\t };\r\n\t this.moveCursorUp = function() {\r\n\t this.moveCursorBy(-1, 0);\r\n\t };\r\n\t this.moveCursorDown = function() {\r\n\t this.moveCursorBy(1, 0);\r\n\t };\r\n\t this.moveCursorLeft = function() {\r\n\t var cursor = this.lead.getPosition(),\r\n\t fold;\r\n\r\n\t if (fold = this.session.getFoldAt(cursor.row, cursor.column, -1)) {\r\n\t this.moveCursorTo(fold.start.row, fold.start.column);\r\n\t } else if (cursor.column === 0) {\r\n\t if (cursor.row > 0) {\r\n\t this.moveCursorTo(cursor.row - 1, this.doc.getLine(cursor.row - 1).length);\r\n\t }\r\n\t }\r\n\t else {\r\n\t var tabSize = this.session.getTabSize();\r\n\t if (this.session.isTabStop(cursor) && this.doc.getLine(cursor.row).slice(cursor.column-tabSize, cursor.column).split(\" \").length-1 == tabSize)\r\n\t this.moveCursorBy(0, -tabSize);\r\n\t else\r\n\t this.moveCursorBy(0, -1);\r\n\t }\r\n\t };\r\n\t this.moveCursorRight = function() {\r\n\t var cursor = this.lead.getPosition(),\r\n\t fold;\r\n\t if (fold = this.session.getFoldAt(cursor.row, cursor.column, 1)) {\r\n\t this.moveCursorTo(fold.end.row, fold.end.column);\r\n\t }\r\n\t else if (this.lead.column == this.doc.getLine(this.lead.row).length) {\r\n\t if (this.lead.row < this.doc.getLength() - 1) {\r\n\t this.moveCursorTo(this.lead.row + 1, 0);\r\n\t }\r\n\t }\r\n\t else {\r\n\t var tabSize = this.session.getTabSize();\r\n\t var cursor = this.lead;\r\n\t if (this.session.isTabStop(cursor) && this.doc.getLine(cursor.row).slice(cursor.column, cursor.column+tabSize).split(\" \").length-1 == tabSize)\r\n\t this.moveCursorBy(0, tabSize);\r\n\t else\r\n\t this.moveCursorBy(0, 1);\r\n\t }\r\n\t };\r\n\t this.moveCursorLineStart = function() {\r\n\t var row = this.lead.row;\r\n\t var column = this.lead.column;\r\n\t var screenRow = this.session.documentToScreenRow(row, column);\r\n\t var firstColumnPosition = this.session.screenToDocumentPosition(screenRow, 0);\r\n\t var beforeCursor = this.session.getDisplayLine(\r\n\t row, null, firstColumnPosition.row,\r\n\t firstColumnPosition.column\r\n\t );\r\n\r\n\t var leadingSpace = beforeCursor.match(/^\\s*/);\r\n\t if (leadingSpace[0].length != column && !this.session.$useEmacsStyleLineStart)\r\n\t firstColumnPosition.column += leadingSpace[0].length;\r\n\t this.moveCursorToPosition(firstColumnPosition);\r\n\t };\r\n\t this.moveCursorLineEnd = function() {\r\n\t var lead = this.lead;\r\n\t var lineEnd = this.session.getDocumentLastRowColumnPosition(lead.row, lead.column);\r\n\t if (this.lead.column == lineEnd.column) {\r\n\t var line = this.session.getLine(lineEnd.row);\r\n\t if (lineEnd.column == line.length) {\r\n\t var textEnd = line.search(/\\s+$/);\r\n\t if (textEnd > 0)\r\n\t lineEnd.column = textEnd;\r\n\t }\r\n\t }\r\n\r\n\t this.moveCursorTo(lineEnd.row, lineEnd.column);\r\n\t };\r\n\t this.moveCursorFileEnd = function() {\r\n\t var row = this.doc.getLength() - 1;\r\n\t var column = this.doc.getLine(row).length;\r\n\t this.moveCursorTo(row, column);\r\n\t };\r\n\t this.moveCursorFileStart = function() {\r\n\t this.moveCursorTo(0, 0);\r\n\t };\r\n\t this.moveCursorLongWordRight = function() {\r\n\t var row = this.lead.row;\r\n\t var column = this.lead.column;\r\n\t var line = this.doc.getLine(row);\r\n\t var rightOfCursor = line.substring(column);\r\n\r\n\t var match;\r\n\t this.session.nonTokenRe.lastIndex = 0;\r\n\t this.session.tokenRe.lastIndex = 0;\r\n\t var fold = this.session.getFoldAt(row, column, 1);\r\n\t if (fold) {\r\n\t this.moveCursorTo(fold.end.row, fold.end.column);\r\n\t return;\r\n\t }\r\n\t if (match = this.session.nonTokenRe.exec(rightOfCursor)) {\r\n\t column += this.session.nonTokenRe.lastIndex;\r\n\t this.session.nonTokenRe.lastIndex = 0;\r\n\t rightOfCursor = line.substring(column);\r\n\t }\r\n\t if (column >= line.length) {\r\n\t this.moveCursorTo(row, line.length);\r\n\t this.moveCursorRight();\r\n\t if (row < this.doc.getLength() - 1)\r\n\t this.moveCursorWordRight();\r\n\t return;\r\n\t }\r\n\t if (match = this.session.tokenRe.exec(rightOfCursor)) {\r\n\t column += this.session.tokenRe.lastIndex;\r\n\t this.session.tokenRe.lastIndex = 0;\r\n\t }\r\n\r\n\t this.moveCursorTo(row, column);\r\n\t };\r\n\t this.moveCursorLongWordLeft = function() {\r\n\t var row = this.lead.row;\r\n\t var column = this.lead.column;\r\n\t var fold;\r\n\t if (fold = this.session.getFoldAt(row, column, -1)) {\r\n\t this.moveCursorTo(fold.start.row, fold.start.column);\r\n\t return;\r\n\t }\r\n\r\n\t var str = this.session.getFoldStringAt(row, column, -1);\r\n\t if (str == null) {\r\n\t str = this.doc.getLine(row).substring(0, column);\r\n\t }\r\n\r\n\t var leftOfCursor = lang.stringReverse(str);\r\n\t var match;\r\n\t this.session.nonTokenRe.lastIndex = 0;\r\n\t this.session.tokenRe.lastIndex = 0;\r\n\t if (match = this.session.nonTokenRe.exec(leftOfCursor)) {\r\n\t column -= this.session.nonTokenRe.lastIndex;\r\n\t leftOfCursor = leftOfCursor.slice(this.session.nonTokenRe.lastIndex);\r\n\t this.session.nonTokenRe.lastIndex = 0;\r\n\t }\r\n\t if (column <= 0) {\r\n\t this.moveCursorTo(row, 0);\r\n\t this.moveCursorLeft();\r\n\t if (row > 0)\r\n\t this.moveCursorWordLeft();\r\n\t return;\r\n\t }\r\n\t if (match = this.session.tokenRe.exec(leftOfCursor)) {\r\n\t column -= this.session.tokenRe.lastIndex;\r\n\t this.session.tokenRe.lastIndex = 0;\r\n\t }\r\n\r\n\t this.moveCursorTo(row, column);\r\n\t };\r\n\r\n\t this.$shortWordEndIndex = function(rightOfCursor) {\r\n\t var match, index = 0, ch;\r\n\t var whitespaceRe = /\\s/;\r\n\t var tokenRe = this.session.tokenRe;\r\n\r\n\t tokenRe.lastIndex = 0;\r\n\t if (match = this.session.tokenRe.exec(rightOfCursor)) {\r\n\t index = this.session.tokenRe.lastIndex;\r\n\t } else {\r\n\t while ((ch = rightOfCursor[index]) && whitespaceRe.test(ch))\r\n\t index ++;\r\n\r\n\t if (index < 1) {\r\n\t tokenRe.lastIndex = 0;\r\n\t while ((ch = rightOfCursor[index]) && !tokenRe.test(ch)) {\r\n\t tokenRe.lastIndex = 0;\r\n\t index ++;\r\n\t if (whitespaceRe.test(ch)) {\r\n\t if (index > 2) {\r\n\t index--;\r\n\t break;\r\n\t } else {\r\n\t while ((ch = rightOfCursor[index]) && whitespaceRe.test(ch))\r\n\t index ++;\r\n\t if (index > 2)\r\n\t break;\r\n\t }\r\n\t }\r\n\t }\r\n\t }\r\n\t }\r\n\t tokenRe.lastIndex = 0;\r\n\r\n\t return index;\r\n\t };\r\n\r\n\t this.moveCursorShortWordRight = function() {\r\n\t var row = this.lead.row;\r\n\t var column = this.lead.column;\r\n\t var line = this.doc.getLine(row);\r\n\t var rightOfCursor = line.substring(column);\r\n\r\n\t var fold = this.session.getFoldAt(row, column, 1);\r\n\t if (fold)\r\n\t return this.moveCursorTo(fold.end.row, fold.end.column);\r\n\r\n\t if (column == line.length) {\r\n\t var l = this.doc.getLength();\r\n\t do {\r\n\t row++;\r\n\t rightOfCursor = this.doc.getLine(row);\r\n\t } while (row < l && /^\\s*$/.test(rightOfCursor));\r\n\r\n\t if (!/^\\s+/.test(rightOfCursor))\r\n\t rightOfCursor = \"\";\r\n\t column = 0;\r\n\t }\r\n\r\n\t var index = this.$shortWordEndIndex(rightOfCursor);\r\n\r\n\t this.moveCursorTo(row, column + index);\r\n\t };\r\n\r\n\t this.moveCursorShortWordLeft = function() {\r\n\t var row = this.lead.row;\r\n\t var column = this.lead.column;\r\n\r\n\t var fold;\r\n\t if (fold = this.session.getFoldAt(row, column, -1))\r\n\t return this.moveCursorTo(fold.start.row, fold.start.column);\r\n\r\n\t var line = this.session.getLine(row).substring(0, column);\r\n\t if (column === 0) {\r\n\t do {\r\n\t row--;\r\n\t line = this.doc.getLine(row);\r\n\t } while (row > 0 && /^\\s*$/.test(line));\r\n\r\n\t column = line.length;\r\n\t if (!/\\s+$/.test(line))\r\n\t line = \"\";\r\n\t }\r\n\r\n\t var leftOfCursor = lang.stringReverse(line);\r\n\t var index = this.$shortWordEndIndex(leftOfCursor);\r\n\r\n\t return this.moveCursorTo(row, column - index);\r\n\t };\r\n\r\n\t this.moveCursorWordRight = function() {\r\n\t if (this.session.$selectLongWords)\r\n\t this.moveCursorLongWordRight();\r\n\t else\r\n\t this.moveCursorShortWordRight();\r\n\t };\r\n\r\n\t this.moveCursorWordLeft = function() {\r\n\t if (this.session.$selectLongWords)\r\n\t this.moveCursorLongWordLeft();\r\n\t else\r\n\t this.moveCursorShortWordLeft();\r\n\t };\r\n\t this.moveCursorBy = function(rows, chars) {\r\n\t var screenPos = this.session.documentToScreenPosition(\r\n\t this.lead.row,\r\n\t this.lead.column\r\n\t );\r\n\r\n\t if (chars === 0) {\r\n\t if (this.$desiredColumn)\r\n\t screenPos.column = this.$desiredColumn;\r\n\t else\r\n\t this.$desiredColumn = screenPos.column;\r\n\t }\r\n\r\n\t var docPos = this.session.screenToDocumentPosition(screenPos.row + rows, screenPos.column);\r\n\t \r\n\t if (rows !== 0 && chars === 0 && docPos.row === this.lead.row && docPos.column === this.lead.column) {\r\n\t if (this.session.lineWidgets && this.session.lineWidgets[docPos.row]) {\r\n\t if (docPos.row > 0 || rows > 0)\r\n\t docPos.row++;\r\n\t }\r\n\t }\r\n\t this.moveCursorTo(docPos.row, docPos.column + chars, chars === 0);\r\n\t };\r\n\t this.moveCursorToPosition = function(position) {\r\n\t this.moveCursorTo(position.row, position.column);\r\n\t };\r\n\t this.moveCursorTo = function(row, column, keepDesiredColumn) {\r\n\t var fold = this.session.getFoldAt(row, column, 1);\r\n\t if (fold) {\r\n\t row = fold.start.row;\r\n\t column = fold.start.column;\r\n\t }\r\n\r\n\t this.$keepDesiredColumnOnChange = true;\r\n\t this.lead.setPosition(row, column);\r\n\t this.$keepDesiredColumnOnChange = false;\r\n\r\n\t if (!keepDesiredColumn)\r\n\t this.$desiredColumn = null;\r\n\t };\r\n\t this.moveCursorToScreen = function(row, column, keepDesiredColumn) {\r\n\t var pos = this.session.screenToDocumentPosition(row, column);\r\n\t this.moveCursorTo(pos.row, pos.column, keepDesiredColumn);\r\n\t };\r\n\t this.detach = function() {\r\n\t this.lead.detach();\r\n\t this.anchor.detach();\r\n\t this.session = this.doc = null;\r\n\t };\r\n\r\n\t this.fromOrientedRange = function(range) {\r\n\t this.setSelectionRange(range, range.cursor == range.start);\r\n\t this.$desiredColumn = range.desiredColumn || this.$desiredColumn;\r\n\t };\r\n\r\n\t this.toOrientedRange = function(range) {\r\n\t var r = this.getRange();\r\n\t if (range) {\r\n\t range.start.column = r.start.column;\r\n\t range.start.row = r.start.row;\r\n\t range.end.column = r.end.column;\r\n\t range.end.row = r.end.row;\r\n\t } else {\r\n\t range = r;\r\n\t }\r\n\r\n\t range.cursor = this.isBackwards() ? range.start : range.end;\r\n\t range.desiredColumn = this.$desiredColumn;\r\n\t return range;\r\n\t };\r\n\t this.getRangeOfMovements = function(func) {\r\n\t var start = this.getCursor();\r\n\t try {\r\n\t func(this);\r\n\t var end = this.getCursor();\r\n\t return Range.fromPoints(start,end);\r\n\t } catch(e) {\r\n\t return Range.fromPoints(start,start);\r\n\t } finally {\r\n\t this.moveCursorToPosition(start);\r\n\t }\r\n\t };\r\n\r\n\t this.toJSON = function() {\r\n\t if (this.rangeCount) {\r\n\t var data = this.ranges.map(function(r) {\r\n\t var r1 = r.clone();\r\n\t r1.isBackwards = r.cursor == r.start;\r\n\t return r1;\r\n\t });\r\n\t } else {\r\n\t var data = this.getRange();\r\n\t data.isBackwards = this.isBackwards();\r\n\t }\r\n\t return data;\r\n\t };\r\n\r\n\t this.fromJSON = function(data) {\r\n\t if (data.start == undefined) {\r\n\t if (this.rangeList) {\r\n\t this.toSingleRange(data[0]);\r\n\t for (var i = data.length; i--; ) {\r\n\t var r = Range.fromPoints(data[i].start, data[i].end);\r\n\t if (data[i].isBackwards)\r\n\t r.cursor = r.start;\r\n\t this.addRange(r, true);\r\n\t }\r\n\t return;\r\n\t } else\r\n\t data = data[0];\r\n\t }\r\n\t if (this.rangeList)\r\n\t this.toSingleRange(data);\r\n\t this.setSelectionRange(data, data.isBackwards);\r\n\t };\r\n\r\n\t this.isEqual = function(data) {\r\n\t if ((data.length || this.rangeCount) && data.length != this.rangeCount)\r\n\t return false;\r\n\t if (!data.length || !this.ranges)\r\n\t return this.getRange().isEqual(data);\r\n\r\n\t for (var i = this.ranges.length; i--; ) {\r\n\t if (!this.ranges[i].isEqual(data[i]))\r\n\t return false;\r\n\t }\r\n\t return true;\r\n\t };\r\n\r\n\t}).call(Selection.prototype);\r\n\r\n\texports.Selection = Selection;\r\n\t});\r\n\r\n\tace.define(\"ace/tokenizer\",[\"require\",\"exports\",\"module\",\"ace/config\"], function(acequire, exports, module) {\r\n\t\"use strict\";\r\n\r\n\tvar config = acequire(\"./config\");\r\n\tvar MAX_TOKEN_COUNT = 2000;\r\n\tvar Tokenizer = function(rules) {\r\n\t this.states = rules;\r\n\r\n\t this.regExps = {};\r\n\t this.matchMappings = {};\r\n\t for (var key in this.states) {\r\n\t var state = this.states[key];\r\n\t var ruleRegExps = [];\r\n\t var matchTotal = 0;\r\n\t var mapping = this.matchMappings[key] = {defaultToken: \"text\"};\r\n\t var flag = \"g\";\r\n\r\n\t var splitterRurles = [];\r\n\t for (var i = 0; i < state.length; i++) {\r\n\t var rule = state[i];\r\n\t if (rule.defaultToken)\r\n\t mapping.defaultToken = rule.defaultToken;\r\n\t if (rule.caseInsensitive)\r\n\t flag = \"gi\";\r\n\t if (rule.regex == null)\r\n\t continue;\r\n\r\n\t if (rule.regex instanceof RegExp)\r\n\t rule.regex = rule.regex.toString().slice(1, -1);\r\n\t var adjustedregex = rule.regex;\r\n\t var matchcount = new RegExp(\"(?:(\" + adjustedregex + \")|(.))\").exec(\"a\").length - 2;\r\n\t if (Array.isArray(rule.token)) {\r\n\t if (rule.token.length == 1 || matchcount == 1) {\r\n\t rule.token = rule.token[0];\r\n\t } else if (matchcount - 1 != rule.token.length) {\r\n\t this.reportError(\"number of classes and regexp groups doesn't match\", { \r\n\t rule: rule,\r\n\t groupCount: matchcount - 1\r\n\t });\r\n\t rule.token = rule.token[0];\r\n\t } else {\r\n\t rule.tokenArray = rule.token;\r\n\t rule.token = null;\r\n\t rule.onMatch = this.$arrayTokens;\r\n\t }\r\n\t } else if (typeof rule.token == \"function\" && !rule.onMatch) {\r\n\t if (matchcount > 1)\r\n\t rule.onMatch = this.$applyToken;\r\n\t else\r\n\t rule.onMatch = rule.token;\r\n\t }\r\n\r\n\t if (matchcount > 1) {\r\n\t if (/\\\\\\d/.test(rule.regex)) {\r\n\t adjustedregex = rule.regex.replace(/\\\\([0-9]+)/g, function(match, digit) {\r\n\t return \"\\\\\" + (parseInt(digit, 10) + matchTotal + 1);\r\n\t });\r\n\t } else {\r\n\t matchcount = 1;\r\n\t adjustedregex = this.removeCapturingGroups(rule.regex);\r\n\t }\r\n\t if (!rule.splitRegex && typeof rule.token != \"string\")\r\n\t splitterRurles.push(rule); // flag will be known only at the very end\r\n\t }\r\n\r\n\t mapping[matchTotal] = i;\r\n\t matchTotal += matchcount;\r\n\r\n\t ruleRegExps.push(adjustedregex);\r\n\t if (!rule.onMatch)\r\n\t rule.onMatch = null;\r\n\t }\r\n\t \r\n\t if (!ruleRegExps.length) {\r\n\t mapping[0] = 0;\r\n\t ruleRegExps.push(\"$\");\r\n\t }\r\n\t \r\n\t splitterRurles.forEach(function(rule) {\r\n\t rule.splitRegex = this.createSplitterRegexp(rule.regex, flag);\r\n\t }, this);\r\n\r\n\t this.regExps[key] = new RegExp(\"(\" + ruleRegExps.join(\")|(\") + \")|($)\", flag);\r\n\t }\r\n\t};\r\n\r\n\t(function() {\r\n\t this.$setMaxTokenCount = function(m) {\r\n\t MAX_TOKEN_COUNT = m | 0;\r\n\t };\r\n\t \r\n\t this.$applyToken = function(str) {\r\n\t var values = this.splitRegex.exec(str).slice(1);\r\n\t var types = this.token.apply(this, values);\r\n\t if (typeof types === \"string\")\r\n\t return [{type: types, value: str}];\r\n\r\n\t var tokens = [];\r\n\t for (var i = 0, l = types.length; i < l; i++) {\r\n\t if (values[i])\r\n\t tokens[tokens.length] = {\r\n\t type: types[i],\r\n\t value: values[i]\r\n\t };\r\n\t }\r\n\t return tokens;\r\n\t };\r\n\r\n\t this.$arrayTokens = function(str) {\r\n\t if (!str)\r\n\t return [];\r\n\t var values = this.splitRegex.exec(str);\r\n\t if (!values)\r\n\t return \"text\";\r\n\t var tokens = [];\r\n\t var types = this.tokenArray;\r\n\t for (var i = 0, l = types.length; i < l; i++) {\r\n\t if (values[i + 1])\r\n\t tokens[tokens.length] = {\r\n\t type: types[i],\r\n\t value: values[i + 1]\r\n\t };\r\n\t }\r\n\t return tokens;\r\n\t };\r\n\r\n\t this.removeCapturingGroups = function(src) {\r\n\t var r = src.replace(\r\n\t /\\[(?:\\\\.|[^\\]])*?\\]|\\\\.|\\(\\?[:=!]|(\\()/g,\r\n\t function(x, y) {return y ? \"(?:\" : x;}\r\n\t );\r\n\t return r;\r\n\t };\r\n\r\n\t this.createSplitterRegexp = function(src, flag) {\r\n\t if (src.indexOf(\"(?=\") != -1) {\r\n\t var stack = 0;\r\n\t var inChClass = false;\r\n\t var lastCapture = {};\r\n\t src.replace(/(\\\\.)|(\\((?:\\?[=!])?)|(\\))|([\\[\\]])/g, function(\r\n\t m, esc, parenOpen, parenClose, square, index\r\n\t ) {\r\n\t if (inChClass) {\r\n\t inChClass = square != \"]\";\r\n\t } else if (square) {\r\n\t inChClass = true;\r\n\t } else if (parenClose) {\r\n\t if (stack == lastCapture.stack) {\r\n\t lastCapture.end = index+1;\r\n\t lastCapture.stack = -1;\r\n\t }\r\n\t stack--;\r\n\t } else if (parenOpen) {\r\n\t stack++;\r\n\t if (parenOpen.length != 1) {\r\n\t lastCapture.stack = stack\r\n\t lastCapture.start = index;\r\n\t }\r\n\t }\r\n\t return m;\r\n\t });\r\n\r\n\t if (lastCapture.end != null && /^\\)*$/.test(src.substr(lastCapture.end)))\r\n\t src = src.substring(0, lastCapture.start) + src.substr(lastCapture.end);\r\n\t }\r\n\t if (src.charAt(0) != \"^\") src = \"^\" + src;\r\n\t if (src.charAt(src.length - 1) != \"$\") src += \"$\";\r\n\t \r\n\t return new RegExp(src, (flag||\"\").replace(\"g\", \"\"));\r\n\t };\r\n\t this.getLineTokens = function(line, startState) {\r\n\t if (startState && typeof startState != \"string\") {\r\n\t var stack = startState.slice(0);\r\n\t startState = stack[0];\r\n\t if (startState === \"#tmp\") {\r\n\t stack.shift()\r\n\t startState = stack.shift()\r\n\t }\r\n\t } else\r\n\t var stack = [];\r\n\r\n\t var currentState = startState || \"start\";\r\n\t var state = this.states[currentState];\r\n\t if (!state) {\r\n\t currentState = \"start\";\r\n\t state = this.states[currentState];\r\n\t }\r\n\t var mapping = this.matchMappings[currentState];\r\n\t var re = this.regExps[currentState];\r\n\t re.lastIndex = 0;\r\n\r\n\t var match, tokens = [];\r\n\t var lastIndex = 0;\r\n\t var matchAttempts = 0;\r\n\r\n\t var token = {type: null, value: \"\"};\r\n\r\n\t while (match = re.exec(line)) {\r\n\t var type = mapping.defaultToken;\r\n\t var rule = null;\r\n\t var value = match[0];\r\n\t var index = re.lastIndex;\r\n\r\n\t if (index - value.length > lastIndex) {\r\n\t var skipped = line.substring(lastIndex, index - value.length);\r\n\t if (token.type == type) {\r\n\t token.value += skipped;\r\n\t } else {\r\n\t if (token.type)\r\n\t tokens.push(token);\r\n\t token = {type: type, value: skipped};\r\n\t }\r\n\t }\r\n\r\n\t for (var i = 0; i < match.length-2; i++) {\r\n\t if (match[i + 1] === undefined)\r\n\t continue;\r\n\r\n\t rule = state[mapping[i]];\r\n\r\n\t if (rule.onMatch)\r\n\t type = rule.onMatch(value, currentState, stack);\r\n\t else\r\n\t type = rule.token;\r\n\r\n\t if (rule.next) {\r\n\t if (typeof rule.next == \"string\") {\r\n\t currentState = rule.next;\r\n\t } else {\r\n\t currentState = rule.next(currentState, stack);\r\n\t }\r\n\t \r\n\t state = this.states[currentState];\r\n\t if (!state) {\r\n\t this.reportError(\"state doesn't exist\", currentState);\r\n\t currentState = \"start\";\r\n\t state = this.states[currentState];\r\n\t }\r\n\t mapping = this.matchMappings[currentState];\r\n\t lastIndex = index;\r\n\t re = this.regExps[currentState];\r\n\t re.lastIndex = index;\r\n\t }\r\n\t break;\r\n\t }\r\n\r\n\t if (value) {\r\n\t if (typeof type === \"string\") {\r\n\t if ((!rule || rule.merge !== false) && token.type === type) {\r\n\t token.value += value;\r\n\t } else {\r\n\t if (token.type)\r\n\t tokens.push(token);\r\n\t token = {type: type, value: value};\r\n\t }\r\n\t } else if (type) {\r\n\t if (token.type)\r\n\t tokens.push(token);\r\n\t token = {type: null, value: \"\"};\r\n\t for (var i = 0; i < type.length; i++)\r\n\t tokens.push(type[i]);\r\n\t }\r\n\t }\r\n\r\n\t if (lastIndex == line.length)\r\n\t break;\r\n\r\n\t lastIndex = index;\r\n\r\n\t if (matchAttempts++ > MAX_TOKEN_COUNT) {\r\n\t if (matchAttempts > 2 * line.length) {\r\n\t this.reportError(\"infinite loop with in ace tokenizer\", {\r\n\t startState: startState,\r\n\t line: line\r\n\t });\r\n\t }\r\n\t while (lastIndex < line.length) {\r\n\t if (token.type)\r\n\t tokens.push(token);\r\n\t token = {\r\n\t value: line.substring(lastIndex, lastIndex += 2000),\r\n\t type: \"overflow\"\r\n\t };\r\n\t }\r\n\t currentState = \"start\";\r\n\t stack = [];\r\n\t break;\r\n\t }\r\n\t }\r\n\r\n\t if (token.type)\r\n\t tokens.push(token);\r\n\t \r\n\t if (stack.length > 1) {\r\n\t if (stack[0] !== currentState)\r\n\t stack.unshift(\"#tmp\", currentState);\r\n\t }\r\n\t return {\r\n\t tokens : tokens,\r\n\t state : stack.length ? stack : currentState\r\n\t };\r\n\t };\r\n\t \r\n\t this.reportError = config.reportError;\r\n\t \r\n\t}).call(Tokenizer.prototype);\r\n\r\n\texports.Tokenizer = Tokenizer;\r\n\t});\r\n\r\n\tace.define(\"ace/mode/text_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/lang\"], function(acequire, exports, module) {\r\n\t\"use strict\";\r\n\r\n\tvar lang = acequire(\"../lib/lang\");\r\n\r\n\tvar TextHighlightRules = function() {\r\n\r\n\t this.$rules = {\r\n\t \"start\" : [{\r\n\t token : \"empty_line\",\r\n\t regex : '^$'\r\n\t }, {\r\n\t defaultToken : \"text\"\r\n\t }]\r\n\t };\r\n\t};\r\n\r\n\t(function() {\r\n\r\n\t this.addRules = function(rules, prefix) {\r\n\t if (!prefix) {\r\n\t for (var key in rules)\r\n\t this.$rules[key] = rules[key];\r\n\t return;\r\n\t }\r\n\t for (var key in rules) {\r\n\t var state = rules[key];\r\n\t for (var i = 0; i < state.length; i++) {\r\n\t var rule = state[i];\r\n\t if (rule.next || rule.onMatch) {\r\n\t if (typeof rule.next == \"string\") {\r\n\t if (rule.next.indexOf(prefix) !== 0)\r\n\t rule.next = prefix + rule.next;\r\n\t }\r\n\t if (rule.nextState && rule.nextState.indexOf(prefix) !== 0)\r\n\t rule.nextState = prefix + rule.nextState;\r\n\t }\r\n\t }\r\n\t this.$rules[prefix + key] = state;\r\n\t }\r\n\t };\r\n\r\n\t this.getRules = function() {\r\n\t return this.$rules;\r\n\t };\r\n\r\n\t this.embedRules = function (HighlightRules, prefix, escapeRules, states, append) {\r\n\t var embedRules = typeof HighlightRules == \"function\"\r\n\t ? new HighlightRules().getRules()\r\n\t : HighlightRules;\r\n\t if (states) {\r\n\t for (var i = 0; i < states.length; i++)\r\n\t states[i] = prefix + states[i];\r\n\t } else {\r\n\t states = [];\r\n\t for (var key in embedRules)\r\n\t states.push(prefix + key);\r\n\t }\r\n\r\n\t this.addRules(embedRules, prefix);\r\n\r\n\t if (escapeRules) {\r\n\t var addRules = Array.prototype[append ? \"push\" : \"unshift\"];\r\n\t for (var i = 0; i < states.length; i++)\r\n\t addRules.apply(this.$rules[states[i]], lang.deepCopy(escapeRules));\r\n\t }\r\n\r\n\t if (!this.$embeds)\r\n\t this.$embeds = [];\r\n\t this.$embeds.push(prefix);\r\n\t };\r\n\r\n\t this.getEmbeds = function() {\r\n\t return this.$embeds;\r\n\t };\r\n\r\n\t var pushState = function(currentState, stack) {\r\n\t if (currentState != \"start\" || stack.length)\r\n\t stack.unshift(this.nextState, currentState);\r\n\t return this.nextState;\r\n\t };\r\n\t var popState = function(currentState, stack) {\r\n\t stack.shift();\r\n\t return stack.shift() || \"start\";\r\n\t };\r\n\r\n\t this.normalizeRules = function() {\r\n\t var id = 0;\r\n\t var rules = this.$rules;\r\n\t function processState(key) {\r\n\t var state = rules[key];\r\n\t state.processed = true;\r\n\t for (var i = 0; i < state.length; i++) {\r\n\t var rule = state[i];\r\n\t if (!rule.regex && rule.start) {\r\n\t rule.regex = rule.start;\r\n\t if (!rule.next)\r\n\t rule.next = [];\r\n\t rule.next.push({\r\n\t defaultToken: rule.token\r\n\t }, {\r\n\t token: rule.token + \".end\",\r\n\t regex: rule.end || rule.start,\r\n\t next: \"pop\"\r\n\t });\r\n\t rule.token = rule.token + \".start\";\r\n\t rule.push = true;\r\n\t }\r\n\t var next = rule.next || rule.push;\r\n\t if (next && Array.isArray(next)) {\r\n\t var stateName = rule.stateName;\r\n\t if (!stateName) {\r\n\t stateName = rule.token;\r\n\t if (typeof stateName != \"string\")\r\n\t stateName = stateName[0] || \"\";\r\n\t if (rules[stateName])\r\n\t stateName += id++;\r\n\t }\r\n\t rules[stateName] = next;\r\n\t rule.next = stateName;\r\n\t processState(stateName);\r\n\t } else if (next == \"pop\") {\r\n\t rule.next = popState;\r\n\t }\r\n\r\n\t if (rule.push) {\r\n\t rule.nextState = rule.next || rule.push;\r\n\t rule.next = pushState;\r\n\t delete rule.push;\r\n\t }\r\n\r\n\t if (rule.rules) {\r\n\t for (var r in rule.rules) {\r\n\t if (rules[r]) {\r\n\t if (rules[r].push)\r\n\t rules[r].push.apply(rules[r], rule.rules[r]);\r\n\t } else {\r\n\t rules[r] = rule.rules[r];\r\n\t }\r\n\t }\r\n\t }\r\n\t if (rule.include || typeof rule == \"string\") {\r\n\t var includeName = rule.include || rule;\r\n\t var toInsert = rules[includeName];\r\n\t } else if (Array.isArray(rule))\r\n\t toInsert = rule;\r\n\r\n\t if (toInsert) {\r\n\t var args = [i, 1].concat(toInsert);\r\n\t if (rule.noEscape)\r\n\t args = args.filter(function(x) {return !x.next;});\r\n\t state.splice.apply(state, args);\r\n\t i--;\r\n\t toInsert = null;\r\n\t }\r\n\t \r\n\t if (rule.keywordMap) {\r\n\t rule.token = this.createKeywordMapper(\r\n\t rule.keywordMap, rule.defaultToken || \"text\", rule.caseInsensitive\r\n\t );\r\n\t delete rule.defaultToken;\r\n\t }\r\n\t }\r\n\t }\r\n\t Object.keys(rules).forEach(processState, this);\r\n\t };\r\n\r\n\t this.createKeywordMapper = function(map, defaultToken, ignoreCase, splitChar) {\r\n\t var keywords = Object.create(null);\r\n\t Object.keys(map).forEach(function(className) {\r\n\t var a = map[className];\r\n\t if (ignoreCase)\r\n\t a = a.toLowerCase();\r\n\t var list = a.split(splitChar || \"|\");\r\n\t for (var i = list.length; i--; )\r\n\t keywords[list[i]] = className;\r\n\t });\r\n\t if (Object.getPrototypeOf(keywords)) {\r\n\t keywords.__proto__ = null;\r\n\t }\r\n\t this.$keywordList = Object.keys(keywords);\r\n\t map = null;\r\n\t return ignoreCase\r\n\t ? function(value) {return keywords[value.toLowerCase()] || defaultToken }\r\n\t : function(value) {return keywords[value] || defaultToken };\r\n\t };\r\n\r\n\t this.getKeywords = function() {\r\n\t return this.$keywords;\r\n\t };\r\n\r\n\t}).call(TextHighlightRules.prototype);\r\n\r\n\texports.TextHighlightRules = TextHighlightRules;\r\n\t});\r\n\r\n\tace.define(\"ace/mode/behaviour\",[\"require\",\"exports\",\"module\"], function(acequire, exports, module) {\r\n\t\"use strict\";\r\n\r\n\tvar Behaviour = function() {\r\n\t this.$behaviours = {};\r\n\t};\r\n\r\n\t(function () {\r\n\r\n\t this.add = function (name, action, callback) {\r\n\t switch (undefined) {\r\n\t case this.$behaviours:\r\n\t this.$behaviours = {};\r\n\t case this.$behaviours[name]:\r\n\t this.$behaviours[name] = {};\r\n\t }\r\n\t this.$behaviours[name][action] = callback;\r\n\t }\r\n\t \r\n\t this.addBehaviours = function (behaviours) {\r\n\t for (var key in behaviours) {\r\n\t for (var action in behaviours[key]) {\r\n\t this.add(key, action, behaviours[key][action]);\r\n\t }\r\n\t }\r\n\t }\r\n\t \r\n\t this.remove = function (name) {\r\n\t if (this.$behaviours && this.$behaviours[name]) {\r\n\t delete this.$behaviours[name];\r\n\t }\r\n\t }\r\n\t \r\n\t this.inherit = function (mode, filter) {\r\n\t if (typeof mode === \"function\") {\r\n\t var behaviours = new mode().getBehaviours(filter);\r\n\t } else {\r\n\t var behaviours = mode.getBehaviours(filter);\r\n\t }\r\n\t this.addBehaviours(behaviours);\r\n\t }\r\n\t \r\n\t this.getBehaviours = function (filter) {\r\n\t if (!filter) {\r\n\t return this.$behaviours;\r\n\t } else {\r\n\t var ret = {}\r\n\t for (var i = 0; i < filter.length; i++) {\r\n\t if (this.$behaviours[filter[i]]) {\r\n\t ret[filter[i]] = this.$behaviours[filter[i]];\r\n\t }\r\n\t }\r\n\t return ret;\r\n\t }\r\n\t }\r\n\r\n\t}).call(Behaviour.prototype);\r\n\r\n\texports.Behaviour = Behaviour;\r\n\t});\r\n\r\n\tace.define(\"ace/unicode\",[\"require\",\"exports\",\"module\"], function(acequire, exports, module) {\r\n\t\"use strict\";\r\n\texports.packages = {};\r\n\r\n\taddUnicodePackage({\r\n\t L: \"0041-005A0061-007A00AA00B500BA00C0-00D600D8-00F600F8-02C102C6-02D102E0-02E402EC02EE0370-037403760377037A-037D03860388-038A038C038E-03A103A3-03F503F7-0481048A-05250531-055605590561-058705D0-05EA05F0-05F20621-064A066E066F0671-06D306D506E506E606EE06EF06FA-06FC06FF07100712-072F074D-07A507B107CA-07EA07F407F507FA0800-0815081A082408280904-0939093D09500958-0961097109720979-097F0985-098C098F09900993-09A809AA-09B009B209B6-09B909BD09CE09DC09DD09DF-09E109F009F10A05-0A0A0A0F0A100A13-0A280A2A-0A300A320A330A350A360A380A390A59-0A5C0A5E0A72-0A740A85-0A8D0A8F-0A910A93-0AA80AAA-0AB00AB20AB30AB5-0AB90ABD0AD00AE00AE10B05-0B0C0B0F0B100B13-0B280B2A-0B300B320B330B35-0B390B3D0B5C0B5D0B5F-0B610B710B830B85-0B8A0B8E-0B900B92-0B950B990B9A0B9C0B9E0B9F0BA30BA40BA8-0BAA0BAE-0BB90BD00C05-0C0C0C0E-0C100C12-0C280C2A-0C330C35-0C390C3D0C580C590C600C610C85-0C8C0C8E-0C900C92-0CA80CAA-0CB30CB5-0CB90CBD0CDE0CE00CE10D05-0D0C0D0E-0D100D12-0D280D2A-0D390D3D0D600D610D7A-0D7F0D85-0D960D9A-0DB10DB3-0DBB0DBD0DC0-0DC60E01-0E300E320E330E40-0E460E810E820E840E870E880E8A0E8D0E94-0E970E99-0E9F0EA1-0EA30EA50EA70EAA0EAB0EAD-0EB00EB20EB30EBD0EC0-0EC40EC60EDC0EDD0F000F40-0F470F49-0F6C0F88-0F8B1000-102A103F1050-1055105A-105D106110651066106E-10701075-1081108E10A0-10C510D0-10FA10FC1100-1248124A-124D1250-12561258125A-125D1260-1288128A-128D1290-12B012B2-12B512B8-12BE12C012C2-12C512C8-12D612D8-13101312-13151318-135A1380-138F13A0-13F41401-166C166F-167F1681-169A16A0-16EA1700-170C170E-17111720-17311740-17511760-176C176E-17701780-17B317D717DC1820-18771880-18A818AA18B0-18F51900-191C1950-196D1970-19741980-19AB19C1-19C71A00-1A161A20-1A541AA71B05-1B331B45-1B4B1B83-1BA01BAE1BAF1C00-1C231C4D-1C4F1C5A-1C7D1CE9-1CEC1CEE-1CF11D00-1DBF1E00-1F151F18-1F1D1F20-1F451F48-1F4D1F50-1F571F591F5B1F5D1F5F-1F7D1F80-1FB41FB6-1FBC1FBE1FC2-1FC41FC6-1FCC1FD0-1FD31FD6-1FDB1FE0-1FEC1FF2-1FF41FF6-1FFC2071207F2090-209421022107210A-211321152119-211D212421262128212A-212D212F-2139213C-213F2145-2149214E218321842C00-2C2E2C30-2C5E2C60-2CE42CEB-2CEE2D00-2D252D30-2D652D6F2D80-2D962DA0-2DA62DA8-2DAE2DB0-2DB62DB8-2DBE2DC0-2DC62DC8-2DCE2DD0-2DD62DD8-2DDE2E2F300530063031-3035303B303C3041-3096309D-309F30A1-30FA30FC-30FF3105-312D3131-318E31A0-31B731F0-31FF3400-4DB54E00-9FCBA000-A48CA4D0-A4FDA500-A60CA610-A61FA62AA62BA640-A65FA662-A66EA67F-A697A6A0-A6E5A717-A71FA722-A788A78BA78CA7FB-A801A803-A805A807-A80AA80C-A822A840-A873A882-A8B3A8F2-A8F7A8FBA90A-A925A930-A946A960-A97CA984-A9B2A9CFAA00-AA28AA40-AA42AA44-AA4BAA60-AA76AA7AAA80-AAAFAAB1AAB5AAB6AAB9-AABDAAC0AAC2AADB-AADDABC0-ABE2AC00-D7A3D7B0-D7C6D7CB-D7FBF900-FA2DFA30-FA6DFA70-FAD9FB00-FB06FB13-FB17FB1DFB1F-FB28FB2A-FB36FB38-FB3CFB3EFB40FB41FB43FB44FB46-FBB1FBD3-FD3DFD50-FD8FFD92-FDC7FDF0-FDFBFE70-FE74FE76-FEFCFF21-FF3AFF41-FF5AFF66-FFBEFFC2-FFC7FFCA-FFCFFFD2-FFD7FFDA-FFDC\",\r\n\t Ll: \"0061-007A00AA00B500BA00DF-00F600F8-00FF01010103010501070109010B010D010F01110113011501170119011B011D011F01210123012501270129012B012D012F01310133013501370138013A013C013E014001420144014601480149014B014D014F01510153015501570159015B015D015F01610163016501670169016B016D016F0171017301750177017A017C017E-0180018301850188018C018D019201950199-019B019E01A101A301A501A801AA01AB01AD01B001B401B601B901BA01BD-01BF01C601C901CC01CE01D001D201D401D601D801DA01DC01DD01DF01E101E301E501E701E901EB01ED01EF01F001F301F501F901FB01FD01FF02010203020502070209020B020D020F02110213021502170219021B021D021F02210223022502270229022B022D022F02310233-0239023C023F0240024202470249024B024D024F-02930295-02AF037103730377037B-037D039003AC-03CE03D003D103D5-03D703D903DB03DD03DF03E103E303E503E703E903EB03ED03EF-03F303F503F803FB03FC0430-045F04610463046504670469046B046D046F04710473047504770479047B047D047F0481048B048D048F04910493049504970499049B049D049F04A104A304A504A704A904AB04AD04AF04B104B304B504B704B904BB04BD04BF04C204C404C604C804CA04CC04CE04CF04D104D304D504D704D904DB04DD04DF04E104E304E504E704E904EB04ED04EF04F104F304F504F704F904FB04FD04FF05010503050505070509050B050D050F05110513051505170519051B051D051F0521052305250561-05871D00-1D2B1D62-1D771D79-1D9A1E011E031E051E071E091E0B1E0D1E0F1E111E131E151E171E191E1B1E1D1E1F1E211E231E251E271E291E2B1E2D1E2F1E311E331E351E371E391E3B1E3D1E3F1E411E431E451E471E491E4B1E4D1E4F1E511E531E551E571E591E5B1E5D1E5F1E611E631E651E671E691E6B1E6D1E6F1E711E731E751E771E791E7B1E7D1E7F1E811E831E851E871E891E8B1E8D1E8F1E911E931E95-1E9D1E9F1EA11EA31EA51EA71EA91EAB1EAD1EAF1EB11EB31EB51EB71EB91EBB1EBD1EBF1EC11EC31EC51EC71EC91ECB1ECD1ECF1ED11ED31ED51ED71ED91EDB1EDD1EDF1EE11EE31EE51EE71EE91EEB1EED1EEF1EF11EF31EF51EF71EF91EFB1EFD1EFF-1F071F10-1F151F20-1F271F30-1F371F40-1F451F50-1F571F60-1F671F70-1F7D1F80-1F871F90-1F971FA0-1FA71FB0-1FB41FB61FB71FBE1FC2-1FC41FC61FC71FD0-1FD31FD61FD71FE0-1FE71FF2-1FF41FF61FF7210A210E210F2113212F21342139213C213D2146-2149214E21842C30-2C5E2C612C652C662C682C6A2C6C2C712C732C742C76-2C7C2C812C832C852C872C892C8B2C8D2C8F2C912C932C952C972C992C9B2C9D2C9F2CA12CA32CA52CA72CA92CAB2CAD2CAF2CB12CB32CB52CB72CB92CBB2CBD2CBF2CC12CC32CC52CC72CC92CCB2CCD2CCF2CD12CD32CD52CD72CD92CDB2CDD2CDF2CE12CE32CE42CEC2CEE2D00-2D25A641A643A645A647A649A64BA64DA64FA651A653A655A657A659A65BA65DA65FA663A665A667A669A66BA66DA681A683A685A687A689A68BA68DA68FA691A693A695A697A723A725A727A729A72BA72DA72F-A731A733A735A737A739A73BA73DA73FA741A743A745A747A749A74BA74DA74FA751A753A755A757A759A75BA75DA75FA761A763A765A767A769A76BA76DA76FA771-A778A77AA77CA77FA781A783A785A787A78CFB00-FB06FB13-FB17FF41-FF5A\",\r\n\t Lu: \"0041-005A00C0-00D600D8-00DE01000102010401060108010A010C010E01100112011401160118011A011C011E01200122012401260128012A012C012E01300132013401360139013B013D013F0141014301450147014A014C014E01500152015401560158015A015C015E01600162016401660168016A016C016E017001720174017601780179017B017D018101820184018601870189-018B018E-0191019301940196-0198019C019D019F01A001A201A401A601A701A901AC01AE01AF01B1-01B301B501B701B801BC01C401C701CA01CD01CF01D101D301D501D701D901DB01DE01E001E201E401E601E801EA01EC01EE01F101F401F6-01F801FA01FC01FE02000202020402060208020A020C020E02100212021402160218021A021C021E02200222022402260228022A022C022E02300232023A023B023D023E02410243-02460248024A024C024E03700372037603860388-038A038C038E038F0391-03A103A3-03AB03CF03D2-03D403D803DA03DC03DE03E003E203E403E603E803EA03EC03EE03F403F703F903FA03FD-042F04600462046404660468046A046C046E04700472047404760478047A047C047E0480048A048C048E04900492049404960498049A049C049E04A004A204A404A604A804AA04AC04AE04B004B204B404B604B804BA04BC04BE04C004C104C304C504C704C904CB04CD04D004D204D404D604D804DA04DC04DE04E004E204E404E604E804EA04EC04EE04F004F204F404F604F804FA04FC04FE05000502050405060508050A050C050E05100512051405160518051A051C051E0520052205240531-055610A0-10C51E001E021E041E061E081E0A1E0C1E0E1E101E121E141E161E181E1A1E1C1E1E1E201E221E241E261E281E2A1E2C1E2E1E301E321E341E361E381E3A1E3C1E3E1E401E421E441E461E481E4A1E4C1E4E1E501E521E541E561E581E5A1E5C1E5E1E601E621E641E661E681E6A1E6C1E6E1E701E721E741E761E781E7A1E7C1E7E1E801E821E841E861E881E8A1E8C1E8E1E901E921E941E9E1EA01EA21EA41EA61EA81EAA1EAC1EAE1EB01EB21EB41EB61EB81EBA1EBC1EBE1EC01EC21EC41EC61EC81ECA1ECC1ECE1ED01ED21ED41ED61ED81EDA1EDC1EDE1EE01EE21EE41EE61EE81EEA1EEC1EEE1EF01EF21EF41EF61EF81EFA1EFC1EFE1F08-1F0F1F18-1F1D1F28-1F2F1F38-1F3F1F48-1F4D1F591F5B1F5D1F5F1F68-1F6F1FB8-1FBB1FC8-1FCB1FD8-1FDB1FE8-1FEC1FF8-1FFB21022107210B-210D2110-211221152119-211D212421262128212A-212D2130-2133213E213F214521832C00-2C2E2C602C62-2C642C672C692C6B2C6D-2C702C722C752C7E-2C802C822C842C862C882C8A2C8C2C8E2C902C922C942C962C982C9A2C9C2C9E2CA02CA22CA42CA62CA82CAA2CAC2CAE2CB02CB22CB42CB62CB82CBA2CBC2CBE2CC02CC22CC42CC62CC82CCA2CCC2CCE2CD02CD22CD42CD62CD82CDA2CDC2CDE2CE02CE22CEB2CEDA640A642A644A646A648A64AA64CA64EA650A652A654A656A658A65AA65CA65EA662A664A666A668A66AA66CA680A682A684A686A688A68AA68CA68EA690A692A694A696A722A724A726A728A72AA72CA72EA732A734A736A738A73AA73CA73EA740A742A744A746A748A74AA74CA74EA750A752A754A756A758A75AA75CA75EA760A762A764A766A768A76AA76CA76EA779A77BA77DA77EA780A782A784A786A78BFF21-FF3A\",\r\n\t Lt: \"01C501C801CB01F21F88-1F8F1F98-1F9F1FA8-1FAF1FBC1FCC1FFC\",\r\n\t Lm: \"02B0-02C102C6-02D102E0-02E402EC02EE0374037A0559064006E506E607F407F507FA081A0824082809710E460EC610FC17D718431AA71C78-1C7D1D2C-1D611D781D9B-1DBF2071207F2090-20942C7D2D6F2E2F30053031-3035303B309D309E30FC-30FEA015A4F8-A4FDA60CA67FA717-A71FA770A788A9CFAA70AADDFF70FF9EFF9F\",\r\n\t Lo: \"01BB01C0-01C3029405D0-05EA05F0-05F20621-063F0641-064A066E066F0671-06D306D506EE06EF06FA-06FC06FF07100712-072F074D-07A507B107CA-07EA0800-08150904-0939093D09500958-096109720979-097F0985-098C098F09900993-09A809AA-09B009B209B6-09B909BD09CE09DC09DD09DF-09E109F009F10A05-0A0A0A0F0A100A13-0A280A2A-0A300A320A330A350A360A380A390A59-0A5C0A5E0A72-0A740A85-0A8D0A8F-0A910A93-0AA80AAA-0AB00AB20AB30AB5-0AB90ABD0AD00AE00AE10B05-0B0C0B0F0B100B13-0B280B2A-0B300B320B330B35-0B390B3D0B5C0B5D0B5F-0B610B710B830B85-0B8A0B8E-0B900B92-0B950B990B9A0B9C0B9E0B9F0BA30BA40BA8-0BAA0BAE-0BB90BD00C05-0C0C0C0E-0C100C12-0C280C2A-0C330C35-0C390C3D0C580C590C600C610C85-0C8C0C8E-0C900C92-0CA80CAA-0CB30CB5-0CB90CBD0CDE0CE00CE10D05-0D0C0D0E-0D100D12-0D280D2A-0D390D3D0D600D610D7A-0D7F0D85-0D960D9A-0DB10DB3-0DBB0DBD0DC0-0DC60E01-0E300E320E330E40-0E450E810E820E840E870E880E8A0E8D0E94-0E970E99-0E9F0EA1-0EA30EA50EA70EAA0EAB0EAD-0EB00EB20EB30EBD0EC0-0EC40EDC0EDD0F000F40-0F470F49-0F6C0F88-0F8B1000-102A103F1050-1055105A-105D106110651066106E-10701075-1081108E10D0-10FA1100-1248124A-124D1250-12561258125A-125D1260-1288128A-128D1290-12B012B2-12B512B8-12BE12C012C2-12C512C8-12D612D8-13101312-13151318-135A1380-138F13A0-13F41401-166C166F-167F1681-169A16A0-16EA1700-170C170E-17111720-17311740-17511760-176C176E-17701780-17B317DC1820-18421844-18771880-18A818AA18B0-18F51900-191C1950-196D1970-19741980-19AB19C1-19C71A00-1A161A20-1A541B05-1B331B45-1B4B1B83-1BA01BAE1BAF1C00-1C231C4D-1C4F1C5A-1C771CE9-1CEC1CEE-1CF12135-21382D30-2D652D80-2D962DA0-2DA62DA8-2DAE2DB0-2DB62DB8-2DBE2DC0-2DC62DC8-2DCE2DD0-2DD62DD8-2DDE3006303C3041-3096309F30A1-30FA30FF3105-312D3131-318E31A0-31B731F0-31FF3400-4DB54E00-9FCBA000-A014A016-A48CA4D0-A4F7A500-A60BA610-A61FA62AA62BA66EA6A0-A6E5A7FB-A801A803-A805A807-A80AA80C-A822A840-A873A882-A8B3A8F2-A8F7A8FBA90A-A925A930-A946A960-A97CA984-A9B2AA00-AA28AA40-AA42AA44-AA4BAA60-AA6FAA71-AA76AA7AAA80-AAAFAAB1AAB5AAB6AAB9-AABDAAC0AAC2AADBAADCABC0-ABE2AC00-D7A3D7B0-D7C6D7CB-D7FBF900-FA2DFA30-FA6DFA70-FAD9FB1DFB1F-FB28FB2A-FB36FB38-FB3CFB3EFB40FB41FB43FB44FB46-FBB1FBD3-FD3DFD50-FD8FFD92-FDC7FDF0-FDFBFE70-FE74FE76-FEFCFF66-FF6FFF71-FF9DFFA0-FFBEFFC2-FFC7FFCA-FFCFFFD2-FFD7FFDA-FFDC\",\r\n\t M: \"0300-036F0483-04890591-05BD05BF05C105C205C405C505C70610-061A064B-065E067006D6-06DC06DE-06E406E706E806EA-06ED07110730-074A07A6-07B007EB-07F30816-0819081B-08230825-08270829-082D0900-0903093C093E-094E0951-0955096209630981-098309BC09BE-09C409C709C809CB-09CD09D709E209E30A01-0A030A3C0A3E-0A420A470A480A4B-0A4D0A510A700A710A750A81-0A830ABC0ABE-0AC50AC7-0AC90ACB-0ACD0AE20AE30B01-0B030B3C0B3E-0B440B470B480B4B-0B4D0B560B570B620B630B820BBE-0BC20BC6-0BC80BCA-0BCD0BD70C01-0C030C3E-0C440C46-0C480C4A-0C4D0C550C560C620C630C820C830CBC0CBE-0CC40CC6-0CC80CCA-0CCD0CD50CD60CE20CE30D020D030D3E-0D440D46-0D480D4A-0D4D0D570D620D630D820D830DCA0DCF-0DD40DD60DD8-0DDF0DF20DF30E310E34-0E3A0E47-0E4E0EB10EB4-0EB90EBB0EBC0EC8-0ECD0F180F190F350F370F390F3E0F3F0F71-0F840F860F870F90-0F970F99-0FBC0FC6102B-103E1056-1059105E-10601062-10641067-106D1071-10741082-108D108F109A-109D135F1712-17141732-1734175217531772177317B6-17D317DD180B-180D18A91920-192B1930-193B19B0-19C019C819C91A17-1A1B1A55-1A5E1A60-1A7C1A7F1B00-1B041B34-1B441B6B-1B731B80-1B821BA1-1BAA1C24-1C371CD0-1CD21CD4-1CE81CED1CF21DC0-1DE61DFD-1DFF20D0-20F02CEF-2CF12DE0-2DFF302A-302F3099309AA66F-A672A67CA67DA6F0A6F1A802A806A80BA823-A827A880A881A8B4-A8C4A8E0-A8F1A926-A92DA947-A953A980-A983A9B3-A9C0AA29-AA36AA43AA4CAA4DAA7BAAB0AAB2-AAB4AAB7AAB8AABEAABFAAC1ABE3-ABEAABECABEDFB1EFE00-FE0FFE20-FE26\",\r\n\t Mn: \"0300-036F0483-04870591-05BD05BF05C105C205C405C505C70610-061A064B-065E067006D6-06DC06DF-06E406E706E806EA-06ED07110730-074A07A6-07B007EB-07F30816-0819081B-08230825-08270829-082D0900-0902093C0941-0948094D0951-095509620963098109BC09C1-09C409CD09E209E30A010A020A3C0A410A420A470A480A4B-0A4D0A510A700A710A750A810A820ABC0AC1-0AC50AC70AC80ACD0AE20AE30B010B3C0B3F0B41-0B440B4D0B560B620B630B820BC00BCD0C3E-0C400C46-0C480C4A-0C4D0C550C560C620C630CBC0CBF0CC60CCC0CCD0CE20CE30D41-0D440D4D0D620D630DCA0DD2-0DD40DD60E310E34-0E3A0E47-0E4E0EB10EB4-0EB90EBB0EBC0EC8-0ECD0F180F190F350F370F390F71-0F7E0F80-0F840F860F870F90-0F970F99-0FBC0FC6102D-10301032-10371039103A103D103E10581059105E-10601071-1074108210851086108D109D135F1712-17141732-1734175217531772177317B7-17BD17C617C9-17D317DD180B-180D18A91920-19221927192819321939-193B1A171A181A561A58-1A5E1A601A621A65-1A6C1A73-1A7C1A7F1B00-1B031B341B36-1B3A1B3C1B421B6B-1B731B801B811BA2-1BA51BA81BA91C2C-1C331C361C371CD0-1CD21CD4-1CE01CE2-1CE81CED1DC0-1DE61DFD-1DFF20D0-20DC20E120E5-20F02CEF-2CF12DE0-2DFF302A-302F3099309AA66FA67CA67DA6F0A6F1A802A806A80BA825A826A8C4A8E0-A8F1A926-A92DA947-A951A980-A982A9B3A9B6-A9B9A9BCAA29-AA2EAA31AA32AA35AA36AA43AA4CAAB0AAB2-AAB4AAB7AAB8AABEAABFAAC1ABE5ABE8ABEDFB1EFE00-FE0FFE20-FE26\",\r\n\t Mc: \"0903093E-09400949-094C094E0982098309BE-09C009C709C809CB09CC09D70A030A3E-0A400A830ABE-0AC00AC90ACB0ACC0B020B030B3E0B400B470B480B4B0B4C0B570BBE0BBF0BC10BC20BC6-0BC80BCA-0BCC0BD70C01-0C030C41-0C440C820C830CBE0CC0-0CC40CC70CC80CCA0CCB0CD50CD60D020D030D3E-0D400D46-0D480D4A-0D4C0D570D820D830DCF-0DD10DD8-0DDF0DF20DF30F3E0F3F0F7F102B102C10311038103B103C105610571062-10641067-106D108310841087-108C108F109A-109C17B617BE-17C517C717C81923-19261929-192B193019311933-193819B0-19C019C819C91A19-1A1B1A551A571A611A631A641A6D-1A721B041B351B3B1B3D-1B411B431B441B821BA11BA61BA71BAA1C24-1C2B1C341C351CE11CF2A823A824A827A880A881A8B4-A8C3A952A953A983A9B4A9B5A9BAA9BBA9BD-A9C0AA2FAA30AA33AA34AA4DAA7BABE3ABE4ABE6ABE7ABE9ABEAABEC\",\r\n\t Me: \"0488048906DE20DD-20E020E2-20E4A670-A672\",\r\n\t N: \"0030-003900B200B300B900BC-00BE0660-066906F0-06F907C0-07C90966-096F09E6-09EF09F4-09F90A66-0A6F0AE6-0AEF0B66-0B6F0BE6-0BF20C66-0C6F0C78-0C7E0CE6-0CEF0D66-0D750E50-0E590ED0-0ED90F20-0F331040-10491090-10991369-137C16EE-16F017E0-17E917F0-17F91810-18191946-194F19D0-19DA1A80-1A891A90-1A991B50-1B591BB0-1BB91C40-1C491C50-1C5920702074-20792080-20892150-21822185-21892460-249B24EA-24FF2776-27932CFD30073021-30293038-303A3192-31953220-32293251-325F3280-328932B1-32BFA620-A629A6E6-A6EFA830-A835A8D0-A8D9A900-A909A9D0-A9D9AA50-AA59ABF0-ABF9FF10-FF19\",\r\n\t Nd: \"0030-00390660-066906F0-06F907C0-07C90966-096F09E6-09EF0A66-0A6F0AE6-0AEF0B66-0B6F0BE6-0BEF0C66-0C6F0CE6-0CEF0D66-0D6F0E50-0E590ED0-0ED90F20-0F291040-10491090-109917E0-17E91810-18191946-194F19D0-19DA1A80-1A891A90-1A991B50-1B591BB0-1BB91C40-1C491C50-1C59A620-A629A8D0-A8D9A900-A909A9D0-A9D9AA50-AA59ABF0-ABF9FF10-FF19\",\r\n\t Nl: \"16EE-16F02160-21822185-218830073021-30293038-303AA6E6-A6EF\",\r\n\t No: \"00B200B300B900BC-00BE09F4-09F90BF0-0BF20C78-0C7E0D70-0D750F2A-0F331369-137C17F0-17F920702074-20792080-20892150-215F21892460-249B24EA-24FF2776-27932CFD3192-31953220-32293251-325F3280-328932B1-32BFA830-A835\",\r\n\t P: \"0021-00230025-002A002C-002F003A003B003F0040005B-005D005F007B007D00A100AB00B700BB00BF037E0387055A-055F0589058A05BE05C005C305C605F305F40609060A060C060D061B061E061F066A-066D06D40700-070D07F7-07F90830-083E0964096509700DF40E4F0E5A0E5B0F04-0F120F3A-0F3D0F850FD0-0FD4104A-104F10FB1361-13681400166D166E169B169C16EB-16ED1735173617D4-17D617D8-17DA1800-180A1944194519DE19DF1A1E1A1F1AA0-1AA61AA8-1AAD1B5A-1B601C3B-1C3F1C7E1C7F1CD32010-20272030-20432045-20512053-205E207D207E208D208E2329232A2768-277527C527C627E6-27EF2983-299829D8-29DB29FC29FD2CF9-2CFC2CFE2CFF2E00-2E2E2E302E313001-30033008-30113014-301F3030303D30A030FBA4FEA4FFA60D-A60FA673A67EA6F2-A6F7A874-A877A8CEA8CFA8F8-A8FAA92EA92FA95FA9C1-A9CDA9DEA9DFAA5C-AA5FAADEAADFABEBFD3EFD3FFE10-FE19FE30-FE52FE54-FE61FE63FE68FE6AFE6BFF01-FF03FF05-FF0AFF0C-FF0FFF1AFF1BFF1FFF20FF3B-FF3DFF3FFF5BFF5DFF5F-FF65\",\r\n\t Pd: \"002D058A05BE140018062010-20152E172E1A301C303030A0FE31FE32FE58FE63FF0D\",\r\n\t Ps: \"0028005B007B0F3A0F3C169B201A201E2045207D208D23292768276A276C276E27702772277427C527E627E827EA27EC27EE2983298529872989298B298D298F299129932995299729D829DA29FC2E222E242E262E283008300A300C300E3010301430163018301A301DFD3EFE17FE35FE37FE39FE3BFE3DFE3FFE41FE43FE47FE59FE5BFE5DFF08FF3BFF5BFF5FFF62\",\r\n\t Pe: \"0029005D007D0F3B0F3D169C2046207E208E232A2769276B276D276F27712773277527C627E727E927EB27ED27EF298429862988298A298C298E2990299229942996299829D929DB29FD2E232E252E272E293009300B300D300F3011301530173019301B301E301FFD3FFE18FE36FE38FE3AFE3CFE3EFE40FE42FE44FE48FE5AFE5CFE5EFF09FF3DFF5DFF60FF63\",\r\n\t Pi: \"00AB2018201B201C201F20392E022E042E092E0C2E1C2E20\",\r\n\t Pf: \"00BB2019201D203A2E032E052E0A2E0D2E1D2E21\",\r\n\t Pc: \"005F203F20402054FE33FE34FE4D-FE4FFF3F\",\r\n\t Po: \"0021-00230025-0027002A002C002E002F003A003B003F0040005C00A100B700BF037E0387055A-055F058905C005C305C605F305F40609060A060C060D061B061E061F066A-066D06D40700-070D07F7-07F90830-083E0964096509700DF40E4F0E5A0E5B0F04-0F120F850FD0-0FD4104A-104F10FB1361-1368166D166E16EB-16ED1735173617D4-17D617D8-17DA1800-18051807-180A1944194519DE19DF1A1E1A1F1AA0-1AA61AA8-1AAD1B5A-1B601C3B-1C3F1C7E1C7F1CD3201620172020-20272030-2038203B-203E2041-20432047-205120532055-205E2CF9-2CFC2CFE2CFF2E002E012E06-2E082E0B2E0E-2E162E182E192E1B2E1E2E1F2E2A-2E2E2E302E313001-3003303D30FBA4FEA4FFA60D-A60FA673A67EA6F2-A6F7A874-A877A8CEA8CFA8F8-A8FAA92EA92FA95FA9C1-A9CDA9DEA9DFAA5C-AA5FAADEAADFABEBFE10-FE16FE19FE30FE45FE46FE49-FE4CFE50-FE52FE54-FE57FE5F-FE61FE68FE6AFE6BFF01-FF03FF05-FF07FF0AFF0CFF0EFF0FFF1AFF1BFF1FFF20FF3CFF61FF64FF65\",\r\n\t S: \"0024002B003C-003E005E0060007C007E00A2-00A900AC00AE-00B100B400B600B800D700F702C2-02C502D2-02DF02E5-02EB02ED02EF-02FF03750384038503F604820606-0608060B060E060F06E906FD06FE07F609F209F309FA09FB0AF10B700BF3-0BFA0C7F0CF10CF20D790E3F0F01-0F030F13-0F170F1A-0F1F0F340F360F380FBE-0FC50FC7-0FCC0FCE0FCF0FD5-0FD8109E109F13601390-139917DB194019E0-19FF1B61-1B6A1B74-1B7C1FBD1FBF-1FC11FCD-1FCF1FDD-1FDF1FED-1FEF1FFD1FFE20442052207A-207C208A-208C20A0-20B8210021012103-21062108210921142116-2118211E-2123212521272129212E213A213B2140-2144214A-214D214F2190-2328232B-23E82400-24262440-244A249C-24E92500-26CD26CF-26E126E326E8-26FF2701-27042706-2709270C-27272729-274B274D274F-27522756-275E2761-276727942798-27AF27B1-27BE27C0-27C427C7-27CA27CC27D0-27E527F0-29822999-29D729DC-29FB29FE-2B4C2B50-2B592CE5-2CEA2E80-2E992E9B-2EF32F00-2FD52FF0-2FFB300430123013302030363037303E303F309B309C319031913196-319F31C0-31E33200-321E322A-32503260-327F328A-32B032C0-32FE3300-33FF4DC0-4DFFA490-A4C6A700-A716A720A721A789A78AA828-A82BA836-A839AA77-AA79FB29FDFCFDFDFE62FE64-FE66FE69FF04FF0BFF1C-FF1EFF3EFF40FF5CFF5EFFE0-FFE6FFE8-FFEEFFFCFFFD\",\r\n\t Sm: \"002B003C-003E007C007E00AC00B100D700F703F60606-060820442052207A-207C208A-208C2140-2144214B2190-2194219A219B21A021A321A621AE21CE21CF21D221D421F4-22FF2308-230B23202321237C239B-23B323DC-23E125B725C125F8-25FF266F27C0-27C427C7-27CA27CC27D0-27E527F0-27FF2900-29822999-29D729DC-29FB29FE-2AFF2B30-2B442B47-2B4CFB29FE62FE64-FE66FF0BFF1C-FF1EFF5CFF5EFFE2FFE9-FFEC\",\r\n\t Sc: \"002400A2-00A5060B09F209F309FB0AF10BF90E3F17DB20A0-20B8A838FDFCFE69FF04FFE0FFE1FFE5FFE6\",\r\n\t Sk: \"005E006000A800AF00B400B802C2-02C502D2-02DF02E5-02EB02ED02EF-02FF0375038403851FBD1FBF-1FC11FCD-1FCF1FDD-1FDF1FED-1FEF1FFD1FFE309B309CA700-A716A720A721A789A78AFF3EFF40FFE3\",\r\n\t So: \"00A600A700A900AE00B000B60482060E060F06E906FD06FE07F609FA0B700BF3-0BF80BFA0C7F0CF10CF20D790F01-0F030F13-0F170F1A-0F1F0F340F360F380FBE-0FC50FC7-0FCC0FCE0FCF0FD5-0FD8109E109F13601390-1399194019E0-19FF1B61-1B6A1B74-1B7C210021012103-21062108210921142116-2118211E-2123212521272129212E213A213B214A214C214D214F2195-2199219C-219F21A121A221A421A521A7-21AD21AF-21CD21D021D121D321D5-21F32300-2307230C-231F2322-2328232B-237B237D-239A23B4-23DB23E2-23E82400-24262440-244A249C-24E92500-25B625B8-25C025C2-25F72600-266E2670-26CD26CF-26E126E326E8-26FF2701-27042706-2709270C-27272729-274B274D274F-27522756-275E2761-276727942798-27AF27B1-27BE2800-28FF2B00-2B2F2B452B462B50-2B592CE5-2CEA2E80-2E992E9B-2EF32F00-2FD52FF0-2FFB300430123013302030363037303E303F319031913196-319F31C0-31E33200-321E322A-32503260-327F328A-32B032C0-32FE3300-33FF4DC0-4DFFA490-A4C6A828-A82BA836A837A839AA77-AA79FDFDFFE4FFE8FFEDFFEEFFFCFFFD\",\r\n\t Z: \"002000A01680180E2000-200A20282029202F205F3000\",\r\n\t Zs: \"002000A01680180E2000-200A202F205F3000\",\r\n\t Zl: \"2028\",\r\n\t Zp: \"2029\",\r\n\t C: \"0000-001F007F-009F00AD03780379037F-0383038B038D03A20526-05300557055805600588058B-059005C8-05CF05EB-05EF05F5-0605061C061D0620065F06DD070E070F074B074C07B2-07BF07FB-07FF082E082F083F-08FF093A093B094F095609570973-097809800984098D098E0991099209A909B109B3-09B509BA09BB09C509C609C909CA09CF-09D609D8-09DB09DE09E409E509FC-0A000A040A0B-0A0E0A110A120A290A310A340A370A3A0A3B0A3D0A43-0A460A490A4A0A4E-0A500A52-0A580A5D0A5F-0A650A76-0A800A840A8E0A920AA90AB10AB40ABA0ABB0AC60ACA0ACE0ACF0AD1-0ADF0AE40AE50AF00AF2-0B000B040B0D0B0E0B110B120B290B310B340B3A0B3B0B450B460B490B4A0B4E-0B550B58-0B5B0B5E0B640B650B72-0B810B840B8B-0B8D0B910B96-0B980B9B0B9D0BA0-0BA20BA5-0BA70BAB-0BAD0BBA-0BBD0BC3-0BC50BC90BCE0BCF0BD1-0BD60BD8-0BE50BFB-0C000C040C0D0C110C290C340C3A-0C3C0C450C490C4E-0C540C570C5A-0C5F0C640C650C70-0C770C800C810C840C8D0C910CA90CB40CBA0CBB0CC50CC90CCE-0CD40CD7-0CDD0CDF0CE40CE50CF00CF3-0D010D040D0D0D110D290D3A-0D3C0D450D490D4E-0D560D58-0D5F0D640D650D76-0D780D800D810D840D97-0D990DB20DBC0DBE0DBF0DC7-0DC90DCB-0DCE0DD50DD70DE0-0DF10DF5-0E000E3B-0E3E0E5C-0E800E830E850E860E890E8B0E8C0E8E-0E930E980EA00EA40EA60EA80EA90EAC0EBA0EBE0EBF0EC50EC70ECE0ECF0EDA0EDB0EDE-0EFF0F480F6D-0F700F8C-0F8F0F980FBD0FCD0FD9-0FFF10C6-10CF10FD-10FF1249124E124F12571259125E125F1289128E128F12B112B612B712BF12C112C612C712D7131113161317135B-135E137D-137F139A-139F13F5-13FF169D-169F16F1-16FF170D1715-171F1737-173F1754-175F176D17711774-177F17B417B517DE17DF17EA-17EF17FA-17FF180F181A-181F1878-187F18AB-18AF18F6-18FF191D-191F192C-192F193C-193F1941-1943196E196F1975-197F19AC-19AF19CA-19CF19DB-19DD1A1C1A1D1A5F1A7D1A7E1A8A-1A8F1A9A-1A9F1AAE-1AFF1B4C-1B4F1B7D-1B7F1BAB-1BAD1BBA-1BFF1C38-1C3A1C4A-1C4C1C80-1CCF1CF3-1CFF1DE7-1DFC1F161F171F1E1F1F1F461F471F4E1F4F1F581F5A1F5C1F5E1F7E1F7F1FB51FC51FD41FD51FDC1FF01FF11FF51FFF200B-200F202A-202E2060-206F20722073208F2095-209F20B9-20CF20F1-20FF218A-218F23E9-23FF2427-243F244B-245F26CE26E226E4-26E727002705270A270B2728274C274E2753-2755275F27602795-279727B027BF27CB27CD-27CF2B4D-2B4F2B5A-2BFF2C2F2C5F2CF2-2CF82D26-2D2F2D66-2D6E2D70-2D7F2D97-2D9F2DA72DAF2DB72DBF2DC72DCF2DD72DDF2E32-2E7F2E9A2EF4-2EFF2FD6-2FEF2FFC-2FFF3040309730983100-3104312E-3130318F31B8-31BF31E4-31EF321F32FF4DB6-4DBF9FCC-9FFFA48D-A48FA4C7-A4CFA62C-A63FA660A661A674-A67BA698-A69FA6F8-A6FFA78D-A7FAA82C-A82FA83A-A83FA878-A87FA8C5-A8CDA8DA-A8DFA8FC-A8FFA954-A95EA97D-A97FA9CEA9DA-A9DDA9E0-A9FFAA37-AA3FAA4EAA4FAA5AAA5BAA7C-AA7FAAC3-AADAAAE0-ABBFABEEABEFABFA-ABFFD7A4-D7AFD7C7-D7CAD7FC-F8FFFA2EFA2FFA6EFA6FFADA-FAFFFB07-FB12FB18-FB1CFB37FB3DFB3FFB42FB45FBB2-FBD2FD40-FD4FFD90FD91FDC8-FDEFFDFEFDFFFE1A-FE1FFE27-FE2FFE53FE67FE6C-FE6FFE75FEFD-FF00FFBF-FFC1FFC8FFC9FFD0FFD1FFD8FFD9FFDD-FFDFFFE7FFEF-FFFBFFFEFFFF\",\r\n\t Cc: \"0000-001F007F-009F\",\r\n\t Cf: \"00AD0600-060306DD070F17B417B5200B-200F202A-202E2060-2064206A-206FFEFFFFF9-FFFB\",\r\n\t Co: \"E000-F8FF\",\r\n\t Cs: \"D800-DFFF\",\r\n\t Cn: \"03780379037F-0383038B038D03A20526-05300557055805600588058B-059005C8-05CF05EB-05EF05F5-05FF06040605061C061D0620065F070E074B074C07B2-07BF07FB-07FF082E082F083F-08FF093A093B094F095609570973-097809800984098D098E0991099209A909B109B3-09B509BA09BB09C509C609C909CA09CF-09D609D8-09DB09DE09E409E509FC-0A000A040A0B-0A0E0A110A120A290A310A340A370A3A0A3B0A3D0A43-0A460A490A4A0A4E-0A500A52-0A580A5D0A5F-0A650A76-0A800A840A8E0A920AA90AB10AB40ABA0ABB0AC60ACA0ACE0ACF0AD1-0ADF0AE40AE50AF00AF2-0B000B040B0D0B0E0B110B120B290B310B340B3A0B3B0B450B460B490B4A0B4E-0B550B58-0B5B0B5E0B640B650B72-0B810B840B8B-0B8D0B910B96-0B980B9B0B9D0BA0-0BA20BA5-0BA70BAB-0BAD0BBA-0BBD0BC3-0BC50BC90BCE0BCF0BD1-0BD60BD8-0BE50BFB-0C000C040C0D0C110C290C340C3A-0C3C0C450C490C4E-0C540C570C5A-0C5F0C640C650C70-0C770C800C810C840C8D0C910CA90CB40CBA0CBB0CC50CC90CCE-0CD40CD7-0CDD0CDF0CE40CE50CF00CF3-0D010D040D0D0D110D290D3A-0D3C0D450D490D4E-0D560D58-0D5F0D640D650D76-0D780D800D810D840D97-0D990DB20DBC0DBE0DBF0DC7-0DC90DCB-0DCE0DD50DD70DE0-0DF10DF5-0E000E3B-0E3E0E5C-0E800E830E850E860E890E8B0E8C0E8E-0E930E980EA00EA40EA60EA80EA90EAC0EBA0EBE0EBF0EC50EC70ECE0ECF0EDA0EDB0EDE-0EFF0F480F6D-0F700F8C-0F8F0F980FBD0FCD0FD9-0FFF10C6-10CF10FD-10FF1249124E124F12571259125E125F1289128E128F12B112B612B712BF12C112C612C712D7131113161317135B-135E137D-137F139A-139F13F5-13FF169D-169F16F1-16FF170D1715-171F1737-173F1754-175F176D17711774-177F17DE17DF17EA-17EF17FA-17FF180F181A-181F1878-187F18AB-18AF18F6-18FF191D-191F192C-192F193C-193F1941-1943196E196F1975-197F19AC-19AF19CA-19CF19DB-19DD1A1C1A1D1A5F1A7D1A7E1A8A-1A8F1A9A-1A9F1AAE-1AFF1B4C-1B4F1B7D-1B7F1BAB-1BAD1BBA-1BFF1C38-1C3A1C4A-1C4C1C80-1CCF1CF3-1CFF1DE7-1DFC1F161F171F1E1F1F1F461F471F4E1F4F1F581F5A1F5C1F5E1F7E1F7F1FB51FC51FD41FD51FDC1FF01FF11FF51FFF2065-206920722073208F2095-209F20B9-20CF20F1-20FF218A-218F23E9-23FF2427-243F244B-245F26CE26E226E4-26E727002705270A270B2728274C274E2753-2755275F27602795-279727B027BF27CB27CD-27CF2B4D-2B4F2B5A-2BFF2C2F2C5F2CF2-2CF82D26-2D2F2D66-2D6E2D70-2D7F2D97-2D9F2DA72DAF2DB72DBF2DC72DCF2DD72DDF2E32-2E7F2E9A2EF4-2EFF2FD6-2FEF2FFC-2FFF3040309730983100-3104312E-3130318F31B8-31BF31E4-31EF321F32FF4DB6-4DBF9FCC-9FFFA48D-A48FA4C7-A4CFA62C-A63FA660A661A674-A67BA698-A69FA6F8-A6FFA78D-A7FAA82C-A82FA83A-A83FA878-A87FA8C5-A8CDA8DA-A8DFA8FC-A8FFA954-A95EA97D-A97FA9CEA9DA-A9DDA9E0-A9FFAA37-AA3FAA4EAA4FAA5AAA5BAA7C-AA7FAAC3-AADAAAE0-ABBFABEEABEFABFA-ABFFD7A4-D7AFD7C7-D7CAD7FC-D7FFFA2EFA2FFA6EFA6FFADA-FAFFFB07-FB12FB18-FB1CFB37FB3DFB3FFB42FB45FBB2-FBD2FD40-FD4FFD90FD91FDC8-FDEFFDFEFDFFFE1A-FE1FFE27-FE2FFE53FE67FE6C-FE6FFE75FEFDFEFEFF00FFBF-FFC1FFC8FFC9FFD0FFD1FFD8FFD9FFDD-FFDFFFE7FFEF-FFF8FFFEFFFF\"\r\n\t});\r\n\r\n\tfunction addUnicodePackage (pack) {\r\n\t var codePoint = /\\w{4}/g;\r\n\t for (var name in pack)\r\n\t exports.packages[name] = pack[name].replace(codePoint, \"\\\\u$&\");\r\n\t}\r\n\r\n\t});\r\n\r\n\tace.define(\"ace/token_iterator\",[\"require\",\"exports\",\"module\"], function(acequire, exports, module) {\r\n\t\"use strict\";\r\n\tvar TokenIterator = function(session, initialRow, initialColumn) {\r\n\t this.$session = session;\r\n\t this.$row = initialRow;\r\n\t this.$rowTokens = session.getTokens(initialRow);\r\n\r\n\t var token = session.getTokenAt(initialRow, initialColumn);\r\n\t this.$tokenIndex = token ? token.index : -1;\r\n\t};\r\n\r\n\t(function() { \r\n\t this.stepBackward = function() {\r\n\t this.$tokenIndex -= 1;\r\n\t \r\n\t while (this.$tokenIndex < 0) {\r\n\t this.$row -= 1;\r\n\t if (this.$row < 0) {\r\n\t this.$row = 0;\r\n\t return null;\r\n\t }\r\n\t \r\n\t this.$rowTokens = this.$session.getTokens(this.$row);\r\n\t this.$tokenIndex = this.$rowTokens.length - 1;\r\n\t }\r\n\t \r\n\t return this.$rowTokens[this.$tokenIndex];\r\n\t }; \r\n\t this.stepForward = function() {\r\n\t this.$tokenIndex += 1;\r\n\t var rowCount;\r\n\t while (this.$tokenIndex >= this.$rowTokens.length) {\r\n\t this.$row += 1;\r\n\t if (!rowCount)\r\n\t rowCount = this.$session.getLength();\r\n\t if (this.$row >= rowCount) {\r\n\t this.$row = rowCount - 1;\r\n\t return null;\r\n\t }\r\n\r\n\t this.$rowTokens = this.$session.getTokens(this.$row);\r\n\t this.$tokenIndex = 0;\r\n\t }\r\n\t \r\n\t return this.$rowTokens[this.$tokenIndex];\r\n\t }; \r\n\t this.getCurrentToken = function () {\r\n\t return this.$rowTokens[this.$tokenIndex];\r\n\t }; \r\n\t this.getCurrentTokenRow = function () {\r\n\t return this.$row;\r\n\t }; \r\n\t this.getCurrentTokenColumn = function() {\r\n\t var rowTokens = this.$rowTokens;\r\n\t var tokenIndex = this.$tokenIndex;\r\n\t var column = rowTokens[tokenIndex].start;\r\n\t if (column !== undefined)\r\n\t return column;\r\n\t \r\n\t column = 0;\r\n\t while (tokenIndex > 0) {\r\n\t tokenIndex -= 1;\r\n\t column += rowTokens[tokenIndex].value.length;\r\n\t }\r\n\t \r\n\t return column; \r\n\t };\r\n\t this.getCurrentTokenPosition = function() {\r\n\t return {row: this.$row, column: this.getCurrentTokenColumn()};\r\n\t };\r\n\t \r\n\t}).call(TokenIterator.prototype);\r\n\r\n\texports.TokenIterator = TokenIterator;\r\n\t});\r\n\r\n\tace.define(\"ace/mode/text\",[\"require\",\"exports\",\"module\",\"ace/tokenizer\",\"ace/mode/text_highlight_rules\",\"ace/mode/behaviour\",\"ace/unicode\",\"ace/lib/lang\",\"ace/token_iterator\",\"ace/range\"], function(acequire, exports, module) {\r\n\t\"use strict\";\r\n\r\n\tvar Tokenizer = acequire(\"../tokenizer\").Tokenizer;\r\n\tvar TextHighlightRules = acequire(\"./text_highlight_rules\").TextHighlightRules;\r\n\tvar Behaviour = acequire(\"./behaviour\").Behaviour;\r\n\tvar unicode = acequire(\"../unicode\");\r\n\tvar lang = acequire(\"../lib/lang\");\r\n\tvar TokenIterator = acequire(\"../token_iterator\").TokenIterator;\r\n\tvar Range = acequire(\"../range\").Range;\r\n\r\n\tvar Mode = function() {\r\n\t this.HighlightRules = TextHighlightRules;\r\n\t this.$behaviour = new Behaviour();\r\n\t};\r\n\r\n\t(function() {\r\n\r\n\t this.tokenRe = new RegExp(\"^[\"\r\n\t + unicode.packages.L\r\n\t + unicode.packages.Mn + unicode.packages.Mc\r\n\t + unicode.packages.Nd\r\n\t + unicode.packages.Pc + \"\\\\$_]+\", \"g\"\r\n\t );\r\n\r\n\t this.nonTokenRe = new RegExp(\"^(?:[^\"\r\n\t + unicode.packages.L\r\n\t + unicode.packages.Mn + unicode.packages.Mc\r\n\t + unicode.packages.Nd\r\n\t + unicode.packages.Pc + \"\\\\$_]|\\\\s])+\", \"g\"\r\n\t );\r\n\r\n\t this.getTokenizer = function() {\r\n\t if (!this.$tokenizer) {\r\n\t this.$highlightRules = this.$highlightRules || new this.HighlightRules();\r\n\t this.$tokenizer = new Tokenizer(this.$highlightRules.getRules());\r\n\t }\r\n\t return this.$tokenizer;\r\n\t };\r\n\r\n\t this.lineCommentStart = \"\";\r\n\t this.blockComment = \"\";\r\n\r\n\t this.toggleCommentLines = function(state, session, startRow, endRow) {\r\n\t var doc = session.doc;\r\n\r\n\t var ignoreBlankLines = true;\r\n\t var shouldRemove = true;\r\n\t var minIndent = Infinity;\r\n\t var tabSize = session.getTabSize();\r\n\t var insertAtTabStop = false;\r\n\r\n\t if (!this.lineCommentStart) {\r\n\t if (!this.blockComment)\r\n\t return false;\r\n\t var lineCommentStart = this.blockComment.start;\r\n\t var lineCommentEnd = this.blockComment.end;\r\n\t var regexpStart = new RegExp(\"^(\\\\s*)(?:\" + lang.escapeRegExp(lineCommentStart) + \")\");\r\n\t var regexpEnd = new RegExp(\"(?:\" + lang.escapeRegExp(lineCommentEnd) + \")\\\\s*$\");\r\n\r\n\t var comment = function(line, i) {\r\n\t if (testRemove(line, i))\r\n\t return;\r\n\t if (!ignoreBlankLines || /\\S/.test(line)) {\r\n\t doc.insertInLine({row: i, column: line.length}, lineCommentEnd);\r\n\t doc.insertInLine({row: i, column: minIndent}, lineCommentStart);\r\n\t }\r\n\t };\r\n\r\n\t var uncomment = function(line, i) {\r\n\t var m;\r\n\t if (m = line.match(regexpEnd))\r\n\t doc.removeInLine(i, line.length - m[0].length, line.length);\r\n\t if (m = line.match(regexpStart))\r\n\t doc.removeInLine(i, m[1].length, m[0].length);\r\n\t };\r\n\r\n\t var testRemove = function(line, row) {\r\n\t if (regexpStart.test(line))\r\n\t return true;\r\n\t var tokens = session.getTokens(row);\r\n\t for (var i = 0; i < tokens.length; i++) {\r\n\t if (tokens[i].type === \"comment\")\r\n\t return true;\r\n\t }\r\n\t };\r\n\t } else {\r\n\t if (Array.isArray(this.lineCommentStart)) {\r\n\t var regexpStart = this.lineCommentStart.map(lang.escapeRegExp).join(\"|\");\r\n\t var lineCommentStart = this.lineCommentStart[0];\r\n\t } else {\r\n\t var regexpStart = lang.escapeRegExp(this.lineCommentStart);\r\n\t var lineCommentStart = this.lineCommentStart;\r\n\t }\r\n\t regexpStart = new RegExp(\"^(\\\\s*)(?:\" + regexpStart + \") ?\");\r\n\t \r\n\t insertAtTabStop = session.getUseSoftTabs();\r\n\r\n\t var uncomment = function(line, i) {\r\n\t var m = line.match(regexpStart);\r\n\t if (!m) return;\r\n\t var start = m[1].length, end = m[0].length;\r\n\t if (!shouldInsertSpace(line, start, end) && m[0][end - 1] == \" \")\r\n\t end--;\r\n\t doc.removeInLine(i, start, end);\r\n\t };\r\n\t var commentWithSpace = lineCommentStart + \" \";\r\n\t var comment = function(line, i) {\r\n\t if (!ignoreBlankLines || /\\S/.test(line)) {\r\n\t if (shouldInsertSpace(line, minIndent, minIndent))\r\n\t doc.insertInLine({row: i, column: minIndent}, commentWithSpace);\r\n\t else\r\n\t doc.insertInLine({row: i, column: minIndent}, lineCommentStart);\r\n\t }\r\n\t };\r\n\t var testRemove = function(line, i) {\r\n\t return regexpStart.test(line);\r\n\t };\r\n\t \r\n\t var shouldInsertSpace = function(line, before, after) {\r\n\t var spaces = 0;\r\n\t while (before-- && line.charAt(before) == \" \")\r\n\t spaces++;\r\n\t if (spaces % tabSize != 0)\r\n\t return false;\r\n\t var spaces = 0;\r\n\t while (line.charAt(after++) == \" \")\r\n\t spaces++;\r\n\t if (tabSize > 2)\r\n\t return spaces % tabSize != tabSize - 1;\r\n\t else\r\n\t return spaces % tabSize == 0;\r\n\t return true;\r\n\t };\r\n\t }\r\n\r\n\t function iter(fun) {\r\n\t for (var i = startRow; i <= endRow; i++)\r\n\t fun(doc.getLine(i), i);\r\n\t }\r\n\r\n\r\n\t var minEmptyLength = Infinity;\r\n\t iter(function(line, i) {\r\n\t var indent = line.search(/\\S/);\r\n\t if (indent !== -1) {\r\n\t if (indent < minIndent)\r\n\t minIndent = indent;\r\n\t if (shouldRemove && !testRemove(line, i))\r\n\t shouldRemove = false;\r\n\t } else if (minEmptyLength > line.length) {\r\n\t minEmptyLength = line.length;\r\n\t }\r\n\t });\r\n\r\n\t if (minIndent == Infinity) {\r\n\t minIndent = minEmptyLength;\r\n\t ignoreBlankLines = false;\r\n\t shouldRemove = false;\r\n\t }\r\n\r\n\t if (insertAtTabStop && minIndent % tabSize != 0)\r\n\t minIndent = Math.floor(minIndent / tabSize) * tabSize;\r\n\r\n\t iter(shouldRemove ? uncomment : comment);\r\n\t };\r\n\r\n\t this.toggleBlockComment = function(state, session, range, cursor) {\r\n\t var comment = this.blockComment;\r\n\t if (!comment)\r\n\t return;\r\n\t if (!comment.start && comment[0])\r\n\t comment = comment[0];\r\n\r\n\t var iterator = new TokenIterator(session, cursor.row, cursor.column);\r\n\t var token = iterator.getCurrentToken();\r\n\r\n\t var sel = session.selection;\r\n\t var initialRange = session.selection.toOrientedRange();\r\n\t var startRow, colDiff;\r\n\r\n\t if (token && /comment/.test(token.type)) {\r\n\t var startRange, endRange;\r\n\t while (token && /comment/.test(token.type)) {\r\n\t var i = token.value.indexOf(comment.start);\r\n\t if (i != -1) {\r\n\t var row = iterator.getCurrentTokenRow();\r\n\t var column = iterator.getCurrentTokenColumn() + i;\r\n\t startRange = new Range(row, column, row, column + comment.start.length);\r\n\t break;\r\n\t }\r\n\t token = iterator.stepBackward();\r\n\t }\r\n\r\n\t var iterator = new TokenIterator(session, cursor.row, cursor.column);\r\n\t var token = iterator.getCurrentToken();\r\n\t while (token && /comment/.test(token.type)) {\r\n\t var i = token.value.indexOf(comment.end);\r\n\t if (i != -1) {\r\n\t var row = iterator.getCurrentTokenRow();\r\n\t var column = iterator.getCurrentTokenColumn() + i;\r\n\t endRange = new Range(row, column, row, column + comment.end.length);\r\n\t break;\r\n\t }\r\n\t token = iterator.stepForward();\r\n\t }\r\n\t if (endRange)\r\n\t session.remove(endRange);\r\n\t if (startRange) {\r\n\t session.remove(startRange);\r\n\t startRow = startRange.start.row;\r\n\t colDiff = -comment.start.length;\r\n\t }\r\n\t } else {\r\n\t colDiff = comment.start.length;\r\n\t startRow = range.start.row;\r\n\t session.insert(range.end, comment.end);\r\n\t session.insert(range.start, comment.start);\r\n\t }\r\n\t if (initialRange.start.row == startRow)\r\n\t initialRange.start.column += colDiff;\r\n\t if (initialRange.end.row == startRow)\r\n\t initialRange.end.column += colDiff;\r\n\t session.selection.fromOrientedRange(initialRange);\r\n\t };\r\n\r\n\t this.getNextLineIndent = function(state, line, tab) {\r\n\t return this.$getIndent(line);\r\n\t };\r\n\r\n\t this.checkOutdent = function(state, line, input) {\r\n\t return false;\r\n\t };\r\n\r\n\t this.autoOutdent = function(state, doc, row) {\r\n\t };\r\n\r\n\t this.$getIndent = function(line) {\r\n\t return line.match(/^\\s*/)[0];\r\n\t };\r\n\r\n\t this.createWorker = function(session) {\r\n\t return null;\r\n\t };\r\n\r\n\t this.createModeDelegates = function (mapping) {\r\n\t this.$embeds = [];\r\n\t this.$modes = {};\r\n\t for (var i in mapping) {\r\n\t if (mapping[i]) {\r\n\t this.$embeds.push(i);\r\n\t this.$modes[i] = new mapping[i]();\r\n\t }\r\n\t }\r\n\r\n\t var delegations = [\"toggleBlockComment\", \"toggleCommentLines\", \"getNextLineIndent\", \r\n\t \"checkOutdent\", \"autoOutdent\", \"transformAction\", \"getCompletions\"];\r\n\r\n\t for (var i = 0; i < delegations.length; i++) {\r\n\t (function(scope) {\r\n\t var functionName = delegations[i];\r\n\t var defaultHandler = scope[functionName];\r\n\t scope[delegations[i]] = function() {\r\n\t return this.$delegator(functionName, arguments, defaultHandler);\r\n\t };\r\n\t }(this));\r\n\t }\r\n\t };\r\n\r\n\t this.$delegator = function(method, args, defaultHandler) {\r\n\t var state = args[0];\r\n\t if (typeof state != \"string\")\r\n\t state = state[0];\r\n\t for (var i = 0; i < this.$embeds.length; i++) {\r\n\t if (!this.$modes[this.$embeds[i]]) continue;\r\n\r\n\t var split = state.split(this.$embeds[i]);\r\n\t if (!split[0] && split[1]) {\r\n\t args[0] = split[1];\r\n\t var mode = this.$modes[this.$embeds[i]];\r\n\t return mode[method].apply(mode, args);\r\n\t }\r\n\t }\r\n\t var ret = defaultHandler.apply(this, args);\r\n\t return defaultHandler ? ret : undefined;\r\n\t };\r\n\r\n\t this.transformAction = function(state, action, editor, session, param) {\r\n\t if (this.$behaviour) {\r\n\t var behaviours = this.$behaviour.getBehaviours();\r\n\t for (var key in behaviours) {\r\n\t if (behaviours[key][action]) {\r\n\t var ret = behaviours[key][action].apply(this, arguments);\r\n\t if (ret) {\r\n\t return ret;\r\n\t }\r\n\t }\r\n\t }\r\n\t }\r\n\t };\r\n\t \r\n\t this.getKeywords = function(append) {\r\n\t if (!this.completionKeywords) {\r\n\t var rules = this.$tokenizer.rules;\r\n\t var completionKeywords = [];\r\n\t for (var rule in rules) {\r\n\t var ruleItr = rules[rule];\r\n\t for (var r = 0, l = ruleItr.length; r < l; r++) {\r\n\t if (typeof ruleItr[r].token === \"string\") {\r\n\t if (/keyword|support|storage/.test(ruleItr[r].token))\r\n\t completionKeywords.push(ruleItr[r].regex);\r\n\t }\r\n\t else if (typeof ruleItr[r].token === \"object\") {\r\n\t for (var a = 0, aLength = ruleItr[r].token.length; a < aLength; a++) { \r\n\t if (/keyword|support|storage/.test(ruleItr[r].token[a])) {\r\n\t var rule = ruleItr[r].regex.match(/\\(.+?\\)/g)[a];\r\n\t completionKeywords.push(rule.substr(1, rule.length - 2));\r\n\t }\r\n\t }\r\n\t }\r\n\t }\r\n\t }\r\n\t this.completionKeywords = completionKeywords;\r\n\t }\r\n\t if (!append)\r\n\t return this.$keywordList;\r\n\t return completionKeywords.concat(this.$keywordList || []);\r\n\t };\r\n\t \r\n\t this.$createKeywordList = function() {\r\n\t if (!this.$highlightRules)\r\n\t this.getTokenizer();\r\n\t return this.$keywordList = this.$highlightRules.$keywordList || [];\r\n\t };\r\n\r\n\t this.getCompletions = function(state, session, pos, prefix) {\r\n\t var keywords = this.$keywordList || this.$createKeywordList();\r\n\t return keywords.map(function(word) {\r\n\t return {\r\n\t name: word,\r\n\t value: word,\r\n\t score: 0,\r\n\t meta: \"keyword\"\r\n\t };\r\n\t });\r\n\t };\r\n\r\n\t this.$id = \"ace/mode/text\";\r\n\t}).call(Mode.prototype);\r\n\r\n\texports.Mode = Mode;\r\n\t});\r\n\r\n\tace.define(\"ace/apply_delta\",[\"require\",\"exports\",\"module\"], function(acequire, exports, module) {\r\n\t\"use strict\";\r\n\r\n\tfunction throwDeltaError(delta, errorText){\r\n\t console.log(\"Invalid Delta:\", delta);\r\n\t throw \"Invalid Delta: \" + errorText;\r\n\t}\r\n\r\n\tfunction positionInDocument(docLines, position) {\r\n\t return position.row >= 0 && position.row < docLines.length &&\r\n\t position.column >= 0 && position.column <= docLines[position.row].length;\r\n\t}\r\n\r\n\tfunction validateDelta(docLines, delta) {\r\n\t if (delta.action != \"insert\" && delta.action != \"remove\")\r\n\t throwDeltaError(delta, \"delta.action must be 'insert' or 'remove'\");\r\n\t if (!(delta.lines instanceof Array))\r\n\t throwDeltaError(delta, \"delta.lines must be an Array\");\r\n\t if (!delta.start || !delta.end)\r\n\t throwDeltaError(delta, \"delta.start/end must be an present\");\r\n\t var start = delta.start;\r\n\t if (!positionInDocument(docLines, delta.start))\r\n\t throwDeltaError(delta, \"delta.start must be contained in document\");\r\n\t var end = delta.end;\r\n\t if (delta.action == \"remove\" && !positionInDocument(docLines, end))\r\n\t throwDeltaError(delta, \"delta.end must contained in document for 'remove' actions\");\r\n\t var numRangeRows = end.row - start.row;\r\n\t var numRangeLastLineChars = (end.column - (numRangeRows == 0 ? start.column : 0));\r\n\t if (numRangeRows != delta.lines.length - 1 || delta.lines[numRangeRows].length != numRangeLastLineChars)\r\n\t throwDeltaError(delta, \"delta.range must match delta lines\");\r\n\t}\r\n\r\n\texports.applyDelta = function(docLines, delta, doNotValidate) {\r\n\t \r\n\t var row = delta.start.row;\r\n\t var startColumn = delta.start.column;\r\n\t var line = docLines[row] || \"\";\r\n\t switch (delta.action) {\r\n\t case \"insert\":\r\n\t var lines = delta.lines;\r\n\t if (lines.length === 1) {\r\n\t docLines[row] = line.substring(0, startColumn) + delta.lines[0] + line.substring(startColumn);\r\n\t } else {\r\n\t var args = [row, 1].concat(delta.lines);\r\n\t docLines.splice.apply(docLines, args);\r\n\t docLines[row] = line.substring(0, startColumn) + docLines[row];\r\n\t docLines[row + delta.lines.length - 1] += line.substring(startColumn);\r\n\t }\r\n\t break;\r\n\t case \"remove\":\r\n\t var endColumn = delta.end.column;\r\n\t var endRow = delta.end.row;\r\n\t if (row === endRow) {\r\n\t docLines[row] = line.substring(0, startColumn) + line.substring(endColumn);\r\n\t } else {\r\n\t docLines.splice(\r\n\t row, endRow - row + 1,\r\n\t line.substring(0, startColumn) + docLines[endRow].substring(endColumn)\r\n\t );\r\n\t }\r\n\t break;\r\n\t }\r\n\t}\r\n\t});\r\n\r\n\tace.define(\"ace/anchor\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/event_emitter\"], function(acequire, exports, module) {\r\n\t\"use strict\";\r\n\r\n\tvar oop = acequire(\"./lib/oop\");\r\n\tvar EventEmitter = acequire(\"./lib/event_emitter\").EventEmitter;\r\n\r\n\tvar Anchor = exports.Anchor = function(doc, row, column) {\r\n\t this.$onChange = this.onChange.bind(this);\r\n\t this.attach(doc);\r\n\t \r\n\t if (typeof column == \"undefined\")\r\n\t this.setPosition(row.row, row.column);\r\n\t else\r\n\t this.setPosition(row, column);\r\n\t};\r\n\r\n\t(function() {\r\n\r\n\t oop.implement(this, EventEmitter);\r\n\t this.getPosition = function() {\r\n\t return this.$clipPositionToDocument(this.row, this.column);\r\n\t };\r\n\t this.getDocument = function() {\r\n\t return this.document;\r\n\t };\r\n\t this.$insertRight = false;\r\n\t this.onChange = function(delta) {\r\n\t if (delta.start.row == delta.end.row && delta.start.row != this.row)\r\n\t return;\r\n\r\n\t if (delta.start.row > this.row)\r\n\t return;\r\n\t \r\n\t var point = $getTransformedPoint(delta, {row: this.row, column: this.column}, this.$insertRight);\r\n\t this.setPosition(point.row, point.column, true);\r\n\t };\r\n\t \r\n\t function $pointsInOrder(point1, point2, equalPointsInOrder) {\r\n\t var bColIsAfter = equalPointsInOrder ? point1.column <= point2.column : point1.column < point2.column;\r\n\t return (point1.row < point2.row) || (point1.row == point2.row && bColIsAfter);\r\n\t }\r\n\t \r\n\t function $getTransformedPoint(delta, point, moveIfEqual) {\r\n\t var deltaIsInsert = delta.action == \"insert\";\r\n\t var deltaRowShift = (deltaIsInsert ? 1 : -1) * (delta.end.row - delta.start.row);\r\n\t var deltaColShift = (deltaIsInsert ? 1 : -1) * (delta.end.column - delta.start.column);\r\n\t var deltaStart = delta.start;\r\n\t var deltaEnd = deltaIsInsert ? deltaStart : delta.end; // Collapse insert range.\r\n\t if ($pointsInOrder(point, deltaStart, moveIfEqual)) {\r\n\t return {\r\n\t row: point.row,\r\n\t column: point.column\r\n\t };\r\n\t }\r\n\t if ($pointsInOrder(deltaEnd, point, !moveIfEqual)) {\r\n\t return {\r\n\t row: point.row + deltaRowShift,\r\n\t column: point.column + (point.row == deltaEnd.row ? deltaColShift : 0)\r\n\t };\r\n\t }\r\n\t \r\n\t return {\r\n\t row: deltaStart.row,\r\n\t column: deltaStart.column\r\n\t };\r\n\t }\r\n\t this.setPosition = function(row, column, noClip) {\r\n\t var pos;\r\n\t if (noClip) {\r\n\t pos = {\r\n\t row: row,\r\n\t column: column\r\n\t };\r\n\t } else {\r\n\t pos = this.$clipPositionToDocument(row, column);\r\n\t }\r\n\r\n\t if (this.row == pos.row && this.column == pos.column)\r\n\t return;\r\n\r\n\t var old = {\r\n\t row: this.row,\r\n\t column: this.column\r\n\t };\r\n\r\n\t this.row = pos.row;\r\n\t this.column = pos.column;\r\n\t this._signal(\"change\", {\r\n\t old: old,\r\n\t value: pos\r\n\t });\r\n\t };\r\n\t this.detach = function() {\r\n\t this.document.removeEventListener(\"change\", this.$onChange);\r\n\t };\r\n\t this.attach = function(doc) {\r\n\t this.document = doc || this.document;\r\n\t this.document.on(\"change\", this.$onChange);\r\n\t };\r\n\t this.$clipPositionToDocument = function(row, column) {\r\n\t var pos = {};\r\n\r\n\t if (row >= this.document.getLength()) {\r\n\t pos.row = Math.max(0, this.document.getLength() - 1);\r\n\t pos.column = this.document.getLine(pos.row).length;\r\n\t }\r\n\t else if (row < 0) {\r\n\t pos.row = 0;\r\n\t pos.column = 0;\r\n\t }\r\n\t else {\r\n\t pos.row = row;\r\n\t pos.column = Math.min(this.document.getLine(pos.row).length, Math.max(0, column));\r\n\t }\r\n\r\n\t if (column < 0)\r\n\t pos.column = 0;\r\n\r\n\t return pos;\r\n\t };\r\n\r\n\t}).call(Anchor.prototype);\r\n\r\n\t});\r\n\r\n\tace.define(\"ace/document\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/apply_delta\",\"ace/lib/event_emitter\",\"ace/range\",\"ace/anchor\"], function(acequire, exports, module) {\r\n\t\"use strict\";\r\n\r\n\tvar oop = acequire(\"./lib/oop\");\r\n\tvar applyDelta = acequire(\"./apply_delta\").applyDelta;\r\n\tvar EventEmitter = acequire(\"./lib/event_emitter\").EventEmitter;\r\n\tvar Range = acequire(\"./range\").Range;\r\n\tvar Anchor = acequire(\"./anchor\").Anchor;\r\n\r\n\tvar Document = function(textOrLines) {\r\n\t this.$lines = [\"\"];\r\n\t if (textOrLines.length === 0) {\r\n\t this.$lines = [\"\"];\r\n\t } else if (Array.isArray(textOrLines)) {\r\n\t this.insertMergedLines({row: 0, column: 0}, textOrLines);\r\n\t } else {\r\n\t this.insert({row: 0, column:0}, textOrLines);\r\n\t }\r\n\t};\r\n\r\n\t(function() {\r\n\r\n\t oop.implement(this, EventEmitter);\r\n\t this.setValue = function(text) {\r\n\t var len = this.getLength() - 1;\r\n\t this.remove(new Range(0, 0, len, this.getLine(len).length));\r\n\t this.insert({row: 0, column: 0}, text);\r\n\t };\r\n\t this.getValue = function() {\r\n\t return this.getAllLines().join(this.getNewLineCharacter());\r\n\t };\r\n\t this.createAnchor = function(row, column) {\r\n\t return new Anchor(this, row, column);\r\n\t };\r\n\t if (\"aaa\".split(/a/).length === 0) {\r\n\t this.$split = function(text) {\r\n\t return text.replace(/\\r\\n|\\r/g, \"\\n\").split(\"\\n\");\r\n\t };\r\n\t } else {\r\n\t this.$split = function(text) {\r\n\t return text.split(/\\r\\n|\\r|\\n/);\r\n\t };\r\n\t }\r\n\r\n\r\n\t this.$detectNewLine = function(text) {\r\n\t var match = text.match(/^.*?(\\r\\n|\\r|\\n)/m);\r\n\t this.$autoNewLine = match ? match[1] : \"\\n\";\r\n\t this._signal(\"changeNewLineMode\");\r\n\t };\r\n\t this.getNewLineCharacter = function() {\r\n\t switch (this.$newLineMode) {\r\n\t case \"windows\":\r\n\t return \"\\r\\n\";\r\n\t case \"unix\":\r\n\t return \"\\n\";\r\n\t default:\r\n\t return this.$autoNewLine || \"\\n\";\r\n\t }\r\n\t };\r\n\r\n\t this.$autoNewLine = \"\";\r\n\t this.$newLineMode = \"auto\";\r\n\t this.setNewLineMode = function(newLineMode) {\r\n\t if (this.$newLineMode === newLineMode)\r\n\t return;\r\n\r\n\t this.$newLineMode = newLineMode;\r\n\t this._signal(\"changeNewLineMode\");\r\n\t };\r\n\t this.getNewLineMode = function() {\r\n\t return this.$newLineMode;\r\n\t };\r\n\t this.isNewLine = function(text) {\r\n\t return (text == \"\\r\\n\" || text == \"\\r\" || text == \"\\n\");\r\n\t };\r\n\t this.getLine = function(row) {\r\n\t return this.$lines[row] || \"\";\r\n\t };\r\n\t this.getLines = function(firstRow, lastRow) {\r\n\t return this.$lines.slice(firstRow, lastRow + 1);\r\n\t };\r\n\t this.getAllLines = function() {\r\n\t return this.getLines(0, this.getLength());\r\n\t };\r\n\t this.getLength = function() {\r\n\t return this.$lines.length;\r\n\t };\r\n\t this.getTextRange = function(range) {\r\n\t return this.getLinesForRange(range).join(this.getNewLineCharacter());\r\n\t };\r\n\t this.getLinesForRange = function(range) {\r\n\t var lines;\r\n\t if (range.start.row === range.end.row) {\r\n\t lines = [this.getLine(range.start.row).substring(range.start.column, range.end.column)];\r\n\t } else {\r\n\t lines = this.getLines(range.start.row, range.end.row);\r\n\t lines[0] = (lines[0] || \"\").substring(range.start.column);\r\n\t var l = lines.length - 1;\r\n\t if (range.end.row - range.start.row == l)\r\n\t lines[l] = lines[l].substring(0, range.end.column);\r\n\t }\r\n\t return lines;\r\n\t };\r\n\t this.insertLines = function(row, lines) {\r\n\t console.warn(\"Use of document.insertLines is deprecated. Use the insertFullLines method instead.\");\r\n\t return this.insertFullLines(row, lines);\r\n\t };\r\n\t this.removeLines = function(firstRow, lastRow) {\r\n\t console.warn(\"Use of document.removeLines is deprecated. Use the removeFullLines method instead.\");\r\n\t return this.removeFullLines(firstRow, lastRow);\r\n\t };\r\n\t this.insertNewLine = function(position) {\r\n\t console.warn(\"Use of document.insertNewLine is deprecated. Use insertMergedLines(position, [\\'\\', \\'\\']) instead.\");\r\n\t return this.insertMergedLines(position, [\"\", \"\"]);\r\n\t };\r\n\t this.insert = function(position, text) {\r\n\t if (this.getLength() <= 1)\r\n\t this.$detectNewLine(text);\r\n\t \r\n\t return this.insertMergedLines(position, this.$split(text));\r\n\t };\r\n\t this.insertInLine = function(position, text) {\r\n\t var start = this.clippedPos(position.row, position.column);\r\n\t var end = this.pos(position.row, position.column + text.length);\r\n\t \r\n\t this.applyDelta({\r\n\t start: start,\r\n\t end: end,\r\n\t action: \"insert\",\r\n\t lines: [text]\r\n\t }, true);\r\n\t \r\n\t return this.clonePos(end);\r\n\t };\r\n\t \r\n\t this.clippedPos = function(row, column) {\r\n\t var length = this.getLength();\r\n\t if (row === undefined) {\r\n\t row = length;\r\n\t } else if (row < 0) {\r\n\t row = 0;\r\n\t } else if (row >= length) {\r\n\t row = length - 1;\r\n\t column = undefined;\r\n\t }\r\n\t var line = this.getLine(row);\r\n\t if (column == undefined)\r\n\t column = line.length;\r\n\t column = Math.min(Math.max(column, 0), line.length);\r\n\t return {row: row, column: column};\r\n\t };\r\n\t \r\n\t this.clonePos = function(pos) {\r\n\t return {row: pos.row, column: pos.column};\r\n\t };\r\n\t \r\n\t this.pos = function(row, column) {\r\n\t return {row: row, column: column};\r\n\t };\r\n\t \r\n\t this.$clipPosition = function(position) {\r\n\t var length = this.getLength();\r\n\t if (position.row >= length) {\r\n\t position.row = Math.max(0, length - 1);\r\n\t position.column = this.getLine(length - 1).length;\r\n\t } else {\r\n\t position.row = Math.max(0, position.row);\r\n\t position.column = Math.min(Math.max(position.column, 0), this.getLine(position.row).length);\r\n\t }\r\n\t return position;\r\n\t };\r\n\t this.insertFullLines = function(row, lines) {\r\n\t row = Math.min(Math.max(row, 0), this.getLength());\r\n\t var column = 0;\r\n\t if (row < this.getLength()) {\r\n\t lines = lines.concat([\"\"]);\r\n\t column = 0;\r\n\t } else {\r\n\t lines = [\"\"].concat(lines);\r\n\t row--;\r\n\t column = this.$lines[row].length;\r\n\t }\r\n\t this.insertMergedLines({row: row, column: column}, lines);\r\n\t }; \r\n\t this.insertMergedLines = function(position, lines) {\r\n\t var start = this.clippedPos(position.row, position.column);\r\n\t var end = {\r\n\t row: start.row + lines.length - 1,\r\n\t column: (lines.length == 1 ? start.column : 0) + lines[lines.length - 1].length\r\n\t };\r\n\t \r\n\t this.applyDelta({\r\n\t start: start,\r\n\t end: end,\r\n\t action: \"insert\",\r\n\t lines: lines\r\n\t });\r\n\t \r\n\t return this.clonePos(end);\r\n\t };\r\n\t this.remove = function(range) {\r\n\t var start = this.clippedPos(range.start.row, range.start.column);\r\n\t var end = this.clippedPos(range.end.row, range.end.column);\r\n\t this.applyDelta({\r\n\t start: start,\r\n\t end: end,\r\n\t action: \"remove\",\r\n\t lines: this.getLinesForRange({start: start, end: end})\r\n\t });\r\n\t return this.clonePos(start);\r\n\t };\r\n\t this.removeInLine = function(row, startColumn, endColumn) {\r\n\t var start = this.clippedPos(row, startColumn);\r\n\t var end = this.clippedPos(row, endColumn);\r\n\t \r\n\t this.applyDelta({\r\n\t start: start,\r\n\t end: end,\r\n\t action: \"remove\",\r\n\t lines: this.getLinesForRange({start: start, end: end})\r\n\t }, true);\r\n\t \r\n\t return this.clonePos(start);\r\n\t };\r\n\t this.removeFullLines = function(firstRow, lastRow) {\r\n\t firstRow = Math.min(Math.max(0, firstRow), this.getLength() - 1);\r\n\t lastRow = Math.min(Math.max(0, lastRow ), this.getLength() - 1);\r\n\t var deleteFirstNewLine = lastRow == this.getLength() - 1 && firstRow > 0;\r\n\t var deleteLastNewLine = lastRow < this.getLength() - 1;\r\n\t var startRow = ( deleteFirstNewLine ? firstRow - 1 : firstRow );\r\n\t var startCol = ( deleteFirstNewLine ? this.getLine(startRow).length : 0 );\r\n\t var endRow = ( deleteLastNewLine ? lastRow + 1 : lastRow );\r\n\t var endCol = ( deleteLastNewLine ? 0 : this.getLine(endRow).length ); \r\n\t var range = new Range(startRow, startCol, endRow, endCol);\r\n\t var deletedLines = this.$lines.slice(firstRow, lastRow + 1);\r\n\t \r\n\t this.applyDelta({\r\n\t start: range.start,\r\n\t end: range.end,\r\n\t action: \"remove\",\r\n\t lines: this.getLinesForRange(range)\r\n\t });\r\n\t return deletedLines;\r\n\t };\r\n\t this.removeNewLine = function(row) {\r\n\t if (row < this.getLength() - 1 && row >= 0) {\r\n\t this.applyDelta({\r\n\t start: this.pos(row, this.getLine(row).length),\r\n\t end: this.pos(row + 1, 0),\r\n\t action: \"remove\",\r\n\t lines: [\"\", \"\"]\r\n\t });\r\n\t }\r\n\t };\r\n\t this.replace = function(range, text) {\r\n\t if (!(range instanceof Range))\r\n\t range = Range.fromPoints(range.start, range.end);\r\n\t if (text.length === 0 && range.isEmpty())\r\n\t return range.start;\r\n\t if (text == this.getTextRange(range))\r\n\t return range.end;\r\n\r\n\t this.remove(range);\r\n\t var end;\r\n\t if (text) {\r\n\t end = this.insert(range.start, text);\r\n\t }\r\n\t else {\r\n\t end = range.start;\r\n\t }\r\n\t \r\n\t return end;\r\n\t };\r\n\t this.applyDeltas = function(deltas) {\r\n\t for (var i=0; i=0; i--) {\r\n\t this.revertDelta(deltas[i]);\r\n\t }\r\n\t };\r\n\t this.applyDelta = function(delta, doNotValidate) {\r\n\t var isInsert = delta.action == \"insert\";\r\n\t if (isInsert ? delta.lines.length <= 1 && !delta.lines[0]\r\n\t : !Range.comparePoints(delta.start, delta.end)) {\r\n\t return;\r\n\t }\r\n\t \r\n\t if (isInsert && delta.lines.length > 20000)\r\n\t this.$splitAndapplyLargeDelta(delta, 20000);\r\n\t applyDelta(this.$lines, delta, doNotValidate);\r\n\t this._signal(\"change\", delta);\r\n\t };\r\n\t \r\n\t this.$splitAndapplyLargeDelta = function(delta, MAX) {\r\n\t var lines = delta.lines;\r\n\t var l = lines.length;\r\n\t var row = delta.start.row; \r\n\t var column = delta.start.column;\r\n\t var from = 0, to = 0;\r\n\t do {\r\n\t from = to;\r\n\t to += MAX - 1;\r\n\t var chunk = lines.slice(from, to);\r\n\t if (to > l) {\r\n\t delta.lines = chunk;\r\n\t delta.start.row = row + from;\r\n\t delta.start.column = column;\r\n\t break;\r\n\t }\r\n\t chunk.push(\"\");\r\n\t this.applyDelta({\r\n\t start: this.pos(row + from, column),\r\n\t end: this.pos(row + to, column = 0),\r\n\t action: delta.action,\r\n\t lines: chunk\r\n\t }, true);\r\n\t } while(true);\r\n\t };\r\n\t this.revertDelta = function(delta) {\r\n\t this.applyDelta({\r\n\t start: this.clonePos(delta.start),\r\n\t end: this.clonePos(delta.end),\r\n\t action: (delta.action == \"insert\" ? \"remove\" : \"insert\"),\r\n\t lines: delta.lines.slice()\r\n\t });\r\n\t };\r\n\t this.indexToPosition = function(index, startRow) {\r\n\t var lines = this.$lines || this.getAllLines();\r\n\t var newlineLength = this.getNewLineCharacter().length;\r\n\t for (var i = startRow || 0, l = lines.length; i < l; i++) {\r\n\t index -= lines[i].length + newlineLength;\r\n\t if (index < 0)\r\n\t return {row: i, column: index + lines[i].length + newlineLength};\r\n\t }\r\n\t return {row: l-1, column: lines[l-1].length};\r\n\t };\r\n\t this.positionToIndex = function(pos, startRow) {\r\n\t var lines = this.$lines || this.getAllLines();\r\n\t var newlineLength = this.getNewLineCharacter().length;\r\n\t var index = 0;\r\n\t var row = Math.min(pos.row, lines.length);\r\n\t for (var i = startRow || 0; i < row; ++i)\r\n\t index += lines[i].length + newlineLength;\r\n\r\n\t return index + pos.column;\r\n\t };\r\n\r\n\t}).call(Document.prototype);\r\n\r\n\texports.Document = Document;\r\n\t});\r\n\r\n\tace.define(\"ace/background_tokenizer\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/event_emitter\"], function(acequire, exports, module) {\r\n\t\"use strict\";\r\n\r\n\tvar oop = acequire(\"./lib/oop\");\r\n\tvar EventEmitter = acequire(\"./lib/event_emitter\").EventEmitter;\r\n\r\n\tvar BackgroundTokenizer = function(tokenizer, editor) {\r\n\t this.running = false;\r\n\t this.lines = [];\r\n\t this.states = [];\r\n\t this.currentLine = 0;\r\n\t this.tokenizer = tokenizer;\r\n\r\n\t var self = this;\r\n\r\n\t this.$worker = function() {\r\n\t if (!self.running) { return; }\r\n\r\n\t var workerStart = new Date();\r\n\t var currentLine = self.currentLine;\r\n\t var endLine = -1;\r\n\t var doc = self.doc;\r\n\r\n\t var startLine = currentLine;\r\n\t while (self.lines[currentLine])\r\n\t currentLine++;\r\n\t \r\n\t var len = doc.getLength();\r\n\t var processedLines = 0;\r\n\t self.running = false;\r\n\t while (currentLine < len) {\r\n\t self.$tokenizeRow(currentLine);\r\n\t endLine = currentLine;\r\n\t do {\r\n\t currentLine++;\r\n\t } while (self.lines[currentLine]);\r\n\t processedLines ++;\r\n\t if ((processedLines % 5 === 0) && (new Date() - workerStart) > 20) { \r\n\t self.running = setTimeout(self.$worker, 20);\r\n\t break;\r\n\t }\r\n\t }\r\n\t self.currentLine = currentLine;\r\n\t \r\n\t if (startLine <= endLine)\r\n\t self.fireUpdateEvent(startLine, endLine);\r\n\t };\r\n\t};\r\n\r\n\t(function(){\r\n\r\n\t oop.implement(this, EventEmitter);\r\n\t this.setTokenizer = function(tokenizer) {\r\n\t this.tokenizer = tokenizer;\r\n\t this.lines = [];\r\n\t this.states = [];\r\n\r\n\t this.start(0);\r\n\t };\r\n\t this.setDocument = function(doc) {\r\n\t this.doc = doc;\r\n\t this.lines = [];\r\n\t this.states = [];\r\n\r\n\t this.stop();\r\n\t };\r\n\t this.fireUpdateEvent = function(firstRow, lastRow) {\r\n\t var data = {\r\n\t first: firstRow,\r\n\t last: lastRow\r\n\t };\r\n\t this._signal(\"update\", {data: data});\r\n\t };\r\n\t this.start = function(startRow) {\r\n\t this.currentLine = Math.min(startRow || 0, this.currentLine, this.doc.getLength());\r\n\t this.lines.splice(this.currentLine, this.lines.length);\r\n\t this.states.splice(this.currentLine, this.states.length);\r\n\r\n\t this.stop();\r\n\t this.running = setTimeout(this.$worker, 700);\r\n\t };\r\n\t \r\n\t this.scheduleStart = function() {\r\n\t if (!this.running)\r\n\t this.running = setTimeout(this.$worker, 700);\r\n\t }\r\n\r\n\t this.$updateOnChange = function(delta) {\r\n\t var startRow = delta.start.row;\r\n\t var len = delta.end.row - startRow;\r\n\r\n\t if (len === 0) {\r\n\t this.lines[startRow] = null;\r\n\t } else if (delta.action == \"remove\") {\r\n\t this.lines.splice(startRow, len + 1, null);\r\n\t this.states.splice(startRow, len + 1, null);\r\n\t } else {\r\n\t var args = Array(len + 1);\r\n\t args.unshift(startRow, 1);\r\n\t this.lines.splice.apply(this.lines, args);\r\n\t this.states.splice.apply(this.states, args);\r\n\t }\r\n\r\n\t this.currentLine = Math.min(startRow, this.currentLine, this.doc.getLength());\r\n\r\n\t this.stop();\r\n\t };\r\n\t this.stop = function() {\r\n\t if (this.running)\r\n\t clearTimeout(this.running);\r\n\t this.running = false;\r\n\t };\r\n\t this.getTokens = function(row) {\r\n\t return this.lines[row] || this.$tokenizeRow(row);\r\n\t };\r\n\t this.getState = function(row) {\r\n\t if (this.currentLine == row)\r\n\t this.$tokenizeRow(row);\r\n\t return this.states[row] || \"start\";\r\n\t };\r\n\r\n\t this.$tokenizeRow = function(row) {\r\n\t var line = this.doc.getLine(row);\r\n\t var state = this.states[row - 1];\r\n\r\n\t var data = this.tokenizer.getLineTokens(line, state, row);\r\n\r\n\t if (this.states[row] + \"\" !== data.state + \"\") {\r\n\t this.states[row] = data.state;\r\n\t this.lines[row + 1] = null;\r\n\t if (this.currentLine > row + 1)\r\n\t this.currentLine = row + 1;\r\n\t } else if (this.currentLine == row) {\r\n\t this.currentLine = row + 1;\r\n\t }\r\n\r\n\t return this.lines[row] = data.tokens;\r\n\t };\r\n\r\n\t}).call(BackgroundTokenizer.prototype);\r\n\r\n\texports.BackgroundTokenizer = BackgroundTokenizer;\r\n\t});\r\n\r\n\tace.define(\"ace/search_highlight\",[\"require\",\"exports\",\"module\",\"ace/lib/lang\",\"ace/lib/oop\",\"ace/range\"], function(acequire, exports, module) {\r\n\t\"use strict\";\r\n\r\n\tvar lang = acequire(\"./lib/lang\");\r\n\tvar oop = acequire(\"./lib/oop\");\r\n\tvar Range = acequire(\"./range\").Range;\r\n\r\n\tvar SearchHighlight = function(regExp, clazz, type) {\r\n\t this.setRegexp(regExp);\r\n\t this.clazz = clazz;\r\n\t this.type = type || \"text\";\r\n\t};\r\n\r\n\t(function() {\r\n\t this.MAX_RANGES = 500;\r\n\t \r\n\t this.setRegexp = function(regExp) {\r\n\t if (this.regExp+\"\" == regExp+\"\")\r\n\t return;\r\n\t this.regExp = regExp;\r\n\t this.cache = [];\r\n\t };\r\n\r\n\t this.update = function(html, markerLayer, session, config) {\r\n\t if (!this.regExp)\r\n\t return;\r\n\t var start = config.firstRow, end = config.lastRow;\r\n\r\n\t for (var i = start; i <= end; i++) {\r\n\t var ranges = this.cache[i];\r\n\t if (ranges == null) {\r\n\t ranges = lang.getMatchOffsets(session.getLine(i), this.regExp);\r\n\t if (ranges.length > this.MAX_RANGES)\r\n\t ranges = ranges.slice(0, this.MAX_RANGES);\r\n\t ranges = ranges.map(function(match) {\r\n\t return new Range(i, match.offset, i, match.offset + match.length);\r\n\t });\r\n\t this.cache[i] = ranges.length ? ranges : \"\";\r\n\t }\r\n\r\n\t for (var j = ranges.length; j --; ) {\r\n\t markerLayer.drawSingleLineMarker(\r\n\t html, ranges[j].toScreenRange(session), this.clazz, config);\r\n\t }\r\n\t }\r\n\t };\r\n\r\n\t}).call(SearchHighlight.prototype);\r\n\r\n\texports.SearchHighlight = SearchHighlight;\r\n\t});\r\n\r\n\tace.define(\"ace/edit_session/fold_line\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(acequire, exports, module) {\r\n\t\"use strict\";\r\n\r\n\tvar Range = acequire(\"../range\").Range;\r\n\tfunction FoldLine(foldData, folds) {\r\n\t this.foldData = foldData;\r\n\t if (Array.isArray(folds)) {\r\n\t this.folds = folds;\r\n\t } else {\r\n\t folds = this.folds = [ folds ];\r\n\t }\r\n\r\n\t var last = folds[folds.length - 1];\r\n\t this.range = new Range(folds[0].start.row, folds[0].start.column,\r\n\t last.end.row, last.end.column);\r\n\t this.start = this.range.start;\r\n\t this.end = this.range.end;\r\n\r\n\t this.folds.forEach(function(fold) {\r\n\t fold.setFoldLine(this);\r\n\t }, this);\r\n\t}\r\n\r\n\t(function() {\r\n\t this.shiftRow = function(shift) {\r\n\t this.start.row += shift;\r\n\t this.end.row += shift;\r\n\t this.folds.forEach(function(fold) {\r\n\t fold.start.row += shift;\r\n\t fold.end.row += shift;\r\n\t });\r\n\t };\r\n\r\n\t this.addFold = function(fold) {\r\n\t if (fold.sameRow) {\r\n\t if (fold.start.row < this.startRow || fold.endRow > this.endRow) {\r\n\t throw new Error(\"Can't add a fold to this FoldLine as it has no connection\");\r\n\t }\r\n\t this.folds.push(fold);\r\n\t this.folds.sort(function(a, b) {\r\n\t return -a.range.compareEnd(b.start.row, b.start.column);\r\n\t });\r\n\t if (this.range.compareEnd(fold.start.row, fold.start.column) > 0) {\r\n\t this.end.row = fold.end.row;\r\n\t this.end.column = fold.end.column;\r\n\t } else if (this.range.compareStart(fold.end.row, fold.end.column) < 0) {\r\n\t this.start.row = fold.start.row;\r\n\t this.start.column = fold.start.column;\r\n\t }\r\n\t } else if (fold.start.row == this.end.row) {\r\n\t this.folds.push(fold);\r\n\t this.end.row = fold.end.row;\r\n\t this.end.column = fold.end.column;\r\n\t } else if (fold.end.row == this.start.row) {\r\n\t this.folds.unshift(fold);\r\n\t this.start.row = fold.start.row;\r\n\t this.start.column = fold.start.column;\r\n\t } else {\r\n\t throw new Error(\"Trying to add fold to FoldRow that doesn't have a matching row\");\r\n\t }\r\n\t fold.foldLine = this;\r\n\t };\r\n\r\n\t this.containsRow = function(row) {\r\n\t return row >= this.start.row && row <= this.end.row;\r\n\t };\r\n\r\n\t this.walk = function(callback, endRow, endColumn) {\r\n\t var lastEnd = 0,\r\n\t folds = this.folds,\r\n\t fold,\r\n\t cmp, stop, isNewRow = true;\r\n\r\n\t if (endRow == null) {\r\n\t endRow = this.end.row;\r\n\t endColumn = this.end.column;\r\n\t }\r\n\r\n\t for (var i = 0; i < folds.length; i++) {\r\n\t fold = folds[i];\r\n\r\n\t cmp = fold.range.compareStart(endRow, endColumn);\r\n\t if (cmp == -1) {\r\n\t callback(null, endRow, endColumn, lastEnd, isNewRow);\r\n\t return;\r\n\t }\r\n\r\n\t stop = callback(null, fold.start.row, fold.start.column, lastEnd, isNewRow);\r\n\t stop = !stop && callback(fold.placeholder, fold.start.row, fold.start.column, lastEnd);\r\n\t if (stop || cmp === 0) {\r\n\t return;\r\n\t }\r\n\t isNewRow = !fold.sameRow;\r\n\t lastEnd = fold.end.column;\r\n\t }\r\n\t callback(null, endRow, endColumn, lastEnd, isNewRow);\r\n\t };\r\n\r\n\t this.getNextFoldTo = function(row, column) {\r\n\t var fold, cmp;\r\n\t for (var i = 0; i < this.folds.length; i++) {\r\n\t fold = this.folds[i];\r\n\t cmp = fold.range.compareEnd(row, column);\r\n\t if (cmp == -1) {\r\n\t return {\r\n\t fold: fold,\r\n\t kind: \"after\"\r\n\t };\r\n\t } else if (cmp === 0) {\r\n\t return {\r\n\t fold: fold,\r\n\t kind: \"inside\"\r\n\t };\r\n\t }\r\n\t }\r\n\t return null;\r\n\t };\r\n\r\n\t this.addRemoveChars = function(row, column, len) {\r\n\t var ret = this.getNextFoldTo(row, column),\r\n\t fold, folds;\r\n\t if (ret) {\r\n\t fold = ret.fold;\r\n\t if (ret.kind == \"inside\"\r\n\t && fold.start.column != column\r\n\t && fold.start.row != row)\r\n\t {\r\n\t window.console && window.console.log(row, column, fold);\r\n\t } else if (fold.start.row == row) {\r\n\t folds = this.folds;\r\n\t var i = folds.indexOf(fold);\r\n\t if (i === 0) {\r\n\t this.start.column += len;\r\n\t }\r\n\t for (i; i < folds.length; i++) {\r\n\t fold = folds[i];\r\n\t fold.start.column += len;\r\n\t if (!fold.sameRow) {\r\n\t return;\r\n\t }\r\n\t fold.end.column += len;\r\n\t }\r\n\t this.end.column += len;\r\n\t }\r\n\t }\r\n\t };\r\n\r\n\t this.split = function(row, column) {\r\n\t var pos = this.getNextFoldTo(row, column);\r\n\t \r\n\t if (!pos || pos.kind == \"inside\")\r\n\t return null;\r\n\t \r\n\t var fold = pos.fold;\r\n\t var folds = this.folds;\r\n\t var foldData = this.foldData;\r\n\t \r\n\t var i = folds.indexOf(fold);\r\n\t var foldBefore = folds[i - 1];\r\n\t this.end.row = foldBefore.end.row;\r\n\t this.end.column = foldBefore.end.column;\r\n\t folds = folds.splice(i, folds.length - i);\r\n\r\n\t var newFoldLine = new FoldLine(foldData, folds);\r\n\t foldData.splice(foldData.indexOf(this) + 1, 0, newFoldLine);\r\n\t return newFoldLine;\r\n\t };\r\n\r\n\t this.merge = function(foldLineNext) {\r\n\t var folds = foldLineNext.folds;\r\n\t for (var i = 0; i < folds.length; i++) {\r\n\t this.addFold(folds[i]);\r\n\t }\r\n\t var foldData = this.foldData;\r\n\t foldData.splice(foldData.indexOf(foldLineNext), 1);\r\n\t };\r\n\r\n\t this.toString = function() {\r\n\t var ret = [this.range.toString() + \": [\" ];\r\n\r\n\t this.folds.forEach(function(fold) {\r\n\t ret.push(\" \" + fold.toString());\r\n\t });\r\n\t ret.push(\"]\");\r\n\t return ret.join(\"\\n\");\r\n\t };\r\n\r\n\t this.idxToPosition = function(idx) {\r\n\t var lastFoldEndColumn = 0;\r\n\r\n\t for (var i = 0; i < this.folds.length; i++) {\r\n\t var fold = this.folds[i];\r\n\r\n\t idx -= fold.start.column - lastFoldEndColumn;\r\n\t if (idx < 0) {\r\n\t return {\r\n\t row: fold.start.row,\r\n\t column: fold.start.column + idx\r\n\t };\r\n\t }\r\n\r\n\t idx -= fold.placeholder.length;\r\n\t if (idx < 0) {\r\n\t return fold.start;\r\n\t }\r\n\r\n\t lastFoldEndColumn = fold.end.column;\r\n\t }\r\n\r\n\t return {\r\n\t row: this.end.row,\r\n\t column: this.end.column + idx\r\n\t };\r\n\t };\r\n\t}).call(FoldLine.prototype);\r\n\r\n\texports.FoldLine = FoldLine;\r\n\t});\r\n\r\n\tace.define(\"ace/range_list\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(acequire, exports, module) {\r\n\t\"use strict\";\r\n\tvar Range = acequire(\"./range\").Range;\r\n\tvar comparePoints = Range.comparePoints;\r\n\r\n\tvar RangeList = function() {\r\n\t this.ranges = [];\r\n\t};\r\n\r\n\t(function() {\r\n\t this.comparePoints = comparePoints;\r\n\r\n\t this.pointIndex = function(pos, excludeEdges, startIndex) {\r\n\t var list = this.ranges;\r\n\r\n\t for (var i = startIndex || 0; i < list.length; i++) {\r\n\t var range = list[i];\r\n\t var cmpEnd = comparePoints(pos, range.end);\r\n\t if (cmpEnd > 0)\r\n\t continue;\r\n\t var cmpStart = comparePoints(pos, range.start);\r\n\t if (cmpEnd === 0)\r\n\t return excludeEdges && cmpStart !== 0 ? -i-2 : i;\r\n\t if (cmpStart > 0 || (cmpStart === 0 && !excludeEdges))\r\n\t return i;\r\n\r\n\t return -i-1;\r\n\t }\r\n\t return -i - 1;\r\n\t };\r\n\r\n\t this.add = function(range) {\r\n\t var excludeEdges = !range.isEmpty();\r\n\t var startIndex = this.pointIndex(range.start, excludeEdges);\r\n\t if (startIndex < 0)\r\n\t startIndex = -startIndex - 1;\r\n\r\n\t var endIndex = this.pointIndex(range.end, excludeEdges, startIndex);\r\n\r\n\t if (endIndex < 0)\r\n\t endIndex = -endIndex - 1;\r\n\t else\r\n\t endIndex++;\r\n\t return this.ranges.splice(startIndex, endIndex - startIndex, range);\r\n\t };\r\n\r\n\t this.addList = function(list) {\r\n\t var removed = [];\r\n\t for (var i = list.length; i--; ) {\r\n\t removed.push.apply(removed, this.add(list[i]));\r\n\t }\r\n\t return removed;\r\n\t };\r\n\r\n\t this.substractPoint = function(pos) {\r\n\t var i = this.pointIndex(pos);\r\n\r\n\t if (i >= 0)\r\n\t return this.ranges.splice(i, 1);\r\n\t };\r\n\t this.merge = function() {\r\n\t var removed = [];\r\n\t var list = this.ranges;\r\n\t \r\n\t list = list.sort(function(a, b) {\r\n\t return comparePoints(a.start, b.start);\r\n\t });\r\n\t \r\n\t var next = list[0], range;\r\n\t for (var i = 1; i < list.length; i++) {\r\n\t range = next;\r\n\t next = list[i];\r\n\t var cmp = comparePoints(range.end, next.start);\r\n\t if (cmp < 0)\r\n\t continue;\r\n\r\n\t if (cmp == 0 && !range.isEmpty() && !next.isEmpty())\r\n\t continue;\r\n\r\n\t if (comparePoints(range.end, next.end) < 0) {\r\n\t range.end.row = next.end.row;\r\n\t range.end.column = next.end.column;\r\n\t }\r\n\r\n\t list.splice(i, 1);\r\n\t removed.push(next);\r\n\t next = range;\r\n\t i--;\r\n\t }\r\n\t \r\n\t this.ranges = list;\r\n\r\n\t return removed;\r\n\t };\r\n\r\n\t this.contains = function(row, column) {\r\n\t return this.pointIndex({row: row, column: column}) >= 0;\r\n\t };\r\n\r\n\t this.containsPoint = function(pos) {\r\n\t return this.pointIndex(pos) >= 0;\r\n\t };\r\n\r\n\t this.rangeAtPoint = function(pos) {\r\n\t var i = this.pointIndex(pos);\r\n\t if (i >= 0)\r\n\t return this.ranges[i];\r\n\t };\r\n\r\n\r\n\t this.clipRows = function(startRow, endRow) {\r\n\t var list = this.ranges;\r\n\t if (list[0].start.row > endRow || list[list.length - 1].start.row < startRow)\r\n\t return [];\r\n\r\n\t var startIndex = this.pointIndex({row: startRow, column: 0});\r\n\t if (startIndex < 0)\r\n\t startIndex = -startIndex - 1;\r\n\t var endIndex = this.pointIndex({row: endRow, column: 0}, startIndex);\r\n\t if (endIndex < 0)\r\n\t endIndex = -endIndex - 1;\r\n\r\n\t var clipped = [];\r\n\t for (var i = startIndex; i < endIndex; i++) {\r\n\t clipped.push(list[i]);\r\n\t }\r\n\t return clipped;\r\n\t };\r\n\r\n\t this.removeAll = function() {\r\n\t return this.ranges.splice(0, this.ranges.length);\r\n\t };\r\n\r\n\t this.attach = function(session) {\r\n\t if (this.session)\r\n\t this.detach();\r\n\r\n\t this.session = session;\r\n\t this.onChange = this.$onChange.bind(this);\r\n\r\n\t this.session.on('change', this.onChange);\r\n\t };\r\n\r\n\t this.detach = function() {\r\n\t if (!this.session)\r\n\t return;\r\n\t this.session.removeListener('change', this.onChange);\r\n\t this.session = null;\r\n\t };\r\n\r\n\t this.$onChange = function(delta) {\r\n\t if (delta.action == \"insert\"){\r\n\t var start = delta.start;\r\n\t var end = delta.end;\r\n\t } else {\r\n\t var end = delta.start;\r\n\t var start = delta.end;\r\n\t }\r\n\t var startRow = start.row;\r\n\t var endRow = end.row;\r\n\t var lineDif = endRow - startRow;\r\n\r\n\t var colDiff = -start.column + end.column;\r\n\t var ranges = this.ranges;\r\n\r\n\t for (var i = 0, n = ranges.length; i < n; i++) {\r\n\t var r = ranges[i];\r\n\t if (r.end.row < startRow)\r\n\t continue;\r\n\t if (r.start.row > startRow)\r\n\t break;\r\n\r\n\t if (r.start.row == startRow && r.start.column >= start.column ) {\r\n\t if (r.start.column == start.column && this.$insertRight) {\r\n\t } else {\r\n\t r.start.column += colDiff;\r\n\t r.start.row += lineDif;\r\n\t }\r\n\t }\r\n\t if (r.end.row == startRow && r.end.column >= start.column) {\r\n\t if (r.end.column == start.column && this.$insertRight) {\r\n\t continue;\r\n\t }\r\n\t if (r.end.column == start.column && colDiff > 0 && i < n - 1) { \r\n\t if (r.end.column > r.start.column && r.end.column == ranges[i+1].start.column)\r\n\t r.end.column -= colDiff;\r\n\t }\r\n\t r.end.column += colDiff;\r\n\t r.end.row += lineDif;\r\n\t }\r\n\t }\r\n\r\n\t if (lineDif != 0 && i < n) {\r\n\t for (; i < n; i++) {\r\n\t var r = ranges[i];\r\n\t r.start.row += lineDif;\r\n\t r.end.row += lineDif;\r\n\t }\r\n\t }\r\n\t };\r\n\r\n\t}).call(RangeList.prototype);\r\n\r\n\texports.RangeList = RangeList;\r\n\t});\r\n\r\n\tace.define(\"ace/edit_session/fold\",[\"require\",\"exports\",\"module\",\"ace/range\",\"ace/range_list\",\"ace/lib/oop\"], function(acequire, exports, module) {\r\n\t\"use strict\";\r\n\r\n\tvar Range = acequire(\"../range\").Range;\r\n\tvar RangeList = acequire(\"../range_list\").RangeList;\r\n\tvar oop = acequire(\"../lib/oop\")\r\n\tvar Fold = exports.Fold = function(range, placeholder) {\r\n\t this.foldLine = null;\r\n\t this.placeholder = placeholder;\r\n\t this.range = range;\r\n\t this.start = range.start;\r\n\t this.end = range.end;\r\n\r\n\t this.sameRow = range.start.row == range.end.row;\r\n\t this.subFolds = this.ranges = [];\r\n\t};\r\n\r\n\toop.inherits(Fold, RangeList);\r\n\r\n\t(function() {\r\n\r\n\t this.toString = function() {\r\n\t return '\"' + this.placeholder + '\" ' + this.range.toString();\r\n\t };\r\n\r\n\t this.setFoldLine = function(foldLine) {\r\n\t this.foldLine = foldLine;\r\n\t this.subFolds.forEach(function(fold) {\r\n\t fold.setFoldLine(foldLine);\r\n\t });\r\n\t };\r\n\r\n\t this.clone = function() {\r\n\t var range = this.range.clone();\r\n\t var fold = new Fold(range, this.placeholder);\r\n\t this.subFolds.forEach(function(subFold) {\r\n\t fold.subFolds.push(subFold.clone());\r\n\t });\r\n\t fold.collapseChildren = this.collapseChildren;\r\n\t return fold;\r\n\t };\r\n\r\n\t this.addSubFold = function(fold) {\r\n\t if (this.range.isEqual(fold))\r\n\t return;\r\n\r\n\t if (!this.range.containsRange(fold))\r\n\t throw new Error(\"A fold can't intersect already existing fold\" + fold.range + this.range);\r\n\t consumeRange(fold, this.start);\r\n\r\n\t var row = fold.start.row, column = fold.start.column;\r\n\t for (var i = 0, cmp = -1; i < this.subFolds.length; i++) {\r\n\t cmp = this.subFolds[i].range.compare(row, column);\r\n\t if (cmp != 1)\r\n\t break;\r\n\t }\r\n\t var afterStart = this.subFolds[i];\r\n\r\n\t if (cmp == 0)\r\n\t return afterStart.addSubFold(fold);\r\n\t var row = fold.range.end.row, column = fold.range.end.column;\r\n\t for (var j = i, cmp = -1; j < this.subFolds.length; j++) {\r\n\t cmp = this.subFolds[j].range.compare(row, column);\r\n\t if (cmp != 1)\r\n\t break;\r\n\t }\r\n\t var afterEnd = this.subFolds[j];\r\n\r\n\t if (cmp == 0)\r\n\t throw new Error(\"A fold can't intersect already existing fold\" + fold.range + this.range);\r\n\r\n\t var consumedFolds = this.subFolds.splice(i, j - i, fold);\r\n\t fold.setFoldLine(this.foldLine);\r\n\r\n\t return fold;\r\n\t };\r\n\t \r\n\t this.restoreRange = function(range) {\r\n\t return restoreRange(range, this.start);\r\n\t };\r\n\r\n\t}).call(Fold.prototype);\r\n\r\n\tfunction consumePoint(point, anchor) {\r\n\t point.row -= anchor.row;\r\n\t if (point.row == 0)\r\n\t point.column -= anchor.column;\r\n\t}\r\n\tfunction consumeRange(range, anchor) {\r\n\t consumePoint(range.start, anchor);\r\n\t consumePoint(range.end, anchor);\r\n\t}\r\n\tfunction restorePoint(point, anchor) {\r\n\t if (point.row == 0)\r\n\t point.column += anchor.column;\r\n\t point.row += anchor.row;\r\n\t}\r\n\tfunction restoreRange(range, anchor) {\r\n\t restorePoint(range.start, anchor);\r\n\t restorePoint(range.end, anchor);\r\n\t}\r\n\r\n\t});\r\n\r\n\tace.define(\"ace/edit_session/folding\",[\"require\",\"exports\",\"module\",\"ace/range\",\"ace/edit_session/fold_line\",\"ace/edit_session/fold\",\"ace/token_iterator\"], function(acequire, exports, module) {\r\n\t\"use strict\";\r\n\r\n\tvar Range = acequire(\"../range\").Range;\r\n\tvar FoldLine = acequire(\"./fold_line\").FoldLine;\r\n\tvar Fold = acequire(\"./fold\").Fold;\r\n\tvar TokenIterator = acequire(\"../token_iterator\").TokenIterator;\r\n\r\n\tfunction Folding() {\r\n\t this.getFoldAt = function(row, column, side) {\r\n\t var foldLine = this.getFoldLine(row);\r\n\t if (!foldLine)\r\n\t return null;\r\n\r\n\t var folds = foldLine.folds;\r\n\t for (var i = 0; i < folds.length; i++) {\r\n\t var fold = folds[i];\r\n\t if (fold.range.contains(row, column)) {\r\n\t if (side == 1 && fold.range.isEnd(row, column)) {\r\n\t continue;\r\n\t } else if (side == -1 && fold.range.isStart(row, column)) {\r\n\t continue;\r\n\t }\r\n\t return fold;\r\n\t }\r\n\t }\r\n\t };\r\n\t this.getFoldsInRange = function(range) {\r\n\t var start = range.start;\r\n\t var end = range.end;\r\n\t var foldLines = this.$foldData;\r\n\t var foundFolds = [];\r\n\r\n\t start.column += 1;\r\n\t end.column -= 1;\r\n\r\n\t for (var i = 0; i < foldLines.length; i++) {\r\n\t var cmp = foldLines[i].range.compareRange(range);\r\n\t if (cmp == 2) {\r\n\t continue;\r\n\t }\r\n\t else if (cmp == -2) {\r\n\t break;\r\n\t }\r\n\r\n\t var folds = foldLines[i].folds;\r\n\t for (var j = 0; j < folds.length; j++) {\r\n\t var fold = folds[j];\r\n\t cmp = fold.range.compareRange(range);\r\n\t if (cmp == -2) {\r\n\t break;\r\n\t } else if (cmp == 2) {\r\n\t continue;\r\n\t } else\r\n\t if (cmp == 42) {\r\n\t break;\r\n\t }\r\n\t foundFolds.push(fold);\r\n\t }\r\n\t }\r\n\t start.column -= 1;\r\n\t end.column += 1;\r\n\r\n\t return foundFolds;\r\n\t };\r\n\r\n\t this.getFoldsInRangeList = function(ranges) {\r\n\t if (Array.isArray(ranges)) {\r\n\t var folds = [];\r\n\t ranges.forEach(function(range) {\r\n\t folds = folds.concat(this.getFoldsInRange(range));\r\n\t }, this);\r\n\t } else {\r\n\t var folds = this.getFoldsInRange(ranges);\r\n\t }\r\n\t return folds;\r\n\t };\r\n\t this.getAllFolds = function() {\r\n\t var folds = [];\r\n\t var foldLines = this.$foldData;\r\n\t \r\n\t for (var i = 0; i < foldLines.length; i++)\r\n\t for (var j = 0; j < foldLines[i].folds.length; j++)\r\n\t folds.push(foldLines[i].folds[j]);\r\n\r\n\t return folds;\r\n\t };\r\n\t this.getFoldStringAt = function(row, column, trim, foldLine) {\r\n\t foldLine = foldLine || this.getFoldLine(row);\r\n\t if (!foldLine)\r\n\t return null;\r\n\r\n\t var lastFold = {\r\n\t end: { column: 0 }\r\n\t };\r\n\t var str, fold;\r\n\t for (var i = 0; i < foldLine.folds.length; i++) {\r\n\t fold = foldLine.folds[i];\r\n\t var cmp = fold.range.compareEnd(row, column);\r\n\t if (cmp == -1) {\r\n\t str = this\r\n\t .getLine(fold.start.row)\r\n\t .substring(lastFold.end.column, fold.start.column);\r\n\t break;\r\n\t }\r\n\t else if (cmp === 0) {\r\n\t return null;\r\n\t }\r\n\t lastFold = fold;\r\n\t }\r\n\t if (!str)\r\n\t str = this.getLine(fold.start.row).substring(lastFold.end.column);\r\n\r\n\t if (trim == -1)\r\n\t return str.substring(0, column - lastFold.end.column);\r\n\t else if (trim == 1)\r\n\t return str.substring(column - lastFold.end.column);\r\n\t else\r\n\t return str;\r\n\t };\r\n\r\n\t this.getFoldLine = function(docRow, startFoldLine) {\r\n\t var foldData = this.$foldData;\r\n\t var i = 0;\r\n\t if (startFoldLine)\r\n\t i = foldData.indexOf(startFoldLine);\r\n\t if (i == -1)\r\n\t i = 0;\r\n\t for (i; i < foldData.length; i++) {\r\n\t var foldLine = foldData[i];\r\n\t if (foldLine.start.row <= docRow && foldLine.end.row >= docRow) {\r\n\t return foldLine;\r\n\t } else if (foldLine.end.row > docRow) {\r\n\t return null;\r\n\t }\r\n\t }\r\n\t return null;\r\n\t };\r\n\t this.getNextFoldLine = function(docRow, startFoldLine) {\r\n\t var foldData = this.$foldData;\r\n\t var i = 0;\r\n\t if (startFoldLine)\r\n\t i = foldData.indexOf(startFoldLine);\r\n\t if (i == -1)\r\n\t i = 0;\r\n\t for (i; i < foldData.length; i++) {\r\n\t var foldLine = foldData[i];\r\n\t if (foldLine.end.row >= docRow) {\r\n\t return foldLine;\r\n\t }\r\n\t }\r\n\t return null;\r\n\t };\r\n\r\n\t this.getFoldedRowCount = function(first, last) {\r\n\t var foldData = this.$foldData, rowCount = last-first+1;\r\n\t for (var i = 0; i < foldData.length; i++) {\r\n\t var foldLine = foldData[i],\r\n\t end = foldLine.end.row,\r\n\t start = foldLine.start.row;\r\n\t if (end >= last) {\r\n\t if (start < last) {\r\n\t if (start >= first)\r\n\t rowCount -= last-start;\r\n\t else\r\n\t rowCount = 0; // in one fold\r\n\t }\r\n\t break;\r\n\t } else if (end >= first){\r\n\t if (start >= first) // fold inside range\r\n\t rowCount -= end-start;\r\n\t else\r\n\t rowCount -= end-first+1;\r\n\t }\r\n\t }\r\n\t return rowCount;\r\n\t };\r\n\r\n\t this.$addFoldLine = function(foldLine) {\r\n\t this.$foldData.push(foldLine);\r\n\t this.$foldData.sort(function(a, b) {\r\n\t return a.start.row - b.start.row;\r\n\t });\r\n\t return foldLine;\r\n\t };\r\n\t this.addFold = function(placeholder, range) {\r\n\t var foldData = this.$foldData;\r\n\t var added = false;\r\n\t var fold;\r\n\t \r\n\t if (placeholder instanceof Fold)\r\n\t fold = placeholder;\r\n\t else {\r\n\t fold = new Fold(range, placeholder);\r\n\t fold.collapseChildren = range.collapseChildren;\r\n\t }\r\n\t this.$clipRangeToDocument(fold.range);\r\n\r\n\t var startRow = fold.start.row;\r\n\t var startColumn = fold.start.column;\r\n\t var endRow = fold.end.row;\r\n\t var endColumn = fold.end.column;\r\n\t if (!(startRow < endRow || \r\n\t startRow == endRow && startColumn <= endColumn - 2))\r\n\t throw new Error(\"The range has to be at least 2 characters width\");\r\n\r\n\t var startFold = this.getFoldAt(startRow, startColumn, 1);\r\n\t var endFold = this.getFoldAt(endRow, endColumn, -1);\r\n\t if (startFold && endFold == startFold)\r\n\t return startFold.addSubFold(fold);\r\n\r\n\t if (startFold && !startFold.range.isStart(startRow, startColumn))\r\n\t this.removeFold(startFold);\r\n\t \r\n\t if (endFold && !endFold.range.isEnd(endRow, endColumn))\r\n\t this.removeFold(endFold);\r\n\t var folds = this.getFoldsInRange(fold.range);\r\n\t if (folds.length > 0) {\r\n\t this.removeFolds(folds);\r\n\t folds.forEach(function(subFold) {\r\n\t fold.addSubFold(subFold);\r\n\t });\r\n\t }\r\n\r\n\t for (var i = 0; i < foldData.length; i++) {\r\n\t var foldLine = foldData[i];\r\n\t if (endRow == foldLine.start.row) {\r\n\t foldLine.addFold(fold);\r\n\t added = true;\r\n\t break;\r\n\t } else if (startRow == foldLine.end.row) {\r\n\t foldLine.addFold(fold);\r\n\t added = true;\r\n\t if (!fold.sameRow) {\r\n\t var foldLineNext = foldData[i + 1];\r\n\t if (foldLineNext && foldLineNext.start.row == endRow) {\r\n\t foldLine.merge(foldLineNext);\r\n\t break;\r\n\t }\r\n\t }\r\n\t break;\r\n\t } else if (endRow <= foldLine.start.row) {\r\n\t break;\r\n\t }\r\n\t }\r\n\r\n\t if (!added)\r\n\t foldLine = this.$addFoldLine(new FoldLine(this.$foldData, fold));\r\n\r\n\t if (this.$useWrapMode)\r\n\t this.$updateWrapData(foldLine.start.row, foldLine.start.row);\r\n\t else\r\n\t this.$updateRowLengthCache(foldLine.start.row, foldLine.start.row);\r\n\t this.$modified = true;\r\n\t this._signal(\"changeFold\", { data: fold, action: \"add\" });\r\n\r\n\t return fold;\r\n\t };\r\n\r\n\t this.addFolds = function(folds) {\r\n\t folds.forEach(function(fold) {\r\n\t this.addFold(fold);\r\n\t }, this);\r\n\t };\r\n\r\n\t this.removeFold = function(fold) {\r\n\t var foldLine = fold.foldLine;\r\n\t var startRow = foldLine.start.row;\r\n\t var endRow = foldLine.end.row;\r\n\r\n\t var foldLines = this.$foldData;\r\n\t var folds = foldLine.folds;\r\n\t if (folds.length == 1) {\r\n\t foldLines.splice(foldLines.indexOf(foldLine), 1);\r\n\t } else\r\n\t if (foldLine.range.isEnd(fold.end.row, fold.end.column)) {\r\n\t folds.pop();\r\n\t foldLine.end.row = folds[folds.length - 1].end.row;\r\n\t foldLine.end.column = folds[folds.length - 1].end.column;\r\n\t } else\r\n\t if (foldLine.range.isStart(fold.start.row, fold.start.column)) {\r\n\t folds.shift();\r\n\t foldLine.start.row = folds[0].start.row;\r\n\t foldLine.start.column = folds[0].start.column;\r\n\t } else\r\n\t if (fold.sameRow) {\r\n\t folds.splice(folds.indexOf(fold), 1);\r\n\t } else\r\n\t {\r\n\t var newFoldLine = foldLine.split(fold.start.row, fold.start.column);\r\n\t folds = newFoldLine.folds;\r\n\t folds.shift();\r\n\t newFoldLine.start.row = folds[0].start.row;\r\n\t newFoldLine.start.column = folds[0].start.column;\r\n\t }\r\n\r\n\t if (!this.$updating) {\r\n\t if (this.$useWrapMode)\r\n\t this.$updateWrapData(startRow, endRow);\r\n\t else\r\n\t this.$updateRowLengthCache(startRow, endRow);\r\n\t }\r\n\t this.$modified = true;\r\n\t this._signal(\"changeFold\", { data: fold, action: \"remove\" });\r\n\t };\r\n\r\n\t this.removeFolds = function(folds) {\r\n\t var cloneFolds = [];\r\n\t for (var i = 0; i < folds.length; i++) {\r\n\t cloneFolds.push(folds[i]);\r\n\t }\r\n\r\n\t cloneFolds.forEach(function(fold) {\r\n\t this.removeFold(fold);\r\n\t }, this);\r\n\t this.$modified = true;\r\n\t };\r\n\r\n\t this.expandFold = function(fold) {\r\n\t this.removeFold(fold);\r\n\t fold.subFolds.forEach(function(subFold) {\r\n\t fold.restoreRange(subFold);\r\n\t this.addFold(subFold);\r\n\t }, this);\r\n\t if (fold.collapseChildren > 0) {\r\n\t this.foldAll(fold.start.row+1, fold.end.row, fold.collapseChildren-1);\r\n\t }\r\n\t fold.subFolds = [];\r\n\t };\r\n\r\n\t this.expandFolds = function(folds) {\r\n\t folds.forEach(function(fold) {\r\n\t this.expandFold(fold);\r\n\t }, this);\r\n\t };\r\n\r\n\t this.unfold = function(location, expandInner) {\r\n\t var range, folds;\r\n\t if (location == null) {\r\n\t range = new Range(0, 0, this.getLength(), 0);\r\n\t expandInner = true;\r\n\t } else if (typeof location == \"number\")\r\n\t range = new Range(location, 0, location, this.getLine(location).length);\r\n\t else if (\"row\" in location)\r\n\t range = Range.fromPoints(location, location);\r\n\t else\r\n\t range = location;\r\n\t \r\n\t folds = this.getFoldsInRangeList(range);\r\n\t if (expandInner) {\r\n\t this.removeFolds(folds);\r\n\t } else {\r\n\t var subFolds = folds;\r\n\t while (subFolds.length) {\r\n\t this.expandFolds(subFolds);\r\n\t subFolds = this.getFoldsInRangeList(range);\r\n\t }\r\n\t }\r\n\t if (folds.length)\r\n\t return folds;\r\n\t };\r\n\t this.isRowFolded = function(docRow, startFoldRow) {\r\n\t return !!this.getFoldLine(docRow, startFoldRow);\r\n\t };\r\n\r\n\t this.getRowFoldEnd = function(docRow, startFoldRow) {\r\n\t var foldLine = this.getFoldLine(docRow, startFoldRow);\r\n\t return foldLine ? foldLine.end.row : docRow;\r\n\t };\r\n\r\n\t this.getRowFoldStart = function(docRow, startFoldRow) {\r\n\t var foldLine = this.getFoldLine(docRow, startFoldRow);\r\n\t return foldLine ? foldLine.start.row : docRow;\r\n\t };\r\n\r\n\t this.getFoldDisplayLine = function(foldLine, endRow, endColumn, startRow, startColumn) {\r\n\t if (startRow == null)\r\n\t startRow = foldLine.start.row;\r\n\t if (startColumn == null)\r\n\t startColumn = 0;\r\n\t if (endRow == null)\r\n\t endRow = foldLine.end.row;\r\n\t if (endColumn == null)\r\n\t endColumn = this.getLine(endRow).length;\r\n\t var doc = this.doc;\r\n\t var textLine = \"\";\r\n\r\n\t foldLine.walk(function(placeholder, row, column, lastColumn) {\r\n\t if (row < startRow)\r\n\t return;\r\n\t if (row == startRow) {\r\n\t if (column < startColumn)\r\n\t return;\r\n\t lastColumn = Math.max(startColumn, lastColumn);\r\n\t }\r\n\r\n\t if (placeholder != null) {\r\n\t textLine += placeholder;\r\n\t } else {\r\n\t textLine += doc.getLine(row).substring(lastColumn, column);\r\n\t }\r\n\t }, endRow, endColumn);\r\n\t return textLine;\r\n\t };\r\n\r\n\t this.getDisplayLine = function(row, endColumn, startRow, startColumn) {\r\n\t var foldLine = this.getFoldLine(row);\r\n\r\n\t if (!foldLine) {\r\n\t var line;\r\n\t line = this.doc.getLine(row);\r\n\t return line.substring(startColumn || 0, endColumn || line.length);\r\n\t } else {\r\n\t return this.getFoldDisplayLine(\r\n\t foldLine, row, endColumn, startRow, startColumn);\r\n\t }\r\n\t };\r\n\r\n\t this.$cloneFoldData = function() {\r\n\t var fd = [];\r\n\t fd = this.$foldData.map(function(foldLine) {\r\n\t var folds = foldLine.folds.map(function(fold) {\r\n\t return fold.clone();\r\n\t });\r\n\t return new FoldLine(fd, folds);\r\n\t });\r\n\r\n\t return fd;\r\n\t };\r\n\r\n\t this.toggleFold = function(tryToUnfold) {\r\n\t var selection = this.selection;\r\n\t var range = selection.getRange();\r\n\t var fold;\r\n\t var bracketPos;\r\n\r\n\t if (range.isEmpty()) {\r\n\t var cursor = range.start;\r\n\t fold = this.getFoldAt(cursor.row, cursor.column);\r\n\r\n\t if (fold) {\r\n\t this.expandFold(fold);\r\n\t return;\r\n\t } else if (bracketPos = this.findMatchingBracket(cursor)) {\r\n\t if (range.comparePoint(bracketPos) == 1) {\r\n\t range.end = bracketPos;\r\n\t } else {\r\n\t range.start = bracketPos;\r\n\t range.start.column++;\r\n\t range.end.column--;\r\n\t }\r\n\t } else if (bracketPos = this.findMatchingBracket({row: cursor.row, column: cursor.column + 1})) {\r\n\t if (range.comparePoint(bracketPos) == 1)\r\n\t range.end = bracketPos;\r\n\t else\r\n\t range.start = bracketPos;\r\n\r\n\t range.start.column++;\r\n\t } else {\r\n\t range = this.getCommentFoldRange(cursor.row, cursor.column) || range;\r\n\t }\r\n\t } else {\r\n\t var folds = this.getFoldsInRange(range);\r\n\t if (tryToUnfold && folds.length) {\r\n\t this.expandFolds(folds);\r\n\t return;\r\n\t } else if (folds.length == 1 ) {\r\n\t fold = folds[0];\r\n\t }\r\n\t }\r\n\r\n\t if (!fold)\r\n\t fold = this.getFoldAt(range.start.row, range.start.column);\r\n\r\n\t if (fold && fold.range.toString() == range.toString()) {\r\n\t this.expandFold(fold);\r\n\t return;\r\n\t }\r\n\r\n\t var placeholder = \"...\";\r\n\t if (!range.isMultiLine()) {\r\n\t placeholder = this.getTextRange(range);\r\n\t if (placeholder.length < 4)\r\n\t return;\r\n\t placeholder = placeholder.trim().substring(0, 2) + \"..\";\r\n\t }\r\n\r\n\t this.addFold(placeholder, range);\r\n\t };\r\n\r\n\t this.getCommentFoldRange = function(row, column, dir) {\r\n\t var iterator = new TokenIterator(this, row, column);\r\n\t var token = iterator.getCurrentToken();\r\n\t if (token && /^comment|string/.test(token.type)) {\r\n\t var range = new Range();\r\n\t var re = new RegExp(token.type.replace(/\\..*/, \"\\\\.\"));\r\n\t if (dir != 1) {\r\n\t do {\r\n\t token = iterator.stepBackward();\r\n\t } while (token && re.test(token.type));\r\n\t iterator.stepForward();\r\n\t }\r\n\t \r\n\t range.start.row = iterator.getCurrentTokenRow();\r\n\t range.start.column = iterator.getCurrentTokenColumn() + 2;\r\n\r\n\t iterator = new TokenIterator(this, row, column);\r\n\t \r\n\t if (dir != -1) {\r\n\t do {\r\n\t token = iterator.stepForward();\r\n\t } while (token && re.test(token.type));\r\n\t token = iterator.stepBackward();\r\n\t } else\r\n\t token = iterator.getCurrentToken();\r\n\r\n\t range.end.row = iterator.getCurrentTokenRow();\r\n\t range.end.column = iterator.getCurrentTokenColumn() + token.value.length - 2;\r\n\t return range;\r\n\t }\r\n\t };\r\n\r\n\t this.foldAll = function(startRow, endRow, depth) {\r\n\t if (depth == undefined)\r\n\t depth = 100000; // JSON.stringify doesn't hanle Infinity\r\n\t var foldWidgets = this.foldWidgets;\r\n\t if (!foldWidgets)\r\n\t return; // mode doesn't support folding\r\n\t endRow = endRow || this.getLength();\r\n\t startRow = startRow || 0;\r\n\t for (var row = startRow; row < endRow; row++) {\r\n\t if (foldWidgets[row] == null)\r\n\t foldWidgets[row] = this.getFoldWidget(row);\r\n\t if (foldWidgets[row] != \"start\")\r\n\t continue;\r\n\r\n\t var range = this.getFoldWidgetRange(row);\r\n\t if (range && range.isMultiLine()\r\n\t && range.end.row <= endRow\r\n\t && range.start.row >= startRow\r\n\t ) {\r\n\t row = range.end.row;\r\n\t try {\r\n\t var fold = this.addFold(\"...\", range);\r\n\t if (fold)\r\n\t fold.collapseChildren = depth;\r\n\t } catch(e) {}\r\n\t }\r\n\t }\r\n\t };\r\n\t this.$foldStyles = {\r\n\t \"manual\": 1,\r\n\t \"markbegin\": 1,\r\n\t \"markbeginend\": 1\r\n\t };\r\n\t this.$foldStyle = \"markbegin\";\r\n\t this.setFoldStyle = function(style) {\r\n\t if (!this.$foldStyles[style])\r\n\t throw new Error(\"invalid fold style: \" + style + \"[\" + Object.keys(this.$foldStyles).join(\", \") + \"]\");\r\n\t \r\n\t if (this.$foldStyle == style)\r\n\t return;\r\n\r\n\t this.$foldStyle = style;\r\n\t \r\n\t if (style == \"manual\")\r\n\t this.unfold();\r\n\t var mode = this.$foldMode;\r\n\t this.$setFolding(null);\r\n\t this.$setFolding(mode);\r\n\t };\r\n\r\n\t this.$setFolding = function(foldMode) {\r\n\t if (this.$foldMode == foldMode)\r\n\t return;\r\n\t \r\n\t this.$foldMode = foldMode;\r\n\t \r\n\t this.off('change', this.$updateFoldWidgets);\r\n\t this.off('tokenizerUpdate', this.$tokenizerUpdateFoldWidgets);\r\n\t this._signal(\"changeAnnotation\");\r\n\t \r\n\t if (!foldMode || this.$foldStyle == \"manual\") {\r\n\t this.foldWidgets = null;\r\n\t return;\r\n\t }\r\n\t \r\n\t this.foldWidgets = [];\r\n\t this.getFoldWidget = foldMode.getFoldWidget.bind(foldMode, this, this.$foldStyle);\r\n\t this.getFoldWidgetRange = foldMode.getFoldWidgetRange.bind(foldMode, this, this.$foldStyle);\r\n\t \r\n\t this.$updateFoldWidgets = this.updateFoldWidgets.bind(this);\r\n\t this.$tokenizerUpdateFoldWidgets = this.tokenizerUpdateFoldWidgets.bind(this);\r\n\t this.on('change', this.$updateFoldWidgets);\r\n\t this.on('tokenizerUpdate', this.$tokenizerUpdateFoldWidgets);\r\n\t };\r\n\r\n\t this.getParentFoldRangeData = function (row, ignoreCurrent) {\r\n\t var fw = this.foldWidgets;\r\n\t if (!fw || (ignoreCurrent && fw[row]))\r\n\t return {};\r\n\r\n\t var i = row - 1, firstRange;\r\n\t while (i >= 0) {\r\n\t var c = fw[i];\r\n\t if (c == null)\r\n\t c = fw[i] = this.getFoldWidget(i);\r\n\r\n\t if (c == \"start\") {\r\n\t var range = this.getFoldWidgetRange(i);\r\n\t if (!firstRange)\r\n\t firstRange = range;\r\n\t if (range && range.end.row >= row)\r\n\t break;\r\n\t }\r\n\t i--;\r\n\t }\r\n\r\n\t return {\r\n\t range: i !== -1 && range,\r\n\t firstRange: firstRange\r\n\t };\r\n\t };\r\n\r\n\t this.onFoldWidgetClick = function(row, e) {\r\n\t e = e.domEvent;\r\n\t var options = {\r\n\t children: e.shiftKey,\r\n\t all: e.ctrlKey || e.metaKey,\r\n\t siblings: e.altKey\r\n\t };\r\n\t \r\n\t var range = this.$toggleFoldWidget(row, options);\r\n\t if (!range) {\r\n\t var el = (e.target || e.srcElement);\r\n\t if (el && /ace_fold-widget/.test(el.className))\r\n\t el.className += \" ace_invalid\";\r\n\t }\r\n\t };\r\n\t \r\n\t this.$toggleFoldWidget = function(row, options) {\r\n\t if (!this.getFoldWidget)\r\n\t return;\r\n\t var type = this.getFoldWidget(row);\r\n\t var line = this.getLine(row);\r\n\r\n\t var dir = type === \"end\" ? -1 : 1;\r\n\t var fold = this.getFoldAt(row, dir === -1 ? 0 : line.length, dir);\r\n\r\n\t if (fold) {\r\n\t if (options.children || options.all)\r\n\t this.removeFold(fold);\r\n\t else\r\n\t this.expandFold(fold);\r\n\t return;\r\n\t }\r\n\r\n\t var range = this.getFoldWidgetRange(row, true);\r\n\t if (range && !range.isMultiLine()) {\r\n\t fold = this.getFoldAt(range.start.row, range.start.column, 1);\r\n\t if (fold && range.isEqual(fold.range)) {\r\n\t this.removeFold(fold);\r\n\t return;\r\n\t }\r\n\t }\r\n\t \r\n\t if (options.siblings) {\r\n\t var data = this.getParentFoldRangeData(row);\r\n\t if (data.range) {\r\n\t var startRow = data.range.start.row + 1;\r\n\t var endRow = data.range.end.row;\r\n\t }\r\n\t this.foldAll(startRow, endRow, options.all ? 10000 : 0);\r\n\t } else if (options.children) {\r\n\t endRow = range ? range.end.row : this.getLength();\r\n\t this.foldAll(row + 1, endRow, options.all ? 10000 : 0);\r\n\t } else if (range) {\r\n\t if (options.all) \r\n\t range.collapseChildren = 10000;\r\n\t this.addFold(\"...\", range);\r\n\t }\r\n\t \r\n\t return range;\r\n\t };\r\n\t \r\n\t \r\n\t \r\n\t this.toggleFoldWidget = function(toggleParent) {\r\n\t var row = this.selection.getCursor().row;\r\n\t row = this.getRowFoldStart(row);\r\n\t var range = this.$toggleFoldWidget(row, {});\r\n\t \r\n\t if (range)\r\n\t return;\r\n\t var data = this.getParentFoldRangeData(row, true);\r\n\t range = data.range || data.firstRange;\r\n\t \r\n\t if (range) {\r\n\t row = range.start.row;\r\n\t var fold = this.getFoldAt(row, this.getLine(row).length, 1);\r\n\r\n\t if (fold) {\r\n\t this.removeFold(fold);\r\n\t } else {\r\n\t this.addFold(\"...\", range);\r\n\t }\r\n\t }\r\n\t };\r\n\r\n\t this.updateFoldWidgets = function(delta) {\r\n\t var firstRow = delta.start.row;\r\n\t var len = delta.end.row - firstRow;\r\n\r\n\t if (len === 0) {\r\n\t this.foldWidgets[firstRow] = null;\r\n\t } else if (delta.action == 'remove') {\r\n\t this.foldWidgets.splice(firstRow, len + 1, null);\r\n\t } else {\r\n\t var args = Array(len + 1);\r\n\t args.unshift(firstRow, 1);\r\n\t this.foldWidgets.splice.apply(this.foldWidgets, args);\r\n\t }\r\n\t };\r\n\t this.tokenizerUpdateFoldWidgets = function(e) {\r\n\t var rows = e.data;\r\n\t if (rows.first != rows.last) {\r\n\t if (this.foldWidgets.length > rows.first)\r\n\t this.foldWidgets.splice(rows.first, this.foldWidgets.length);\r\n\t }\r\n\t };\r\n\t}\r\n\r\n\texports.Folding = Folding;\r\n\r\n\t});\r\n\r\n\tace.define(\"ace/edit_session/bracket_match\",[\"require\",\"exports\",\"module\",\"ace/token_iterator\",\"ace/range\"], function(acequire, exports, module) {\r\n\t\"use strict\";\r\n\r\n\tvar TokenIterator = acequire(\"../token_iterator\").TokenIterator;\r\n\tvar Range = acequire(\"../range\").Range;\r\n\r\n\r\n\tfunction BracketMatch() {\r\n\r\n\t this.findMatchingBracket = function(position, chr) {\r\n\t if (position.column == 0) return null;\r\n\r\n\t var charBeforeCursor = chr || this.getLine(position.row).charAt(position.column-1);\r\n\t if (charBeforeCursor == \"\") return null;\r\n\r\n\t var match = charBeforeCursor.match(/([\\(\\[\\{])|([\\)\\]\\}])/);\r\n\t if (!match)\r\n\t return null;\r\n\r\n\t if (match[1])\r\n\t return this.$findClosingBracket(match[1], position);\r\n\t else\r\n\t return this.$findOpeningBracket(match[2], position);\r\n\t };\r\n\t \r\n\t this.getBracketRange = function(pos) {\r\n\t var line = this.getLine(pos.row);\r\n\t var before = true, range;\r\n\r\n\t var chr = line.charAt(pos.column-1);\r\n\t var match = chr && chr.match(/([\\(\\[\\{])|([\\)\\]\\}])/);\r\n\t if (!match) {\r\n\t chr = line.charAt(pos.column);\r\n\t pos = {row: pos.row, column: pos.column + 1};\r\n\t match = chr && chr.match(/([\\(\\[\\{])|([\\)\\]\\}])/);\r\n\t before = false;\r\n\t }\r\n\t if (!match)\r\n\t return null;\r\n\r\n\t if (match[1]) {\r\n\t var bracketPos = this.$findClosingBracket(match[1], pos);\r\n\t if (!bracketPos)\r\n\t return null;\r\n\t range = Range.fromPoints(pos, bracketPos);\r\n\t if (!before) {\r\n\t range.end.column++;\r\n\t range.start.column--;\r\n\t }\r\n\t range.cursor = range.end;\r\n\t } else {\r\n\t var bracketPos = this.$findOpeningBracket(match[2], pos);\r\n\t if (!bracketPos)\r\n\t return null;\r\n\t range = Range.fromPoints(bracketPos, pos);\r\n\t if (!before) {\r\n\t range.start.column++;\r\n\t range.end.column--;\r\n\t }\r\n\t range.cursor = range.start;\r\n\t }\r\n\t \r\n\t return range;\r\n\t };\r\n\r\n\t this.$brackets = {\r\n\t \")\": \"(\",\r\n\t \"(\": \")\",\r\n\t \"]\": \"[\",\r\n\t \"[\": \"]\",\r\n\t \"{\": \"}\",\r\n\t \"}\": \"{\"\r\n\t };\r\n\r\n\t this.$findOpeningBracket = function(bracket, position, typeRe) {\r\n\t var openBracket = this.$brackets[bracket];\r\n\t var depth = 1;\r\n\r\n\t var iterator = new TokenIterator(this, position.row, position.column);\r\n\t var token = iterator.getCurrentToken();\r\n\t if (!token)\r\n\t token = iterator.stepForward();\r\n\t if (!token)\r\n\t return;\r\n\t \r\n\t if (!typeRe){\r\n\t typeRe = new RegExp(\r\n\t \"(\\\\.?\" +\r\n\t token.type.replace(\".\", \"\\\\.\").replace(\"rparen\", \".paren\")\r\n\t .replace(/\\b(?:end)\\b/, \"(?:start|begin|end)\")\r\n\t + \")+\"\r\n\t );\r\n\t }\r\n\t var valueIndex = position.column - iterator.getCurrentTokenColumn() - 2;\r\n\t var value = token.value;\r\n\t \r\n\t while (true) {\r\n\t \r\n\t while (valueIndex >= 0) {\r\n\t var chr = value.charAt(valueIndex);\r\n\t if (chr == openBracket) {\r\n\t depth -= 1;\r\n\t if (depth == 0) {\r\n\t return {row: iterator.getCurrentTokenRow(),\r\n\t column: valueIndex + iterator.getCurrentTokenColumn()};\r\n\t }\r\n\t }\r\n\t else if (chr == bracket) {\r\n\t depth += 1;\r\n\t }\r\n\t valueIndex -= 1;\r\n\t }\r\n\t do {\r\n\t token = iterator.stepBackward();\r\n\t } while (token && !typeRe.test(token.type));\r\n\r\n\t if (token == null)\r\n\t break;\r\n\t \r\n\t value = token.value;\r\n\t valueIndex = value.length - 1;\r\n\t }\r\n\t \r\n\t return null;\r\n\t };\r\n\r\n\t this.$findClosingBracket = function(bracket, position, typeRe) {\r\n\t var closingBracket = this.$brackets[bracket];\r\n\t var depth = 1;\r\n\r\n\t var iterator = new TokenIterator(this, position.row, position.column);\r\n\t var token = iterator.getCurrentToken();\r\n\t if (!token)\r\n\t token = iterator.stepForward();\r\n\t if (!token)\r\n\t return;\r\n\r\n\t if (!typeRe){\r\n\t typeRe = new RegExp(\r\n\t \"(\\\\.?\" +\r\n\t token.type.replace(\".\", \"\\\\.\").replace(\"lparen\", \".paren\")\r\n\t .replace(/\\b(?:start|begin)\\b/, \"(?:start|begin|end)\")\r\n\t + \")+\"\r\n\t );\r\n\t }\r\n\t var valueIndex = position.column - iterator.getCurrentTokenColumn();\r\n\r\n\t while (true) {\r\n\r\n\t var value = token.value;\r\n\t var valueLength = value.length;\r\n\t while (valueIndex < valueLength) {\r\n\t var chr = value.charAt(valueIndex);\r\n\t if (chr == closingBracket) {\r\n\t depth -= 1;\r\n\t if (depth == 0) {\r\n\t return {row: iterator.getCurrentTokenRow(),\r\n\t column: valueIndex + iterator.getCurrentTokenColumn()};\r\n\t }\r\n\t }\r\n\t else if (chr == bracket) {\r\n\t depth += 1;\r\n\t }\r\n\t valueIndex += 1;\r\n\t }\r\n\t do {\r\n\t token = iterator.stepForward();\r\n\t } while (token && !typeRe.test(token.type));\r\n\r\n\t if (token == null)\r\n\t break;\r\n\r\n\t valueIndex = 0;\r\n\t }\r\n\t \r\n\t return null;\r\n\t };\r\n\t}\r\n\texports.BracketMatch = BracketMatch;\r\n\r\n\t});\r\n\r\n\tace.define(\"ace/edit_session\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/config\",\"ace/lib/event_emitter\",\"ace/selection\",\"ace/mode/text\",\"ace/range\",\"ace/document\",\"ace/background_tokenizer\",\"ace/search_highlight\",\"ace/edit_session/folding\",\"ace/edit_session/bracket_match\"], function(acequire, exports, module) {\r\n\t\"use strict\";\r\n\r\n\tvar oop = acequire(\"./lib/oop\");\r\n\tvar lang = acequire(\"./lib/lang\");\r\n\tvar config = acequire(\"./config\");\r\n\tvar EventEmitter = acequire(\"./lib/event_emitter\").EventEmitter;\r\n\tvar Selection = acequire(\"./selection\").Selection;\r\n\tvar TextMode = acequire(\"./mode/text\").Mode;\r\n\tvar Range = acequire(\"./range\").Range;\r\n\tvar Document = acequire(\"./document\").Document;\r\n\tvar BackgroundTokenizer = acequire(\"./background_tokenizer\").BackgroundTokenizer;\r\n\tvar SearchHighlight = acequire(\"./search_highlight\").SearchHighlight;\r\n\r\n\tvar EditSession = function(text, mode) {\r\n\t this.$breakpoints = [];\r\n\t this.$decorations = [];\r\n\t this.$frontMarkers = {};\r\n\t this.$backMarkers = {};\r\n\t this.$markerId = 1;\r\n\t this.$undoSelect = true;\r\n\r\n\t this.$foldData = [];\r\n\t this.$foldData.toString = function() {\r\n\t return this.join(\"\\n\");\r\n\t };\r\n\t this.on(\"changeFold\", this.onChangeFold.bind(this));\r\n\t this.$onChange = this.onChange.bind(this);\r\n\r\n\t if (typeof text != \"object\" || !text.getLine)\r\n\t text = new Document(text);\r\n\r\n\t this.setDocument(text);\r\n\t this.selection = new Selection(this);\r\n\r\n\t config.resetOptions(this);\r\n\t this.setMode(mode);\r\n\t config._signal(\"session\", this);\r\n\t};\r\n\r\n\r\n\t(function() {\r\n\r\n\t oop.implement(this, EventEmitter);\r\n\t this.setDocument = function(doc) {\r\n\t if (this.doc)\r\n\t this.doc.removeListener(\"change\", this.$onChange);\r\n\r\n\t this.doc = doc;\r\n\t doc.on(\"change\", this.$onChange);\r\n\r\n\t if (this.bgTokenizer)\r\n\t this.bgTokenizer.setDocument(this.getDocument());\r\n\r\n\t this.resetCaches();\r\n\t };\r\n\t this.getDocument = function() {\r\n\t return this.doc;\r\n\t };\r\n\t this.$resetRowCache = function(docRow) {\r\n\t if (!docRow) {\r\n\t this.$docRowCache = [];\r\n\t this.$screenRowCache = [];\r\n\t return;\r\n\t }\r\n\t var l = this.$docRowCache.length;\r\n\t var i = this.$getRowCacheIndex(this.$docRowCache, docRow) + 1;\r\n\t if (l > i) {\r\n\t this.$docRowCache.splice(i, l);\r\n\t this.$screenRowCache.splice(i, l);\r\n\t }\r\n\t };\r\n\r\n\t this.$getRowCacheIndex = function(cacheArray, val) {\r\n\t var low = 0;\r\n\t var hi = cacheArray.length - 1;\r\n\r\n\t while (low <= hi) {\r\n\t var mid = (low + hi) >> 1;\r\n\t var c = cacheArray[mid];\r\n\r\n\t if (val > c)\r\n\t low = mid + 1;\r\n\t else if (val < c)\r\n\t hi = mid - 1;\r\n\t else\r\n\t return mid;\r\n\t }\r\n\r\n\t return low -1;\r\n\t };\r\n\r\n\t this.resetCaches = function() {\r\n\t this.$modified = true;\r\n\t this.$wrapData = [];\r\n\t this.$rowLengthCache = [];\r\n\t this.$resetRowCache(0);\r\n\t if (this.bgTokenizer)\r\n\t this.bgTokenizer.start(0);\r\n\t };\r\n\r\n\t this.onChangeFold = function(e) {\r\n\t var fold = e.data;\r\n\t this.$resetRowCache(fold.start.row);\r\n\t };\r\n\r\n\t this.onChange = function(delta) {\r\n\t this.$modified = true;\r\n\r\n\t this.$resetRowCache(delta.start.row);\r\n\r\n\t var removedFolds = this.$updateInternalDataOnChange(delta);\r\n\t if (!this.$fromUndo && this.$undoManager && !delta.ignore) {\r\n\t this.$deltasDoc.push(delta);\r\n\t if (removedFolds && removedFolds.length != 0) {\r\n\t this.$deltasFold.push({\r\n\t action: \"removeFolds\",\r\n\t folds: removedFolds\r\n\t });\r\n\t }\r\n\r\n\t this.$informUndoManager.schedule();\r\n\t }\r\n\r\n\t this.bgTokenizer && this.bgTokenizer.$updateOnChange(delta);\r\n\t this._signal(\"change\", delta);\r\n\t };\r\n\t this.setValue = function(text) {\r\n\t this.doc.setValue(text);\r\n\t this.selection.moveTo(0, 0);\r\n\r\n\t this.$resetRowCache(0);\r\n\t this.$deltas = [];\r\n\t this.$deltasDoc = [];\r\n\t this.$deltasFold = [];\r\n\t this.setUndoManager(this.$undoManager);\r\n\t this.getUndoManager().reset();\r\n\t };\r\n\t this.getValue =\r\n\t this.toString = function() {\r\n\t return this.doc.getValue();\r\n\t };\r\n\t this.getSelection = function() {\r\n\t return this.selection;\r\n\t };\r\n\t this.getState = function(row) {\r\n\t return this.bgTokenizer.getState(row);\r\n\t };\r\n\t this.getTokens = function(row) {\r\n\t return this.bgTokenizer.getTokens(row);\r\n\t };\r\n\t this.getTokenAt = function(row, column) {\r\n\t var tokens = this.bgTokenizer.getTokens(row);\r\n\t var token, c = 0;\r\n\t if (column == null) {\r\n\t i = tokens.length - 1;\r\n\t c = this.getLine(row).length;\r\n\t } else {\r\n\t for (var i = 0; i < tokens.length; i++) {\r\n\t c += tokens[i].value.length;\r\n\t if (c >= column)\r\n\t break;\r\n\t }\r\n\t }\r\n\t token = tokens[i];\r\n\t if (!token)\r\n\t return null;\r\n\t token.index = i;\r\n\t token.start = c - token.value.length;\r\n\t return token;\r\n\t };\r\n\t this.setUndoManager = function(undoManager) {\r\n\t this.$undoManager = undoManager;\r\n\t this.$deltas = [];\r\n\t this.$deltasDoc = [];\r\n\t this.$deltasFold = [];\r\n\r\n\t if (this.$informUndoManager)\r\n\t this.$informUndoManager.cancel();\r\n\r\n\t if (undoManager) {\r\n\t var self = this;\r\n\r\n\t this.$syncInformUndoManager = function() {\r\n\t self.$informUndoManager.cancel();\r\n\r\n\t if (self.$deltasFold.length) {\r\n\t self.$deltas.push({\r\n\t group: \"fold\",\r\n\t deltas: self.$deltasFold\r\n\t });\r\n\t self.$deltasFold = [];\r\n\t }\r\n\r\n\t if (self.$deltasDoc.length) {\r\n\t self.$deltas.push({\r\n\t group: \"doc\",\r\n\t deltas: self.$deltasDoc\r\n\t });\r\n\t self.$deltasDoc = [];\r\n\t }\r\n\r\n\t if (self.$deltas.length > 0) {\r\n\t undoManager.execute({\r\n\t action: \"aceupdate\",\r\n\t args: [self.$deltas, self],\r\n\t merge: self.mergeUndoDeltas\r\n\t });\r\n\t }\r\n\t self.mergeUndoDeltas = false;\r\n\t self.$deltas = [];\r\n\t };\r\n\t this.$informUndoManager = lang.delayedCall(this.$syncInformUndoManager);\r\n\t }\r\n\t };\r\n\t this.markUndoGroup = function() {\r\n\t if (this.$syncInformUndoManager)\r\n\t this.$syncInformUndoManager();\r\n\t };\r\n\t \r\n\t this.$defaultUndoManager = {\r\n\t undo: function() {},\r\n\t redo: function() {},\r\n\t reset: function() {}\r\n\t };\r\n\t this.getUndoManager = function() {\r\n\t return this.$undoManager || this.$defaultUndoManager;\r\n\t };\r\n\t this.getTabString = function() {\r\n\t if (this.getUseSoftTabs()) {\r\n\t return lang.stringRepeat(\" \", this.getTabSize());\r\n\t } else {\r\n\t return \"\\t\";\r\n\t }\r\n\t };\r\n\t this.setUseSoftTabs = function(val) {\r\n\t this.setOption(\"useSoftTabs\", val);\r\n\t };\r\n\t this.getUseSoftTabs = function() {\r\n\t return this.$useSoftTabs && !this.$mode.$indentWithTabs;\r\n\t };\r\n\t this.setTabSize = function(tabSize) {\r\n\t this.setOption(\"tabSize\", tabSize);\r\n\t };\r\n\t this.getTabSize = function() {\r\n\t return this.$tabSize;\r\n\t };\r\n\t this.isTabStop = function(position) {\r\n\t return this.$useSoftTabs && (position.column % this.$tabSize === 0);\r\n\t };\r\n\r\n\t this.$overwrite = false;\r\n\t this.setOverwrite = function(overwrite) {\r\n\t this.setOption(\"overwrite\", overwrite);\r\n\t };\r\n\t this.getOverwrite = function() {\r\n\t return this.$overwrite;\r\n\t };\r\n\t this.toggleOverwrite = function() {\r\n\t this.setOverwrite(!this.$overwrite);\r\n\t };\r\n\t this.addGutterDecoration = function(row, className) {\r\n\t if (!this.$decorations[row])\r\n\t this.$decorations[row] = \"\";\r\n\t this.$decorations[row] += \" \" + className;\r\n\t this._signal(\"changeBreakpoint\", {});\r\n\t };\r\n\t this.removeGutterDecoration = function(row, className) {\r\n\t this.$decorations[row] = (this.$decorations[row] || \"\").replace(\" \" + className, \"\");\r\n\t this._signal(\"changeBreakpoint\", {});\r\n\t };\r\n\t this.getBreakpoints = function() {\r\n\t return this.$breakpoints;\r\n\t };\r\n\t this.setBreakpoints = function(rows) {\r\n\t this.$breakpoints = [];\r\n\t for (var i=0; i 0)\r\n\t inToken = !!line.charAt(column - 1).match(this.tokenRe);\r\n\r\n\t if (!inToken)\r\n\t inToken = !!line.charAt(column).match(this.tokenRe);\r\n\r\n\t if (inToken)\r\n\t var re = this.tokenRe;\r\n\t else if (/^\\s+$/.test(line.slice(column-1, column+1)))\r\n\t var re = /\\s/;\r\n\t else\r\n\t var re = this.nonTokenRe;\r\n\r\n\t var start = column;\r\n\t if (start > 0) {\r\n\t do {\r\n\t start--;\r\n\t }\r\n\t while (start >= 0 && line.charAt(start).match(re));\r\n\t start++;\r\n\t }\r\n\r\n\t var end = column;\r\n\t while (end < line.length && line.charAt(end).match(re)) {\r\n\t end++;\r\n\t }\r\n\r\n\t return new Range(row, start, row, end);\r\n\t };\r\n\t this.getAWordRange = function(row, column) {\r\n\t var wordRange = this.getWordRange(row, column);\r\n\t var line = this.getLine(wordRange.end.row);\r\n\r\n\t while (line.charAt(wordRange.end.column).match(/[ \\t]/)) {\r\n\t wordRange.end.column += 1;\r\n\t }\r\n\t return wordRange;\r\n\t };\r\n\t this.setNewLineMode = function(newLineMode) {\r\n\t this.doc.setNewLineMode(newLineMode);\r\n\t };\r\n\t this.getNewLineMode = function() {\r\n\t return this.doc.getNewLineMode();\r\n\t };\r\n\t this.setUseWorker = function(useWorker) { this.setOption(\"useWorker\", useWorker); };\r\n\t this.getUseWorker = function() { return this.$useWorker; };\r\n\t this.onReloadTokenizer = function(e) {\r\n\t var rows = e.data;\r\n\t this.bgTokenizer.start(rows.first);\r\n\t this._signal(\"tokenizerUpdate\", e);\r\n\t };\r\n\r\n\t this.$modes = {};\r\n\t this.$mode = null;\r\n\t this.$modeId = null;\r\n\t this.setMode = function(mode, cb) {\r\n\t if (mode && typeof mode === \"object\") {\r\n\t if (mode.getTokenizer)\r\n\t return this.$onChangeMode(mode);\r\n\t var options = mode;\r\n\t var path = options.path;\r\n\t } else {\r\n\t path = mode || \"ace/mode/text\";\r\n\t }\r\n\t if (!this.$modes[\"ace/mode/text\"])\r\n\t this.$modes[\"ace/mode/text\"] = new TextMode();\r\n\r\n\t if (this.$modes[path] && !options) {\r\n\t this.$onChangeMode(this.$modes[path]);\r\n\t cb && cb();\r\n\t return;\r\n\t }\r\n\t this.$modeId = path;\r\n\t config.loadModule([\"mode\", path], function(m) {\r\n\t if (this.$modeId !== path)\r\n\t return cb && cb();\r\n\t if (this.$modes[path] && !options) {\r\n\t this.$onChangeMode(this.$modes[path]);\r\n\t } else if (m && m.Mode) {\r\n\t m = new m.Mode(options);\r\n\t if (!options) {\r\n\t this.$modes[path] = m;\r\n\t m.$id = path;\r\n\t }\r\n\t this.$onChangeMode(m);\r\n\t }\r\n\t cb && cb();\r\n\t }.bind(this));\r\n\t if (!this.$mode)\r\n\t this.$onChangeMode(this.$modes[\"ace/mode/text\"], true);\r\n\t };\r\n\r\n\t this.$onChangeMode = function(mode, $isPlaceholder) {\r\n\t if (!$isPlaceholder)\r\n\t this.$modeId = mode.$id;\r\n\t if (this.$mode === mode) \r\n\t return;\r\n\r\n\t this.$mode = mode;\r\n\r\n\t this.$stopWorker();\r\n\r\n\t if (this.$useWorker)\r\n\t this.$startWorker();\r\n\r\n\t var tokenizer = mode.getTokenizer();\r\n\r\n\t if(tokenizer.addEventListener !== undefined) {\r\n\t var onReloadTokenizer = this.onReloadTokenizer.bind(this);\r\n\t tokenizer.addEventListener(\"update\", onReloadTokenizer);\r\n\t }\r\n\r\n\t if (!this.bgTokenizer) {\r\n\t this.bgTokenizer = new BackgroundTokenizer(tokenizer);\r\n\t var _self = this;\r\n\t this.bgTokenizer.addEventListener(\"update\", function(e) {\r\n\t _self._signal(\"tokenizerUpdate\", e);\r\n\t });\r\n\t } else {\r\n\t this.bgTokenizer.setTokenizer(tokenizer);\r\n\t }\r\n\r\n\t this.bgTokenizer.setDocument(this.getDocument());\r\n\r\n\t this.tokenRe = mode.tokenRe;\r\n\t this.nonTokenRe = mode.nonTokenRe;\r\n\r\n\t \r\n\t if (!$isPlaceholder) {\r\n\t if (mode.attachToSession)\r\n\t mode.attachToSession(this);\r\n\t this.$options.wrapMethod.set.call(this, this.$wrapMethod);\r\n\t this.$setFolding(mode.foldingRules);\r\n\t this.bgTokenizer.start(0);\r\n\t this._emit(\"changeMode\");\r\n\t }\r\n\t };\r\n\r\n\t this.$stopWorker = function() {\r\n\t if (this.$worker) {\r\n\t this.$worker.terminate();\r\n\t this.$worker = null;\r\n\t }\r\n\t };\r\n\r\n\t this.$startWorker = function() {\r\n\t try {\r\n\t this.$worker = this.$mode.createWorker(this);\r\n\t } catch (e) {\r\n\t config.warn(\"Could not load worker\", e);\r\n\t this.$worker = null;\r\n\t }\r\n\t };\r\n\t this.getMode = function() {\r\n\t return this.$mode;\r\n\t };\r\n\r\n\t this.$scrollTop = 0;\r\n\t this.setScrollTop = function(scrollTop) {\r\n\t if (this.$scrollTop === scrollTop || isNaN(scrollTop))\r\n\t return;\r\n\r\n\t this.$scrollTop = scrollTop;\r\n\t this._signal(\"changeScrollTop\", scrollTop);\r\n\t };\r\n\t this.getScrollTop = function() {\r\n\t return this.$scrollTop;\r\n\t };\r\n\r\n\t this.$scrollLeft = 0;\r\n\t this.setScrollLeft = function(scrollLeft) {\r\n\t if (this.$scrollLeft === scrollLeft || isNaN(scrollLeft))\r\n\t return;\r\n\r\n\t this.$scrollLeft = scrollLeft;\r\n\t this._signal(\"changeScrollLeft\", scrollLeft);\r\n\t };\r\n\t this.getScrollLeft = function() {\r\n\t return this.$scrollLeft;\r\n\t };\r\n\t this.getScreenWidth = function() {\r\n\t this.$computeWidth();\r\n\t if (this.lineWidgets) \r\n\t return Math.max(this.getLineWidgetMaxWidth(), this.screenWidth);\r\n\t return this.screenWidth;\r\n\t };\r\n\t \r\n\t this.getLineWidgetMaxWidth = function() {\r\n\t if (this.lineWidgetsWidth != null) return this.lineWidgetsWidth;\r\n\t var width = 0;\r\n\t this.lineWidgets.forEach(function(w) {\r\n\t if (w && w.screenWidth > width)\r\n\t width = w.screenWidth;\r\n\t });\r\n\t return this.lineWidgetWidth = width;\r\n\t };\r\n\r\n\t this.$computeWidth = function(force) {\r\n\t if (this.$modified || force) {\r\n\t this.$modified = false;\r\n\r\n\t if (this.$useWrapMode)\r\n\t return this.screenWidth = this.$wrapLimit;\r\n\r\n\t var lines = this.doc.getAllLines();\r\n\t var cache = this.$rowLengthCache;\r\n\t var longestScreenLine = 0;\r\n\t var foldIndex = 0;\r\n\t var foldLine = this.$foldData[foldIndex];\r\n\t var foldStart = foldLine ? foldLine.start.row : Infinity;\r\n\t var len = lines.length;\r\n\r\n\t for (var i = 0; i < len; i++) {\r\n\t if (i > foldStart) {\r\n\t i = foldLine.end.row + 1;\r\n\t if (i >= len)\r\n\t break;\r\n\t foldLine = this.$foldData[foldIndex++];\r\n\t foldStart = foldLine ? foldLine.start.row : Infinity;\r\n\t }\r\n\r\n\t if (cache[i] == null)\r\n\t cache[i] = this.$getStringScreenWidth(lines[i])[0];\r\n\r\n\t if (cache[i] > longestScreenLine)\r\n\t longestScreenLine = cache[i];\r\n\t }\r\n\t this.screenWidth = longestScreenLine;\r\n\t }\r\n\t };\r\n\t this.getLine = function(row) {\r\n\t return this.doc.getLine(row);\r\n\t };\r\n\t this.getLines = function(firstRow, lastRow) {\r\n\t return this.doc.getLines(firstRow, lastRow);\r\n\t };\r\n\t this.getLength = function() {\r\n\t return this.doc.getLength();\r\n\t };\r\n\t this.getTextRange = function(range) {\r\n\t return this.doc.getTextRange(range || this.selection.getRange());\r\n\t };\r\n\t this.insert = function(position, text) {\r\n\t return this.doc.insert(position, text);\r\n\t };\r\n\t this.remove = function(range) {\r\n\t return this.doc.remove(range);\r\n\t };\r\n\t this.removeFullLines = function(firstRow, lastRow){\r\n\t return this.doc.removeFullLines(firstRow, lastRow);\r\n\t };\r\n\t this.undoChanges = function(deltas, dontSelect) {\r\n\t if (!deltas.length)\r\n\t return;\r\n\r\n\t this.$fromUndo = true;\r\n\t var lastUndoRange = null;\r\n\t for (var i = deltas.length - 1; i != -1; i--) {\r\n\t var delta = deltas[i];\r\n\t if (delta.group == \"doc\") {\r\n\t this.doc.revertDeltas(delta.deltas);\r\n\t lastUndoRange =\r\n\t this.$getUndoSelection(delta.deltas, true, lastUndoRange);\r\n\t } else {\r\n\t delta.deltas.forEach(function(foldDelta) {\r\n\t this.addFolds(foldDelta.folds);\r\n\t }, this);\r\n\t }\r\n\t }\r\n\t this.$fromUndo = false;\r\n\t lastUndoRange &&\r\n\t this.$undoSelect &&\r\n\t !dontSelect &&\r\n\t this.selection.setSelectionRange(lastUndoRange);\r\n\t return lastUndoRange;\r\n\t };\r\n\t this.redoChanges = function(deltas, dontSelect) {\r\n\t if (!deltas.length)\r\n\t return;\r\n\r\n\t this.$fromUndo = true;\r\n\t var lastUndoRange = null;\r\n\t for (var i = 0; i < deltas.length; i++) {\r\n\t var delta = deltas[i];\r\n\t if (delta.group == \"doc\") {\r\n\t this.doc.applyDeltas(delta.deltas);\r\n\t lastUndoRange =\r\n\t this.$getUndoSelection(delta.deltas, false, lastUndoRange);\r\n\t }\r\n\t }\r\n\t this.$fromUndo = false;\r\n\t lastUndoRange &&\r\n\t this.$undoSelect &&\r\n\t !dontSelect &&\r\n\t this.selection.setSelectionRange(lastUndoRange);\r\n\t return lastUndoRange;\r\n\t };\r\n\t this.setUndoSelect = function(enable) {\r\n\t this.$undoSelect = enable;\r\n\t };\r\n\r\n\t this.$getUndoSelection = function(deltas, isUndo, lastUndoRange) {\r\n\t function isInsert(delta) {\r\n\t return isUndo ? delta.action !== \"insert\" : delta.action === \"insert\";\r\n\t }\r\n\r\n\t var delta = deltas[0];\r\n\t var range, point;\r\n\t var lastDeltaIsInsert = false;\r\n\t if (isInsert(delta)) {\r\n\t range = Range.fromPoints(delta.start, delta.end);\r\n\t lastDeltaIsInsert = true;\r\n\t } else {\r\n\t range = Range.fromPoints(delta.start, delta.start);\r\n\t lastDeltaIsInsert = false;\r\n\t }\r\n\r\n\t for (var i = 1; i < deltas.length; i++) {\r\n\t delta = deltas[i];\r\n\t if (isInsert(delta)) {\r\n\t point = delta.start;\r\n\t if (range.compare(point.row, point.column) == -1) {\r\n\t range.setStart(point);\r\n\t }\r\n\t point = delta.end;\r\n\t if (range.compare(point.row, point.column) == 1) {\r\n\t range.setEnd(point);\r\n\t }\r\n\t lastDeltaIsInsert = true;\r\n\t } else {\r\n\t point = delta.start;\r\n\t if (range.compare(point.row, point.column) == -1) {\r\n\t range = Range.fromPoints(delta.start, delta.start);\r\n\t }\r\n\t lastDeltaIsInsert = false;\r\n\t }\r\n\t }\r\n\t if (lastUndoRange != null) {\r\n\t if (Range.comparePoints(lastUndoRange.start, range.start) === 0) {\r\n\t lastUndoRange.start.column += range.end.column - range.start.column;\r\n\t lastUndoRange.end.column += range.end.column - range.start.column;\r\n\t }\r\n\r\n\t var cmp = lastUndoRange.compareRange(range);\r\n\t if (cmp == 1) {\r\n\t range.setStart(lastUndoRange.start);\r\n\t } else if (cmp == -1) {\r\n\t range.setEnd(lastUndoRange.end);\r\n\t }\r\n\t }\r\n\r\n\t return range;\r\n\t };\r\n\t this.replace = function(range, text) {\r\n\t return this.doc.replace(range, text);\r\n\t };\r\n\t this.moveText = function(fromRange, toPosition, copy) {\r\n\t var text = this.getTextRange(fromRange);\r\n\t var folds = this.getFoldsInRange(fromRange);\r\n\r\n\t var toRange = Range.fromPoints(toPosition, toPosition);\r\n\t if (!copy) {\r\n\t this.remove(fromRange);\r\n\t var rowDiff = fromRange.start.row - fromRange.end.row;\r\n\t var collDiff = rowDiff ? -fromRange.end.column : fromRange.start.column - fromRange.end.column;\r\n\t if (collDiff) {\r\n\t if (toRange.start.row == fromRange.end.row && toRange.start.column > fromRange.end.column)\r\n\t toRange.start.column += collDiff;\r\n\t if (toRange.end.row == fromRange.end.row && toRange.end.column > fromRange.end.column)\r\n\t toRange.end.column += collDiff;\r\n\t }\r\n\t if (rowDiff && toRange.start.row >= fromRange.end.row) {\r\n\t toRange.start.row += rowDiff;\r\n\t toRange.end.row += rowDiff;\r\n\t }\r\n\t }\r\n\r\n\t toRange.end = this.insert(toRange.start, text);\r\n\t if (folds.length) {\r\n\t var oldStart = fromRange.start;\r\n\t var newStart = toRange.start;\r\n\t var rowDiff = newStart.row - oldStart.row;\r\n\t var collDiff = newStart.column - oldStart.column;\r\n\t this.addFolds(folds.map(function(x) {\r\n\t x = x.clone();\r\n\t if (x.start.row == oldStart.row)\r\n\t x.start.column += collDiff;\r\n\t if (x.end.row == oldStart.row)\r\n\t x.end.column += collDiff;\r\n\t x.start.row += rowDiff;\r\n\t x.end.row += rowDiff;\r\n\t return x;\r\n\t }));\r\n\t }\r\n\r\n\t return toRange;\r\n\t };\r\n\t this.indentRows = function(startRow, endRow, indentString) {\r\n\t indentString = indentString.replace(/\\t/g, this.getTabString());\r\n\t for (var row=startRow; row<=endRow; row++)\r\n\t this.doc.insertInLine({row: row, column: 0}, indentString);\r\n\t };\r\n\t this.outdentRows = function (range) {\r\n\t var rowRange = range.collapseRows();\r\n\t var deleteRange = new Range(0, 0, 0, 0);\r\n\t var size = this.getTabSize();\r\n\r\n\t for (var i = rowRange.start.row; i <= rowRange.end.row; ++i) {\r\n\t var line = this.getLine(i);\r\n\r\n\t deleteRange.start.row = i;\r\n\t deleteRange.end.row = i;\r\n\t for (var j = 0; j < size; ++j)\r\n\t if (line.charAt(j) != ' ')\r\n\t break;\r\n\t if (j < size && line.charAt(j) == '\\t') {\r\n\t deleteRange.start.column = j;\r\n\t deleteRange.end.column = j + 1;\r\n\t } else {\r\n\t deleteRange.start.column = 0;\r\n\t deleteRange.end.column = j;\r\n\t }\r\n\t this.remove(deleteRange);\r\n\t }\r\n\t };\r\n\r\n\t this.$moveLines = function(firstRow, lastRow, dir) {\r\n\t firstRow = this.getRowFoldStart(firstRow);\r\n\t lastRow = this.getRowFoldEnd(lastRow);\r\n\t if (dir < 0) {\r\n\t var row = this.getRowFoldStart(firstRow + dir);\r\n\t if (row < 0) return 0;\r\n\t var diff = row-firstRow;\r\n\t } else if (dir > 0) {\r\n\t var row = this.getRowFoldEnd(lastRow + dir);\r\n\t if (row > this.doc.getLength()-1) return 0;\r\n\t var diff = row-lastRow;\r\n\t } else {\r\n\t firstRow = this.$clipRowToDocument(firstRow);\r\n\t lastRow = this.$clipRowToDocument(lastRow);\r\n\t var diff = lastRow - firstRow + 1;\r\n\t }\r\n\r\n\t var range = new Range(firstRow, 0, lastRow, Number.MAX_VALUE);\r\n\t var folds = this.getFoldsInRange(range).map(function(x){\r\n\t x = x.clone();\r\n\t x.start.row += diff;\r\n\t x.end.row += diff;\r\n\t return x;\r\n\t });\r\n\t \r\n\t var lines = dir == 0\r\n\t ? this.doc.getLines(firstRow, lastRow)\r\n\t : this.doc.removeFullLines(firstRow, lastRow);\r\n\t this.doc.insertFullLines(firstRow+diff, lines);\r\n\t folds.length && this.addFolds(folds);\r\n\t return diff;\r\n\t };\r\n\t this.moveLinesUp = function(firstRow, lastRow) {\r\n\t return this.$moveLines(firstRow, lastRow, -1);\r\n\t };\r\n\t this.moveLinesDown = function(firstRow, lastRow) {\r\n\t return this.$moveLines(firstRow, lastRow, 1);\r\n\t };\r\n\t this.duplicateLines = function(firstRow, lastRow) {\r\n\t return this.$moveLines(firstRow, lastRow, 0);\r\n\t };\r\n\r\n\r\n\t this.$clipRowToDocument = function(row) {\r\n\t return Math.max(0, Math.min(row, this.doc.getLength()-1));\r\n\t };\r\n\r\n\t this.$clipColumnToRow = function(row, column) {\r\n\t if (column < 0)\r\n\t return 0;\r\n\t return Math.min(this.doc.getLine(row).length, column);\r\n\t };\r\n\r\n\r\n\t this.$clipPositionToDocument = function(row, column) {\r\n\t column = Math.max(0, column);\r\n\r\n\t if (row < 0) {\r\n\t row = 0;\r\n\t column = 0;\r\n\t } else {\r\n\t var len = this.doc.getLength();\r\n\t if (row >= len) {\r\n\t row = len - 1;\r\n\t column = this.doc.getLine(len-1).length;\r\n\t } else {\r\n\t column = Math.min(this.doc.getLine(row).length, column);\r\n\t }\r\n\t }\r\n\r\n\t return {\r\n\t row: row,\r\n\t column: column\r\n\t };\r\n\t };\r\n\r\n\t this.$clipRangeToDocument = function(range) {\r\n\t if (range.start.row < 0) {\r\n\t range.start.row = 0;\r\n\t range.start.column = 0;\r\n\t } else {\r\n\t range.start.column = this.$clipColumnToRow(\r\n\t range.start.row,\r\n\t range.start.column\r\n\t );\r\n\t }\r\n\r\n\t var len = this.doc.getLength() - 1;\r\n\t if (range.end.row > len) {\r\n\t range.end.row = len;\r\n\t range.end.column = this.doc.getLine(len).length;\r\n\t } else {\r\n\t range.end.column = this.$clipColumnToRow(\r\n\t range.end.row,\r\n\t range.end.column\r\n\t );\r\n\t }\r\n\t return range;\r\n\t };\r\n\t this.$wrapLimit = 80;\r\n\t this.$useWrapMode = false;\r\n\t this.$wrapLimitRange = {\r\n\t min : null,\r\n\t max : null\r\n\t };\r\n\t this.setUseWrapMode = function(useWrapMode) {\r\n\t if (useWrapMode != this.$useWrapMode) {\r\n\t this.$useWrapMode = useWrapMode;\r\n\t this.$modified = true;\r\n\t this.$resetRowCache(0);\r\n\t if (useWrapMode) {\r\n\t var len = this.getLength();\r\n\t this.$wrapData = Array(len);\r\n\t this.$updateWrapData(0, len - 1);\r\n\t }\r\n\r\n\t this._signal(\"changeWrapMode\");\r\n\t }\r\n\t };\r\n\t this.getUseWrapMode = function() {\r\n\t return this.$useWrapMode;\r\n\t };\r\n\t this.setWrapLimitRange = function(min, max) {\r\n\t if (this.$wrapLimitRange.min !== min || this.$wrapLimitRange.max !== max) {\r\n\t this.$wrapLimitRange = { min: min, max: max };\r\n\t this.$modified = true;\r\n\t if (this.$useWrapMode)\r\n\t this._signal(\"changeWrapMode\");\r\n\t }\r\n\t };\r\n\t this.adjustWrapLimit = function(desiredLimit, $printMargin) {\r\n\t var limits = this.$wrapLimitRange;\r\n\t if (limits.max < 0)\r\n\t limits = {min: $printMargin, max: $printMargin};\r\n\t var wrapLimit = this.$constrainWrapLimit(desiredLimit, limits.min, limits.max);\r\n\t if (wrapLimit != this.$wrapLimit && wrapLimit > 1) {\r\n\t this.$wrapLimit = wrapLimit;\r\n\t this.$modified = true;\r\n\t if (this.$useWrapMode) {\r\n\t this.$updateWrapData(0, this.getLength() - 1);\r\n\t this.$resetRowCache(0);\r\n\t this._signal(\"changeWrapLimit\");\r\n\t }\r\n\t return true;\r\n\t }\r\n\t return false;\r\n\t };\r\n\r\n\t this.$constrainWrapLimit = function(wrapLimit, min, max) {\r\n\t if (min)\r\n\t wrapLimit = Math.max(min, wrapLimit);\r\n\r\n\t if (max)\r\n\t wrapLimit = Math.min(max, wrapLimit);\r\n\r\n\t return wrapLimit;\r\n\t };\r\n\t this.getWrapLimit = function() {\r\n\t return this.$wrapLimit;\r\n\t };\r\n\t this.setWrapLimit = function (limit) {\r\n\t this.setWrapLimitRange(limit, limit);\r\n\t };\r\n\t this.getWrapLimitRange = function() {\r\n\t return {\r\n\t min : this.$wrapLimitRange.min,\r\n\t max : this.$wrapLimitRange.max\r\n\t };\r\n\t };\r\n\r\n\t this.$updateInternalDataOnChange = function(delta) {\r\n\t var useWrapMode = this.$useWrapMode;\r\n\t var action = delta.action;\r\n\t var start = delta.start;\r\n\t var end = delta.end;\r\n\t var firstRow = start.row;\r\n\t var lastRow = end.row;\r\n\t var len = lastRow - firstRow;\r\n\t var removedFolds = null;\r\n\t \r\n\t this.$updating = true;\r\n\t if (len != 0) {\r\n\t if (action === \"remove\") {\r\n\t this[useWrapMode ? \"$wrapData\" : \"$rowLengthCache\"].splice(firstRow, len);\r\n\r\n\t var foldLines = this.$foldData;\r\n\t removedFolds = this.getFoldsInRange(delta);\r\n\t this.removeFolds(removedFolds);\r\n\r\n\t var foldLine = this.getFoldLine(end.row);\r\n\t var idx = 0;\r\n\t if (foldLine) {\r\n\t foldLine.addRemoveChars(end.row, end.column, start.column - end.column);\r\n\t foldLine.shiftRow(-len);\r\n\r\n\t var foldLineBefore = this.getFoldLine(firstRow);\r\n\t if (foldLineBefore && foldLineBefore !== foldLine) {\r\n\t foldLineBefore.merge(foldLine);\r\n\t foldLine = foldLineBefore;\r\n\t }\r\n\t idx = foldLines.indexOf(foldLine) + 1;\r\n\t }\r\n\r\n\t for (idx; idx < foldLines.length; idx++) {\r\n\t var foldLine = foldLines[idx];\r\n\t if (foldLine.start.row >= end.row) {\r\n\t foldLine.shiftRow(-len);\r\n\t }\r\n\t }\r\n\r\n\t lastRow = firstRow;\r\n\t } else {\r\n\t var args = Array(len);\r\n\t args.unshift(firstRow, 0);\r\n\t var arr = useWrapMode ? this.$wrapData : this.$rowLengthCache\r\n\t arr.splice.apply(arr, args);\r\n\t var foldLines = this.$foldData;\r\n\t var foldLine = this.getFoldLine(firstRow);\r\n\t var idx = 0;\r\n\t if (foldLine) {\r\n\t var cmp = foldLine.range.compareInside(start.row, start.column);\r\n\t if (cmp == 0) {\r\n\t foldLine = foldLine.split(start.row, start.column);\r\n\t if (foldLine) {\r\n\t foldLine.shiftRow(len);\r\n\t foldLine.addRemoveChars(lastRow, 0, end.column - start.column);\r\n\t }\r\n\t } else\r\n\t if (cmp == -1) {\r\n\t foldLine.addRemoveChars(firstRow, 0, end.column - start.column);\r\n\t foldLine.shiftRow(len);\r\n\t }\r\n\t idx = foldLines.indexOf(foldLine) + 1;\r\n\t }\r\n\r\n\t for (idx; idx < foldLines.length; idx++) {\r\n\t var foldLine = foldLines[idx];\r\n\t if (foldLine.start.row >= firstRow) {\r\n\t foldLine.shiftRow(len);\r\n\t }\r\n\t }\r\n\t }\r\n\t } else {\r\n\t len = Math.abs(delta.start.column - delta.end.column);\r\n\t if (action === \"remove\") {\r\n\t removedFolds = this.getFoldsInRange(delta);\r\n\t this.removeFolds(removedFolds);\r\n\r\n\t len = -len;\r\n\t }\r\n\t var foldLine = this.getFoldLine(firstRow);\r\n\t if (foldLine) {\r\n\t foldLine.addRemoveChars(firstRow, start.column, len);\r\n\t }\r\n\t }\r\n\r\n\t if (useWrapMode && this.$wrapData.length != this.doc.getLength()) {\r\n\t console.error(\"doc.getLength() and $wrapData.length have to be the same!\");\r\n\t }\r\n\t this.$updating = false;\r\n\r\n\t if (useWrapMode)\r\n\t this.$updateWrapData(firstRow, lastRow);\r\n\t else\r\n\t this.$updateRowLengthCache(firstRow, lastRow);\r\n\r\n\t return removedFolds;\r\n\t };\r\n\r\n\t this.$updateRowLengthCache = function(firstRow, lastRow, b) {\r\n\t this.$rowLengthCache[firstRow] = null;\r\n\t this.$rowLengthCache[lastRow] = null;\r\n\t };\r\n\r\n\t this.$updateWrapData = function(firstRow, lastRow) {\r\n\t var lines = this.doc.getAllLines();\r\n\t var tabSize = this.getTabSize();\r\n\t var wrapData = this.$wrapData;\r\n\t var wrapLimit = this.$wrapLimit;\r\n\t var tokens;\r\n\t var foldLine;\r\n\r\n\t var row = firstRow;\r\n\t lastRow = Math.min(lastRow, lines.length - 1);\r\n\t while (row <= lastRow) {\r\n\t foldLine = this.getFoldLine(row, foldLine);\r\n\t if (!foldLine) {\r\n\t tokens = this.$getDisplayTokens(lines[row]);\r\n\t wrapData[row] = this.$computeWrapSplits(tokens, wrapLimit, tabSize);\r\n\t row ++;\r\n\t } else {\r\n\t tokens = [];\r\n\t foldLine.walk(function(placeholder, row, column, lastColumn) {\r\n\t var walkTokens;\r\n\t if (placeholder != null) {\r\n\t walkTokens = this.$getDisplayTokens(\r\n\t placeholder, tokens.length);\r\n\t walkTokens[0] = PLACEHOLDER_START;\r\n\t for (var i = 1; i < walkTokens.length; i++) {\r\n\t walkTokens[i] = PLACEHOLDER_BODY;\r\n\t }\r\n\t } else {\r\n\t walkTokens = this.$getDisplayTokens(\r\n\t lines[row].substring(lastColumn, column),\r\n\t tokens.length);\r\n\t }\r\n\t tokens = tokens.concat(walkTokens);\r\n\t }.bind(this),\r\n\t foldLine.end.row,\r\n\t lines[foldLine.end.row].length + 1\r\n\t );\r\n\r\n\t wrapData[foldLine.start.row] = this.$computeWrapSplits(tokens, wrapLimit, tabSize);\r\n\t row = foldLine.end.row + 1;\r\n\t }\r\n\t }\r\n\t };\r\n\t var CHAR = 1,\r\n\t CHAR_EXT = 2,\r\n\t PLACEHOLDER_START = 3,\r\n\t PLACEHOLDER_BODY = 4,\r\n\t PUNCTUATION = 9,\r\n\t SPACE = 10,\r\n\t TAB = 11,\r\n\t TAB_SPACE = 12;\r\n\r\n\r\n\t this.$computeWrapSplits = function(tokens, wrapLimit, tabSize) {\r\n\t if (tokens.length == 0) {\r\n\t return [];\r\n\t }\r\n\r\n\t var splits = [];\r\n\t var displayLength = tokens.length;\r\n\t var lastSplit = 0, lastDocSplit = 0;\r\n\r\n\t var isCode = this.$wrapAsCode;\r\n\r\n\t var indentedSoftWrap = this.$indentedSoftWrap;\r\n\t var maxIndent = wrapLimit <= Math.max(2 * tabSize, 8)\r\n\t || indentedSoftWrap === false ? 0 : Math.floor(wrapLimit / 2);\r\n\r\n\t function getWrapIndent() {\r\n\t var indentation = 0;\r\n\t if (maxIndent === 0)\r\n\t return indentation;\r\n\t if (indentedSoftWrap) {\r\n\t for (var i = 0; i < tokens.length; i++) {\r\n\t var token = tokens[i];\r\n\t if (token == SPACE)\r\n\t indentation += 1;\r\n\t else if (token == TAB)\r\n\t indentation += tabSize;\r\n\t else if (token == TAB_SPACE)\r\n\t continue;\r\n\t else\r\n\t break;\r\n\t }\r\n\t }\r\n\t if (isCode && indentedSoftWrap !== false)\r\n\t indentation += tabSize;\r\n\t return Math.min(indentation, maxIndent);\r\n\t }\r\n\t function addSplit(screenPos) {\r\n\t var displayed = tokens.slice(lastSplit, screenPos);\r\n\t var len = displayed.length;\r\n\t displayed.join(\"\")\r\n\t .replace(/12/g, function() {\r\n\t len -= 1;\r\n\t })\r\n\t .replace(/2/g, function() {\r\n\t len -= 1;\r\n\t });\r\n\r\n\t if (!splits.length) {\r\n\t indent = getWrapIndent();\r\n\t splits.indent = indent;\r\n\t }\r\n\t lastDocSplit += len;\r\n\t splits.push(lastDocSplit);\r\n\t lastSplit = screenPos;\r\n\t }\r\n\t var indent = 0;\r\n\t while (displayLength - lastSplit > wrapLimit - indent) {\r\n\t var split = lastSplit + wrapLimit - indent;\r\n\t if (tokens[split - 1] >= SPACE && tokens[split] >= SPACE) {\r\n\t addSplit(split);\r\n\t continue;\r\n\t }\r\n\t if (tokens[split] == PLACEHOLDER_START || tokens[split] == PLACEHOLDER_BODY) {\r\n\t for (split; split != lastSplit - 1; split--) {\r\n\t if (tokens[split] == PLACEHOLDER_START) {\r\n\t break;\r\n\t }\r\n\t }\r\n\t if (split > lastSplit) {\r\n\t addSplit(split);\r\n\t continue;\r\n\t }\r\n\t split = lastSplit + wrapLimit;\r\n\t for (split; split < tokens.length; split++) {\r\n\t if (tokens[split] != PLACEHOLDER_BODY) {\r\n\t break;\r\n\t }\r\n\t }\r\n\t if (split == tokens.length) {\r\n\t break; // Breaks the while-loop.\r\n\t }\r\n\t addSplit(split);\r\n\t continue;\r\n\t }\r\n\t var minSplit = Math.max(split - (wrapLimit -(wrapLimit>>2)), lastSplit - 1);\r\n\t while (split > minSplit && tokens[split] < PLACEHOLDER_START) {\r\n\t split --;\r\n\t }\r\n\t if (isCode) {\r\n\t while (split > minSplit && tokens[split] < PLACEHOLDER_START) {\r\n\t split --;\r\n\t }\r\n\t while (split > minSplit && tokens[split] == PUNCTUATION) {\r\n\t split --;\r\n\t }\r\n\t } else {\r\n\t while (split > minSplit && tokens[split] < SPACE) {\r\n\t split --;\r\n\t }\r\n\t }\r\n\t if (split > minSplit) {\r\n\t addSplit(++split);\r\n\t continue;\r\n\t }\r\n\t split = lastSplit + wrapLimit;\r\n\t if (tokens[split] == CHAR_EXT)\r\n\t split--;\r\n\t addSplit(split - indent);\r\n\t }\r\n\t return splits;\r\n\t };\r\n\t this.$getDisplayTokens = function(str, offset) {\r\n\t var arr = [];\r\n\t var tabSize;\r\n\t offset = offset || 0;\r\n\r\n\t for (var i = 0; i < str.length; i++) {\r\n\t var c = str.charCodeAt(i);\r\n\t if (c == 9) {\r\n\t tabSize = this.getScreenTabSize(arr.length + offset);\r\n\t arr.push(TAB);\r\n\t for (var n = 1; n < tabSize; n++) {\r\n\t arr.push(TAB_SPACE);\r\n\t }\r\n\t }\r\n\t else if (c == 32) {\r\n\t arr.push(SPACE);\r\n\t } else if((c > 39 && c < 48) || (c > 57 && c < 64)) {\r\n\t arr.push(PUNCTUATION);\r\n\t }\r\n\t else if (c >= 0x1100 && isFullWidth(c)) {\r\n\t arr.push(CHAR, CHAR_EXT);\r\n\t } else {\r\n\t arr.push(CHAR);\r\n\t }\r\n\t }\r\n\t return arr;\r\n\t };\r\n\t this.$getStringScreenWidth = function(str, maxScreenColumn, screenColumn) {\r\n\t if (maxScreenColumn == 0)\r\n\t return [0, 0];\r\n\t if (maxScreenColumn == null)\r\n\t maxScreenColumn = Infinity;\r\n\t screenColumn = screenColumn || 0;\r\n\r\n\t var c, column;\r\n\t for (column = 0; column < str.length; column++) {\r\n\t c = str.charCodeAt(column);\r\n\t if (c == 9) {\r\n\t screenColumn += this.getScreenTabSize(screenColumn);\r\n\t }\r\n\t else if (c >= 0x1100 && isFullWidth(c)) {\r\n\t screenColumn += 2;\r\n\t } else {\r\n\t screenColumn += 1;\r\n\t }\r\n\t if (screenColumn > maxScreenColumn) {\r\n\t break;\r\n\t }\r\n\t }\r\n\r\n\t return [screenColumn, column];\r\n\t };\r\n\r\n\t this.lineWidgets = null;\r\n\t this.getRowLength = function(row) {\r\n\t if (this.lineWidgets)\r\n\t var h = this.lineWidgets[row] && this.lineWidgets[row].rowCount || 0;\r\n\t else \r\n\t h = 0\r\n\t if (!this.$useWrapMode || !this.$wrapData[row]) {\r\n\t return 1 + h;\r\n\t } else {\r\n\t return this.$wrapData[row].length + 1 + h;\r\n\t }\r\n\t };\r\n\t this.getRowLineCount = function(row) {\r\n\t if (!this.$useWrapMode || !this.$wrapData[row]) {\r\n\t return 1;\r\n\t } else {\r\n\t return this.$wrapData[row].length + 1;\r\n\t }\r\n\t };\r\n\r\n\t this.getRowWrapIndent = function(screenRow) {\r\n\t if (this.$useWrapMode) {\r\n\t var pos = this.screenToDocumentPosition(screenRow, Number.MAX_VALUE);\r\n\t var splits = this.$wrapData[pos.row];\r\n\t return splits.length && splits[0] < pos.column ? splits.indent : 0;\r\n\t } else {\r\n\t return 0;\r\n\t }\r\n\t }\r\n\t this.getScreenLastRowColumn = function(screenRow) {\r\n\t var pos = this.screenToDocumentPosition(screenRow, Number.MAX_VALUE);\r\n\t return this.documentToScreenColumn(pos.row, pos.column);\r\n\t };\r\n\t this.getDocumentLastRowColumn = function(docRow, docColumn) {\r\n\t var screenRow = this.documentToScreenRow(docRow, docColumn);\r\n\t return this.getScreenLastRowColumn(screenRow);\r\n\t };\r\n\t this.getDocumentLastRowColumnPosition = function(docRow, docColumn) {\r\n\t var screenRow = this.documentToScreenRow(docRow, docColumn);\r\n\t return this.screenToDocumentPosition(screenRow, Number.MAX_VALUE / 10);\r\n\t };\r\n\t this.getRowSplitData = function(row) {\r\n\t if (!this.$useWrapMode) {\r\n\t return undefined;\r\n\t } else {\r\n\t return this.$wrapData[row];\r\n\t }\r\n\t };\r\n\t this.getScreenTabSize = function(screenColumn) {\r\n\t return this.$tabSize - screenColumn % this.$tabSize;\r\n\t };\r\n\r\n\r\n\t this.screenToDocumentRow = function(screenRow, screenColumn) {\r\n\t return this.screenToDocumentPosition(screenRow, screenColumn).row;\r\n\t };\r\n\r\n\r\n\t this.screenToDocumentColumn = function(screenRow, screenColumn) {\r\n\t return this.screenToDocumentPosition(screenRow, screenColumn).column;\r\n\t };\r\n\t this.screenToDocumentPosition = function(screenRow, screenColumn) {\r\n\t if (screenRow < 0)\r\n\t return {row: 0, column: 0};\r\n\r\n\t var line;\r\n\t var docRow = 0;\r\n\t var docColumn = 0;\r\n\t var column;\r\n\t var row = 0;\r\n\t var rowLength = 0;\r\n\r\n\t var rowCache = this.$screenRowCache;\r\n\t var i = this.$getRowCacheIndex(rowCache, screenRow);\r\n\t var l = rowCache.length;\r\n\t if (l && i >= 0) {\r\n\t var row = rowCache[i];\r\n\t var docRow = this.$docRowCache[i];\r\n\t var doCache = screenRow > rowCache[l - 1];\r\n\t } else {\r\n\t var doCache = !l;\r\n\t }\r\n\r\n\t var maxRow = this.getLength() - 1;\r\n\t var foldLine = this.getNextFoldLine(docRow);\r\n\t var foldStart = foldLine ? foldLine.start.row : Infinity;\r\n\r\n\t while (row <= screenRow) {\r\n\t rowLength = this.getRowLength(docRow);\r\n\t if (row + rowLength > screenRow || docRow >= maxRow) {\r\n\t break;\r\n\t } else {\r\n\t row += rowLength;\r\n\t docRow++;\r\n\t if (docRow > foldStart) {\r\n\t docRow = foldLine.end.row+1;\r\n\t foldLine = this.getNextFoldLine(docRow, foldLine);\r\n\t foldStart = foldLine ? foldLine.start.row : Infinity;\r\n\t }\r\n\t }\r\n\r\n\t if (doCache) {\r\n\t this.$docRowCache.push(docRow);\r\n\t this.$screenRowCache.push(row);\r\n\t }\r\n\t }\r\n\r\n\t if (foldLine && foldLine.start.row <= docRow) {\r\n\t line = this.getFoldDisplayLine(foldLine);\r\n\t docRow = foldLine.start.row;\r\n\t } else if (row + rowLength <= screenRow || docRow > maxRow) {\r\n\t return {\r\n\t row: maxRow,\r\n\t column: this.getLine(maxRow).length\r\n\t };\r\n\t } else {\r\n\t line = this.getLine(docRow);\r\n\t foldLine = null;\r\n\t }\r\n\t var wrapIndent = 0;\r\n\t if (this.$useWrapMode) {\r\n\t var splits = this.$wrapData[docRow];\r\n\t if (splits) {\r\n\t var splitIndex = Math.floor(screenRow - row);\r\n\t column = splits[splitIndex];\r\n\t if(splitIndex > 0 && splits.length) {\r\n\t wrapIndent = splits.indent;\r\n\t docColumn = splits[splitIndex - 1] || splits[splits.length - 1];\r\n\t line = line.substring(docColumn);\r\n\t }\r\n\t }\r\n\t }\r\n\r\n\t docColumn += this.$getStringScreenWidth(line, screenColumn - wrapIndent)[1];\r\n\t if (this.$useWrapMode && docColumn >= column)\r\n\t docColumn = column - 1;\r\n\r\n\t if (foldLine)\r\n\t return foldLine.idxToPosition(docColumn);\r\n\r\n\t return {row: docRow, column: docColumn};\r\n\t };\r\n\t this.documentToScreenPosition = function(docRow, docColumn) {\r\n\t if (typeof docColumn === \"undefined\")\r\n\t var pos = this.$clipPositionToDocument(docRow.row, docRow.column);\r\n\t else\r\n\t pos = this.$clipPositionToDocument(docRow, docColumn);\r\n\r\n\t docRow = pos.row;\r\n\t docColumn = pos.column;\r\n\r\n\t var screenRow = 0;\r\n\t var foldStartRow = null;\r\n\t var fold = null;\r\n\t fold = this.getFoldAt(docRow, docColumn, 1);\r\n\t if (fold) {\r\n\t docRow = fold.start.row;\r\n\t docColumn = fold.start.column;\r\n\t }\r\n\r\n\t var rowEnd, row = 0;\r\n\r\n\r\n\t var rowCache = this.$docRowCache;\r\n\t var i = this.$getRowCacheIndex(rowCache, docRow);\r\n\t var l = rowCache.length;\r\n\t if (l && i >= 0) {\r\n\t var row = rowCache[i];\r\n\t var screenRow = this.$screenRowCache[i];\r\n\t var doCache = docRow > rowCache[l - 1];\r\n\t } else {\r\n\t var doCache = !l;\r\n\t }\r\n\r\n\t var foldLine = this.getNextFoldLine(row);\r\n\t var foldStart = foldLine ?foldLine.start.row :Infinity;\r\n\r\n\t while (row < docRow) {\r\n\t if (row >= foldStart) {\r\n\t rowEnd = foldLine.end.row + 1;\r\n\t if (rowEnd > docRow)\r\n\t break;\r\n\t foldLine = this.getNextFoldLine(rowEnd, foldLine);\r\n\t foldStart = foldLine ?foldLine.start.row :Infinity;\r\n\t }\r\n\t else {\r\n\t rowEnd = row + 1;\r\n\t }\r\n\r\n\t screenRow += this.getRowLength(row);\r\n\t row = rowEnd;\r\n\r\n\t if (doCache) {\r\n\t this.$docRowCache.push(row);\r\n\t this.$screenRowCache.push(screenRow);\r\n\t }\r\n\t }\r\n\t var textLine = \"\";\r\n\t if (foldLine && row >= foldStart) {\r\n\t textLine = this.getFoldDisplayLine(foldLine, docRow, docColumn);\r\n\t foldStartRow = foldLine.start.row;\r\n\t } else {\r\n\t textLine = this.getLine(docRow).substring(0, docColumn);\r\n\t foldStartRow = docRow;\r\n\t }\r\n\t var wrapIndent = 0;\r\n\t if (this.$useWrapMode) {\r\n\t var wrapRow = this.$wrapData[foldStartRow];\r\n\t if (wrapRow) {\r\n\t var screenRowOffset = 0;\r\n\t while (textLine.length >= wrapRow[screenRowOffset]) {\r\n\t screenRow ++;\r\n\t screenRowOffset++;\r\n\t }\r\n\t textLine = textLine.substring(\r\n\t wrapRow[screenRowOffset - 1] || 0, textLine.length\r\n\t );\r\n\t wrapIndent = screenRowOffset > 0 ? wrapRow.indent : 0;\r\n\t }\r\n\t }\r\n\r\n\t return {\r\n\t row: screenRow,\r\n\t column: wrapIndent + this.$getStringScreenWidth(textLine)[0]\r\n\t };\r\n\t };\r\n\t this.documentToScreenColumn = function(row, docColumn) {\r\n\t return this.documentToScreenPosition(row, docColumn).column;\r\n\t };\r\n\t this.documentToScreenRow = function(docRow, docColumn) {\r\n\t return this.documentToScreenPosition(docRow, docColumn).row;\r\n\t };\r\n\t this.getScreenLength = function() {\r\n\t var screenRows = 0;\r\n\t var fold = null;\r\n\t if (!this.$useWrapMode) {\r\n\t screenRows = this.getLength();\r\n\t var foldData = this.$foldData;\r\n\t for (var i = 0; i < foldData.length; i++) {\r\n\t fold = foldData[i];\r\n\t screenRows -= fold.end.row - fold.start.row;\r\n\t }\r\n\t } else {\r\n\t var lastRow = this.$wrapData.length;\r\n\t var row = 0, i = 0;\r\n\t var fold = this.$foldData[i++];\r\n\t var foldStart = fold ? fold.start.row :Infinity;\r\n\r\n\t while (row < lastRow) {\r\n\t var splits = this.$wrapData[row];\r\n\t screenRows += splits ? splits.length + 1 : 1;\r\n\t row ++;\r\n\t if (row > foldStart) {\r\n\t row = fold.end.row+1;\r\n\t fold = this.$foldData[i++];\r\n\t foldStart = fold ?fold.start.row :Infinity;\r\n\t }\r\n\t }\r\n\t }\r\n\t if (this.lineWidgets)\r\n\t screenRows += this.$getWidgetScreenLength();\r\n\r\n\t return screenRows;\r\n\t };\r\n\t this.$setFontMetrics = function(fm) {\r\n\t if (!this.$enableVarChar) return;\r\n\t this.$getStringScreenWidth = function(str, maxScreenColumn, screenColumn) {\r\n\t if (maxScreenColumn === 0)\r\n\t return [0, 0];\r\n\t if (!maxScreenColumn)\r\n\t maxScreenColumn = Infinity;\r\n\t screenColumn = screenColumn || 0;\r\n\t \r\n\t var c, column;\r\n\t for (column = 0; column < str.length; column++) {\r\n\t c = str.charAt(column);\r\n\t if (c === \"\\t\") {\r\n\t screenColumn += this.getScreenTabSize(screenColumn);\r\n\t } else {\r\n\t screenColumn += fm.getCharacterWidth(c);\r\n\t }\r\n\t if (screenColumn > maxScreenColumn) {\r\n\t break;\r\n\t }\r\n\t }\r\n\t \r\n\t return [screenColumn, column];\r\n\t };\r\n\t };\r\n\t \r\n\t this.destroy = function() {\r\n\t if (this.bgTokenizer) {\r\n\t this.bgTokenizer.setDocument(null);\r\n\t this.bgTokenizer = null;\r\n\t }\r\n\t this.$stopWorker();\r\n\t };\r\n\t function isFullWidth(c) {\r\n\t if (c < 0x1100)\r\n\t return false;\r\n\t return c >= 0x1100 && c <= 0x115F ||\r\n\t c >= 0x11A3 && c <= 0x11A7 ||\r\n\t c >= 0x11FA && c <= 0x11FF ||\r\n\t c >= 0x2329 && c <= 0x232A ||\r\n\t c >= 0x2E80 && c <= 0x2E99 ||\r\n\t c >= 0x2E9B && c <= 0x2EF3 ||\r\n\t c >= 0x2F00 && c <= 0x2FD5 ||\r\n\t c >= 0x2FF0 && c <= 0x2FFB ||\r\n\t c >= 0x3000 && c <= 0x303E ||\r\n\t c >= 0x3041 && c <= 0x3096 ||\r\n\t c >= 0x3099 && c <= 0x30FF ||\r\n\t c >= 0x3105 && c <= 0x312D ||\r\n\t c >= 0x3131 && c <= 0x318E ||\r\n\t c >= 0x3190 && c <= 0x31BA ||\r\n\t c >= 0x31C0 && c <= 0x31E3 ||\r\n\t c >= 0x31F0 && c <= 0x321E ||\r\n\t c >= 0x3220 && c <= 0x3247 ||\r\n\t c >= 0x3250 && c <= 0x32FE ||\r\n\t c >= 0x3300 && c <= 0x4DBF ||\r\n\t c >= 0x4E00 && c <= 0xA48C ||\r\n\t c >= 0xA490 && c <= 0xA4C6 ||\r\n\t c >= 0xA960 && c <= 0xA97C ||\r\n\t c >= 0xAC00 && c <= 0xD7A3 ||\r\n\t c >= 0xD7B0 && c <= 0xD7C6 ||\r\n\t c >= 0xD7CB && c <= 0xD7FB ||\r\n\t c >= 0xF900 && c <= 0xFAFF ||\r\n\t c >= 0xFE10 && c <= 0xFE19 ||\r\n\t c >= 0xFE30 && c <= 0xFE52 ||\r\n\t c >= 0xFE54 && c <= 0xFE66 ||\r\n\t c >= 0xFE68 && c <= 0xFE6B ||\r\n\t c >= 0xFF01 && c <= 0xFF60 ||\r\n\t c >= 0xFFE0 && c <= 0xFFE6;\r\n\t }\r\n\r\n\t}).call(EditSession.prototype);\r\n\r\n\tacequire(\"./edit_session/folding\").Folding.call(EditSession.prototype);\r\n\tacequire(\"./edit_session/bracket_match\").BracketMatch.call(EditSession.prototype);\r\n\r\n\r\n\tconfig.defineOptions(EditSession.prototype, \"session\", {\r\n\t wrap: {\r\n\t set: function(value) {\r\n\t if (!value || value == \"off\")\r\n\t value = false;\r\n\t else if (value == \"free\")\r\n\t value = true;\r\n\t else if (value == \"printMargin\")\r\n\t value = -1;\r\n\t else if (typeof value == \"string\")\r\n\t value = parseInt(value, 10) || false;\r\n\r\n\t if (this.$wrap == value)\r\n\t return;\r\n\t this.$wrap = value;\r\n\t if (!value) {\r\n\t this.setUseWrapMode(false);\r\n\t } else {\r\n\t var col = typeof value == \"number\" ? value : null;\r\n\t this.setWrapLimitRange(col, col);\r\n\t this.setUseWrapMode(true);\r\n\t }\r\n\t },\r\n\t get: function() {\r\n\t if (this.getUseWrapMode()) {\r\n\t if (this.$wrap == -1)\r\n\t return \"printMargin\";\r\n\t if (!this.getWrapLimitRange().min)\r\n\t return \"free\";\r\n\t return this.$wrap;\r\n\t }\r\n\t return \"off\";\r\n\t },\r\n\t handlesSet: true\r\n\t }, \r\n\t wrapMethod: {\r\n\t set: function(val) {\r\n\t val = val == \"auto\"\r\n\t ? this.$mode.type != \"text\"\r\n\t : val != \"text\";\r\n\t if (val != this.$wrapAsCode) {\r\n\t this.$wrapAsCode = val;\r\n\t if (this.$useWrapMode) {\r\n\t this.$modified = true;\r\n\t this.$resetRowCache(0);\r\n\t this.$updateWrapData(0, this.getLength() - 1);\r\n\t }\r\n\t }\r\n\t },\r\n\t initialValue: \"auto\"\r\n\t },\r\n\t indentedSoftWrap: { initialValue: true },\r\n\t firstLineNumber: {\r\n\t set: function() {this._signal(\"changeBreakpoint\");},\r\n\t initialValue: 1\r\n\t },\r\n\t useWorker: {\r\n\t set: function(useWorker) {\r\n\t this.$useWorker = useWorker;\r\n\r\n\t this.$stopWorker();\r\n\t if (useWorker)\r\n\t this.$startWorker();\r\n\t },\r\n\t initialValue: true\r\n\t },\r\n\t useSoftTabs: {initialValue: true},\r\n\t tabSize: {\r\n\t set: function(tabSize) {\r\n\t if (isNaN(tabSize) || this.$tabSize === tabSize) return;\r\n\r\n\t this.$modified = true;\r\n\t this.$rowLengthCache = [];\r\n\t this.$tabSize = tabSize;\r\n\t this._signal(\"changeTabSize\");\r\n\t },\r\n\t initialValue: 4,\r\n\t handlesSet: true\r\n\t },\r\n\t overwrite: {\r\n\t set: function(val) {this._signal(\"changeOverwrite\");},\r\n\t initialValue: false\r\n\t },\r\n\t newLineMode: {\r\n\t set: function(val) {this.doc.setNewLineMode(val)},\r\n\t get: function() {return this.doc.getNewLineMode()},\r\n\t handlesSet: true\r\n\t },\r\n\t mode: {\r\n\t set: function(val) { this.setMode(val) },\r\n\t get: function() { return this.$modeId }\r\n\t }\r\n\t});\r\n\r\n\texports.EditSession = EditSession;\r\n\t});\r\n\r\n\tace.define(\"ace/search\",[\"require\",\"exports\",\"module\",\"ace/lib/lang\",\"ace/lib/oop\",\"ace/range\"], function(acequire, exports, module) {\r\n\t\"use strict\";\r\n\r\n\tvar lang = acequire(\"./lib/lang\");\r\n\tvar oop = acequire(\"./lib/oop\");\r\n\tvar Range = acequire(\"./range\").Range;\r\n\r\n\tvar Search = function() {\r\n\t this.$options = {};\r\n\t};\r\n\r\n\t(function() {\r\n\t this.set = function(options) {\r\n\t oop.mixin(this.$options, options);\r\n\t return this;\r\n\t };\r\n\t this.getOptions = function() {\r\n\t return lang.copyObject(this.$options);\r\n\t };\r\n\t this.setOptions = function(options) {\r\n\t this.$options = options;\r\n\t };\r\n\t this.find = function(session) {\r\n\t var options = this.$options;\r\n\t var iterator = this.$matchIterator(session, options);\r\n\t if (!iterator)\r\n\t return false;\r\n\r\n\t var firstRange = null;\r\n\t iterator.forEach(function(range, row, offset) {\r\n\t if (!range.start) {\r\n\t var column = range.offset + (offset || 0);\r\n\t firstRange = new Range(row, column, row, column + range.length);\r\n\t if (!range.length && options.start && options.start.start\r\n\t && options.skipCurrent != false && firstRange.isEqual(options.start)\r\n\t ) {\r\n\t firstRange = null;\r\n\t return false;\r\n\t }\r\n\t } else\r\n\t firstRange = range;\r\n\t return true;\r\n\t });\r\n\r\n\t return firstRange;\r\n\t };\r\n\t this.findAll = function(session) {\r\n\t var options = this.$options;\r\n\t if (!options.needle)\r\n\t return [];\r\n\t this.$assembleRegExp(options);\r\n\r\n\t var range = options.range;\r\n\t var lines = range\r\n\t ? session.getLines(range.start.row, range.end.row)\r\n\t : session.doc.getAllLines();\r\n\r\n\t var ranges = [];\r\n\t var re = options.re;\r\n\t if (options.$isMultiLine) {\r\n\t var len = re.length;\r\n\t var maxRow = lines.length - len;\r\n\t var prevRange;\r\n\t outer: for (var row = re.offset || 0; row <= maxRow; row++) {\r\n\t for (var j = 0; j < len; j++)\r\n\t if (lines[row + j].search(re[j]) == -1)\r\n\t continue outer;\r\n\t \r\n\t var startLine = lines[row];\r\n\t var line = lines[row + len - 1];\r\n\t var startIndex = startLine.length - startLine.match(re[0])[0].length;\r\n\t var endIndex = line.match(re[len - 1])[0].length;\r\n\t \r\n\t if (prevRange && prevRange.end.row === row &&\r\n\t prevRange.end.column > startIndex\r\n\t ) {\r\n\t continue;\r\n\t }\r\n\t ranges.push(prevRange = new Range(\r\n\t row, startIndex, row + len - 1, endIndex\r\n\t ));\r\n\t if (len > 2)\r\n\t row = row + len - 2;\r\n\t }\r\n\t } else {\r\n\t for (var i = 0; i < lines.length; i++) {\r\n\t var matches = lang.getMatchOffsets(lines[i], re);\r\n\t for (var j = 0; j < matches.length; j++) {\r\n\t var match = matches[j];\r\n\t ranges.push(new Range(i, match.offset, i, match.offset + match.length));\r\n\t }\r\n\t }\r\n\t }\r\n\r\n\t if (range) {\r\n\t var startColumn = range.start.column;\r\n\t var endColumn = range.start.column;\r\n\t var i = 0, j = ranges.length - 1;\r\n\t while (i < j && ranges[i].start.column < startColumn && ranges[i].start.row == range.start.row)\r\n\t i++;\r\n\r\n\t while (i < j && ranges[j].end.column > endColumn && ranges[j].end.row == range.end.row)\r\n\t j--;\r\n\t \r\n\t ranges = ranges.slice(i, j + 1);\r\n\t for (i = 0, j = ranges.length; i < j; i++) {\r\n\t ranges[i].start.row += range.start.row;\r\n\t ranges[i].end.row += range.start.row;\r\n\t }\r\n\t }\r\n\r\n\t return ranges;\r\n\t };\r\n\t this.replace = function(input, replacement) {\r\n\t var options = this.$options;\r\n\r\n\t var re = this.$assembleRegExp(options);\r\n\t if (options.$isMultiLine)\r\n\t return replacement;\r\n\r\n\t if (!re)\r\n\t return;\r\n\r\n\t var match = re.exec(input);\r\n\t if (!match || match[0].length != input.length)\r\n\t return null;\r\n\t \r\n\t replacement = input.replace(re, replacement);\r\n\t if (options.preserveCase) {\r\n\t replacement = replacement.split(\"\");\r\n\t for (var i = Math.min(input.length, input.length); i--; ) {\r\n\t var ch = input[i];\r\n\t if (ch && ch.toLowerCase() != ch)\r\n\t replacement[i] = replacement[i].toUpperCase();\r\n\t else\r\n\t replacement[i] = replacement[i].toLowerCase();\r\n\t }\r\n\t replacement = replacement.join(\"\");\r\n\t }\r\n\t \r\n\t return replacement;\r\n\t };\r\n\r\n\t this.$matchIterator = function(session, options) {\r\n\t var re = this.$assembleRegExp(options);\r\n\t if (!re)\r\n\t return false;\r\n\r\n\t var callback;\r\n\t if (options.$isMultiLine) {\r\n\t var len = re.length;\r\n\t var matchIterator = function(line, row, offset) {\r\n\t var startIndex = line.search(re[0]);\r\n\t if (startIndex == -1)\r\n\t return;\r\n\t for (var i = 1; i < len; i++) {\r\n\t line = session.getLine(row + i);\r\n\t if (line.search(re[i]) == -1)\r\n\t return;\r\n\t }\r\n\r\n\t var endIndex = line.match(re[len - 1])[0].length;\r\n\r\n\t var range = new Range(row, startIndex, row + len - 1, endIndex);\r\n\t if (re.offset == 1) {\r\n\t range.start.row--;\r\n\t range.start.column = Number.MAX_VALUE;\r\n\t } else if (offset)\r\n\t range.start.column += offset;\r\n\r\n\t if (callback(range))\r\n\t return true;\r\n\t };\r\n\t } else if (options.backwards) {\r\n\t var matchIterator = function(line, row, startIndex) {\r\n\t var matches = lang.getMatchOffsets(line, re);\r\n\t for (var i = matches.length-1; i >= 0; i--)\r\n\t if (callback(matches[i], row, startIndex))\r\n\t return true;\r\n\t };\r\n\t } else {\r\n\t var matchIterator = function(line, row, startIndex) {\r\n\t var matches = lang.getMatchOffsets(line, re);\r\n\t for (var i = 0; i < matches.length; i++)\r\n\t if (callback(matches[i], row, startIndex))\r\n\t return true;\r\n\t };\r\n\t }\r\n\t \r\n\t var lineIterator = this.$lineIterator(session, options);\r\n\r\n\t return {\r\n\t forEach: function(_callback) {\r\n\t callback = _callback;\r\n\t lineIterator.forEach(matchIterator);\r\n\t }\r\n\t };\r\n\t };\r\n\r\n\t this.$assembleRegExp = function(options, $disableFakeMultiline) {\r\n\t if (options.needle instanceof RegExp)\r\n\t return options.re = options.needle;\r\n\r\n\t var needle = options.needle;\r\n\r\n\t if (!options.needle)\r\n\t return options.re = false;\r\n\r\n\t if (!options.regExp)\r\n\t needle = lang.escapeRegExp(needle);\r\n\r\n\t if (options.wholeWord)\r\n\t needle = \"\\\\b\" + needle + \"\\\\b\";\r\n\r\n\t var modifier = options.caseSensitive ? \"gm\" : \"gmi\";\r\n\r\n\t options.$isMultiLine = !$disableFakeMultiline && /[\\n\\r]/.test(needle);\r\n\t if (options.$isMultiLine)\r\n\t return options.re = this.$assembleMultilineRegExp(needle, modifier);\r\n\r\n\t try {\r\n\t var re = new RegExp(needle, modifier);\r\n\t } catch(e) {\r\n\t re = false;\r\n\t }\r\n\t return options.re = re;\r\n\t };\r\n\r\n\t this.$assembleMultilineRegExp = function(needle, modifier) {\r\n\t var parts = needle.replace(/\\r\\n|\\r|\\n/g, \"$\\n^\").split(\"\\n\");\r\n\t var re = [];\r\n\t for (var i = 0; i < parts.length; i++) try {\r\n\t re.push(new RegExp(parts[i], modifier));\r\n\t } catch(e) {\r\n\t return false;\r\n\t }\r\n\t if (parts[0] == \"\") {\r\n\t re.shift();\r\n\t re.offset = 1;\r\n\t } else {\r\n\t re.offset = 0;\r\n\t }\r\n\t return re;\r\n\t };\r\n\r\n\t this.$lineIterator = function(session, options) {\r\n\t var backwards = options.backwards == true;\r\n\t var skipCurrent = options.skipCurrent != false;\r\n\r\n\t var range = options.range;\r\n\t var start = options.start;\r\n\t if (!start)\r\n\t start = range ? range[backwards ? \"end\" : \"start\"] : session.selection.getRange();\r\n\t \r\n\t if (start.start)\r\n\t start = start[skipCurrent != backwards ? \"end\" : \"start\"];\r\n\r\n\t var firstRow = range ? range.start.row : 0;\r\n\t var lastRow = range ? range.end.row : session.getLength() - 1;\r\n\r\n\t var forEach = backwards ? function(callback) {\r\n\t var row = start.row;\r\n\r\n\t var line = session.getLine(row).substring(0, start.column);\r\n\t if (callback(line, row))\r\n\t return;\r\n\r\n\t for (row--; row >= firstRow; row--)\r\n\t if (callback(session.getLine(row), row))\r\n\t return;\r\n\r\n\t if (options.wrap == false)\r\n\t return;\r\n\r\n\t for (row = lastRow, firstRow = start.row; row >= firstRow; row--)\r\n\t if (callback(session.getLine(row), row))\r\n\t return;\r\n\t } : function(callback) {\r\n\t var row = start.row;\r\n\r\n\t var line = session.getLine(row).substr(start.column);\r\n\t if (callback(line, row, start.column))\r\n\t return;\r\n\r\n\t for (row = row+1; row <= lastRow; row++)\r\n\t if (callback(session.getLine(row), row))\r\n\t return;\r\n\r\n\t if (options.wrap == false)\r\n\t return;\r\n\r\n\t for (row = firstRow, lastRow = start.row; row <= lastRow; row++)\r\n\t if (callback(session.getLine(row), row))\r\n\t return;\r\n\t };\r\n\t \r\n\t return {forEach: forEach};\r\n\t };\r\n\r\n\t}).call(Search.prototype);\r\n\r\n\texports.Search = Search;\r\n\t});\r\n\r\n\tace.define(\"ace/keyboard/hash_handler\",[\"require\",\"exports\",\"module\",\"ace/lib/keys\",\"ace/lib/useragent\"], function(acequire, exports, module) {\r\n\t\"use strict\";\r\n\r\n\tvar keyUtil = acequire(\"../lib/keys\");\r\n\tvar useragent = acequire(\"../lib/useragent\");\r\n\tvar KEY_MODS = keyUtil.KEY_MODS;\r\n\r\n\tfunction HashHandler(config, platform) {\r\n\t this.platform = platform || (useragent.isMac ? \"mac\" : \"win\");\r\n\t this.commands = {};\r\n\t this.commandKeyBinding = {};\r\n\t this.addCommands(config);\r\n\t this.$singleCommand = true;\r\n\t}\r\n\r\n\tfunction MultiHashHandler(config, platform) {\r\n\t HashHandler.call(this, config, platform);\r\n\t this.$singleCommand = false;\r\n\t}\r\n\r\n\tMultiHashHandler.prototype = HashHandler.prototype;\r\n\r\n\t(function() {\r\n\t \r\n\r\n\t this.addCommand = function(command) {\r\n\t if (this.commands[command.name])\r\n\t this.removeCommand(command);\r\n\r\n\t this.commands[command.name] = command;\r\n\r\n\t if (command.bindKey)\r\n\t this._buildKeyHash(command);\r\n\t };\r\n\r\n\t this.removeCommand = function(command, keepCommand) {\r\n\t var name = command && (typeof command === 'string' ? command : command.name);\r\n\t command = this.commands[name];\r\n\t if (!keepCommand)\r\n\t delete this.commands[name];\r\n\t var ckb = this.commandKeyBinding;\r\n\t for (var keyId in ckb) {\r\n\t var cmdGroup = ckb[keyId];\r\n\t if (cmdGroup == command) {\r\n\t delete ckb[keyId];\r\n\t } else if (Array.isArray(cmdGroup)) {\r\n\t var i = cmdGroup.indexOf(command);\r\n\t if (i != -1) {\r\n\t cmdGroup.splice(i, 1);\r\n\t if (cmdGroup.length == 1)\r\n\t ckb[keyId] = cmdGroup[0];\r\n\t }\r\n\t }\r\n\t }\r\n\t };\r\n\r\n\t this.bindKey = function(key, command, position) {\r\n\t if (typeof key == \"object\" && key) {\r\n\t if (position == undefined)\r\n\t position = key.position;\r\n\t key = key[this.platform];\r\n\t }\r\n\t if (!key)\r\n\t return;\r\n\t if (typeof command == \"function\")\r\n\t return this.addCommand({exec: command, bindKey: key, name: command.name || key});\r\n\t \r\n\t key.split(\"|\").forEach(function(keyPart) {\r\n\t var chain = \"\";\r\n\t if (keyPart.indexOf(\" \") != -1) {\r\n\t var parts = keyPart.split(/\\s+/);\r\n\t keyPart = parts.pop();\r\n\t parts.forEach(function(keyPart) {\r\n\t var binding = this.parseKeys(keyPart);\r\n\t var id = KEY_MODS[binding.hashId] + binding.key;\r\n\t chain += (chain ? \" \" : \"\") + id;\r\n\t this._addCommandToBinding(chain, \"chainKeys\");\r\n\t }, this);\r\n\t chain += \" \";\r\n\t }\r\n\t var binding = this.parseKeys(keyPart);\r\n\t var id = KEY_MODS[binding.hashId] + binding.key;\r\n\t this._addCommandToBinding(chain + id, command, position);\r\n\t }, this);\r\n\t };\r\n\t \r\n\t function getPosition(command) {\r\n\t return typeof command == \"object\" && command.bindKey\r\n\t && command.bindKey.position || 0;\r\n\t }\r\n\t this._addCommandToBinding = function(keyId, command, position) {\r\n\t var ckb = this.commandKeyBinding, i;\r\n\t if (!command) {\r\n\t delete ckb[keyId];\r\n\t } else if (!ckb[keyId] || this.$singleCommand) {\r\n\t ckb[keyId] = command;\r\n\t } else {\r\n\t if (!Array.isArray(ckb[keyId])) {\r\n\t ckb[keyId] = [ckb[keyId]];\r\n\t } else if ((i = ckb[keyId].indexOf(command)) != -1) {\r\n\t ckb[keyId].splice(i, 1);\r\n\t }\r\n\r\n\t if (typeof position != \"number\") {\r\n\t if (position || command.isDefault)\r\n\t position = -100;\r\n\t else\r\n\t position = getPosition(command);\r\n\t }\r\n\t var commands = ckb[keyId];\r\n\t for (i = 0; i < commands.length; i++) {\r\n\t var other = commands[i];\r\n\t var otherPos = getPosition(other);\r\n\t if (otherPos > position)\r\n\t break;\r\n\t }\r\n\t commands.splice(i, 0, command);\r\n\t }\r\n\t };\r\n\r\n\t this.addCommands = function(commands) {\r\n\t commands && Object.keys(commands).forEach(function(name) {\r\n\t var command = commands[name];\r\n\t if (!command)\r\n\t return;\r\n\t \r\n\t if (typeof command === \"string\")\r\n\t return this.bindKey(command, name);\r\n\r\n\t if (typeof command === \"function\")\r\n\t command = { exec: command };\r\n\r\n\t if (typeof command !== \"object\")\r\n\t return;\r\n\r\n\t if (!command.name)\r\n\t command.name = name;\r\n\r\n\t this.addCommand(command);\r\n\t }, this);\r\n\t };\r\n\r\n\t this.removeCommands = function(commands) {\r\n\t Object.keys(commands).forEach(function(name) {\r\n\t this.removeCommand(commands[name]);\r\n\t }, this);\r\n\t };\r\n\r\n\t this.bindKeys = function(keyList) {\r\n\t Object.keys(keyList).forEach(function(key) {\r\n\t this.bindKey(key, keyList[key]);\r\n\t }, this);\r\n\t };\r\n\r\n\t this._buildKeyHash = function(command) {\r\n\t this.bindKey(command.bindKey, command);\r\n\t };\r\n\t this.parseKeys = function(keys) {\r\n\t var parts = keys.toLowerCase().split(/[\\-\\+]([\\-\\+])?/).filter(function(x){return x});\r\n\t var key = parts.pop();\r\n\r\n\t var keyCode = keyUtil[key];\r\n\t if (keyUtil.FUNCTION_KEYS[keyCode])\r\n\t key = keyUtil.FUNCTION_KEYS[keyCode].toLowerCase();\r\n\t else if (!parts.length)\r\n\t return {key: key, hashId: -1};\r\n\t else if (parts.length == 1 && parts[0] == \"shift\")\r\n\t return {key: key.toUpperCase(), hashId: -1};\r\n\r\n\t var hashId = 0;\r\n\t for (var i = parts.length; i--;) {\r\n\t var modifier = keyUtil.KEY_MODS[parts[i]];\r\n\t if (modifier == null) {\r\n\t if (typeof console != \"undefined\")\r\n\t console.error(\"invalid modifier \" + parts[i] + \" in \" + keys);\r\n\t return false;\r\n\t }\r\n\t hashId |= modifier;\r\n\t }\r\n\t return {key: key, hashId: hashId};\r\n\t };\r\n\r\n\t this.findKeyCommand = function findKeyCommand(hashId, keyString) {\r\n\t var key = KEY_MODS[hashId] + keyString;\r\n\t return this.commandKeyBinding[key];\r\n\t };\r\n\r\n\t this.handleKeyboard = function(data, hashId, keyString, keyCode) {\r\n\t if (keyCode < 0) return;\r\n\t var key = KEY_MODS[hashId] + keyString;\r\n\t var command = this.commandKeyBinding[key];\r\n\t if (data.$keyChain) {\r\n\t data.$keyChain += \" \" + key;\r\n\t command = this.commandKeyBinding[data.$keyChain] || command;\r\n\t }\r\n\t \r\n\t if (command) {\r\n\t if (command == \"chainKeys\" || command[command.length - 1] == \"chainKeys\") {\r\n\t data.$keyChain = data.$keyChain || key;\r\n\t return {command: \"null\"};\r\n\t }\r\n\t }\r\n\t \r\n\t if (data.$keyChain) {\r\n\t if ((!hashId || hashId == 4) && keyString.length == 1)\r\n\t data.$keyChain = data.$keyChain.slice(0, -key.length - 1); // wait for input\r\n\t else if (hashId == -1 || keyCode > 0)\r\n\t data.$keyChain = \"\"; // reset keyChain\r\n\t }\r\n\t return {command: command};\r\n\t };\r\n\t \r\n\t this.getStatusText = function(editor, data) {\r\n\t return data.$keyChain || \"\";\r\n\t };\r\n\r\n\t}).call(HashHandler.prototype);\r\n\r\n\texports.HashHandler = HashHandler;\r\n\texports.MultiHashHandler = MultiHashHandler;\r\n\t});\r\n\r\n\tace.define(\"ace/commands/command_manager\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/keyboard/hash_handler\",\"ace/lib/event_emitter\"], function(acequire, exports, module) {\r\n\t\"use strict\";\r\n\r\n\tvar oop = acequire(\"../lib/oop\");\r\n\tvar MultiHashHandler = acequire(\"../keyboard/hash_handler\").MultiHashHandler;\r\n\tvar EventEmitter = acequire(\"../lib/event_emitter\").EventEmitter;\r\n\r\n\tvar CommandManager = function(platform, commands) {\r\n\t MultiHashHandler.call(this, commands, platform);\r\n\t this.byName = this.commands;\r\n\t this.setDefaultHandler(\"exec\", function(e) {\r\n\t return e.command.exec(e.editor, e.args || {});\r\n\t });\r\n\t};\r\n\r\n\toop.inherits(CommandManager, MultiHashHandler);\r\n\r\n\t(function() {\r\n\r\n\t oop.implement(this, EventEmitter);\r\n\r\n\t this.exec = function(command, editor, args) {\r\n\t if (Array.isArray(command)) {\r\n\t for (var i = command.length; i--; ) {\r\n\t if (this.exec(command[i], editor, args)) return true;\r\n\t }\r\n\t return false;\r\n\t }\r\n\t \r\n\t if (typeof command === \"string\")\r\n\t command = this.commands[command];\r\n\r\n\t if (!command)\r\n\t return false;\r\n\r\n\t if (editor && editor.$readOnly && !command.readOnly)\r\n\t return false;\r\n\r\n\t var e = {editor: editor, command: command, args: args};\r\n\t e.returnValue = this._emit(\"exec\", e);\r\n\t this._signal(\"afterExec\", e);\r\n\r\n\t return e.returnValue === false ? false : true;\r\n\t };\r\n\r\n\t this.toggleRecording = function(editor) {\r\n\t if (this.$inReplay)\r\n\t return;\r\n\r\n\t editor && editor._emit(\"changeStatus\");\r\n\t if (this.recording) {\r\n\t this.macro.pop();\r\n\t this.removeEventListener(\"exec\", this.$addCommandToMacro);\r\n\r\n\t if (!this.macro.length)\r\n\t this.macro = this.oldMacro;\r\n\r\n\t return this.recording = false;\r\n\t }\r\n\t if (!this.$addCommandToMacro) {\r\n\t this.$addCommandToMacro = function(e) {\r\n\t this.macro.push([e.command, e.args]);\r\n\t }.bind(this);\r\n\t }\r\n\r\n\t this.oldMacro = this.macro;\r\n\t this.macro = [];\r\n\t this.on(\"exec\", this.$addCommandToMacro);\r\n\t return this.recording = true;\r\n\t };\r\n\r\n\t this.replay = function(editor) {\r\n\t if (this.$inReplay || !this.macro)\r\n\t return;\r\n\r\n\t if (this.recording)\r\n\t return this.toggleRecording(editor);\r\n\r\n\t try {\r\n\t this.$inReplay = true;\r\n\t this.macro.forEach(function(x) {\r\n\t if (typeof x == \"string\")\r\n\t this.exec(x, editor);\r\n\t else\r\n\t this.exec(x[0], editor, x[1]);\r\n\t }, this);\r\n\t } finally {\r\n\t this.$inReplay = false;\r\n\t }\r\n\t };\r\n\r\n\t this.trimMacro = function(m) {\r\n\t return m.map(function(x){\r\n\t if (typeof x[0] != \"string\")\r\n\t x[0] = x[0].name;\r\n\t if (!x[1])\r\n\t x = x[0];\r\n\t return x;\r\n\t });\r\n\t };\r\n\r\n\t}).call(CommandManager.prototype);\r\n\r\n\texports.CommandManager = CommandManager;\r\n\r\n\t});\r\n\r\n\tace.define(\"ace/commands/default_commands\",[\"require\",\"exports\",\"module\",\"ace/lib/lang\",\"ace/config\",\"ace/range\"], function(acequire, exports, module) {\r\n\t\"use strict\";\r\n\r\n\tvar lang = acequire(\"../lib/lang\");\r\n\tvar config = acequire(\"../config\");\r\n\tvar Range = acequire(\"../range\").Range;\r\n\r\n\tfunction bindKey(win, mac) {\r\n\t return {win: win, mac: mac};\r\n\t}\r\n\texports.commands = [{\r\n\t name: \"showSettingsMenu\",\r\n\t bindKey: bindKey(\"Ctrl-,\", \"Command-,\"),\r\n\t exec: function(editor) {\r\n\t config.loadModule(\"ace/ext/settings_menu\", function(module) {\r\n\t module.init(editor);\r\n\t editor.showSettingsMenu();\r\n\t });\r\n\t },\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"goToNextError\",\r\n\t bindKey: bindKey(\"Alt-E\", \"Ctrl-E\"),\r\n\t exec: function(editor) {\r\n\t config.loadModule(\"ace/ext/error_marker\", function(module) {\r\n\t module.showErrorMarker(editor, 1);\r\n\t });\r\n\t },\r\n\t scrollIntoView: \"animate\",\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"goToPreviousError\",\r\n\t bindKey: bindKey(\"Alt-Shift-E\", \"Ctrl-Shift-E\"),\r\n\t exec: function(editor) {\r\n\t config.loadModule(\"ace/ext/error_marker\", function(module) {\r\n\t module.showErrorMarker(editor, -1);\r\n\t });\r\n\t },\r\n\t scrollIntoView: \"animate\",\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"selectall\",\r\n\t bindKey: bindKey(\"Ctrl-A\", \"Command-A\"),\r\n\t exec: function(editor) { editor.selectAll(); },\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"centerselection\",\r\n\t bindKey: bindKey(null, \"Ctrl-L\"),\r\n\t exec: function(editor) { editor.centerSelection(); },\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"gotoline\",\r\n\t bindKey: bindKey(\"Ctrl-L\", \"Command-L\"),\r\n\t exec: function(editor) {\r\n\t var line = parseInt(prompt(\"Enter line number:\"), 10);\r\n\t if (!isNaN(line)) {\r\n\t editor.gotoLine(line);\r\n\t }\r\n\t },\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"fold\",\r\n\t bindKey: bindKey(\"Alt-L|Ctrl-F1\", \"Command-Alt-L|Command-F1\"),\r\n\t exec: function(editor) { editor.session.toggleFold(false); },\r\n\t multiSelectAction: \"forEach\",\r\n\t scrollIntoView: \"center\",\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"unfold\",\r\n\t bindKey: bindKey(\"Alt-Shift-L|Ctrl-Shift-F1\", \"Command-Alt-Shift-L|Command-Shift-F1\"),\r\n\t exec: function(editor) { editor.session.toggleFold(true); },\r\n\t multiSelectAction: \"forEach\",\r\n\t scrollIntoView: \"center\",\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"toggleFoldWidget\",\r\n\t bindKey: bindKey(\"F2\", \"F2\"),\r\n\t exec: function(editor) { editor.session.toggleFoldWidget(); },\r\n\t multiSelectAction: \"forEach\",\r\n\t scrollIntoView: \"center\",\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"toggleParentFoldWidget\",\r\n\t bindKey: bindKey(\"Alt-F2\", \"Alt-F2\"),\r\n\t exec: function(editor) { editor.session.toggleFoldWidget(true); },\r\n\t multiSelectAction: \"forEach\",\r\n\t scrollIntoView: \"center\",\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"foldall\",\r\n\t bindKey: bindKey(null, \"Ctrl-Command-Option-0\"),\r\n\t exec: function(editor) { editor.session.foldAll(); },\r\n\t scrollIntoView: \"center\",\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"foldOther\",\r\n\t bindKey: bindKey(\"Alt-0\", \"Command-Option-0\"),\r\n\t exec: function(editor) { \r\n\t editor.session.foldAll();\r\n\t editor.session.unfold(editor.selection.getAllRanges());\r\n\t },\r\n\t scrollIntoView: \"center\",\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"unfoldall\",\r\n\t bindKey: bindKey(\"Alt-Shift-0\", \"Command-Option-Shift-0\"),\r\n\t exec: function(editor) { editor.session.unfold(); },\r\n\t scrollIntoView: \"center\",\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"findnext\",\r\n\t bindKey: bindKey(\"Ctrl-K\", \"Command-G\"),\r\n\t exec: function(editor) { editor.findNext(); },\r\n\t multiSelectAction: \"forEach\",\r\n\t scrollIntoView: \"center\",\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"findprevious\",\r\n\t bindKey: bindKey(\"Ctrl-Shift-K\", \"Command-Shift-G\"),\r\n\t exec: function(editor) { editor.findPrevious(); },\r\n\t multiSelectAction: \"forEach\",\r\n\t scrollIntoView: \"center\",\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"selectOrFindNext\",\r\n\t bindKey: bindKey(\"Alt-K\", \"Ctrl-G\"),\r\n\t exec: function(editor) {\r\n\t if (editor.selection.isEmpty())\r\n\t editor.selection.selectWord();\r\n\t else\r\n\t editor.findNext(); \r\n\t },\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"selectOrFindPrevious\",\r\n\t bindKey: bindKey(\"Alt-Shift-K\", \"Ctrl-Shift-G\"),\r\n\t exec: function(editor) { \r\n\t if (editor.selection.isEmpty())\r\n\t editor.selection.selectWord();\r\n\t else\r\n\t editor.findPrevious();\r\n\t },\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"find\",\r\n\t bindKey: bindKey(\"Ctrl-F\", \"Command-F\"),\r\n\t exec: function(editor) {\r\n\t config.loadModule(\"ace/ext/searchbox\", function(e) {e.Search(editor)});\r\n\t },\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"overwrite\",\r\n\t bindKey: \"Insert\",\r\n\t exec: function(editor) { editor.toggleOverwrite(); },\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"selecttostart\",\r\n\t bindKey: bindKey(\"Ctrl-Shift-Home\", \"Command-Shift-Up\"),\r\n\t exec: function(editor) { editor.getSelection().selectFileStart(); },\r\n\t multiSelectAction: \"forEach\",\r\n\t readOnly: true,\r\n\t scrollIntoView: \"animate\",\r\n\t aceCommandGroup: \"fileJump\"\r\n\t}, {\r\n\t name: \"gotostart\",\r\n\t bindKey: bindKey(\"Ctrl-Home\", \"Command-Home|Command-Up\"),\r\n\t exec: function(editor) { editor.navigateFileStart(); },\r\n\t multiSelectAction: \"forEach\",\r\n\t readOnly: true,\r\n\t scrollIntoView: \"animate\",\r\n\t aceCommandGroup: \"fileJump\"\r\n\t}, {\r\n\t name: \"selectup\",\r\n\t bindKey: bindKey(\"Shift-Up\", \"Shift-Up\"),\r\n\t exec: function(editor) { editor.getSelection().selectUp(); },\r\n\t multiSelectAction: \"forEach\",\r\n\t scrollIntoView: \"cursor\",\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"golineup\",\r\n\t bindKey: bindKey(\"Up\", \"Up|Ctrl-P\"),\r\n\t exec: function(editor, args) { editor.navigateUp(args.times); },\r\n\t multiSelectAction: \"forEach\",\r\n\t scrollIntoView: \"cursor\",\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"selecttoend\",\r\n\t bindKey: bindKey(\"Ctrl-Shift-End\", \"Command-Shift-Down\"),\r\n\t exec: function(editor) { editor.getSelection().selectFileEnd(); },\r\n\t multiSelectAction: \"forEach\",\r\n\t readOnly: true,\r\n\t scrollIntoView: \"animate\",\r\n\t aceCommandGroup: \"fileJump\"\r\n\t}, {\r\n\t name: \"gotoend\",\r\n\t bindKey: bindKey(\"Ctrl-End\", \"Command-End|Command-Down\"),\r\n\t exec: function(editor) { editor.navigateFileEnd(); },\r\n\t multiSelectAction: \"forEach\",\r\n\t readOnly: true,\r\n\t scrollIntoView: \"animate\",\r\n\t aceCommandGroup: \"fileJump\"\r\n\t}, {\r\n\t name: \"selectdown\",\r\n\t bindKey: bindKey(\"Shift-Down\", \"Shift-Down\"),\r\n\t exec: function(editor) { editor.getSelection().selectDown(); },\r\n\t multiSelectAction: \"forEach\",\r\n\t scrollIntoView: \"cursor\",\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"golinedown\",\r\n\t bindKey: bindKey(\"Down\", \"Down|Ctrl-N\"),\r\n\t exec: function(editor, args) { editor.navigateDown(args.times); },\r\n\t multiSelectAction: \"forEach\",\r\n\t scrollIntoView: \"cursor\",\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"selectwordleft\",\r\n\t bindKey: bindKey(\"Ctrl-Shift-Left\", \"Option-Shift-Left\"),\r\n\t exec: function(editor) { editor.getSelection().selectWordLeft(); },\r\n\t multiSelectAction: \"forEach\",\r\n\t scrollIntoView: \"cursor\",\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"gotowordleft\",\r\n\t bindKey: bindKey(\"Ctrl-Left\", \"Option-Left\"),\r\n\t exec: function(editor) { editor.navigateWordLeft(); },\r\n\t multiSelectAction: \"forEach\",\r\n\t scrollIntoView: \"cursor\",\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"selecttolinestart\",\r\n\t bindKey: bindKey(\"Alt-Shift-Left\", \"Command-Shift-Left\"),\r\n\t exec: function(editor) { editor.getSelection().selectLineStart(); },\r\n\t multiSelectAction: \"forEach\",\r\n\t scrollIntoView: \"cursor\",\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"gotolinestart\",\r\n\t bindKey: bindKey(\"Alt-Left|Home\", \"Command-Left|Home|Ctrl-A\"),\r\n\t exec: function(editor) { editor.navigateLineStart(); },\r\n\t multiSelectAction: \"forEach\",\r\n\t scrollIntoView: \"cursor\",\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"selectleft\",\r\n\t bindKey: bindKey(\"Shift-Left\", \"Shift-Left\"),\r\n\t exec: function(editor) { editor.getSelection().selectLeft(); },\r\n\t multiSelectAction: \"forEach\",\r\n\t scrollIntoView: \"cursor\",\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"gotoleft\",\r\n\t bindKey: bindKey(\"Left\", \"Left|Ctrl-B\"),\r\n\t exec: function(editor, args) { editor.navigateLeft(args.times); },\r\n\t multiSelectAction: \"forEach\",\r\n\t scrollIntoView: \"cursor\",\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"selectwordright\",\r\n\t bindKey: bindKey(\"Ctrl-Shift-Right\", \"Option-Shift-Right\"),\r\n\t exec: function(editor) { editor.getSelection().selectWordRight(); },\r\n\t multiSelectAction: \"forEach\",\r\n\t scrollIntoView: \"cursor\",\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"gotowordright\",\r\n\t bindKey: bindKey(\"Ctrl-Right\", \"Option-Right\"),\r\n\t exec: function(editor) { editor.navigateWordRight(); },\r\n\t multiSelectAction: \"forEach\",\r\n\t scrollIntoView: \"cursor\",\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"selecttolineend\",\r\n\t bindKey: bindKey(\"Alt-Shift-Right\", \"Command-Shift-Right\"),\r\n\t exec: function(editor) { editor.getSelection().selectLineEnd(); },\r\n\t multiSelectAction: \"forEach\",\r\n\t scrollIntoView: \"cursor\",\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"gotolineend\",\r\n\t bindKey: bindKey(\"Alt-Right|End\", \"Command-Right|End|Ctrl-E\"),\r\n\t exec: function(editor) { editor.navigateLineEnd(); },\r\n\t multiSelectAction: \"forEach\",\r\n\t scrollIntoView: \"cursor\",\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"selectright\",\r\n\t bindKey: bindKey(\"Shift-Right\", \"Shift-Right\"),\r\n\t exec: function(editor) { editor.getSelection().selectRight(); },\r\n\t multiSelectAction: \"forEach\",\r\n\t scrollIntoView: \"cursor\",\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"gotoright\",\r\n\t bindKey: bindKey(\"Right\", \"Right|Ctrl-F\"),\r\n\t exec: function(editor, args) { editor.navigateRight(args.times); },\r\n\t multiSelectAction: \"forEach\",\r\n\t scrollIntoView: \"cursor\",\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"selectpagedown\",\r\n\t bindKey: \"Shift-PageDown\",\r\n\t exec: function(editor) { editor.selectPageDown(); },\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"pagedown\",\r\n\t bindKey: bindKey(null, \"Option-PageDown\"),\r\n\t exec: function(editor) { editor.scrollPageDown(); },\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"gotopagedown\",\r\n\t bindKey: bindKey(\"PageDown\", \"PageDown|Ctrl-V\"),\r\n\t exec: function(editor) { editor.gotoPageDown(); },\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"selectpageup\",\r\n\t bindKey: \"Shift-PageUp\",\r\n\t exec: function(editor) { editor.selectPageUp(); },\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"pageup\",\r\n\t bindKey: bindKey(null, \"Option-PageUp\"),\r\n\t exec: function(editor) { editor.scrollPageUp(); },\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"gotopageup\",\r\n\t bindKey: \"PageUp\",\r\n\t exec: function(editor) { editor.gotoPageUp(); },\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"scrollup\",\r\n\t bindKey: bindKey(\"Ctrl-Up\", null),\r\n\t exec: function(e) { e.renderer.scrollBy(0, -2 * e.renderer.layerConfig.lineHeight); },\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"scrolldown\",\r\n\t bindKey: bindKey(\"Ctrl-Down\", null),\r\n\t exec: function(e) { e.renderer.scrollBy(0, 2 * e.renderer.layerConfig.lineHeight); },\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"selectlinestart\",\r\n\t bindKey: \"Shift-Home\",\r\n\t exec: function(editor) { editor.getSelection().selectLineStart(); },\r\n\t multiSelectAction: \"forEach\",\r\n\t scrollIntoView: \"cursor\",\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"selectlineend\",\r\n\t bindKey: \"Shift-End\",\r\n\t exec: function(editor) { editor.getSelection().selectLineEnd(); },\r\n\t multiSelectAction: \"forEach\",\r\n\t scrollIntoView: \"cursor\",\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"togglerecording\",\r\n\t bindKey: bindKey(\"Ctrl-Alt-E\", \"Command-Option-E\"),\r\n\t exec: function(editor) { editor.commands.toggleRecording(editor); },\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"replaymacro\",\r\n\t bindKey: bindKey(\"Ctrl-Shift-E\", \"Command-Shift-E\"),\r\n\t exec: function(editor) { editor.commands.replay(editor); },\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"jumptomatching\",\r\n\t bindKey: bindKey(\"Ctrl-P\", \"Ctrl-P\"),\r\n\t exec: function(editor) { editor.jumpToMatching(); },\r\n\t multiSelectAction: \"forEach\",\r\n\t scrollIntoView: \"animate\",\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"selecttomatching\",\r\n\t bindKey: bindKey(\"Ctrl-Shift-P\", \"Ctrl-Shift-P\"),\r\n\t exec: function(editor) { editor.jumpToMatching(true); },\r\n\t multiSelectAction: \"forEach\",\r\n\t scrollIntoView: \"animate\",\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"expandToMatching\",\r\n\t bindKey: bindKey(\"Ctrl-Shift-M\", \"Ctrl-Shift-M\"),\r\n\t exec: function(editor) { editor.jumpToMatching(true, true); },\r\n\t multiSelectAction: \"forEach\",\r\n\t scrollIntoView: \"animate\",\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"passKeysToBrowser\",\r\n\t bindKey: bindKey(null, null),\r\n\t exec: function() {},\r\n\t passEvent: true,\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"copy\",\r\n\t exec: function(editor) {\r\n\t },\r\n\t readOnly: true\r\n\t},\r\n\t{\r\n\t name: \"cut\",\r\n\t exec: function(editor) {\r\n\t var range = editor.getSelectionRange();\r\n\t editor._emit(\"cut\", range);\r\n\r\n\t if (!editor.selection.isEmpty()) {\r\n\t editor.session.remove(range);\r\n\t editor.clearSelection();\r\n\t }\r\n\t },\r\n\t scrollIntoView: \"cursor\",\r\n\t multiSelectAction: \"forEach\"\r\n\t}, {\r\n\t name: \"paste\",\r\n\t exec: function(editor, args) {\r\n\t editor.$handlePaste(args);\r\n\t },\r\n\t scrollIntoView: \"cursor\"\r\n\t}, {\r\n\t name: \"removeline\",\r\n\t bindKey: bindKey(\"Ctrl-D\", \"Command-D\"),\r\n\t exec: function(editor) { editor.removeLines(); },\r\n\t scrollIntoView: \"cursor\",\r\n\t multiSelectAction: \"forEachLine\"\r\n\t}, {\r\n\t name: \"duplicateSelection\",\r\n\t bindKey: bindKey(\"Ctrl-Shift-D\", \"Command-Shift-D\"),\r\n\t exec: function(editor) { editor.duplicateSelection(); },\r\n\t scrollIntoView: \"cursor\",\r\n\t multiSelectAction: \"forEach\"\r\n\t}, {\r\n\t name: \"sortlines\",\r\n\t bindKey: bindKey(\"Ctrl-Alt-S\", \"Command-Alt-S\"),\r\n\t exec: function(editor) { editor.sortLines(); },\r\n\t scrollIntoView: \"selection\",\r\n\t multiSelectAction: \"forEachLine\"\r\n\t}, {\r\n\t name: \"togglecomment\",\r\n\t bindKey: bindKey(\"Ctrl-/\", \"Command-/\"),\r\n\t exec: function(editor) { editor.toggleCommentLines(); },\r\n\t multiSelectAction: \"forEachLine\",\r\n\t scrollIntoView: \"selectionPart\"\r\n\t}, {\r\n\t name: \"toggleBlockComment\",\r\n\t bindKey: bindKey(\"Ctrl-Shift-/\", \"Command-Shift-/\"),\r\n\t exec: function(editor) { editor.toggleBlockComment(); },\r\n\t multiSelectAction: \"forEach\",\r\n\t scrollIntoView: \"selectionPart\"\r\n\t}, {\r\n\t name: \"modifyNumberUp\",\r\n\t bindKey: bindKey(\"Ctrl-Shift-Up\", \"Alt-Shift-Up\"),\r\n\t exec: function(editor) { editor.modifyNumber(1); },\r\n\t scrollIntoView: \"cursor\",\r\n\t multiSelectAction: \"forEach\"\r\n\t}, {\r\n\t name: \"modifyNumberDown\",\r\n\t bindKey: bindKey(\"Ctrl-Shift-Down\", \"Alt-Shift-Down\"),\r\n\t exec: function(editor) { editor.modifyNumber(-1); },\r\n\t scrollIntoView: \"cursor\",\r\n\t multiSelectAction: \"forEach\"\r\n\t}, {\r\n\t name: \"replace\",\r\n\t bindKey: bindKey(\"Ctrl-H\", \"Command-Option-F\"),\r\n\t exec: function(editor) {\r\n\t config.loadModule(\"ace/ext/searchbox\", function(e) {e.Search(editor, true)});\r\n\t }\r\n\t}, {\r\n\t name: \"undo\",\r\n\t bindKey: bindKey(\"Ctrl-Z\", \"Command-Z\"),\r\n\t exec: function(editor) { editor.undo(); }\r\n\t}, {\r\n\t name: \"redo\",\r\n\t bindKey: bindKey(\"Ctrl-Shift-Z|Ctrl-Y\", \"Command-Shift-Z|Command-Y\"),\r\n\t exec: function(editor) { editor.redo(); }\r\n\t}, {\r\n\t name: \"copylinesup\",\r\n\t bindKey: bindKey(\"Alt-Shift-Up\", \"Command-Option-Up\"),\r\n\t exec: function(editor) { editor.copyLinesUp(); },\r\n\t scrollIntoView: \"cursor\"\r\n\t}, {\r\n\t name: \"movelinesup\",\r\n\t bindKey: bindKey(\"Alt-Up\", \"Option-Up\"),\r\n\t exec: function(editor) { editor.moveLinesUp(); },\r\n\t scrollIntoView: \"cursor\"\r\n\t}, {\r\n\t name: \"copylinesdown\",\r\n\t bindKey: bindKey(\"Alt-Shift-Down\", \"Command-Option-Down\"),\r\n\t exec: function(editor) { editor.copyLinesDown(); },\r\n\t scrollIntoView: \"cursor\"\r\n\t}, {\r\n\t name: \"movelinesdown\",\r\n\t bindKey: bindKey(\"Alt-Down\", \"Option-Down\"),\r\n\t exec: function(editor) { editor.moveLinesDown(); },\r\n\t scrollIntoView: \"cursor\"\r\n\t}, {\r\n\t name: \"del\",\r\n\t bindKey: bindKey(\"Delete\", \"Delete|Ctrl-D|Shift-Delete\"),\r\n\t exec: function(editor) { editor.remove(\"right\"); },\r\n\t multiSelectAction: \"forEach\",\r\n\t scrollIntoView: \"cursor\"\r\n\t}, {\r\n\t name: \"backspace\",\r\n\t bindKey: bindKey(\r\n\t \"Shift-Backspace|Backspace\",\r\n\t \"Ctrl-Backspace|Shift-Backspace|Backspace|Ctrl-H\"\r\n\t ),\r\n\t exec: function(editor) { editor.remove(\"left\"); },\r\n\t multiSelectAction: \"forEach\",\r\n\t scrollIntoView: \"cursor\"\r\n\t}, {\r\n\t name: \"cut_or_delete\",\r\n\t bindKey: bindKey(\"Shift-Delete\", null),\r\n\t exec: function(editor) { \r\n\t if (editor.selection.isEmpty()) {\r\n\t editor.remove(\"left\");\r\n\t } else {\r\n\t return false;\r\n\t }\r\n\t },\r\n\t multiSelectAction: \"forEach\",\r\n\t scrollIntoView: \"cursor\"\r\n\t}, {\r\n\t name: \"removetolinestart\",\r\n\t bindKey: bindKey(\"Alt-Backspace\", \"Command-Backspace\"),\r\n\t exec: function(editor) { editor.removeToLineStart(); },\r\n\t multiSelectAction: \"forEach\",\r\n\t scrollIntoView: \"cursor\"\r\n\t}, {\r\n\t name: \"removetolineend\",\r\n\t bindKey: bindKey(\"Alt-Delete\", \"Ctrl-K\"),\r\n\t exec: function(editor) { editor.removeToLineEnd(); },\r\n\t multiSelectAction: \"forEach\",\r\n\t scrollIntoView: \"cursor\"\r\n\t}, {\r\n\t name: \"removewordleft\",\r\n\t bindKey: bindKey(\"Ctrl-Backspace\", \"Alt-Backspace|Ctrl-Alt-Backspace\"),\r\n\t exec: function(editor) { editor.removeWordLeft(); },\r\n\t multiSelectAction: \"forEach\",\r\n\t scrollIntoView: \"cursor\"\r\n\t}, {\r\n\t name: \"removewordright\",\r\n\t bindKey: bindKey(\"Ctrl-Delete\", \"Alt-Delete\"),\r\n\t exec: function(editor) { editor.removeWordRight(); },\r\n\t multiSelectAction: \"forEach\",\r\n\t scrollIntoView: \"cursor\"\r\n\t}, {\r\n\t name: \"outdent\",\r\n\t bindKey: bindKey(\"Shift-Tab\", \"Shift-Tab\"),\r\n\t exec: function(editor) { editor.blockOutdent(); },\r\n\t multiSelectAction: \"forEach\",\r\n\t scrollIntoView: \"selectionPart\"\r\n\t}, {\r\n\t name: \"indent\",\r\n\t bindKey: bindKey(\"Tab\", \"Tab\"),\r\n\t exec: function(editor) { editor.indent(); },\r\n\t multiSelectAction: \"forEach\",\r\n\t scrollIntoView: \"selectionPart\"\r\n\t}, {\r\n\t name: \"blockoutdent\",\r\n\t bindKey: bindKey(\"Ctrl-[\", \"Ctrl-[\"),\r\n\t exec: function(editor) { editor.blockOutdent(); },\r\n\t multiSelectAction: \"forEachLine\",\r\n\t scrollIntoView: \"selectionPart\"\r\n\t}, {\r\n\t name: \"blockindent\",\r\n\t bindKey: bindKey(\"Ctrl-]\", \"Ctrl-]\"),\r\n\t exec: function(editor) { editor.blockIndent(); },\r\n\t multiSelectAction: \"forEachLine\",\r\n\t scrollIntoView: \"selectionPart\"\r\n\t}, {\r\n\t name: \"insertstring\",\r\n\t exec: function(editor, str) { editor.insert(str); },\r\n\t multiSelectAction: \"forEach\",\r\n\t scrollIntoView: \"cursor\"\r\n\t}, {\r\n\t name: \"inserttext\",\r\n\t exec: function(editor, args) {\r\n\t editor.insert(lang.stringRepeat(args.text || \"\", args.times || 1));\r\n\t },\r\n\t multiSelectAction: \"forEach\",\r\n\t scrollIntoView: \"cursor\"\r\n\t}, {\r\n\t name: \"splitline\",\r\n\t bindKey: bindKey(null, \"Ctrl-O\"),\r\n\t exec: function(editor) { editor.splitLine(); },\r\n\t multiSelectAction: \"forEach\",\r\n\t scrollIntoView: \"cursor\"\r\n\t}, {\r\n\t name: \"transposeletters\",\r\n\t bindKey: bindKey(\"Ctrl-T\", \"Ctrl-T\"),\r\n\t exec: function(editor) { editor.transposeLetters(); },\r\n\t multiSelectAction: function(editor) {editor.transposeSelections(1); },\r\n\t scrollIntoView: \"cursor\"\r\n\t}, {\r\n\t name: \"touppercase\",\r\n\t bindKey: bindKey(\"Ctrl-U\", \"Ctrl-U\"),\r\n\t exec: function(editor) { editor.toUpperCase(); },\r\n\t multiSelectAction: \"forEach\",\r\n\t scrollIntoView: \"cursor\"\r\n\t}, {\r\n\t name: \"tolowercase\",\r\n\t bindKey: bindKey(\"Ctrl-Shift-U\", \"Ctrl-Shift-U\"),\r\n\t exec: function(editor) { editor.toLowerCase(); },\r\n\t multiSelectAction: \"forEach\",\r\n\t scrollIntoView: \"cursor\"\r\n\t}, {\r\n\t name: \"expandtoline\",\r\n\t bindKey: bindKey(\"Ctrl-Shift-L\", \"Command-Shift-L\"),\r\n\t exec: function(editor) {\r\n\t var range = editor.selection.getRange();\r\n\r\n\t range.start.column = range.end.column = 0;\r\n\t range.end.row++;\r\n\t editor.selection.setRange(range, false);\r\n\t },\r\n\t multiSelectAction: \"forEach\",\r\n\t scrollIntoView: \"cursor\",\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"joinlines\",\r\n\t bindKey: bindKey(null, null),\r\n\t exec: function(editor) {\r\n\t var isBackwards = editor.selection.isBackwards();\r\n\t var selectionStart = isBackwards ? editor.selection.getSelectionLead() : editor.selection.getSelectionAnchor();\r\n\t var selectionEnd = isBackwards ? editor.selection.getSelectionAnchor() : editor.selection.getSelectionLead();\r\n\t var firstLineEndCol = editor.session.doc.getLine(selectionStart.row).length;\r\n\t var selectedText = editor.session.doc.getTextRange(editor.selection.getRange());\r\n\t var selectedCount = selectedText.replace(/\\n\\s*/, \" \").length;\r\n\t var insertLine = editor.session.doc.getLine(selectionStart.row);\r\n\r\n\t for (var i = selectionStart.row + 1; i <= selectionEnd.row + 1; i++) {\r\n\t var curLine = lang.stringTrimLeft(lang.stringTrimRight(editor.session.doc.getLine(i)));\r\n\t if (curLine.length !== 0) {\r\n\t curLine = \" \" + curLine;\r\n\t }\r\n\t insertLine += curLine;\r\n\t }\r\n\r\n\t if (selectionEnd.row + 1 < (editor.session.doc.getLength() - 1)) {\r\n\t insertLine += editor.session.doc.getNewLineCharacter();\r\n\t }\r\n\r\n\t editor.clearSelection();\r\n\t editor.session.doc.replace(new Range(selectionStart.row, 0, selectionEnd.row + 2, 0), insertLine);\r\n\r\n\t if (selectedCount > 0) {\r\n\t editor.selection.moveCursorTo(selectionStart.row, selectionStart.column);\r\n\t editor.selection.selectTo(selectionStart.row, selectionStart.column + selectedCount);\r\n\t } else {\r\n\t firstLineEndCol = editor.session.doc.getLine(selectionStart.row).length > firstLineEndCol ? (firstLineEndCol + 1) : firstLineEndCol;\r\n\t editor.selection.moveCursorTo(selectionStart.row, firstLineEndCol);\r\n\t }\r\n\t },\r\n\t multiSelectAction: \"forEach\",\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"invertSelection\",\r\n\t bindKey: bindKey(null, null),\r\n\t exec: function(editor) {\r\n\t var endRow = editor.session.doc.getLength() - 1;\r\n\t var endCol = editor.session.doc.getLine(endRow).length;\r\n\t var ranges = editor.selection.rangeList.ranges;\r\n\t var newRanges = [];\r\n\t if (ranges.length < 1) {\r\n\t ranges = [editor.selection.getRange()];\r\n\t }\r\n\r\n\t for (var i = 0; i < ranges.length; i++) {\r\n\t if (i == (ranges.length - 1)) {\r\n\t if (!(ranges[i].end.row === endRow && ranges[i].end.column === endCol)) {\r\n\t newRanges.push(new Range(ranges[i].end.row, ranges[i].end.column, endRow, endCol));\r\n\t }\r\n\t }\r\n\r\n\t if (i === 0) {\r\n\t if (!(ranges[i].start.row === 0 && ranges[i].start.column === 0)) {\r\n\t newRanges.push(new Range(0, 0, ranges[i].start.row, ranges[i].start.column));\r\n\t }\r\n\t } else {\r\n\t newRanges.push(new Range(ranges[i-1].end.row, ranges[i-1].end.column, ranges[i].start.row, ranges[i].start.column));\r\n\t }\r\n\t }\r\n\r\n\t editor.exitMultiSelectMode();\r\n\t editor.clearSelection();\r\n\r\n\t for(var i = 0; i < newRanges.length; i++) {\r\n\t editor.selection.addRange(newRanges[i], false);\r\n\t }\r\n\t },\r\n\t readOnly: true,\r\n\t scrollIntoView: \"none\"\r\n\t}];\r\n\r\n\t});\r\n\r\n\tace.define(\"ace/editor\",[\"require\",\"exports\",\"module\",\"ace/lib/fixoldbrowsers\",\"ace/lib/oop\",\"ace/lib/dom\",\"ace/lib/lang\",\"ace/lib/useragent\",\"ace/keyboard/textinput\",\"ace/mouse/mouse_handler\",\"ace/mouse/fold_handler\",\"ace/keyboard/keybinding\",\"ace/edit_session\",\"ace/search\",\"ace/range\",\"ace/lib/event_emitter\",\"ace/commands/command_manager\",\"ace/commands/default_commands\",\"ace/config\",\"ace/token_iterator\"], function(acequire, exports, module) {\r\n\t\"use strict\";\r\n\r\n\tacequire(\"./lib/fixoldbrowsers\");\r\n\r\n\tvar oop = acequire(\"./lib/oop\");\r\n\tvar dom = acequire(\"./lib/dom\");\r\n\tvar lang = acequire(\"./lib/lang\");\r\n\tvar useragent = acequire(\"./lib/useragent\");\r\n\tvar TextInput = acequire(\"./keyboard/textinput\").TextInput;\r\n\tvar MouseHandler = acequire(\"./mouse/mouse_handler\").MouseHandler;\r\n\tvar FoldHandler = acequire(\"./mouse/fold_handler\").FoldHandler;\r\n\tvar KeyBinding = acequire(\"./keyboard/keybinding\").KeyBinding;\r\n\tvar EditSession = acequire(\"./edit_session\").EditSession;\r\n\tvar Search = acequire(\"./search\").Search;\r\n\tvar Range = acequire(\"./range\").Range;\r\n\tvar EventEmitter = acequire(\"./lib/event_emitter\").EventEmitter;\r\n\tvar CommandManager = acequire(\"./commands/command_manager\").CommandManager;\r\n\tvar defaultCommands = acequire(\"./commands/default_commands\").commands;\r\n\tvar config = acequire(\"./config\");\r\n\tvar TokenIterator = acequire(\"./token_iterator\").TokenIterator;\r\n\tvar Editor = function(renderer, session) {\r\n\t var container = renderer.getContainerElement();\r\n\t this.container = container;\r\n\t this.renderer = renderer;\r\n\r\n\t this.commands = new CommandManager(useragent.isMac ? \"mac\" : \"win\", defaultCommands);\r\n\t this.textInput = new TextInput(renderer.getTextAreaContainer(), this);\r\n\t this.renderer.textarea = this.textInput.getElement();\r\n\t this.keyBinding = new KeyBinding(this);\r\n\t this.$mouseHandler = new MouseHandler(this);\r\n\t new FoldHandler(this);\r\n\r\n\t this.$blockScrolling = 0;\r\n\t this.$search = new Search().set({\r\n\t wrap: true\r\n\t });\r\n\r\n\t this.$historyTracker = this.$historyTracker.bind(this);\r\n\t this.commands.on(\"exec\", this.$historyTracker);\r\n\r\n\t this.$initOperationListeners();\r\n\t \r\n\t this._$emitInputEvent = lang.delayedCall(function() {\r\n\t this._signal(\"input\", {});\r\n\t if (this.session && this.session.bgTokenizer)\r\n\t this.session.bgTokenizer.scheduleStart();\r\n\t }.bind(this));\r\n\t \r\n\t this.on(\"change\", function(_, _self) {\r\n\t _self._$emitInputEvent.schedule(31);\r\n\t });\r\n\r\n\t this.setSession(session || new EditSession(\"\"));\r\n\t config.resetOptions(this);\r\n\t config._signal(\"editor\", this);\r\n\t};\r\n\r\n\t(function(){\r\n\r\n\t oop.implement(this, EventEmitter);\r\n\r\n\t this.$initOperationListeners = function() {\r\n\t function last(a) {return a[a.length - 1]}\r\n\r\n\t this.selections = [];\r\n\t this.commands.on(\"exec\", this.startOperation.bind(this), true);\r\n\t this.commands.on(\"afterExec\", this.endOperation.bind(this), true);\r\n\r\n\t this.$opResetTimer = lang.delayedCall(this.endOperation.bind(this));\r\n\r\n\t this.on(\"change\", function() {\r\n\t this.curOp || this.startOperation();\r\n\t this.curOp.docChanged = true;\r\n\t }.bind(this), true);\r\n\r\n\t this.on(\"changeSelection\", function() {\r\n\t this.curOp || this.startOperation();\r\n\t this.curOp.selectionChanged = true;\r\n\t }.bind(this), true);\r\n\t };\r\n\r\n\t this.curOp = null;\r\n\t this.prevOp = {};\r\n\t this.startOperation = function(commadEvent) {\r\n\t if (this.curOp) {\r\n\t if (!commadEvent || this.curOp.command)\r\n\t return;\r\n\t this.prevOp = this.curOp;\r\n\t }\r\n\t if (!commadEvent) {\r\n\t this.previousCommand = null;\r\n\t commadEvent = {};\r\n\t }\r\n\r\n\t this.$opResetTimer.schedule();\r\n\t this.curOp = {\r\n\t command: commadEvent.command || {},\r\n\t args: commadEvent.args,\r\n\t scrollTop: this.renderer.scrollTop\r\n\t };\r\n\t if (this.curOp.command.name && this.curOp.command.scrollIntoView !== undefined)\r\n\t this.$blockScrolling++;\r\n\t };\r\n\r\n\t this.endOperation = function(e) {\r\n\t if (this.curOp) {\r\n\t if (e && e.returnValue === false)\r\n\t return this.curOp = null;\r\n\t this._signal(\"beforeEndOperation\");\r\n\t var command = this.curOp.command;\r\n\t if (command.name && this.$blockScrolling > 0)\r\n\t this.$blockScrolling--;\r\n\t var scrollIntoView = command && command.scrollIntoView;\r\n\t if (scrollIntoView) {\r\n\t switch (scrollIntoView) {\r\n\t case \"center-animate\":\r\n\t scrollIntoView = \"animate\";\r\n\t case \"center\":\r\n\t this.renderer.scrollCursorIntoView(null, 0.5);\r\n\t break;\r\n\t case \"animate\":\r\n\t case \"cursor\":\r\n\t this.renderer.scrollCursorIntoView();\r\n\t break;\r\n\t case \"selectionPart\":\r\n\t var range = this.selection.getRange();\r\n\t var config = this.renderer.layerConfig;\r\n\t if (range.start.row >= config.lastRow || range.end.row <= config.firstRow) {\r\n\t this.renderer.scrollSelectionIntoView(this.selection.anchor, this.selection.lead);\r\n\t }\r\n\t break;\r\n\t default:\r\n\t break;\r\n\t }\r\n\t if (scrollIntoView == \"animate\")\r\n\t this.renderer.animateScrolling(this.curOp.scrollTop);\r\n\t }\r\n\t \r\n\t this.prevOp = this.curOp;\r\n\t this.curOp = null;\r\n\t }\r\n\t };\r\n\t this.$mergeableCommands = [\"backspace\", \"del\", \"insertstring\"];\r\n\t this.$historyTracker = function(e) {\r\n\t if (!this.$mergeUndoDeltas)\r\n\t return;\r\n\r\n\t var prev = this.prevOp;\r\n\t var mergeableCommands = this.$mergeableCommands;\r\n\t var shouldMerge = prev.command && (e.command.name == prev.command.name);\r\n\t if (e.command.name == \"insertstring\") {\r\n\t var text = e.args;\r\n\t if (this.mergeNextCommand === undefined)\r\n\t this.mergeNextCommand = true;\r\n\r\n\t shouldMerge = shouldMerge\r\n\t && this.mergeNextCommand // previous command allows to coalesce with\r\n\t && (!/\\s/.test(text) || /\\s/.test(prev.args)); // previous insertion was of same type\r\n\r\n\t this.mergeNextCommand = true;\r\n\t } else {\r\n\t shouldMerge = shouldMerge\r\n\t && mergeableCommands.indexOf(e.command.name) !== -1; // the command is mergeable\r\n\t }\r\n\r\n\t if (\r\n\t this.$mergeUndoDeltas != \"always\"\r\n\t && Date.now() - this.sequenceStartTime > 2000\r\n\t ) {\r\n\t shouldMerge = false; // the sequence is too long\r\n\t }\r\n\r\n\t if (shouldMerge)\r\n\t this.session.mergeUndoDeltas = true;\r\n\t else if (mergeableCommands.indexOf(e.command.name) !== -1)\r\n\t this.sequenceStartTime = Date.now();\r\n\t };\r\n\t this.setKeyboardHandler = function(keyboardHandler, cb) {\r\n\t if (keyboardHandler && typeof keyboardHandler === \"string\") {\r\n\t this.$keybindingId = keyboardHandler;\r\n\t var _self = this;\r\n\t config.loadModule([\"keybinding\", keyboardHandler], function(module) {\r\n\t if (_self.$keybindingId == keyboardHandler)\r\n\t _self.keyBinding.setKeyboardHandler(module && module.handler);\r\n\t cb && cb();\r\n\t });\r\n\t } else {\r\n\t this.$keybindingId = null;\r\n\t this.keyBinding.setKeyboardHandler(keyboardHandler);\r\n\t cb && cb();\r\n\t }\r\n\t };\r\n\t this.getKeyboardHandler = function() {\r\n\t return this.keyBinding.getKeyboardHandler();\r\n\t };\r\n\t this.setSession = function(session) {\r\n\t if (this.session == session)\r\n\t return;\r\n\t if (this.curOp) this.endOperation();\r\n\t this.curOp = {};\r\n\r\n\t var oldSession = this.session;\r\n\t if (oldSession) {\r\n\t this.session.off(\"change\", this.$onDocumentChange);\r\n\t this.session.off(\"changeMode\", this.$onChangeMode);\r\n\t this.session.off(\"tokenizerUpdate\", this.$onTokenizerUpdate);\r\n\t this.session.off(\"changeTabSize\", this.$onChangeTabSize);\r\n\t this.session.off(\"changeWrapLimit\", this.$onChangeWrapLimit);\r\n\t this.session.off(\"changeWrapMode\", this.$onChangeWrapMode);\r\n\t this.session.off(\"changeFold\", this.$onChangeFold);\r\n\t this.session.off(\"changeFrontMarker\", this.$onChangeFrontMarker);\r\n\t this.session.off(\"changeBackMarker\", this.$onChangeBackMarker);\r\n\t this.session.off(\"changeBreakpoint\", this.$onChangeBreakpoint);\r\n\t this.session.off(\"changeAnnotation\", this.$onChangeAnnotation);\r\n\t this.session.off(\"changeOverwrite\", this.$onCursorChange);\r\n\t this.session.off(\"changeScrollTop\", this.$onScrollTopChange);\r\n\t this.session.off(\"changeScrollLeft\", this.$onScrollLeftChange);\r\n\r\n\t var selection = this.session.getSelection();\r\n\t selection.off(\"changeCursor\", this.$onCursorChange);\r\n\t selection.off(\"changeSelection\", this.$onSelectionChange);\r\n\t }\r\n\r\n\t this.session = session;\r\n\t if (session) {\r\n\t this.$onDocumentChange = this.onDocumentChange.bind(this);\r\n\t session.on(\"change\", this.$onDocumentChange);\r\n\t this.renderer.setSession(session);\r\n\t \r\n\t this.$onChangeMode = this.onChangeMode.bind(this);\r\n\t session.on(\"changeMode\", this.$onChangeMode);\r\n\t \r\n\t this.$onTokenizerUpdate = this.onTokenizerUpdate.bind(this);\r\n\t session.on(\"tokenizerUpdate\", this.$onTokenizerUpdate);\r\n\t \r\n\t this.$onChangeTabSize = this.renderer.onChangeTabSize.bind(this.renderer);\r\n\t session.on(\"changeTabSize\", this.$onChangeTabSize);\r\n\t \r\n\t this.$onChangeWrapLimit = this.onChangeWrapLimit.bind(this);\r\n\t session.on(\"changeWrapLimit\", this.$onChangeWrapLimit);\r\n\t \r\n\t this.$onChangeWrapMode = this.onChangeWrapMode.bind(this);\r\n\t session.on(\"changeWrapMode\", this.$onChangeWrapMode);\r\n\t \r\n\t this.$onChangeFold = this.onChangeFold.bind(this);\r\n\t session.on(\"changeFold\", this.$onChangeFold);\r\n\t \r\n\t this.$onChangeFrontMarker = this.onChangeFrontMarker.bind(this);\r\n\t this.session.on(\"changeFrontMarker\", this.$onChangeFrontMarker);\r\n\t \r\n\t this.$onChangeBackMarker = this.onChangeBackMarker.bind(this);\r\n\t this.session.on(\"changeBackMarker\", this.$onChangeBackMarker);\r\n\t \r\n\t this.$onChangeBreakpoint = this.onChangeBreakpoint.bind(this);\r\n\t this.session.on(\"changeBreakpoint\", this.$onChangeBreakpoint);\r\n\t \r\n\t this.$onChangeAnnotation = this.onChangeAnnotation.bind(this);\r\n\t this.session.on(\"changeAnnotation\", this.$onChangeAnnotation);\r\n\t \r\n\t this.$onCursorChange = this.onCursorChange.bind(this);\r\n\t this.session.on(\"changeOverwrite\", this.$onCursorChange);\r\n\t \r\n\t this.$onScrollTopChange = this.onScrollTopChange.bind(this);\r\n\t this.session.on(\"changeScrollTop\", this.$onScrollTopChange);\r\n\t \r\n\t this.$onScrollLeftChange = this.onScrollLeftChange.bind(this);\r\n\t this.session.on(\"changeScrollLeft\", this.$onScrollLeftChange);\r\n\t \r\n\t this.selection = session.getSelection();\r\n\t this.selection.on(\"changeCursor\", this.$onCursorChange);\r\n\t \r\n\t this.$onSelectionChange = this.onSelectionChange.bind(this);\r\n\t this.selection.on(\"changeSelection\", this.$onSelectionChange);\r\n\t \r\n\t this.onChangeMode();\r\n\t \r\n\t this.$blockScrolling += 1;\r\n\t this.onCursorChange();\r\n\t this.$blockScrolling -= 1;\r\n\t \r\n\t this.onScrollTopChange();\r\n\t this.onScrollLeftChange();\r\n\t this.onSelectionChange();\r\n\t this.onChangeFrontMarker();\r\n\t this.onChangeBackMarker();\r\n\t this.onChangeBreakpoint();\r\n\t this.onChangeAnnotation();\r\n\t this.session.getUseWrapMode() && this.renderer.adjustWrapLimit();\r\n\t this.renderer.updateFull();\r\n\t } else {\r\n\t this.selection = null;\r\n\t this.renderer.setSession(session);\r\n\t }\r\n\r\n\t this._signal(\"changeSession\", {\r\n\t session: session,\r\n\t oldSession: oldSession\r\n\t });\r\n\t \r\n\t this.curOp = null;\r\n\t \r\n\t oldSession && oldSession._signal(\"changeEditor\", {oldEditor: this});\r\n\t session && session._signal(\"changeEditor\", {editor: this});\r\n\t };\r\n\t this.getSession = function() {\r\n\t return this.session;\r\n\t };\r\n\t this.setValue = function(val, cursorPos) {\r\n\t this.session.doc.setValue(val);\r\n\r\n\t if (!cursorPos)\r\n\t this.selectAll();\r\n\t else if (cursorPos == 1)\r\n\t this.navigateFileEnd();\r\n\t else if (cursorPos == -1)\r\n\t this.navigateFileStart();\r\n\r\n\t return val;\r\n\t };\r\n\t this.getValue = function() {\r\n\t return this.session.getValue();\r\n\t };\r\n\t this.getSelection = function() {\r\n\t return this.selection;\r\n\t };\r\n\t this.resize = function(force) {\r\n\t this.renderer.onResize(force);\r\n\t };\r\n\t this.setTheme = function(theme, cb) {\r\n\t this.renderer.setTheme(theme, cb);\r\n\t };\r\n\t this.getTheme = function() {\r\n\t return this.renderer.getTheme();\r\n\t };\r\n\t this.setStyle = function(style) {\r\n\t this.renderer.setStyle(style);\r\n\t };\r\n\t this.unsetStyle = function(style) {\r\n\t this.renderer.unsetStyle(style);\r\n\t };\r\n\t this.getFontSize = function () {\r\n\t return this.getOption(\"fontSize\") ||\r\n\t dom.computedStyle(this.container, \"fontSize\");\r\n\t };\r\n\t this.setFontSize = function(size) {\r\n\t this.setOption(\"fontSize\", size);\r\n\t };\r\n\r\n\t this.$highlightBrackets = function() {\r\n\t if (this.session.$bracketHighlight) {\r\n\t this.session.removeMarker(this.session.$bracketHighlight);\r\n\t this.session.$bracketHighlight = null;\r\n\t }\r\n\r\n\t if (this.$highlightPending) {\r\n\t return;\r\n\t }\r\n\t var self = this;\r\n\t this.$highlightPending = true;\r\n\t setTimeout(function() {\r\n\t self.$highlightPending = false;\r\n\t var session = self.session;\r\n\t if (!session || !session.bgTokenizer) return;\r\n\t var pos = session.findMatchingBracket(self.getCursorPosition());\r\n\t if (pos) {\r\n\t var range = new Range(pos.row, pos.column, pos.row, pos.column + 1);\r\n\t } else if (session.$mode.getMatching) {\r\n\t var range = session.$mode.getMatching(self.session);\r\n\t }\r\n\t if (range)\r\n\t session.$bracketHighlight = session.addMarker(range, \"ace_bracket\", \"text\");\r\n\t }, 50);\r\n\t };\r\n\t this.$highlightTags = function() {\r\n\t if (this.$highlightTagPending)\r\n\t return;\r\n\t var self = this;\r\n\t this.$highlightTagPending = true;\r\n\t setTimeout(function() {\r\n\t self.$highlightTagPending = false;\r\n\t \r\n\t var session = self.session;\r\n\t if (!session || !session.bgTokenizer) return;\r\n\t \r\n\t var pos = self.getCursorPosition();\r\n\t var iterator = new TokenIterator(self.session, pos.row, pos.column);\r\n\t var token = iterator.getCurrentToken();\r\n\t \r\n\t if (!token || !/\\b(?:tag-open|tag-name)/.test(token.type)) {\r\n\t session.removeMarker(session.$tagHighlight);\r\n\t session.$tagHighlight = null;\r\n\t return;\r\n\t }\r\n\t \r\n\t if (token.type.indexOf(\"tag-open\") != -1) {\r\n\t token = iterator.stepForward();\r\n\t if (!token)\r\n\t return;\r\n\t }\r\n\t \r\n\t var tag = token.value;\r\n\t var depth = 0;\r\n\t var prevToken = iterator.stepBackward();\r\n\t \r\n\t if (prevToken.value == '<'){\r\n\t do {\r\n\t prevToken = token;\r\n\t token = iterator.stepForward();\r\n\t \r\n\t if (token && token.value === tag && token.type.indexOf('tag-name') !== -1) {\r\n\t if (prevToken.value === '<'){\r\n\t depth++;\r\n\t } else if (prevToken.value === '= 0);\r\n\t } else {\r\n\t do {\r\n\t token = prevToken;\r\n\t prevToken = iterator.stepBackward();\r\n\t \r\n\t if (token && token.value === tag && token.type.indexOf('tag-name') !== -1) {\r\n\t if (prevToken.value === '<') {\r\n\t depth++;\r\n\t } else if (prevToken.value === ' 1))\r\n\t highlight = false;\r\n\t }\r\n\r\n\t if (session.$highlightLineMarker && !highlight) {\r\n\t session.removeMarker(session.$highlightLineMarker.id);\r\n\t session.$highlightLineMarker = null;\r\n\t } else if (!session.$highlightLineMarker && highlight) {\r\n\t var range = new Range(highlight.row, highlight.column, highlight.row, Infinity);\r\n\t range.id = session.addMarker(range, \"ace_active-line\", \"screenLine\");\r\n\t session.$highlightLineMarker = range;\r\n\t } else if (highlight) {\r\n\t session.$highlightLineMarker.start.row = highlight.row;\r\n\t session.$highlightLineMarker.end.row = highlight.row;\r\n\t session.$highlightLineMarker.start.column = highlight.column;\r\n\t session._signal(\"changeBackMarker\");\r\n\t }\r\n\t };\r\n\r\n\t this.onSelectionChange = function(e) {\r\n\t var session = this.session;\r\n\r\n\t if (session.$selectionMarker) {\r\n\t session.removeMarker(session.$selectionMarker);\r\n\t }\r\n\t session.$selectionMarker = null;\r\n\r\n\t if (!this.selection.isEmpty()) {\r\n\t var range = this.selection.getRange();\r\n\t var style = this.getSelectionStyle();\r\n\t session.$selectionMarker = session.addMarker(range, \"ace_selection\", style);\r\n\t } else {\r\n\t this.$updateHighlightActiveLine();\r\n\t }\r\n\r\n\t var re = this.$highlightSelectedWord && this.$getSelectionHighLightRegexp();\r\n\t this.session.highlight(re);\r\n\r\n\t this._signal(\"changeSelection\");\r\n\t };\r\n\r\n\t this.$getSelectionHighLightRegexp = function() {\r\n\t var session = this.session;\r\n\r\n\t var selection = this.getSelectionRange();\r\n\t if (selection.isEmpty() || selection.isMultiLine())\r\n\t return;\r\n\r\n\t var startOuter = selection.start.column - 1;\r\n\t var endOuter = selection.end.column + 1;\r\n\t var line = session.getLine(selection.start.row);\r\n\t var lineCols = line.length;\r\n\t var needle = line.substring(Math.max(startOuter, 0),\r\n\t Math.min(endOuter, lineCols));\r\n\t if ((startOuter >= 0 && /^[\\w\\d]/.test(needle)) ||\r\n\t (endOuter <= lineCols && /[\\w\\d]$/.test(needle)))\r\n\t return;\r\n\r\n\t needle = line.substring(selection.start.column, selection.end.column);\r\n\t if (!/^[\\w\\d]+$/.test(needle))\r\n\t return;\r\n\r\n\t var re = this.$search.$assembleRegExp({\r\n\t wholeWord: true,\r\n\t caseSensitive: true,\r\n\t needle: needle\r\n\t });\r\n\r\n\t return re;\r\n\t };\r\n\r\n\r\n\t this.onChangeFrontMarker = function() {\r\n\t this.renderer.updateFrontMarkers();\r\n\t };\r\n\r\n\t this.onChangeBackMarker = function() {\r\n\t this.renderer.updateBackMarkers();\r\n\t };\r\n\r\n\r\n\t this.onChangeBreakpoint = function() {\r\n\t this.renderer.updateBreakpoints();\r\n\t };\r\n\r\n\t this.onChangeAnnotation = function() {\r\n\t this.renderer.setAnnotations(this.session.getAnnotations());\r\n\t };\r\n\r\n\r\n\t this.onChangeMode = function(e) {\r\n\t this.renderer.updateText();\r\n\t this._emit(\"changeMode\", e);\r\n\t };\r\n\r\n\r\n\t this.onChangeWrapLimit = function() {\r\n\t this.renderer.updateFull();\r\n\t };\r\n\r\n\t this.onChangeWrapMode = function() {\r\n\t this.renderer.onResize(true);\r\n\t };\r\n\r\n\r\n\t this.onChangeFold = function() {\r\n\t this.$updateHighlightActiveLine();\r\n\t this.renderer.updateFull();\r\n\t };\r\n\t this.getSelectedText = function() {\r\n\t return this.session.getTextRange(this.getSelectionRange());\r\n\t };\r\n\t this.getCopyText = function() {\r\n\t var text = this.getSelectedText();\r\n\t this._signal(\"copy\", text);\r\n\t return text;\r\n\t };\r\n\t this.onCopy = function() {\r\n\t this.commands.exec(\"copy\", this);\r\n\t };\r\n\t this.onCut = function() {\r\n\t this.commands.exec(\"cut\", this);\r\n\t };\r\n\t this.onPaste = function(text, event) {\r\n\t var e = {text: text, event: event};\r\n\t this.commands.exec(\"paste\", this, e);\r\n\t };\r\n\t \r\n\t this.$handlePaste = function(e) {\r\n\t if (typeof e == \"string\") \r\n\t e = {text: e};\r\n\t this._signal(\"paste\", e);\r\n\t var text = e.text;\r\n\t if (!this.inMultiSelectMode || this.inVirtualSelectionMode) {\r\n\t this.insert(text);\r\n\t } else {\r\n\t var lines = text.split(/\\r\\n|\\r|\\n/);\r\n\t var ranges = this.selection.rangeList.ranges;\r\n\t \r\n\t if (lines.length > ranges.length || lines.length < 2 || !lines[1])\r\n\t return this.commands.exec(\"insertstring\", this, text);\r\n\t \r\n\t for (var i = ranges.length; i--;) {\r\n\t var range = ranges[i];\r\n\t if (!range.isEmpty())\r\n\t this.session.remove(range);\r\n\t \r\n\t this.session.insert(range.start, lines[i]);\r\n\t }\r\n\t }\r\n\t };\r\n\r\n\t this.execCommand = function(command, args) {\r\n\t return this.commands.exec(command, this, args);\r\n\t };\r\n\t this.insert = function(text, pasted) {\r\n\t var session = this.session;\r\n\t var mode = session.getMode();\r\n\t var cursor = this.getCursorPosition();\r\n\r\n\t if (this.getBehavioursEnabled() && !pasted) {\r\n\t var transform = mode.transformAction(session.getState(cursor.row), 'insertion', this, session, text);\r\n\t if (transform) {\r\n\t if (text !== transform.text) {\r\n\t this.session.mergeUndoDeltas = false;\r\n\t this.$mergeNextCommand = false;\r\n\t }\r\n\t text = transform.text;\r\n\r\n\t }\r\n\t }\r\n\t \r\n\t if (text == \"\\t\")\r\n\t text = this.session.getTabString();\r\n\t if (!this.selection.isEmpty()) {\r\n\t var range = this.getSelectionRange();\r\n\t cursor = this.session.remove(range);\r\n\t this.clearSelection();\r\n\t }\r\n\t else if (this.session.getOverwrite()) {\r\n\t var range = new Range.fromPoints(cursor, cursor);\r\n\t range.end.column += text.length;\r\n\t this.session.remove(range);\r\n\t }\r\n\r\n\t if (text == \"\\n\" || text == \"\\r\\n\") {\r\n\t var line = session.getLine(cursor.row);\r\n\t if (cursor.column > line.search(/\\S|$/)) {\r\n\t var d = line.substr(cursor.column).search(/\\S|$/);\r\n\t session.doc.removeInLine(cursor.row, cursor.column, cursor.column + d);\r\n\t }\r\n\t }\r\n\t this.clearSelection();\r\n\r\n\t var start = cursor.column;\r\n\t var lineState = session.getState(cursor.row);\r\n\t var line = session.getLine(cursor.row);\r\n\t var shouldOutdent = mode.checkOutdent(lineState, line, text);\r\n\t var end = session.insert(cursor, text);\r\n\r\n\t if (transform && transform.selection) {\r\n\t if (transform.selection.length == 2) { // Transform relative to the current column\r\n\t this.selection.setSelectionRange(\r\n\t new Range(cursor.row, start + transform.selection[0],\r\n\t cursor.row, start + transform.selection[1]));\r\n\t } else { // Transform relative to the current row.\r\n\t this.selection.setSelectionRange(\r\n\t new Range(cursor.row + transform.selection[0],\r\n\t transform.selection[1],\r\n\t cursor.row + transform.selection[2],\r\n\t transform.selection[3]));\r\n\t }\r\n\t }\r\n\r\n\t if (session.getDocument().isNewLine(text)) {\r\n\t var lineIndent = mode.getNextLineIndent(lineState, line.slice(0, cursor.column), session.getTabString());\r\n\r\n\t session.insert({row: cursor.row+1, column: 0}, lineIndent);\r\n\t }\r\n\t if (shouldOutdent)\r\n\t mode.autoOutdent(lineState, session, cursor.row);\r\n\t };\r\n\r\n\t this.onTextInput = function(text) {\r\n\t this.keyBinding.onTextInput(text);\r\n\t };\r\n\r\n\t this.onCommandKey = function(e, hashId, keyCode) {\r\n\t this.keyBinding.onCommandKey(e, hashId, keyCode);\r\n\t };\r\n\t this.setOverwrite = function(overwrite) {\r\n\t this.session.setOverwrite(overwrite);\r\n\t };\r\n\t this.getOverwrite = function() {\r\n\t return this.session.getOverwrite();\r\n\t };\r\n\t this.toggleOverwrite = function() {\r\n\t this.session.toggleOverwrite();\r\n\t };\r\n\t this.setScrollSpeed = function(speed) {\r\n\t this.setOption(\"scrollSpeed\", speed);\r\n\t };\r\n\t this.getScrollSpeed = function() {\r\n\t return this.getOption(\"scrollSpeed\");\r\n\t };\r\n\t this.setDragDelay = function(dragDelay) {\r\n\t this.setOption(\"dragDelay\", dragDelay);\r\n\t };\r\n\t this.getDragDelay = function() {\r\n\t return this.getOption(\"dragDelay\");\r\n\t };\r\n\t this.setSelectionStyle = function(val) {\r\n\t this.setOption(\"selectionStyle\", val);\r\n\t };\r\n\t this.getSelectionStyle = function() {\r\n\t return this.getOption(\"selectionStyle\");\r\n\t };\r\n\t this.setHighlightActiveLine = function(shouldHighlight) {\r\n\t this.setOption(\"highlightActiveLine\", shouldHighlight);\r\n\t };\r\n\t this.getHighlightActiveLine = function() {\r\n\t return this.getOption(\"highlightActiveLine\");\r\n\t };\r\n\t this.setHighlightGutterLine = function(shouldHighlight) {\r\n\t this.setOption(\"highlightGutterLine\", shouldHighlight);\r\n\t };\r\n\r\n\t this.getHighlightGutterLine = function() {\r\n\t return this.getOption(\"highlightGutterLine\");\r\n\t };\r\n\t this.setHighlightSelectedWord = function(shouldHighlight) {\r\n\t this.setOption(\"highlightSelectedWord\", shouldHighlight);\r\n\t };\r\n\t this.getHighlightSelectedWord = function() {\r\n\t return this.$highlightSelectedWord;\r\n\t };\r\n\r\n\t this.setAnimatedScroll = function(shouldAnimate){\r\n\t this.renderer.setAnimatedScroll(shouldAnimate);\r\n\t };\r\n\r\n\t this.getAnimatedScroll = function(){\r\n\t return this.renderer.getAnimatedScroll();\r\n\t };\r\n\t this.setShowInvisibles = function(showInvisibles) {\r\n\t this.renderer.setShowInvisibles(showInvisibles);\r\n\t };\r\n\t this.getShowInvisibles = function() {\r\n\t return this.renderer.getShowInvisibles();\r\n\t };\r\n\r\n\t this.setDisplayIndentGuides = function(display) {\r\n\t this.renderer.setDisplayIndentGuides(display);\r\n\t };\r\n\r\n\t this.getDisplayIndentGuides = function() {\r\n\t return this.renderer.getDisplayIndentGuides();\r\n\t };\r\n\t this.setShowPrintMargin = function(showPrintMargin) {\r\n\t this.renderer.setShowPrintMargin(showPrintMargin);\r\n\t };\r\n\t this.getShowPrintMargin = function() {\r\n\t return this.renderer.getShowPrintMargin();\r\n\t };\r\n\t this.setPrintMarginColumn = function(showPrintMargin) {\r\n\t this.renderer.setPrintMarginColumn(showPrintMargin);\r\n\t };\r\n\t this.getPrintMarginColumn = function() {\r\n\t return this.renderer.getPrintMarginColumn();\r\n\t };\r\n\t this.setReadOnly = function(readOnly) {\r\n\t this.setOption(\"readOnly\", readOnly);\r\n\t };\r\n\t this.getReadOnly = function() {\r\n\t return this.getOption(\"readOnly\");\r\n\t };\r\n\t this.setBehavioursEnabled = function (enabled) {\r\n\t this.setOption(\"behavioursEnabled\", enabled);\r\n\t };\r\n\t this.getBehavioursEnabled = function () {\r\n\t return this.getOption(\"behavioursEnabled\");\r\n\t };\r\n\t this.setWrapBehavioursEnabled = function (enabled) {\r\n\t this.setOption(\"wrapBehavioursEnabled\", enabled);\r\n\t };\r\n\t this.getWrapBehavioursEnabled = function () {\r\n\t return this.getOption(\"wrapBehavioursEnabled\");\r\n\t };\r\n\t this.setShowFoldWidgets = function(show) {\r\n\t this.setOption(\"showFoldWidgets\", show);\r\n\r\n\t };\r\n\t this.getShowFoldWidgets = function() {\r\n\t return this.getOption(\"showFoldWidgets\");\r\n\t };\r\n\r\n\t this.setFadeFoldWidgets = function(fade) {\r\n\t this.setOption(\"fadeFoldWidgets\", fade);\r\n\t };\r\n\r\n\t this.getFadeFoldWidgets = function() {\r\n\t return this.getOption(\"fadeFoldWidgets\");\r\n\t };\r\n\t this.remove = function(dir) {\r\n\t if (this.selection.isEmpty()){\r\n\t if (dir == \"left\")\r\n\t this.selection.selectLeft();\r\n\t else\r\n\t this.selection.selectRight();\r\n\t }\r\n\r\n\t var range = this.getSelectionRange();\r\n\t if (this.getBehavioursEnabled()) {\r\n\t var session = this.session;\r\n\t var state = session.getState(range.start.row);\r\n\t var new_range = session.getMode().transformAction(state, 'deletion', this, session, range);\r\n\r\n\t if (range.end.column === 0) {\r\n\t var text = session.getTextRange(range);\r\n\t if (text[text.length - 1] == \"\\n\") {\r\n\t var line = session.getLine(range.end.row);\r\n\t if (/^\\s+$/.test(line)) {\r\n\t range.end.column = line.length;\r\n\t }\r\n\t }\r\n\t }\r\n\t if (new_range)\r\n\t range = new_range;\r\n\t }\r\n\r\n\t this.session.remove(range);\r\n\t this.clearSelection();\r\n\t };\r\n\t this.removeWordRight = function() {\r\n\t if (this.selection.isEmpty())\r\n\t this.selection.selectWordRight();\r\n\r\n\t this.session.remove(this.getSelectionRange());\r\n\t this.clearSelection();\r\n\t };\r\n\t this.removeWordLeft = function() {\r\n\t if (this.selection.isEmpty())\r\n\t this.selection.selectWordLeft();\r\n\r\n\t this.session.remove(this.getSelectionRange());\r\n\t this.clearSelection();\r\n\t };\r\n\t this.removeToLineStart = function() {\r\n\t if (this.selection.isEmpty())\r\n\t this.selection.selectLineStart();\r\n\r\n\t this.session.remove(this.getSelectionRange());\r\n\t this.clearSelection();\r\n\t };\r\n\t this.removeToLineEnd = function() {\r\n\t if (this.selection.isEmpty())\r\n\t this.selection.selectLineEnd();\r\n\r\n\t var range = this.getSelectionRange();\r\n\t if (range.start.column == range.end.column && range.start.row == range.end.row) {\r\n\t range.end.column = 0;\r\n\t range.end.row++;\r\n\t }\r\n\r\n\t this.session.remove(range);\r\n\t this.clearSelection();\r\n\t };\r\n\t this.splitLine = function() {\r\n\t if (!this.selection.isEmpty()) {\r\n\t this.session.remove(this.getSelectionRange());\r\n\t this.clearSelection();\r\n\t }\r\n\r\n\t var cursor = this.getCursorPosition();\r\n\t this.insert(\"\\n\");\r\n\t this.moveCursorToPosition(cursor);\r\n\t };\r\n\t this.transposeLetters = function() {\r\n\t if (!this.selection.isEmpty()) {\r\n\t return;\r\n\t }\r\n\r\n\t var cursor = this.getCursorPosition();\r\n\t var column = cursor.column;\r\n\t if (column === 0)\r\n\t return;\r\n\r\n\t var line = this.session.getLine(cursor.row);\r\n\t var swap, range;\r\n\t if (column < line.length) {\r\n\t swap = line.charAt(column) + line.charAt(column-1);\r\n\t range = new Range(cursor.row, column-1, cursor.row, column+1);\r\n\t }\r\n\t else {\r\n\t swap = line.charAt(column-1) + line.charAt(column-2);\r\n\t range = new Range(cursor.row, column-2, cursor.row, column);\r\n\t }\r\n\t this.session.replace(range, swap);\r\n\t };\r\n\t this.toLowerCase = function() {\r\n\t var originalRange = this.getSelectionRange();\r\n\t if (this.selection.isEmpty()) {\r\n\t this.selection.selectWord();\r\n\t }\r\n\r\n\t var range = this.getSelectionRange();\r\n\t var text = this.session.getTextRange(range);\r\n\t this.session.replace(range, text.toLowerCase());\r\n\t this.selection.setSelectionRange(originalRange);\r\n\t };\r\n\t this.toUpperCase = function() {\r\n\t var originalRange = this.getSelectionRange();\r\n\t if (this.selection.isEmpty()) {\r\n\t this.selection.selectWord();\r\n\t }\r\n\r\n\t var range = this.getSelectionRange();\r\n\t var text = this.session.getTextRange(range);\r\n\t this.session.replace(range, text.toUpperCase());\r\n\t this.selection.setSelectionRange(originalRange);\r\n\t };\r\n\t this.indent = function() {\r\n\t var session = this.session;\r\n\t var range = this.getSelectionRange();\r\n\r\n\t if (range.start.row < range.end.row) {\r\n\t var rows = this.$getSelectedRows();\r\n\t session.indentRows(rows.first, rows.last, \"\\t\");\r\n\t return;\r\n\t } else if (range.start.column < range.end.column) {\r\n\t var text = session.getTextRange(range);\r\n\t if (!/^\\s+$/.test(text)) {\r\n\t var rows = this.$getSelectedRows();\r\n\t session.indentRows(rows.first, rows.last, \"\\t\");\r\n\t return;\r\n\t }\r\n\t }\r\n\t \r\n\t var line = session.getLine(range.start.row);\r\n\t var position = range.start;\r\n\t var size = session.getTabSize();\r\n\t var column = session.documentToScreenColumn(position.row, position.column);\r\n\r\n\t if (this.session.getUseSoftTabs()) {\r\n\t var count = (size - column % size);\r\n\t var indentString = lang.stringRepeat(\" \", count);\r\n\t } else {\r\n\t var count = column % size;\r\n\t while (line[range.start.column] == \" \" && count) {\r\n\t range.start.column--;\r\n\t count--;\r\n\t }\r\n\t this.selection.setSelectionRange(range);\r\n\t indentString = \"\\t\";\r\n\t }\r\n\t return this.insert(indentString);\r\n\t };\r\n\t this.blockIndent = function() {\r\n\t var rows = this.$getSelectedRows();\r\n\t this.session.indentRows(rows.first, rows.last, \"\\t\");\r\n\t };\r\n\t this.blockOutdent = function() {\r\n\t var selection = this.session.getSelection();\r\n\t this.session.outdentRows(selection.getRange());\r\n\t };\r\n\t this.sortLines = function() {\r\n\t var rows = this.$getSelectedRows();\r\n\t var session = this.session;\r\n\r\n\t var lines = [];\r\n\t for (i = rows.first; i <= rows.last; i++)\r\n\t lines.push(session.getLine(i));\r\n\r\n\t lines.sort(function(a, b) {\r\n\t if (a.toLowerCase() < b.toLowerCase()) return -1;\r\n\t if (a.toLowerCase() > b.toLowerCase()) return 1;\r\n\t return 0;\r\n\t });\r\n\r\n\t var deleteRange = new Range(0, 0, 0, 0);\r\n\t for (var i = rows.first; i <= rows.last; i++) {\r\n\t var line = session.getLine(i);\r\n\t deleteRange.start.row = i;\r\n\t deleteRange.end.row = i;\r\n\t deleteRange.end.column = line.length;\r\n\t session.replace(deleteRange, lines[i-rows.first]);\r\n\t }\r\n\t };\r\n\t this.toggleCommentLines = function() {\r\n\t var state = this.session.getState(this.getCursorPosition().row);\r\n\t var rows = this.$getSelectedRows();\r\n\t this.session.getMode().toggleCommentLines(state, this.session, rows.first, rows.last);\r\n\t };\r\n\r\n\t this.toggleBlockComment = function() {\r\n\t var cursor = this.getCursorPosition();\r\n\t var state = this.session.getState(cursor.row);\r\n\t var range = this.getSelectionRange();\r\n\t this.session.getMode().toggleBlockComment(state, this.session, range, cursor);\r\n\t };\r\n\t this.getNumberAt = function(row, column) {\r\n\t var _numberRx = /[\\-]?[0-9]+(?:\\.[0-9]+)?/g;\r\n\t _numberRx.lastIndex = 0;\r\n\r\n\t var s = this.session.getLine(row);\r\n\t while (_numberRx.lastIndex < column) {\r\n\t var m = _numberRx.exec(s);\r\n\t if(m.index <= column && m.index+m[0].length >= column){\r\n\t var number = {\r\n\t value: m[0],\r\n\t start: m.index,\r\n\t end: m.index+m[0].length\r\n\t };\r\n\t return number;\r\n\t }\r\n\t }\r\n\t return null;\r\n\t };\r\n\t this.modifyNumber = function(amount) {\r\n\t var row = this.selection.getCursor().row;\r\n\t var column = this.selection.getCursor().column;\r\n\t var charRange = new Range(row, column-1, row, column);\r\n\r\n\t var c = this.session.getTextRange(charRange);\r\n\t if (!isNaN(parseFloat(c)) && isFinite(c)) {\r\n\t var nr = this.getNumberAt(row, column);\r\n\t if (nr) {\r\n\t var fp = nr.value.indexOf(\".\") >= 0 ? nr.start + nr.value.indexOf(\".\") + 1 : nr.end;\r\n\t var decimals = nr.start + nr.value.length - fp;\r\n\r\n\t var t = parseFloat(nr.value);\r\n\t t *= Math.pow(10, decimals);\r\n\r\n\r\n\t if(fp !== nr.end && column < fp){\r\n\t amount *= Math.pow(10, nr.end - column - 1);\r\n\t } else {\r\n\t amount *= Math.pow(10, nr.end - column);\r\n\t }\r\n\r\n\t t += amount;\r\n\t t /= Math.pow(10, decimals);\r\n\t var nnr = t.toFixed(decimals);\r\n\t var replaceRange = new Range(row, nr.start, row, nr.end);\r\n\t this.session.replace(replaceRange, nnr);\r\n\t this.moveCursorTo(row, Math.max(nr.start +1, column + nnr.length - nr.value.length));\r\n\r\n\t }\r\n\t }\r\n\t };\r\n\t this.removeLines = function() {\r\n\t var rows = this.$getSelectedRows();\r\n\t this.session.removeFullLines(rows.first, rows.last);\r\n\t this.clearSelection();\r\n\t };\r\n\r\n\t this.duplicateSelection = function() {\r\n\t var sel = this.selection;\r\n\t var doc = this.session;\r\n\t var range = sel.getRange();\r\n\t var reverse = sel.isBackwards();\r\n\t if (range.isEmpty()) {\r\n\t var row = range.start.row;\r\n\t doc.duplicateLines(row, row);\r\n\t } else {\r\n\t var point = reverse ? range.start : range.end;\r\n\t var endPoint = doc.insert(point, doc.getTextRange(range), false);\r\n\t range.start = point;\r\n\t range.end = endPoint;\r\n\r\n\t sel.setSelectionRange(range, reverse);\r\n\t }\r\n\t };\r\n\t this.moveLinesDown = function() {\r\n\t this.$moveLines(1, false);\r\n\t };\r\n\t this.moveLinesUp = function() {\r\n\t this.$moveLines(-1, false);\r\n\t };\r\n\t this.moveText = function(range, toPosition, copy) {\r\n\t return this.session.moveText(range, toPosition, copy);\r\n\t };\r\n\t this.copyLinesUp = function() {\r\n\t this.$moveLines(-1, true);\r\n\t };\r\n\t this.copyLinesDown = function() {\r\n\t this.$moveLines(1, true);\r\n\t };\r\n\t this.$moveLines = function(dir, copy) {\r\n\t var rows, moved;\r\n\t var selection = this.selection;\r\n\t if (!selection.inMultiSelectMode || this.inVirtualSelectionMode) {\r\n\t var range = selection.toOrientedRange();\r\n\t rows = this.$getSelectedRows(range);\r\n\t moved = this.session.$moveLines(rows.first, rows.last, copy ? 0 : dir);\r\n\t if (copy && dir == -1) moved = 0;\r\n\t range.moveBy(moved, 0);\r\n\t selection.fromOrientedRange(range);\r\n\t } else {\r\n\t var ranges = selection.rangeList.ranges;\r\n\t selection.rangeList.detach(this.session);\r\n\t this.inVirtualSelectionMode = true;\r\n\t \r\n\t var diff = 0;\r\n\t var totalDiff = 0;\r\n\t var l = ranges.length;\r\n\t for (var i = 0; i < l; i++) {\r\n\t var rangeIndex = i;\r\n\t ranges[i].moveBy(diff, 0);\r\n\t rows = this.$getSelectedRows(ranges[i]);\r\n\t var first = rows.first;\r\n\t var last = rows.last;\r\n\t while (++i < l) {\r\n\t if (totalDiff) ranges[i].moveBy(totalDiff, 0);\r\n\t var subRows = this.$getSelectedRows(ranges[i]);\r\n\t if (copy && subRows.first != last)\r\n\t break;\r\n\t else if (!copy && subRows.first > last + 1)\r\n\t break;\r\n\t last = subRows.last;\r\n\t }\r\n\t i--;\r\n\t diff = this.session.$moveLines(first, last, copy ? 0 : dir);\r\n\t if (copy && dir == -1) rangeIndex = i + 1;\r\n\t while (rangeIndex <= i) {\r\n\t ranges[rangeIndex].moveBy(diff, 0);\r\n\t rangeIndex++;\r\n\t }\r\n\t if (!copy) diff = 0;\r\n\t totalDiff += diff;\r\n\t }\r\n\t \r\n\t selection.fromOrientedRange(selection.ranges[0]);\r\n\t selection.rangeList.attach(this.session);\r\n\t this.inVirtualSelectionMode = false;\r\n\t }\r\n\t };\r\n\t this.$getSelectedRows = function(range) {\r\n\t range = (range || this.getSelectionRange()).collapseRows();\r\n\r\n\t return {\r\n\t first: this.session.getRowFoldStart(range.start.row),\r\n\t last: this.session.getRowFoldEnd(range.end.row)\r\n\t };\r\n\t };\r\n\r\n\t this.onCompositionStart = function(text) {\r\n\t this.renderer.showComposition(this.getCursorPosition());\r\n\t };\r\n\r\n\t this.onCompositionUpdate = function(text) {\r\n\t this.renderer.setCompositionText(text);\r\n\t };\r\n\r\n\t this.onCompositionEnd = function() {\r\n\t this.renderer.hideComposition();\r\n\t };\r\n\t this.getFirstVisibleRow = function() {\r\n\t return this.renderer.getFirstVisibleRow();\r\n\t };\r\n\t this.getLastVisibleRow = function() {\r\n\t return this.renderer.getLastVisibleRow();\r\n\t };\r\n\t this.isRowVisible = function(row) {\r\n\t return (row >= this.getFirstVisibleRow() && row <= this.getLastVisibleRow());\r\n\t };\r\n\t this.isRowFullyVisible = function(row) {\r\n\t return (row >= this.renderer.getFirstFullyVisibleRow() && row <= this.renderer.getLastFullyVisibleRow());\r\n\t };\r\n\t this.$getVisibleRowCount = function() {\r\n\t return this.renderer.getScrollBottomRow() - this.renderer.getScrollTopRow() + 1;\r\n\t };\r\n\r\n\t this.$moveByPage = function(dir, select) {\r\n\t var renderer = this.renderer;\r\n\t var config = this.renderer.layerConfig;\r\n\t var rows = dir * Math.floor(config.height / config.lineHeight);\r\n\r\n\t this.$blockScrolling++;\r\n\t if (select === true) {\r\n\t this.selection.$moveSelection(function(){\r\n\t this.moveCursorBy(rows, 0);\r\n\t });\r\n\t } else if (select === false) {\r\n\t this.selection.moveCursorBy(rows, 0);\r\n\t this.selection.clearSelection();\r\n\t }\r\n\t this.$blockScrolling--;\r\n\r\n\t var scrollTop = renderer.scrollTop;\r\n\r\n\t renderer.scrollBy(0, rows * config.lineHeight);\r\n\t if (select != null)\r\n\t renderer.scrollCursorIntoView(null, 0.5);\r\n\r\n\t renderer.animateScrolling(scrollTop);\r\n\t };\r\n\t this.selectPageDown = function() {\r\n\t this.$moveByPage(1, true);\r\n\t };\r\n\t this.selectPageUp = function() {\r\n\t this.$moveByPage(-1, true);\r\n\t };\r\n\t this.gotoPageDown = function() {\r\n\t this.$moveByPage(1, false);\r\n\t };\r\n\t this.gotoPageUp = function() {\r\n\t this.$moveByPage(-1, false);\r\n\t };\r\n\t this.scrollPageDown = function() {\r\n\t this.$moveByPage(1);\r\n\t };\r\n\t this.scrollPageUp = function() {\r\n\t this.$moveByPage(-1);\r\n\t };\r\n\t this.scrollToRow = function(row) {\r\n\t this.renderer.scrollToRow(row);\r\n\t };\r\n\t this.scrollToLine = function(line, center, animate, callback) {\r\n\t this.renderer.scrollToLine(line, center, animate, callback);\r\n\t };\r\n\t this.centerSelection = function() {\r\n\t var range = this.getSelectionRange();\r\n\t var pos = {\r\n\t row: Math.floor(range.start.row + (range.end.row - range.start.row) / 2),\r\n\t column: Math.floor(range.start.column + (range.end.column - range.start.column) / 2)\r\n\t };\r\n\t this.renderer.alignCursor(pos, 0.5);\r\n\t };\r\n\t this.getCursorPosition = function() {\r\n\t return this.selection.getCursor();\r\n\t };\r\n\t this.getCursorPositionScreen = function() {\r\n\t return this.session.documentToScreenPosition(this.getCursorPosition());\r\n\t };\r\n\t this.getSelectionRange = function() {\r\n\t return this.selection.getRange();\r\n\t };\r\n\t this.selectAll = function() {\r\n\t this.$blockScrolling += 1;\r\n\t this.selection.selectAll();\r\n\t this.$blockScrolling -= 1;\r\n\t };\r\n\t this.clearSelection = function() {\r\n\t this.selection.clearSelection();\r\n\t };\r\n\t this.moveCursorTo = function(row, column) {\r\n\t this.selection.moveCursorTo(row, column);\r\n\t };\r\n\t this.moveCursorToPosition = function(pos) {\r\n\t this.selection.moveCursorToPosition(pos);\r\n\t };\r\n\t this.jumpToMatching = function(select, expand) {\r\n\t var cursor = this.getCursorPosition();\r\n\t var iterator = new TokenIterator(this.session, cursor.row, cursor.column);\r\n\t var prevToken = iterator.getCurrentToken();\r\n\t var token = prevToken || iterator.stepForward();\r\n\r\n\t if (!token) return;\r\n\t var matchType;\r\n\t var found = false;\r\n\t var depth = {};\r\n\t var i = cursor.column - token.start;\r\n\t var bracketType;\r\n\t var brackets = {\r\n\t \")\": \"(\",\r\n\t \"(\": \"(\",\r\n\t \"]\": \"[\",\r\n\t \"[\": \"[\",\r\n\t \"{\": \"{\",\r\n\t \"}\": \"{\"\r\n\t };\r\n\t \r\n\t do {\r\n\t if (token.value.match(/[{}()\\[\\]]/g)) {\r\n\t for (; i < token.value.length && !found; i++) {\r\n\t if (!brackets[token.value[i]]) {\r\n\t continue;\r\n\t }\r\n\r\n\t bracketType = brackets[token.value[i]] + '.' + token.type.replace(\"rparen\", \"lparen\");\r\n\r\n\t if (isNaN(depth[bracketType])) {\r\n\t depth[bracketType] = 0;\r\n\t }\r\n\r\n\t switch (token.value[i]) {\r\n\t case '(':\r\n\t case '[':\r\n\t case '{':\r\n\t depth[bracketType]++;\r\n\t break;\r\n\t case ')':\r\n\t case ']':\r\n\t case '}':\r\n\t depth[bracketType]--;\r\n\r\n\t if (depth[bracketType] === -1) {\r\n\t matchType = 'bracket';\r\n\t found = true;\r\n\t }\r\n\t break;\r\n\t }\r\n\t }\r\n\t }\r\n\t else if (token && token.type.indexOf('tag-name') !== -1) {\r\n\t if (isNaN(depth[token.value])) {\r\n\t depth[token.value] = 0;\r\n\t }\r\n\t \r\n\t if (prevToken.value === '<') {\r\n\t depth[token.value]++;\r\n\t }\r\n\t else if (prevToken.value === '= 0; --i) {\r\n\t if(this.$tryReplace(ranges[i], replacement)) {\r\n\t replaced++;\r\n\t }\r\n\t }\r\n\r\n\t this.selection.setSelectionRange(selection);\r\n\t this.$blockScrolling -= 1;\r\n\r\n\t return replaced;\r\n\t };\r\n\r\n\t this.$tryReplace = function(range, replacement) {\r\n\t var input = this.session.getTextRange(range);\r\n\t replacement = this.$search.replace(input, replacement);\r\n\t if (replacement !== null) {\r\n\t range.end = this.session.replace(range, replacement);\r\n\t return range;\r\n\t } else {\r\n\t return null;\r\n\t }\r\n\t };\r\n\t this.getLastSearchOptions = function() {\r\n\t return this.$search.getOptions();\r\n\t };\r\n\t this.find = function(needle, options, animate) {\r\n\t if (!options)\r\n\t options = {};\r\n\r\n\t if (typeof needle == \"string\" || needle instanceof RegExp)\r\n\t options.needle = needle;\r\n\t else if (typeof needle == \"object\")\r\n\t oop.mixin(options, needle);\r\n\r\n\t var range = this.selection.getRange();\r\n\t if (options.needle == null) {\r\n\t needle = this.session.getTextRange(range)\r\n\t || this.$search.$options.needle;\r\n\t if (!needle) {\r\n\t range = this.session.getWordRange(range.start.row, range.start.column);\r\n\t needle = this.session.getTextRange(range);\r\n\t }\r\n\t this.$search.set({needle: needle});\r\n\t }\r\n\r\n\t this.$search.set(options);\r\n\t if (!options.start)\r\n\t this.$search.set({start: range});\r\n\r\n\t var newRange = this.$search.find(this.session);\r\n\t if (options.preventScroll)\r\n\t return newRange;\r\n\t if (newRange) {\r\n\t this.revealRange(newRange, animate);\r\n\t return newRange;\r\n\t }\r\n\t if (options.backwards)\r\n\t range.start = range.end;\r\n\t else\r\n\t range.end = range.start;\r\n\t this.selection.setRange(range);\r\n\t };\r\n\t this.findNext = function(options, animate) {\r\n\t this.find({skipCurrent: true, backwards: false}, options, animate);\r\n\t };\r\n\t this.findPrevious = function(options, animate) {\r\n\t this.find(options, {skipCurrent: true, backwards: true}, animate);\r\n\t };\r\n\r\n\t this.revealRange = function(range, animate) {\r\n\t this.$blockScrolling += 1;\r\n\t this.session.unfold(range);\r\n\t this.selection.setSelectionRange(range);\r\n\t this.$blockScrolling -= 1;\r\n\r\n\t var scrollTop = this.renderer.scrollTop;\r\n\t this.renderer.scrollSelectionIntoView(range.start, range.end, 0.5);\r\n\t if (animate !== false)\r\n\t this.renderer.animateScrolling(scrollTop);\r\n\t };\r\n\t this.undo = function() {\r\n\t this.$blockScrolling++;\r\n\t this.session.getUndoManager().undo();\r\n\t this.$blockScrolling--;\r\n\t this.renderer.scrollCursorIntoView(null, 0.5);\r\n\t };\r\n\t this.redo = function() {\r\n\t this.$blockScrolling++;\r\n\t this.session.getUndoManager().redo();\r\n\t this.$blockScrolling--;\r\n\t this.renderer.scrollCursorIntoView(null, 0.5);\r\n\t };\r\n\t this.destroy = function() {\r\n\t this.renderer.destroy();\r\n\t this._signal(\"destroy\", this);\r\n\t if (this.session) {\r\n\t this.session.destroy();\r\n\t }\r\n\t };\r\n\t this.setAutoScrollEditorIntoView = function(enable) {\r\n\t if (!enable)\r\n\t return;\r\n\t var rect;\r\n\t var self = this;\r\n\t var shouldScroll = false;\r\n\t if (!this.$scrollAnchor)\r\n\t this.$scrollAnchor = document.createElement(\"div\");\r\n\t var scrollAnchor = this.$scrollAnchor;\r\n\t scrollAnchor.style.cssText = \"position:absolute\";\r\n\t this.container.insertBefore(scrollAnchor, this.container.firstChild);\r\n\t var onChangeSelection = this.on(\"changeSelection\", function() {\r\n\t shouldScroll = true;\r\n\t });\r\n\t var onBeforeRender = this.renderer.on(\"beforeRender\", function() {\r\n\t if (shouldScroll)\r\n\t rect = self.renderer.container.getBoundingClientRect();\r\n\t });\r\n\t var onAfterRender = this.renderer.on(\"afterRender\", function() {\r\n\t if (shouldScroll && rect && (self.isFocused()\r\n\t || self.searchBox && self.searchBox.isFocused())\r\n\t ) {\r\n\t var renderer = self.renderer;\r\n\t var pos = renderer.$cursorLayer.$pixelPos;\r\n\t var config = renderer.layerConfig;\r\n\t var top = pos.top - config.offset;\r\n\t if (pos.top >= 0 && top + rect.top < 0) {\r\n\t shouldScroll = true;\r\n\t } else if (pos.top < config.height &&\r\n\t pos.top + rect.top + config.lineHeight > window.innerHeight) {\r\n\t shouldScroll = false;\r\n\t } else {\r\n\t shouldScroll = null;\r\n\t }\r\n\t if (shouldScroll != null) {\r\n\t scrollAnchor.style.top = top + \"px\";\r\n\t scrollAnchor.style.left = pos.left + \"px\";\r\n\t scrollAnchor.style.height = config.lineHeight + \"px\";\r\n\t scrollAnchor.scrollIntoView(shouldScroll);\r\n\t }\r\n\t shouldScroll = rect = null;\r\n\t }\r\n\t });\r\n\t this.setAutoScrollEditorIntoView = function(enable) {\r\n\t if (enable)\r\n\t return;\r\n\t delete this.setAutoScrollEditorIntoView;\r\n\t this.off(\"changeSelection\", onChangeSelection);\r\n\t this.renderer.off(\"afterRender\", onAfterRender);\r\n\t this.renderer.off(\"beforeRender\", onBeforeRender);\r\n\t };\r\n\t };\r\n\r\n\r\n\t this.$resetCursorStyle = function() {\r\n\t var style = this.$cursorStyle || \"ace\";\r\n\t var cursorLayer = this.renderer.$cursorLayer;\r\n\t if (!cursorLayer)\r\n\t return;\r\n\t cursorLayer.setSmoothBlinking(/smooth/.test(style));\r\n\t cursorLayer.isBlinking = !this.$readOnly && style != \"wide\";\r\n\t dom.setCssClass(cursorLayer.element, \"ace_slim-cursors\", /slim/.test(style));\r\n\t };\r\n\r\n\t}).call(Editor.prototype);\r\n\r\n\r\n\r\n\tconfig.defineOptions(Editor.prototype, \"editor\", {\r\n\t selectionStyle: {\r\n\t set: function(style) {\r\n\t this.onSelectionChange();\r\n\t this._signal(\"changeSelectionStyle\", {data: style});\r\n\t },\r\n\t initialValue: \"line\"\r\n\t },\r\n\t highlightActiveLine: {\r\n\t set: function() {this.$updateHighlightActiveLine();},\r\n\t initialValue: true\r\n\t },\r\n\t highlightSelectedWord: {\r\n\t set: function(shouldHighlight) {this.$onSelectionChange();},\r\n\t initialValue: true\r\n\t },\r\n\t readOnly: {\r\n\t set: function(readOnly) {\r\n\t this.$resetCursorStyle(); \r\n\t },\r\n\t initialValue: false\r\n\t },\r\n\t cursorStyle: {\r\n\t set: function(val) { this.$resetCursorStyle(); },\r\n\t values: [\"ace\", \"slim\", \"smooth\", \"wide\"],\r\n\t initialValue: \"ace\"\r\n\t },\r\n\t mergeUndoDeltas: {\r\n\t values: [false, true, \"always\"],\r\n\t initialValue: true\r\n\t },\r\n\t behavioursEnabled: {initialValue: true},\r\n\t wrapBehavioursEnabled: {initialValue: true},\r\n\t autoScrollEditorIntoView: {\r\n\t set: function(val) {this.setAutoScrollEditorIntoView(val)}\r\n\t },\r\n\t keyboardHandler: {\r\n\t set: function(val) { this.setKeyboardHandler(val); },\r\n\t get: function() { return this.keybindingId; },\r\n\t handlesSet: true\r\n\t },\r\n\r\n\t hScrollBarAlwaysVisible: \"renderer\",\r\n\t vScrollBarAlwaysVisible: \"renderer\",\r\n\t highlightGutterLine: \"renderer\",\r\n\t animatedScroll: \"renderer\",\r\n\t showInvisibles: \"renderer\",\r\n\t showPrintMargin: \"renderer\",\r\n\t printMarginColumn: \"renderer\",\r\n\t printMargin: \"renderer\",\r\n\t fadeFoldWidgets: \"renderer\",\r\n\t showFoldWidgets: \"renderer\",\r\n\t showLineNumbers: \"renderer\",\r\n\t showGutter: \"renderer\",\r\n\t displayIndentGuides: \"renderer\",\r\n\t fontSize: \"renderer\",\r\n\t fontFamily: \"renderer\",\r\n\t maxLines: \"renderer\",\r\n\t minLines: \"renderer\",\r\n\t scrollPastEnd: \"renderer\",\r\n\t fixedWidthGutter: \"renderer\",\r\n\t theme: \"renderer\",\r\n\r\n\t scrollSpeed: \"$mouseHandler\",\r\n\t dragDelay: \"$mouseHandler\",\r\n\t dragEnabled: \"$mouseHandler\",\r\n\t focusTimout: \"$mouseHandler\",\r\n\t tooltipFollowsMouse: \"$mouseHandler\",\r\n\r\n\t firstLineNumber: \"session\",\r\n\t overwrite: \"session\",\r\n\t newLineMode: \"session\",\r\n\t useWorker: \"session\",\r\n\t useSoftTabs: \"session\",\r\n\t tabSize: \"session\",\r\n\t wrap: \"session\",\r\n\t indentedSoftWrap: \"session\",\r\n\t foldStyle: \"session\",\r\n\t mode: \"session\"\r\n\t});\r\n\r\n\texports.Editor = Editor;\r\n\t});\r\n\r\n\tace.define(\"ace/undomanager\",[\"require\",\"exports\",\"module\"], function(acequire, exports, module) {\r\n\t\"use strict\";\r\n\tvar UndoManager = function() {\r\n\t this.reset();\r\n\t};\r\n\r\n\t(function() {\r\n\t this.execute = function(options) {\r\n\t var deltaSets = options.args[0];\r\n\t this.$doc = options.args[1];\r\n\t if (options.merge && this.hasUndo()){\r\n\t this.dirtyCounter--;\r\n\t deltaSets = this.$undoStack.pop().concat(deltaSets);\r\n\t }\r\n\t this.$undoStack.push(deltaSets);\r\n\t this.$redoStack = [];\r\n\t if (this.dirtyCounter < 0) {\r\n\t this.dirtyCounter = NaN;\r\n\t }\r\n\t this.dirtyCounter++;\r\n\t };\r\n\t this.undo = function(dontSelect) {\r\n\t var deltaSets = this.$undoStack.pop();\r\n\t var undoSelectionRange = null;\r\n\t if (deltaSets) {\r\n\t undoSelectionRange = this.$doc.undoChanges(deltaSets, dontSelect);\r\n\t this.$redoStack.push(deltaSets);\r\n\t this.dirtyCounter--;\r\n\t }\r\n\r\n\t return undoSelectionRange;\r\n\t };\r\n\t this.redo = function(dontSelect) {\r\n\t var deltaSets = this.$redoStack.pop();\r\n\t var redoSelectionRange = null;\r\n\t if (deltaSets) {\r\n\t redoSelectionRange =\r\n\t this.$doc.redoChanges(this.$deserializeDeltas(deltaSets), dontSelect);\r\n\t this.$undoStack.push(deltaSets);\r\n\t this.dirtyCounter++;\r\n\t }\r\n\t return redoSelectionRange;\r\n\t };\r\n\t this.reset = function() {\r\n\t this.$undoStack = [];\r\n\t this.$redoStack = [];\r\n\t this.dirtyCounter = 0;\r\n\t };\r\n\t this.hasUndo = function() {\r\n\t return this.$undoStack.length > 0;\r\n\t };\r\n\t this.hasRedo = function() {\r\n\t return this.$redoStack.length > 0;\r\n\t };\r\n\t this.markClean = function() {\r\n\t this.dirtyCounter = 0;\r\n\t };\r\n\t this.isClean = function() {\r\n\t return this.dirtyCounter === 0;\r\n\t };\r\n\t this.$serializeDeltas = function(deltaSets) {\r\n\t return cloneDeltaSetsObj(deltaSets, $serializeDelta);\r\n\t };\r\n\t this.$deserializeDeltas = function(deltaSets) {\r\n\t return cloneDeltaSetsObj(deltaSets, $deserializeDelta);\r\n\t };\r\n\t \r\n\t function $serializeDelta(delta){\r\n\t return {\r\n\t action: delta.action,\r\n\t start: delta.start,\r\n\t end: delta.end,\r\n\t lines: delta.lines.length == 1 ? null : delta.lines,\r\n\t text: delta.lines.length == 1 ? delta.lines[0] : null\r\n\t };\r\n\t }\r\n\t \r\n\t function $deserializeDelta(delta) {\r\n\t return {\r\n\t action: delta.action,\r\n\t start: delta.start,\r\n\t end: delta.end,\r\n\t lines: delta.lines || [delta.text]\r\n\t };\r\n\t }\r\n\t \r\n\t function cloneDeltaSetsObj(deltaSets_old, fnGetModifiedDelta) {\r\n\t var deltaSets_new = new Array(deltaSets_old.length);\r\n\t for (var i = 0; i < deltaSets_old.length; i++) {\r\n\t var deltaSet_old = deltaSets_old[i];\r\n\t var deltaSet_new = { group: deltaSet_old.group, deltas: new Array(deltaSet_old.length)};\r\n\t \r\n\t for (var j = 0; j < deltaSet_old.deltas.length; j++) {\r\n\t var delta_old = deltaSet_old.deltas[j];\r\n\t deltaSet_new.deltas[j] = fnGetModifiedDelta(delta_old);\r\n\t }\r\n\t \r\n\t deltaSets_new[i] = deltaSet_new;\r\n\t }\r\n\t return deltaSets_new;\r\n\t }\r\n\t \r\n\t}).call(UndoManager.prototype);\r\n\r\n\texports.UndoManager = UndoManager;\r\n\t});\r\n\r\n\tace.define(\"ace/layer/gutter\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/lib/event_emitter\"], function(acequire, exports, module) {\r\n\t\"use strict\";\r\n\r\n\tvar dom = acequire(\"../lib/dom\");\r\n\tvar oop = acequire(\"../lib/oop\");\r\n\tvar lang = acequire(\"../lib/lang\");\r\n\tvar EventEmitter = acequire(\"../lib/event_emitter\").EventEmitter;\r\n\r\n\tvar Gutter = function(parentEl) {\r\n\t this.element = dom.createElement(\"div\");\r\n\t this.element.className = \"ace_layer ace_gutter-layer\";\r\n\t parentEl.appendChild(this.element);\r\n\t this.setShowFoldWidgets(this.$showFoldWidgets);\r\n\t \r\n\t this.gutterWidth = 0;\r\n\r\n\t this.$annotations = [];\r\n\t this.$updateAnnotations = this.$updateAnnotations.bind(this);\r\n\r\n\t this.$cells = [];\r\n\t};\r\n\r\n\t(function() {\r\n\r\n\t oop.implement(this, EventEmitter);\r\n\r\n\t this.setSession = function(session) {\r\n\t if (this.session)\r\n\t this.session.removeEventListener(\"change\", this.$updateAnnotations);\r\n\t this.session = session;\r\n\t if (session)\r\n\t session.on(\"change\", this.$updateAnnotations);\r\n\t };\r\n\r\n\t this.addGutterDecoration = function(row, className){\r\n\t if (window.console)\r\n\t console.warn && console.warn(\"deprecated use session.addGutterDecoration\");\r\n\t this.session.addGutterDecoration(row, className);\r\n\t };\r\n\r\n\t this.removeGutterDecoration = function(row, className){\r\n\t if (window.console)\r\n\t console.warn && console.warn(\"deprecated use session.removeGutterDecoration\");\r\n\t this.session.removeGutterDecoration(row, className);\r\n\t };\r\n\r\n\t this.setAnnotations = function(annotations) {\r\n\t this.$annotations = [];\r\n\t for (var i = 0; i < annotations.length; i++) {\r\n\t var annotation = annotations[i];\r\n\t var row = annotation.row;\r\n\t var rowInfo = this.$annotations[row];\r\n\t if (!rowInfo)\r\n\t rowInfo = this.$annotations[row] = {text: []};\r\n\t \r\n\t var annoText = annotation.text;\r\n\t annoText = annoText ? lang.escapeHTML(annoText) : annotation.html || \"\";\r\n\r\n\t if (rowInfo.text.indexOf(annoText) === -1)\r\n\t rowInfo.text.push(annoText);\r\n\r\n\t var type = annotation.type;\r\n\t if (type == \"error\")\r\n\t rowInfo.className = \" ace_error\";\r\n\t else if (type == \"warning\" && rowInfo.className != \" ace_error\")\r\n\t rowInfo.className = \" ace_warning\";\r\n\t else if (type == \"info\" && (!rowInfo.className))\r\n\t rowInfo.className = \" ace_info\";\r\n\t }\r\n\t };\r\n\r\n\t this.$updateAnnotations = function (delta) {\r\n\t if (!this.$annotations.length)\r\n\t return;\r\n\t var firstRow = delta.start.row;\r\n\t var len = delta.end.row - firstRow;\r\n\t if (len === 0) {\r\n\t } else if (delta.action == 'remove') {\r\n\t this.$annotations.splice(firstRow, len + 1, null);\r\n\t } else {\r\n\t var args = new Array(len + 1);\r\n\t args.unshift(firstRow, 1);\r\n\t this.$annotations.splice.apply(this.$annotations, args);\r\n\t }\r\n\t };\r\n\r\n\t this.update = function(config) {\r\n\t var session = this.session;\r\n\t var firstRow = config.firstRow;\r\n\t var lastRow = Math.min(config.lastRow + config.gutterOffset, // needed to compensate for hor scollbar\r\n\t session.getLength() - 1);\r\n\t var fold = session.getNextFoldLine(firstRow);\r\n\t var foldStart = fold ? fold.start.row : Infinity;\r\n\t var foldWidgets = this.$showFoldWidgets && session.foldWidgets;\r\n\t var breakpoints = session.$breakpoints;\r\n\t var decorations = session.$decorations;\r\n\t var firstLineNumber = session.$firstLineNumber;\r\n\t var lastLineNumber = 0;\r\n\t \r\n\t var gutterRenderer = session.gutterRenderer || this.$renderer;\r\n\r\n\t var cell = null;\r\n\t var index = -1;\r\n\t var row = firstRow;\r\n\t while (true) {\r\n\t if (row > foldStart) {\r\n\t row = fold.end.row + 1;\r\n\t fold = session.getNextFoldLine(row, fold);\r\n\t foldStart = fold ? fold.start.row : Infinity;\r\n\t }\r\n\t if (row > lastRow) {\r\n\t while (this.$cells.length > index + 1) {\r\n\t cell = this.$cells.pop();\r\n\t this.element.removeChild(cell.element);\r\n\t }\r\n\t break;\r\n\t }\r\n\r\n\t cell = this.$cells[++index];\r\n\t if (!cell) {\r\n\t cell = {element: null, textNode: null, foldWidget: null};\r\n\t cell.element = dom.createElement(\"div\");\r\n\t cell.textNode = document.createTextNode('');\r\n\t cell.element.appendChild(cell.textNode);\r\n\t this.element.appendChild(cell.element);\r\n\t this.$cells[index] = cell;\r\n\t }\r\n\r\n\t var className = \"ace_gutter-cell \";\r\n\t if (breakpoints[row])\r\n\t className += breakpoints[row];\r\n\t if (decorations[row])\r\n\t className += decorations[row];\r\n\t if (this.$annotations[row])\r\n\t className += this.$annotations[row].className;\r\n\t if (cell.element.className != className)\r\n\t cell.element.className = className;\r\n\r\n\t var height = session.getRowLength(row) * config.lineHeight + \"px\";\r\n\t if (height != cell.element.style.height)\r\n\t cell.element.style.height = height;\r\n\r\n\t if (foldWidgets) {\r\n\t var c = foldWidgets[row];\r\n\t if (c == null)\r\n\t c = foldWidgets[row] = session.getFoldWidget(row);\r\n\t }\r\n\r\n\t if (c) {\r\n\t if (!cell.foldWidget) {\r\n\t cell.foldWidget = dom.createElement(\"span\");\r\n\t cell.element.appendChild(cell.foldWidget);\r\n\t }\r\n\t var className = \"ace_fold-widget ace_\" + c;\r\n\t if (c == \"start\" && row == foldStart && row < fold.end.row)\r\n\t className += \" ace_closed\";\r\n\t else\r\n\t className += \" ace_open\";\r\n\t if (cell.foldWidget.className != className)\r\n\t cell.foldWidget.className = className;\r\n\r\n\t var height = config.lineHeight + \"px\";\r\n\t if (cell.foldWidget.style.height != height)\r\n\t cell.foldWidget.style.height = height;\r\n\t } else {\r\n\t if (cell.foldWidget) {\r\n\t cell.element.removeChild(cell.foldWidget);\r\n\t cell.foldWidget = null;\r\n\t }\r\n\t }\r\n\t \r\n\t var text = lastLineNumber = gutterRenderer\r\n\t ? gutterRenderer.getText(session, row)\r\n\t : row + firstLineNumber;\r\n\t if (text != cell.textNode.data)\r\n\t cell.textNode.data = text;\r\n\r\n\t row++;\r\n\t }\r\n\r\n\t this.element.style.height = config.minHeight + \"px\";\r\n\r\n\t if (this.$fixedWidth || session.$useWrapMode)\r\n\t lastLineNumber = session.getLength() + firstLineNumber;\r\n\r\n\t var gutterWidth = gutterRenderer \r\n\t ? gutterRenderer.getWidth(session, lastLineNumber, config)\r\n\t : lastLineNumber.toString().length * config.characterWidth;\r\n\t \r\n\t var padding = this.$padding || this.$computePadding();\r\n\t gutterWidth += padding.left + padding.right;\r\n\t if (gutterWidth !== this.gutterWidth && !isNaN(gutterWidth)) {\r\n\t this.gutterWidth = gutterWidth;\r\n\t this.element.style.width = Math.ceil(this.gutterWidth) + \"px\";\r\n\t this._emit(\"changeGutterWidth\", gutterWidth);\r\n\t }\r\n\t };\r\n\r\n\t this.$fixedWidth = false;\r\n\t \r\n\t this.$showLineNumbers = true;\r\n\t this.$renderer = \"\";\r\n\t this.setShowLineNumbers = function(show) {\r\n\t this.$renderer = !show && {\r\n\t getWidth: function() {return \"\"},\r\n\t getText: function() {return \"\"}\r\n\t };\r\n\t };\r\n\t \r\n\t this.getShowLineNumbers = function() {\r\n\t return this.$showLineNumbers;\r\n\t };\r\n\t \r\n\t this.$showFoldWidgets = true;\r\n\t this.setShowFoldWidgets = function(show) {\r\n\t if (show)\r\n\t dom.addCssClass(this.element, \"ace_folding-enabled\");\r\n\t else\r\n\t dom.removeCssClass(this.element, \"ace_folding-enabled\");\r\n\r\n\t this.$showFoldWidgets = show;\r\n\t this.$padding = null;\r\n\t };\r\n\t \r\n\t this.getShowFoldWidgets = function() {\r\n\t return this.$showFoldWidgets;\r\n\t };\r\n\r\n\t this.$computePadding = function() {\r\n\t if (!this.element.firstChild)\r\n\t return {left: 0, right: 0};\r\n\t var style = dom.computedStyle(this.element.firstChild);\r\n\t this.$padding = {};\r\n\t this.$padding.left = parseInt(style.paddingLeft) + 1 || 0;\r\n\t this.$padding.right = parseInt(style.paddingRight) || 0;\r\n\t return this.$padding;\r\n\t };\r\n\r\n\t this.getRegion = function(point) {\r\n\t var padding = this.$padding || this.$computePadding();\r\n\t var rect = this.element.getBoundingClientRect();\r\n\t if (point.x < padding.left + rect.left)\r\n\t return \"markers\";\r\n\t if (this.$showFoldWidgets && point.x > rect.right - padding.right)\r\n\t return \"foldWidgets\";\r\n\t };\r\n\r\n\t}).call(Gutter.prototype);\r\n\r\n\texports.Gutter = Gutter;\r\n\r\n\t});\r\n\r\n\tace.define(\"ace/layer/marker\",[\"require\",\"exports\",\"module\",\"ace/range\",\"ace/lib/dom\"], function(acequire, exports, module) {\r\n\t\"use strict\";\r\n\r\n\tvar Range = acequire(\"../range\").Range;\r\n\tvar dom = acequire(\"../lib/dom\");\r\n\r\n\tvar Marker = function(parentEl) {\r\n\t this.element = dom.createElement(\"div\");\r\n\t this.element.className = \"ace_layer ace_marker-layer\";\r\n\t parentEl.appendChild(this.element);\r\n\t};\r\n\r\n\t(function() {\r\n\r\n\t this.$padding = 0;\r\n\r\n\t this.setPadding = function(padding) {\r\n\t this.$padding = padding;\r\n\t };\r\n\t this.setSession = function(session) {\r\n\t this.session = session;\r\n\t };\r\n\t \r\n\t this.setMarkers = function(markers) {\r\n\t this.markers = markers;\r\n\t };\r\n\r\n\t this.update = function(config) {\r\n\t var config = config || this.config;\r\n\t if (!config)\r\n\t return;\r\n\r\n\t this.config = config;\r\n\r\n\r\n\t var html = [];\r\n\t for (var key in this.markers) {\r\n\t var marker = this.markers[key];\r\n\r\n\t if (!marker.range) {\r\n\t marker.update(html, this, this.session, config);\r\n\t continue;\r\n\t }\r\n\r\n\t var range = marker.range.clipRows(config.firstRow, config.lastRow);\r\n\t if (range.isEmpty()) continue;\r\n\r\n\t range = range.toScreenRange(this.session);\r\n\t if (marker.renderer) {\r\n\t var top = this.$getTop(range.start.row, config);\r\n\t var left = this.$padding + range.start.column * config.characterWidth;\r\n\t marker.renderer(html, range, left, top, config);\r\n\t } else if (marker.type == \"fullLine\") {\r\n\t this.drawFullLineMarker(html, range, marker.clazz, config);\r\n\t } else if (marker.type == \"screenLine\") {\r\n\t this.drawScreenLineMarker(html, range, marker.clazz, config);\r\n\t } else if (range.isMultiLine()) {\r\n\t if (marker.type == \"text\")\r\n\t this.drawTextMarker(html, range, marker.clazz, config);\r\n\t else\r\n\t this.drawMultiLineMarker(html, range, marker.clazz, config);\r\n\t } else {\r\n\t this.drawSingleLineMarker(html, range, marker.clazz + \" ace_start\" + \" ace_br15\", config);\r\n\t }\r\n\t }\r\n\t this.element.innerHTML = html.join(\"\");\r\n\t };\r\n\r\n\t this.$getTop = function(row, layerConfig) {\r\n\t return (row - layerConfig.firstRowScreen) * layerConfig.lineHeight;\r\n\t };\r\n\r\n\t function getBorderClass(tl, tr, br, bl) {\r\n\t return (tl ? 1 : 0) | (tr ? 2 : 0) | (br ? 4 : 0) | (bl ? 8 : 0);\r\n\t }\r\n\t this.drawTextMarker = function(stringBuilder, range, clazz, layerConfig, extraStyle) {\r\n\t var session = this.session;\r\n\t var start = range.start.row;\r\n\t var end = range.end.row;\r\n\t var row = start;\r\n\t var prev = 0; \r\n\t var curr = 0;\r\n\t var next = session.getScreenLastRowColumn(row);\r\n\t var lineRange = new Range(row, range.start.column, row, curr);\r\n\t for (; row <= end; row++) {\r\n\t lineRange.start.row = lineRange.end.row = row;\r\n\t lineRange.start.column = row == start ? range.start.column : session.getRowWrapIndent(row);\r\n\t lineRange.end.column = next;\r\n\t prev = curr;\r\n\t curr = next;\r\n\t next = row + 1 < end ? session.getScreenLastRowColumn(row + 1) : row == end ? 0 : range.end.column;\r\n\t this.drawSingleLineMarker(stringBuilder, lineRange, \r\n\t clazz + (row == start ? \" ace_start\" : \"\") + \" ace_br\"\r\n\t + getBorderClass(row == start || row == start + 1 && range.start.column, prev < curr, curr > next, row == end),\r\n\t layerConfig, row == end ? 0 : 1, extraStyle);\r\n\t }\r\n\t };\r\n\t this.drawMultiLineMarker = function(stringBuilder, range, clazz, config, extraStyle) {\r\n\t var padding = this.$padding;\r\n\t var height = config.lineHeight;\r\n\t var top = this.$getTop(range.start.row, config);\r\n\t var left = padding + range.start.column * config.characterWidth;\r\n\t extraStyle = extraStyle || \"\";\r\n\r\n\t stringBuilder.push(\r\n\t \"
\"\r\n\t );\r\n\t top = this.$getTop(range.end.row, config);\r\n\t var width = range.end.column * config.characterWidth;\r\n\r\n\t stringBuilder.push(\r\n\t \"
\"\r\n\t );\r\n\t height = (range.end.row - range.start.row - 1) * config.lineHeight;\r\n\t if (height <= 0)\r\n\t return;\r\n\t top = this.$getTop(range.start.row + 1, config);\r\n\t \r\n\t var radiusClass = (range.start.column ? 1 : 0) | (range.end.column ? 0 : 8);\r\n\r\n\t stringBuilder.push(\r\n\t \"
\"\r\n\t );\r\n\t };\r\n\t this.drawSingleLineMarker = function(stringBuilder, range, clazz, config, extraLength, extraStyle) {\r\n\t var height = config.lineHeight;\r\n\t var width = (range.end.column + (extraLength || 0) - range.start.column) * config.characterWidth;\r\n\r\n\t var top = this.$getTop(range.start.row, config);\r\n\t var left = this.$padding + range.start.column * config.characterWidth;\r\n\r\n\t stringBuilder.push(\r\n\t \"
\"\r\n\t );\r\n\t };\r\n\r\n\t this.drawFullLineMarker = function(stringBuilder, range, clazz, config, extraStyle) {\r\n\t var top = this.$getTop(range.start.row, config);\r\n\t var height = config.lineHeight;\r\n\t if (range.start.row != range.end.row)\r\n\t height += this.$getTop(range.end.row, config) - top;\r\n\r\n\t stringBuilder.push(\r\n\t \"
\"\r\n\t );\r\n\t };\r\n\t \r\n\t this.drawScreenLineMarker = function(stringBuilder, range, clazz, config, extraStyle) {\r\n\t var top = this.$getTop(range.start.row, config);\r\n\t var height = config.lineHeight;\r\n\r\n\t stringBuilder.push(\r\n\t \"
\"\r\n\t );\r\n\t };\r\n\r\n\t}).call(Marker.prototype);\r\n\r\n\texports.Marker = Marker;\r\n\r\n\t});\r\n\r\n\tace.define(\"ace/layer/text\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/dom\",\"ace/lib/lang\",\"ace/lib/useragent\",\"ace/lib/event_emitter\"], function(acequire, exports, module) {\r\n\t\"use strict\";\r\n\r\n\tvar oop = acequire(\"../lib/oop\");\r\n\tvar dom = acequire(\"../lib/dom\");\r\n\tvar lang = acequire(\"../lib/lang\");\r\n\tvar useragent = acequire(\"../lib/useragent\");\r\n\tvar EventEmitter = acequire(\"../lib/event_emitter\").EventEmitter;\r\n\r\n\tvar Text = function(parentEl) {\r\n\t this.element = dom.createElement(\"div\");\r\n\t this.element.className = \"ace_layer ace_text-layer\";\r\n\t parentEl.appendChild(this.element);\r\n\t this.$updateEolChar = this.$updateEolChar.bind(this);\r\n\t};\r\n\r\n\t(function() {\r\n\r\n\t oop.implement(this, EventEmitter);\r\n\r\n\t this.EOF_CHAR = \"\\xB6\";\r\n\t this.EOL_CHAR_LF = \"\\xAC\";\r\n\t this.EOL_CHAR_CRLF = \"\\xa4\";\r\n\t this.EOL_CHAR = this.EOL_CHAR_LF;\r\n\t this.TAB_CHAR = \"\\u2014\"; //\"\\u21E5\";\r\n\t this.SPACE_CHAR = \"\\xB7\";\r\n\t this.$padding = 0;\r\n\r\n\t this.$updateEolChar = function() {\r\n\t var EOL_CHAR = this.session.doc.getNewLineCharacter() == \"\\n\"\r\n\t ? this.EOL_CHAR_LF\r\n\t : this.EOL_CHAR_CRLF;\r\n\t if (this.EOL_CHAR != EOL_CHAR) {\r\n\t this.EOL_CHAR = EOL_CHAR;\r\n\t return true;\r\n\t }\r\n\t }\r\n\r\n\t this.setPadding = function(padding) {\r\n\t this.$padding = padding;\r\n\t this.element.style.padding = \"0 \" + padding + \"px\";\r\n\t };\r\n\r\n\t this.getLineHeight = function() {\r\n\t return this.$fontMetrics.$characterSize.height || 0;\r\n\t };\r\n\r\n\t this.getCharacterWidth = function() {\r\n\t return this.$fontMetrics.$characterSize.width || 0;\r\n\t };\r\n\t \r\n\t this.$setFontMetrics = function(measure) {\r\n\t this.$fontMetrics = measure;\r\n\t this.$fontMetrics.on(\"changeCharacterSize\", function(e) {\r\n\t this._signal(\"changeCharacterSize\", e);\r\n\t }.bind(this));\r\n\t this.$pollSizeChanges();\r\n\t }\r\n\r\n\t this.checkForSizeChanges = function() {\r\n\t this.$fontMetrics.checkForSizeChanges();\r\n\t };\r\n\t this.$pollSizeChanges = function() {\r\n\t return this.$pollSizeChangesTimer = this.$fontMetrics.$pollSizeChanges();\r\n\t };\r\n\t this.setSession = function(session) {\r\n\t this.session = session;\r\n\t if (session)\r\n\t this.$computeTabString();\r\n\t };\r\n\r\n\t this.showInvisibles = false;\r\n\t this.setShowInvisibles = function(showInvisibles) {\r\n\t if (this.showInvisibles == showInvisibles)\r\n\t return false;\r\n\r\n\t this.showInvisibles = showInvisibles;\r\n\t this.$computeTabString();\r\n\t return true;\r\n\t };\r\n\r\n\t this.displayIndentGuides = true;\r\n\t this.setDisplayIndentGuides = function(display) {\r\n\t if (this.displayIndentGuides == display)\r\n\t return false;\r\n\r\n\t this.displayIndentGuides = display;\r\n\t this.$computeTabString();\r\n\t return true;\r\n\t };\r\n\r\n\t this.$tabStrings = [];\r\n\t this.onChangeTabSize =\r\n\t this.$computeTabString = function() {\r\n\t var tabSize = this.session.getTabSize();\r\n\t this.tabSize = tabSize;\r\n\t var tabStr = this.$tabStrings = [0];\r\n\t for (var i = 1; i < tabSize + 1; i++) {\r\n\t if (this.showInvisibles) {\r\n\t tabStr.push(\"\"\r\n\t + lang.stringRepeat(this.TAB_CHAR, i)\r\n\t + \"\");\r\n\t } else {\r\n\t tabStr.push(lang.stringRepeat(\" \", i));\r\n\t }\r\n\t }\r\n\t if (this.displayIndentGuides) {\r\n\t this.$indentGuideRe = /\\s\\S| \\t|\\t |\\s$/;\r\n\t var className = \"ace_indent-guide\";\r\n\t var spaceClass = \"\";\r\n\t var tabClass = \"\";\r\n\t if (this.showInvisibles) {\r\n\t className += \" ace_invisible\";\r\n\t spaceClass = \" ace_invisible_space\";\r\n\t tabClass = \" ace_invisible_tab\";\r\n\t var spaceContent = lang.stringRepeat(this.SPACE_CHAR, this.tabSize);\r\n\t var tabContent = lang.stringRepeat(this.TAB_CHAR, this.tabSize);\r\n\t } else{\r\n\t var spaceContent = lang.stringRepeat(\" \", this.tabSize);\r\n\t var tabContent = spaceContent;\r\n\t }\r\n\r\n\t this.$tabStrings[\" \"] = \"\" + spaceContent + \"\";\r\n\t this.$tabStrings[\"\\t\"] = \"\" + tabContent + \"\";\r\n\t }\r\n\t };\r\n\r\n\t this.updateLines = function(config, firstRow, lastRow) {\r\n\t if (this.config.lastRow != config.lastRow ||\r\n\t this.config.firstRow != config.firstRow) {\r\n\t this.scrollLines(config);\r\n\t }\r\n\t this.config = config;\r\n\r\n\t var first = Math.max(firstRow, config.firstRow);\r\n\t var last = Math.min(lastRow, config.lastRow);\r\n\r\n\t var lineElements = this.element.childNodes;\r\n\t var lineElementsIdx = 0;\r\n\r\n\t for (var row = config.firstRow; row < first; row++) {\r\n\t var foldLine = this.session.getFoldLine(row);\r\n\t if (foldLine) {\r\n\t if (foldLine.containsRow(first)) {\r\n\t first = foldLine.start.row;\r\n\t break;\r\n\t } else {\r\n\t row = foldLine.end.row;\r\n\t }\r\n\t }\r\n\t lineElementsIdx ++;\r\n\t }\r\n\r\n\t var row = first;\r\n\t var foldLine = this.session.getNextFoldLine(row);\r\n\t var foldStart = foldLine ? foldLine.start.row : Infinity;\r\n\r\n\t while (true) {\r\n\t if (row > foldStart) {\r\n\t row = foldLine.end.row+1;\r\n\t foldLine = this.session.getNextFoldLine(row, foldLine);\r\n\t foldStart = foldLine ? foldLine.start.row :Infinity;\r\n\t }\r\n\t if (row > last)\r\n\t break;\r\n\r\n\t var lineElement = lineElements[lineElementsIdx++];\r\n\t if (lineElement) {\r\n\t var html = [];\r\n\t this.$renderLine(\r\n\t html, row, !this.$useLineGroups(), row == foldStart ? foldLine : false\r\n\t );\r\n\t lineElement.style.height = config.lineHeight * this.session.getRowLength(row) + \"px\";\r\n\t lineElement.innerHTML = html.join(\"\");\r\n\t }\r\n\t row++;\r\n\t }\r\n\t };\r\n\r\n\t this.scrollLines = function(config) {\r\n\t var oldConfig = this.config;\r\n\t this.config = config;\r\n\r\n\t if (!oldConfig || oldConfig.lastRow < config.firstRow)\r\n\t return this.update(config);\r\n\r\n\t if (config.lastRow < oldConfig.firstRow)\r\n\t return this.update(config);\r\n\r\n\t var el = this.element;\r\n\t if (oldConfig.firstRow < config.firstRow)\r\n\t for (var row=this.session.getFoldedRowCount(oldConfig.firstRow, config.firstRow - 1); row>0; row--)\r\n\t el.removeChild(el.firstChild);\r\n\r\n\t if (oldConfig.lastRow > config.lastRow)\r\n\t for (var row=this.session.getFoldedRowCount(config.lastRow + 1, oldConfig.lastRow); row>0; row--)\r\n\t el.removeChild(el.lastChild);\r\n\r\n\t if (config.firstRow < oldConfig.firstRow) {\r\n\t var fragment = this.$renderLinesFragment(config, config.firstRow, oldConfig.firstRow - 1);\r\n\t if (el.firstChild)\r\n\t el.insertBefore(fragment, el.firstChild);\r\n\t else\r\n\t el.appendChild(fragment);\r\n\t }\r\n\r\n\t if (config.lastRow > oldConfig.lastRow) {\r\n\t var fragment = this.$renderLinesFragment(config, oldConfig.lastRow + 1, config.lastRow);\r\n\t el.appendChild(fragment);\r\n\t }\r\n\t };\r\n\r\n\t this.$renderLinesFragment = function(config, firstRow, lastRow) {\r\n\t var fragment = this.element.ownerDocument.createDocumentFragment();\r\n\t var row = firstRow;\r\n\t var foldLine = this.session.getNextFoldLine(row);\r\n\t var foldStart = foldLine ? foldLine.start.row : Infinity;\r\n\r\n\t while (true) {\r\n\t if (row > foldStart) {\r\n\t row = foldLine.end.row+1;\r\n\t foldLine = this.session.getNextFoldLine(row, foldLine);\r\n\t foldStart = foldLine ? foldLine.start.row : Infinity;\r\n\t }\r\n\t if (row > lastRow)\r\n\t break;\r\n\r\n\t var container = dom.createElement(\"div\");\r\n\r\n\t var html = [];\r\n\t this.$renderLine(html, row, false, row == foldStart ? foldLine : false);\r\n\t container.innerHTML = html.join(\"\");\r\n\t if (this.$useLineGroups()) {\r\n\t container.className = 'ace_line_group';\r\n\t fragment.appendChild(container);\r\n\t container.style.height = config.lineHeight * this.session.getRowLength(row) + \"px\";\r\n\r\n\t } else {\r\n\t while(container.firstChild)\r\n\t fragment.appendChild(container.firstChild);\r\n\t }\r\n\r\n\t row++;\r\n\t }\r\n\t return fragment;\r\n\t };\r\n\r\n\t this.update = function(config) {\r\n\t this.config = config;\r\n\r\n\t var html = [];\r\n\t var firstRow = config.firstRow, lastRow = config.lastRow;\r\n\r\n\t var row = firstRow;\r\n\t var foldLine = this.session.getNextFoldLine(row);\r\n\t var foldStart = foldLine ? foldLine.start.row : Infinity;\r\n\r\n\t while (true) {\r\n\t if (row > foldStart) {\r\n\t row = foldLine.end.row+1;\r\n\t foldLine = this.session.getNextFoldLine(row, foldLine);\r\n\t foldStart = foldLine ? foldLine.start.row :Infinity;\r\n\t }\r\n\t if (row > lastRow)\r\n\t break;\r\n\r\n\t if (this.$useLineGroups())\r\n\t html.push(\"
\")\r\n\r\n\t this.$renderLine(html, row, false, row == foldStart ? foldLine : false);\r\n\r\n\t if (this.$useLineGroups())\r\n\t html.push(\"
\"); // end the line group\r\n\r\n\t row++;\r\n\t }\r\n\t this.element.innerHTML = html.join(\"\");\r\n\t };\r\n\r\n\t this.$textToken = {\r\n\t \"text\": true,\r\n\t \"rparen\": true,\r\n\t \"lparen\": true\r\n\t };\r\n\r\n\t this.$renderToken = function(stringBuilder, screenColumn, token, value) {\r\n\t var self = this;\r\n\t var replaceReg = /\\t|&|<|>|( +)|([\\x00-\\x1f\\x80-\\xa0\\xad\\u1680\\u180E\\u2000-\\u200f\\u2028\\u2029\\u202F\\u205F\\u3000\\uFEFF\\uFFF9-\\uFFFC])|[\\u1100-\\u115F\\u11A3-\\u11A7\\u11FA-\\u11FF\\u2329-\\u232A\\u2E80-\\u2E99\\u2E9B-\\u2EF3\\u2F00-\\u2FD5\\u2FF0-\\u2FFB\\u3000-\\u303E\\u3041-\\u3096\\u3099-\\u30FF\\u3105-\\u312D\\u3131-\\u318E\\u3190-\\u31BA\\u31C0-\\u31E3\\u31F0-\\u321E\\u3220-\\u3247\\u3250-\\u32FE\\u3300-\\u4DBF\\u4E00-\\uA48C\\uA490-\\uA4C6\\uA960-\\uA97C\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFAFF\\uFE10-\\uFE19\\uFE30-\\uFE52\\uFE54-\\uFE66\\uFE68-\\uFE6B\\uFF01-\\uFF60\\uFFE0-\\uFFE6]/g;\r\n\t var replaceFunc = function(c, a, b, tabIdx, idx4) {\r\n\t if (a) {\r\n\t return self.showInvisibles\r\n\t ? \"\" + lang.stringRepeat(self.SPACE_CHAR, c.length) + \"\"\r\n\t : c;\r\n\t } else if (c == \"&\") {\r\n\t return \"&\";\r\n\t } else if (c == \"<\") {\r\n\t return \"<\";\r\n\t } else if (c == \">\") {\r\n\t return \">\";\r\n\t } else if (c == \"\\t\") {\r\n\t var tabSize = self.session.getScreenTabSize(screenColumn + tabIdx);\r\n\t screenColumn += tabSize - 1;\r\n\t return self.$tabStrings[tabSize];\r\n\t } else if (c == \"\\u3000\") {\r\n\t var classToUse = self.showInvisibles ? \"ace_cjk ace_invisible ace_invisible_space\" : \"ace_cjk\";\r\n\t var space = self.showInvisibles ? self.SPACE_CHAR : \"\";\r\n\t screenColumn += 1;\r\n\t return \"\" + space + \"\";\r\n\t } else if (b) {\r\n\t return \"\" + self.SPACE_CHAR + \"\";\r\n\t } else {\r\n\t screenColumn += 1;\r\n\t return \"\" + c + \"\";\r\n\t }\r\n\t };\r\n\r\n\t var output = value.replace(replaceReg, replaceFunc);\r\n\r\n\t if (!this.$textToken[token.type]) {\r\n\t var classes = \"ace_\" + token.type.replace(/\\./g, \" ace_\");\r\n\t var style = \"\";\r\n\t if (token.type == \"fold\")\r\n\t style = \" style='width:\" + (token.value.length * this.config.characterWidth) + \"px;' \";\r\n\t stringBuilder.push(\"\", output, \"\");\r\n\t }\r\n\t else {\r\n\t stringBuilder.push(output);\r\n\t }\r\n\t return screenColumn + value.length;\r\n\t };\r\n\r\n\t this.renderIndentGuide = function(stringBuilder, value, max) {\r\n\t var cols = value.search(this.$indentGuideRe);\r\n\t if (cols <= 0 || cols >= max)\r\n\t return value;\r\n\t if (value[0] == \" \") {\r\n\t cols -= cols % this.tabSize;\r\n\t stringBuilder.push(lang.stringRepeat(this.$tabStrings[\" \"], cols/this.tabSize));\r\n\t return value.substr(cols);\r\n\t } else if (value[0] == \"\\t\") {\r\n\t stringBuilder.push(lang.stringRepeat(this.$tabStrings[\"\\t\"], cols));\r\n\t return value.substr(cols);\r\n\t }\r\n\t return value;\r\n\t };\r\n\r\n\t this.$renderWrappedLine = function(stringBuilder, tokens, splits, onlyContents) {\r\n\t var chars = 0;\r\n\t var split = 0;\r\n\t var splitChars = splits[0];\r\n\t var screenColumn = 0;\r\n\r\n\t for (var i = 0; i < tokens.length; i++) {\r\n\t var token = tokens[i];\r\n\t var value = token.value;\r\n\t if (i == 0 && this.displayIndentGuides) {\r\n\t chars = value.length;\r\n\t value = this.renderIndentGuide(stringBuilder, value, splitChars);\r\n\t if (!value)\r\n\t continue;\r\n\t chars -= value.length;\r\n\t }\r\n\r\n\t if (chars + value.length < splitChars) {\r\n\t screenColumn = this.$renderToken(stringBuilder, screenColumn, token, value);\r\n\t chars += value.length;\r\n\t } else {\r\n\t while (chars + value.length >= splitChars) {\r\n\t screenColumn = this.$renderToken(\r\n\t stringBuilder, screenColumn,\r\n\t token, value.substring(0, splitChars - chars)\r\n\t );\r\n\t value = value.substring(splitChars - chars);\r\n\t chars = splitChars;\r\n\r\n\t if (!onlyContents) {\r\n\t stringBuilder.push(\"\",\r\n\t \"
\"\r\n\t );\r\n\t }\r\n\r\n\t stringBuilder.push(lang.stringRepeat(\"\\xa0\", splits.indent));\r\n\r\n\t split ++;\r\n\t screenColumn = 0;\r\n\t splitChars = splits[split] || Number.MAX_VALUE;\r\n\t }\r\n\t if (value.length != 0) {\r\n\t chars += value.length;\r\n\t screenColumn = this.$renderToken(\r\n\t stringBuilder, screenColumn, token, value\r\n\t );\r\n\t }\r\n\t }\r\n\t }\r\n\t };\r\n\r\n\t this.$renderSimpleLine = function(stringBuilder, tokens) {\r\n\t var screenColumn = 0;\r\n\t var token = tokens[0];\r\n\t var value = token.value;\r\n\t if (this.displayIndentGuides)\r\n\t value = this.renderIndentGuide(stringBuilder, value);\r\n\t if (value)\r\n\t screenColumn = this.$renderToken(stringBuilder, screenColumn, token, value);\r\n\t for (var i = 1; i < tokens.length; i++) {\r\n\t token = tokens[i];\r\n\t value = token.value;\r\n\t screenColumn = this.$renderToken(stringBuilder, screenColumn, token, value);\r\n\t }\r\n\t };\r\n\t this.$renderLine = function(stringBuilder, row, onlyContents, foldLine) {\r\n\t if (!foldLine && foldLine != false)\r\n\t foldLine = this.session.getFoldLine(row);\r\n\r\n\t if (foldLine)\r\n\t var tokens = this.$getFoldLineTokens(row, foldLine);\r\n\t else\r\n\t var tokens = this.session.getTokens(row);\r\n\r\n\r\n\t if (!onlyContents) {\r\n\t stringBuilder.push(\r\n\t \"
\"\r\n\t );\r\n\t }\r\n\r\n\t if (tokens.length) {\r\n\t var splits = this.session.getRowSplitData(row);\r\n\t if (splits && splits.length)\r\n\t this.$renderWrappedLine(stringBuilder, tokens, splits, onlyContents);\r\n\t else\r\n\t this.$renderSimpleLine(stringBuilder, tokens);\r\n\t }\r\n\r\n\t if (this.showInvisibles) {\r\n\t if (foldLine)\r\n\t row = foldLine.end.row\r\n\r\n\t stringBuilder.push(\r\n\t \"\",\r\n\t row == this.session.getLength() - 1 ? this.EOF_CHAR : this.EOL_CHAR,\r\n\t \"\"\r\n\t );\r\n\t }\r\n\t if (!onlyContents)\r\n\t stringBuilder.push(\"
\");\r\n\t };\r\n\r\n\t this.$getFoldLineTokens = function(row, foldLine) {\r\n\t var session = this.session;\r\n\t var renderTokens = [];\r\n\r\n\t function addTokens(tokens, from, to) {\r\n\t var idx = 0, col = 0;\r\n\t while ((col + tokens[idx].value.length) < from) {\r\n\t col += tokens[idx].value.length;\r\n\t idx++;\r\n\r\n\t if (idx == tokens.length)\r\n\t return;\r\n\t }\r\n\t if (col != from) {\r\n\t var value = tokens[idx].value.substring(from - col);\r\n\t if (value.length > (to - from))\r\n\t value = value.substring(0, to - from);\r\n\r\n\t renderTokens.push({\r\n\t type: tokens[idx].type,\r\n\t value: value\r\n\t });\r\n\r\n\t col = from + value.length;\r\n\t idx += 1;\r\n\t }\r\n\r\n\t while (col < to && idx < tokens.length) {\r\n\t var value = tokens[idx].value;\r\n\t if (value.length + col > to) {\r\n\t renderTokens.push({\r\n\t type: tokens[idx].type,\r\n\t value: value.substring(0, to - col)\r\n\t });\r\n\t } else\r\n\t renderTokens.push(tokens[idx]);\r\n\t col += value.length;\r\n\t idx += 1;\r\n\t }\r\n\t }\r\n\r\n\t var tokens = session.getTokens(row);\r\n\t foldLine.walk(function(placeholder, row, column, lastColumn, isNewRow) {\r\n\t if (placeholder != null) {\r\n\t renderTokens.push({\r\n\t type: \"fold\",\r\n\t value: placeholder\r\n\t });\r\n\t } else {\r\n\t if (isNewRow)\r\n\t tokens = session.getTokens(row);\r\n\r\n\t if (tokens.length)\r\n\t addTokens(tokens, lastColumn, column);\r\n\t }\r\n\t }, foldLine.end.row, this.session.getLine(foldLine.end.row).length);\r\n\r\n\t return renderTokens;\r\n\t };\r\n\r\n\t this.$useLineGroups = function() {\r\n\t return this.session.getUseWrapMode();\r\n\t };\r\n\r\n\t this.destroy = function() {\r\n\t clearInterval(this.$pollSizeChangesTimer);\r\n\t if (this.$measureNode)\r\n\t this.$measureNode.parentNode.removeChild(this.$measureNode);\r\n\t delete this.$measureNode;\r\n\t };\r\n\r\n\t}).call(Text.prototype);\r\n\r\n\texports.Text = Text;\r\n\r\n\t});\r\n\r\n\tace.define(\"ace/layer/cursor\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(acequire, exports, module) {\r\n\t\"use strict\";\r\n\r\n\tvar dom = acequire(\"../lib/dom\");\r\n\tvar isIE8;\r\n\r\n\tvar Cursor = function(parentEl) {\r\n\t this.element = dom.createElement(\"div\");\r\n\t this.element.className = \"ace_layer ace_cursor-layer\";\r\n\t parentEl.appendChild(this.element);\r\n\t \r\n\t if (isIE8 === undefined)\r\n\t isIE8 = !(\"opacity\" in this.element.style);\r\n\r\n\t this.isVisible = false;\r\n\t this.isBlinking = true;\r\n\t this.blinkInterval = 1000;\r\n\t this.smoothBlinking = false;\r\n\r\n\t this.cursors = [];\r\n\t this.cursor = this.addCursor();\r\n\t dom.addCssClass(this.element, \"ace_hidden-cursors\");\r\n\t this.$updateCursors = (isIE8\r\n\t ? this.$updateVisibility\r\n\t : this.$updateOpacity).bind(this);\r\n\t};\r\n\r\n\t(function() {\r\n\t \r\n\t this.$updateVisibility = function(val) {\r\n\t var cursors = this.cursors;\r\n\t for (var i = cursors.length; i--; )\r\n\t cursors[i].style.visibility = val ? \"\" : \"hidden\";\r\n\t };\r\n\t this.$updateOpacity = function(val) {\r\n\t var cursors = this.cursors;\r\n\t for (var i = cursors.length; i--; )\r\n\t cursors[i].style.opacity = val ? \"\" : \"0\";\r\n\t };\r\n\t \r\n\r\n\t this.$padding = 0;\r\n\t this.setPadding = function(padding) {\r\n\t this.$padding = padding;\r\n\t };\r\n\r\n\t this.setSession = function(session) {\r\n\t this.session = session;\r\n\t };\r\n\r\n\t this.setBlinking = function(blinking) {\r\n\t if (blinking != this.isBlinking){\r\n\t this.isBlinking = blinking;\r\n\t this.restartTimer();\r\n\t }\r\n\t };\r\n\r\n\t this.setBlinkInterval = function(blinkInterval) {\r\n\t if (blinkInterval != this.blinkInterval){\r\n\t this.blinkInterval = blinkInterval;\r\n\t this.restartTimer();\r\n\t }\r\n\t };\r\n\r\n\t this.setSmoothBlinking = function(smoothBlinking) {\r\n\t if (smoothBlinking != this.smoothBlinking && !isIE8) {\r\n\t this.smoothBlinking = smoothBlinking;\r\n\t dom.setCssClass(this.element, \"ace_smooth-blinking\", smoothBlinking);\r\n\t this.$updateCursors(true);\r\n\t this.$updateCursors = (this.$updateOpacity).bind(this);\r\n\t this.restartTimer();\r\n\t }\r\n\t };\r\n\r\n\t this.addCursor = function() {\r\n\t var el = dom.createElement(\"div\");\r\n\t el.className = \"ace_cursor\";\r\n\t this.element.appendChild(el);\r\n\t this.cursors.push(el);\r\n\t return el;\r\n\t };\r\n\r\n\t this.removeCursor = function() {\r\n\t if (this.cursors.length > 1) {\r\n\t var el = this.cursors.pop();\r\n\t el.parentNode.removeChild(el);\r\n\t return el;\r\n\t }\r\n\t };\r\n\r\n\t this.hideCursor = function() {\r\n\t this.isVisible = false;\r\n\t dom.addCssClass(this.element, \"ace_hidden-cursors\");\r\n\t this.restartTimer();\r\n\t };\r\n\r\n\t this.showCursor = function() {\r\n\t this.isVisible = true;\r\n\t dom.removeCssClass(this.element, \"ace_hidden-cursors\");\r\n\t this.restartTimer();\r\n\t };\r\n\r\n\t this.restartTimer = function() {\r\n\t var update = this.$updateCursors;\r\n\t clearInterval(this.intervalId);\r\n\t clearTimeout(this.timeoutId);\r\n\t if (this.smoothBlinking) {\r\n\t dom.removeCssClass(this.element, \"ace_smooth-blinking\");\r\n\t }\r\n\t \r\n\t update(true);\r\n\r\n\t if (!this.isBlinking || !this.blinkInterval || !this.isVisible)\r\n\t return;\r\n\r\n\t if (this.smoothBlinking) {\r\n\t setTimeout(function(){\r\n\t dom.addCssClass(this.element, \"ace_smooth-blinking\");\r\n\t }.bind(this));\r\n\t }\r\n\t \r\n\t var blink = function(){\r\n\t this.timeoutId = setTimeout(function() {\r\n\t update(false);\r\n\t }, 0.6 * this.blinkInterval);\r\n\t }.bind(this);\r\n\r\n\t this.intervalId = setInterval(function() {\r\n\t update(true);\r\n\t blink();\r\n\t }, this.blinkInterval);\r\n\r\n\t blink();\r\n\t };\r\n\r\n\t this.getPixelPosition = function(position, onScreen) {\r\n\t if (!this.config || !this.session)\r\n\t return {left : 0, top : 0};\r\n\r\n\t if (!position)\r\n\t position = this.session.selection.getCursor();\r\n\t var pos = this.session.documentToScreenPosition(position);\r\n\t var cursorLeft = this.$padding + pos.column * this.config.characterWidth;\r\n\t var cursorTop = (pos.row - (onScreen ? this.config.firstRowScreen : 0)) *\r\n\t this.config.lineHeight;\r\n\r\n\t return {left : cursorLeft, top : cursorTop};\r\n\t };\r\n\r\n\t this.update = function(config) {\r\n\t this.config = config;\r\n\r\n\t var selections = this.session.$selectionMarkers;\r\n\t var i = 0, cursorIndex = 0;\r\n\r\n\t if (selections === undefined || selections.length === 0){\r\n\t selections = [{cursor: null}];\r\n\t }\r\n\r\n\t for (var i = 0, n = selections.length; i < n; i++) {\r\n\t var pixelPos = this.getPixelPosition(selections[i].cursor, true);\r\n\t if ((pixelPos.top > config.height + config.offset ||\r\n\t pixelPos.top < 0) && i > 1) {\r\n\t continue;\r\n\t }\r\n\r\n\t var style = (this.cursors[cursorIndex++] || this.addCursor()).style;\r\n\t \r\n\t if (!this.drawCursor) {\r\n\t style.left = pixelPos.left + \"px\";\r\n\t style.top = pixelPos.top + \"px\";\r\n\t style.width = config.characterWidth + \"px\";\r\n\t style.height = config.lineHeight + \"px\";\r\n\t } else {\r\n\t this.drawCursor(style, pixelPos, config, selections[i], this.session);\r\n\t }\r\n\t }\r\n\t while (this.cursors.length > cursorIndex)\r\n\t this.removeCursor();\r\n\r\n\t var overwrite = this.session.getOverwrite();\r\n\t this.$setOverwrite(overwrite);\r\n\t this.$pixelPos = pixelPos;\r\n\t this.restartTimer();\r\n\t };\r\n\t \r\n\t this.drawCursor = null;\r\n\r\n\t this.$setOverwrite = function(overwrite) {\r\n\t if (overwrite != this.overwrite) {\r\n\t this.overwrite = overwrite;\r\n\t if (overwrite)\r\n\t dom.addCssClass(this.element, \"ace_overwrite-cursors\");\r\n\t else\r\n\t dom.removeCssClass(this.element, \"ace_overwrite-cursors\");\r\n\t }\r\n\t };\r\n\r\n\t this.destroy = function() {\r\n\t clearInterval(this.intervalId);\r\n\t clearTimeout(this.timeoutId);\r\n\t };\r\n\r\n\t}).call(Cursor.prototype);\r\n\r\n\texports.Cursor = Cursor;\r\n\r\n\t});\r\n\r\n\tace.define(\"ace/scrollbar\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/dom\",\"ace/lib/event\",\"ace/lib/event_emitter\"], function(acequire, exports, module) {\r\n\t\"use strict\";\r\n\r\n\tvar oop = acequire(\"./lib/oop\");\r\n\tvar dom = acequire(\"./lib/dom\");\r\n\tvar event = acequire(\"./lib/event\");\r\n\tvar EventEmitter = acequire(\"./lib/event_emitter\").EventEmitter;\r\n\tvar ScrollBar = function(parent) {\r\n\t this.element = dom.createElement(\"div\");\r\n\t this.element.className = \"ace_scrollbar ace_scrollbar\" + this.classSuffix;\r\n\r\n\t this.inner = dom.createElement(\"div\");\r\n\t this.inner.className = \"ace_scrollbar-inner\";\r\n\t this.element.appendChild(this.inner);\r\n\r\n\t parent.appendChild(this.element);\r\n\r\n\t this.setVisible(false);\r\n\t this.skipEvent = false;\r\n\r\n\t event.addListener(this.element, \"scroll\", this.onScroll.bind(this));\r\n\t event.addListener(this.element, \"mousedown\", event.preventDefault);\r\n\t};\r\n\r\n\t(function() {\r\n\t oop.implement(this, EventEmitter);\r\n\r\n\t this.setVisible = function(isVisible) {\r\n\t this.element.style.display = isVisible ? \"\" : \"none\";\r\n\t this.isVisible = isVisible;\r\n\t };\r\n\t}).call(ScrollBar.prototype);\r\n\tvar VScrollBar = function(parent, renderer) {\r\n\t ScrollBar.call(this, parent);\r\n\t this.scrollTop = 0;\r\n\t renderer.$scrollbarWidth = \r\n\t this.width = dom.scrollbarWidth(parent.ownerDocument);\r\n\t this.inner.style.width =\r\n\t this.element.style.width = (this.width || 15) + 5 + \"px\";\r\n\t};\r\n\r\n\toop.inherits(VScrollBar, ScrollBar);\r\n\r\n\t(function() {\r\n\r\n\t this.classSuffix = '-v';\r\n\t this.onScroll = function() {\r\n\t if (!this.skipEvent) {\r\n\t this.scrollTop = this.element.scrollTop;\r\n\t this._emit(\"scroll\", {data: this.scrollTop});\r\n\t }\r\n\t this.skipEvent = false;\r\n\t };\r\n\t this.getWidth = function() {\r\n\t return this.isVisible ? this.width : 0;\r\n\t };\r\n\t this.setHeight = function(height) {\r\n\t this.element.style.height = height + \"px\";\r\n\t };\r\n\t this.setInnerHeight = function(height) {\r\n\t this.inner.style.height = height + \"px\";\r\n\t };\r\n\t this.setScrollHeight = function(height) {\r\n\t this.inner.style.height = height + \"px\";\r\n\t };\r\n\t this.setScrollTop = function(scrollTop) {\r\n\t if (this.scrollTop != scrollTop) {\r\n\t this.skipEvent = true;\r\n\t this.scrollTop = this.element.scrollTop = scrollTop;\r\n\t }\r\n\t };\r\n\r\n\t}).call(VScrollBar.prototype);\r\n\tvar HScrollBar = function(parent, renderer) {\r\n\t ScrollBar.call(this, parent);\r\n\t this.scrollLeft = 0;\r\n\t this.height = renderer.$scrollbarWidth;\r\n\t this.inner.style.height =\r\n\t this.element.style.height = (this.height || 15) + 5 + \"px\";\r\n\t};\r\n\r\n\toop.inherits(HScrollBar, ScrollBar);\r\n\r\n\t(function() {\r\n\r\n\t this.classSuffix = '-h';\r\n\t this.onScroll = function() {\r\n\t if (!this.skipEvent) {\r\n\t this.scrollLeft = this.element.scrollLeft;\r\n\t this._emit(\"scroll\", {data: this.scrollLeft});\r\n\t }\r\n\t this.skipEvent = false;\r\n\t };\r\n\t this.getHeight = function() {\r\n\t return this.isVisible ? this.height : 0;\r\n\t };\r\n\t this.setWidth = function(width) {\r\n\t this.element.style.width = width + \"px\";\r\n\t };\r\n\t this.setInnerWidth = function(width) {\r\n\t this.inner.style.width = width + \"px\";\r\n\t };\r\n\t this.setScrollWidth = function(width) {\r\n\t this.inner.style.width = width + \"px\";\r\n\t };\r\n\t this.setScrollLeft = function(scrollLeft) {\r\n\t if (this.scrollLeft != scrollLeft) {\r\n\t this.skipEvent = true;\r\n\t this.scrollLeft = this.element.scrollLeft = scrollLeft;\r\n\t }\r\n\t };\r\n\r\n\t}).call(HScrollBar.prototype);\r\n\r\n\r\n\texports.ScrollBar = VScrollBar; // backward compatibility\r\n\texports.ScrollBarV = VScrollBar; // backward compatibility\r\n\texports.ScrollBarH = HScrollBar; // backward compatibility\r\n\r\n\texports.VScrollBar = VScrollBar;\r\n\texports.HScrollBar = HScrollBar;\r\n\t});\r\n\r\n\tace.define(\"ace/renderloop\",[\"require\",\"exports\",\"module\",\"ace/lib/event\"], function(acequire, exports, module) {\r\n\t\"use strict\";\r\n\r\n\tvar event = acequire(\"./lib/event\");\r\n\r\n\r\n\tvar RenderLoop = function(onRender, win) {\r\n\t this.onRender = onRender;\r\n\t this.pending = false;\r\n\t this.changes = 0;\r\n\t this.window = win || window;\r\n\t};\r\n\r\n\t(function() {\r\n\r\n\r\n\t this.schedule = function(change) {\r\n\t this.changes = this.changes | change;\r\n\t if (!this.pending && this.changes) {\r\n\t this.pending = true;\r\n\t var _self = this;\r\n\t event.nextFrame(function() {\r\n\t _self.pending = false;\r\n\t var changes;\r\n\t while (changes = _self.changes) {\r\n\t _self.changes = 0;\r\n\t _self.onRender(changes);\r\n\t }\r\n\t }, this.window);\r\n\t }\r\n\t };\r\n\r\n\t}).call(RenderLoop.prototype);\r\n\r\n\texports.RenderLoop = RenderLoop;\r\n\t});\r\n\r\n\tace.define(\"ace/layer/font_metrics\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/dom\",\"ace/lib/lang\",\"ace/lib/useragent\",\"ace/lib/event_emitter\"], function(acequire, exports, module) {\r\n\r\n\tvar oop = acequire(\"../lib/oop\");\r\n\tvar dom = acequire(\"../lib/dom\");\r\n\tvar lang = acequire(\"../lib/lang\");\r\n\tvar useragent = acequire(\"../lib/useragent\");\r\n\tvar EventEmitter = acequire(\"../lib/event_emitter\").EventEmitter;\r\n\r\n\tvar CHAR_COUNT = 0;\r\n\r\n\tvar FontMetrics = exports.FontMetrics = function(parentEl) {\r\n\t this.el = dom.createElement(\"div\");\r\n\t this.$setMeasureNodeStyles(this.el.style, true);\r\n\t \r\n\t this.$main = dom.createElement(\"div\");\r\n\t this.$setMeasureNodeStyles(this.$main.style);\r\n\t \r\n\t this.$measureNode = dom.createElement(\"div\");\r\n\t this.$setMeasureNodeStyles(this.$measureNode.style);\r\n\t \r\n\t \r\n\t this.el.appendChild(this.$main);\r\n\t this.el.appendChild(this.$measureNode);\r\n\t parentEl.appendChild(this.el);\r\n\t \r\n\t if (!CHAR_COUNT)\r\n\t this.$testFractionalRect();\r\n\t this.$measureNode.innerHTML = lang.stringRepeat(\"X\", CHAR_COUNT);\r\n\t \r\n\t this.$characterSize = {width: 0, height: 0};\r\n\t this.checkForSizeChanges();\r\n\t};\r\n\r\n\t(function() {\r\n\r\n\t oop.implement(this, EventEmitter);\r\n\t \r\n\t this.$characterSize = {width: 0, height: 0};\r\n\t \r\n\t this.$testFractionalRect = function() {\r\n\t var el = dom.createElement(\"div\");\r\n\t this.$setMeasureNodeStyles(el.style);\r\n\t el.style.width = \"0.2px\";\r\n\t document.documentElement.appendChild(el);\r\n\t var w = el.getBoundingClientRect().width;\r\n\t if (w > 0 && w < 1)\r\n\t CHAR_COUNT = 50;\r\n\t else\r\n\t CHAR_COUNT = 100;\r\n\t el.parentNode.removeChild(el);\r\n\t };\r\n\t \r\n\t this.$setMeasureNodeStyles = function(style, isRoot) {\r\n\t style.width = style.height = \"auto\";\r\n\t style.left = style.top = \"0px\";\r\n\t style.visibility = \"hidden\";\r\n\t style.position = \"absolute\";\r\n\t style.whiteSpace = \"pre\";\r\n\r\n\t if (useragent.isIE < 8) {\r\n\t style[\"font-family\"] = \"inherit\";\r\n\t } else {\r\n\t style.font = \"inherit\";\r\n\t }\r\n\t style.overflow = isRoot ? \"hidden\" : \"visible\";\r\n\t };\r\n\r\n\t this.checkForSizeChanges = function() {\r\n\t var size = this.$measureSizes();\r\n\t if (size && (this.$characterSize.width !== size.width || this.$characterSize.height !== size.height)) {\r\n\t this.$measureNode.style.fontWeight = \"bold\";\r\n\t var boldSize = this.$measureSizes();\r\n\t this.$measureNode.style.fontWeight = \"\";\r\n\t this.$characterSize = size;\r\n\t this.charSizes = Object.create(null);\r\n\t this.allowBoldFonts = boldSize && boldSize.width === size.width && boldSize.height === size.height;\r\n\t this._emit(\"changeCharacterSize\", {data: size});\r\n\t }\r\n\t };\r\n\r\n\t this.$pollSizeChanges = function() {\r\n\t if (this.$pollSizeChangesTimer)\r\n\t return this.$pollSizeChangesTimer;\r\n\t var self = this;\r\n\t return this.$pollSizeChangesTimer = setInterval(function() {\r\n\t self.checkForSizeChanges();\r\n\t }, 500);\r\n\t };\r\n\t \r\n\t this.setPolling = function(val) {\r\n\t if (val) {\r\n\t this.$pollSizeChanges();\r\n\t } else if (this.$pollSizeChangesTimer) {\r\n\t clearInterval(this.$pollSizeChangesTimer);\r\n\t this.$pollSizeChangesTimer = 0;\r\n\t }\r\n\t };\r\n\r\n\t this.$measureSizes = function() {\r\n\t if (CHAR_COUNT === 50) {\r\n\t var rect = null;\r\n\t try { \r\n\t rect = this.$measureNode.getBoundingClientRect();\r\n\t } catch(e) {\r\n\t rect = {width: 0, height:0 };\r\n\t }\r\n\t var size = {\r\n\t height: rect.height,\r\n\t width: rect.width / CHAR_COUNT\r\n\t };\r\n\t } else {\r\n\t var size = {\r\n\t height: this.$measureNode.clientHeight,\r\n\t width: this.$measureNode.clientWidth / CHAR_COUNT\r\n\t };\r\n\t }\r\n\t if (size.width === 0 || size.height === 0)\r\n\t return null;\r\n\t return size;\r\n\t };\r\n\r\n\t this.$measureCharWidth = function(ch) {\r\n\t this.$main.innerHTML = lang.stringRepeat(ch, CHAR_COUNT);\r\n\t var rect = this.$main.getBoundingClientRect();\r\n\t return rect.width / CHAR_COUNT;\r\n\t };\r\n\t \r\n\t this.getCharacterWidth = function(ch) {\r\n\t var w = this.charSizes[ch];\r\n\t if (w === undefined) {\r\n\t w = this.charSizes[ch] = this.$measureCharWidth(ch) / this.$characterSize.width;\r\n\t }\r\n\t return w;\r\n\t };\r\n\r\n\t this.destroy = function() {\r\n\t clearInterval(this.$pollSizeChangesTimer);\r\n\t if (this.el && this.el.parentNode)\r\n\t this.el.parentNode.removeChild(this.el);\r\n\t };\r\n\r\n\t}).call(FontMetrics.prototype);\r\n\r\n\t});\r\n\r\n\tace.define(\"ace/virtual_renderer\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/dom\",\"ace/config\",\"ace/lib/useragent\",\"ace/layer/gutter\",\"ace/layer/marker\",\"ace/layer/text\",\"ace/layer/cursor\",\"ace/scrollbar\",\"ace/scrollbar\",\"ace/renderloop\",\"ace/layer/font_metrics\",\"ace/lib/event_emitter\"], function(acequire, exports, module) {\r\n\t\"use strict\";\r\n\r\n\tvar oop = acequire(\"./lib/oop\");\r\n\tvar dom = acequire(\"./lib/dom\");\r\n\tvar config = acequire(\"./config\");\r\n\tvar useragent = acequire(\"./lib/useragent\");\r\n\tvar GutterLayer = acequire(\"./layer/gutter\").Gutter;\r\n\tvar MarkerLayer = acequire(\"./layer/marker\").Marker;\r\n\tvar TextLayer = acequire(\"./layer/text\").Text;\r\n\tvar CursorLayer = acequire(\"./layer/cursor\").Cursor;\r\n\tvar HScrollBar = acequire(\"./scrollbar\").HScrollBar;\r\n\tvar VScrollBar = acequire(\"./scrollbar\").VScrollBar;\r\n\tvar RenderLoop = acequire(\"./renderloop\").RenderLoop;\r\n\tvar FontMetrics = acequire(\"./layer/font_metrics\").FontMetrics;\r\n\tvar EventEmitter = acequire(\"./lib/event_emitter\").EventEmitter;\r\n\tvar editorCss = \".ace_editor {\\\r\n\tposition: relative;\\\r\n\toverflow: hidden;\\\r\n\tfont: 12px/normal 'Monaco', 'Menlo', 'Ubuntu Mono', 'Consolas', 'source-code-pro', monospace;\\\r\n\tdirection: ltr;\\\r\n\t}\\\r\n\t.ace_scroller {\\\r\n\tposition: absolute;\\\r\n\toverflow: hidden;\\\r\n\ttop: 0;\\\r\n\tbottom: 0;\\\r\n\tbackground-color: inherit;\\\r\n\t-ms-user-select: none;\\\r\n\t-moz-user-select: none;\\\r\n\t-webkit-user-select: none;\\\r\n\tuser-select: none;\\\r\n\tcursor: text;\\\r\n\t}\\\r\n\t.ace_content {\\\r\n\tposition: absolute;\\\r\n\t-moz-box-sizing: border-box;\\\r\n\t-webkit-box-sizing: border-box;\\\r\n\tbox-sizing: border-box;\\\r\n\tmin-width: 100%;\\\r\n\t}\\\r\n\t.ace_dragging .ace_scroller:before{\\\r\n\tposition: absolute;\\\r\n\ttop: 0;\\\r\n\tleft: 0;\\\r\n\tright: 0;\\\r\n\tbottom: 0;\\\r\n\tcontent: '';\\\r\n\tbackground: rgba(250, 250, 250, 0.01);\\\r\n\tz-index: 1000;\\\r\n\t}\\\r\n\t.ace_dragging.ace_dark .ace_scroller:before{\\\r\n\tbackground: rgba(0, 0, 0, 0.01);\\\r\n\t}\\\r\n\t.ace_selecting, .ace_selecting * {\\\r\n\tcursor: text !important;\\\r\n\t}\\\r\n\t.ace_gutter {\\\r\n\tposition: absolute;\\\r\n\toverflow : hidden;\\\r\n\twidth: auto;\\\r\n\ttop: 0;\\\r\n\tbottom: 0;\\\r\n\tleft: 0;\\\r\n\tcursor: default;\\\r\n\tz-index: 4;\\\r\n\t-ms-user-select: none;\\\r\n\t-moz-user-select: none;\\\r\n\t-webkit-user-select: none;\\\r\n\tuser-select: none;\\\r\n\t}\\\r\n\t.ace_gutter-active-line {\\\r\n\tposition: absolute;\\\r\n\tleft: 0;\\\r\n\tright: 0;\\\r\n\t}\\\r\n\t.ace_scroller.ace_scroll-left {\\\r\n\tbox-shadow: 17px 0 16px -16px rgba(0, 0, 0, 0.4) inset;\\\r\n\t}\\\r\n\t.ace_gutter-cell {\\\r\n\tpadding-left: 19px;\\\r\n\tpadding-right: 6px;\\\r\n\tbackground-repeat: no-repeat;\\\r\n\t}\\\r\n\t.ace_gutter-cell.ace_error {\\\r\n\tbackground-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAABOFBMVEX/////////QRswFAb/Ui4wFAYwFAYwFAaWGAfDRymzOSH/PxswFAb/SiUwFAYwFAbUPRvjQiDllog5HhHdRybsTi3/Tyv9Tir+Syj/UC3////XurebMBIwFAb/RSHbPx/gUzfdwL3kzMivKBAwFAbbvbnhPx66NhowFAYwFAaZJg8wFAaxKBDZurf/RB6mMxb/SCMwFAYwFAbxQB3+RB4wFAb/Qhy4Oh+4QifbNRcwFAYwFAYwFAb/QRzdNhgwFAYwFAbav7v/Uy7oaE68MBK5LxLewr/r2NXewLswFAaxJw4wFAbkPRy2PyYwFAaxKhLm1tMwFAazPiQwFAaUGAb/QBrfOx3bvrv/VC/maE4wFAbRPBq6MRO8Qynew8Dp2tjfwb0wFAbx6eju5+by6uns4uH9/f36+vr/GkHjAAAAYnRSTlMAGt+64rnWu/bo8eAA4InH3+DwoN7j4eLi4xP99Nfg4+b+/u9B/eDs1MD1mO7+4PHg2MXa347g7vDizMLN4eG+Pv7i5evs/v79yu7S3/DV7/498Yv24eH+4ufQ3Ozu/v7+y13sRqwAAADLSURBVHjaZc/XDsFgGIBhtDrshlitmk2IrbHFqL2pvXf/+78DPokj7+Fz9qpU/9UXJIlhmPaTaQ6QPaz0mm+5gwkgovcV6GZzd5JtCQwgsxoHOvJO15kleRLAnMgHFIESUEPmawB9ngmelTtipwwfASilxOLyiV5UVUyVAfbG0cCPHig+GBkzAENHS0AstVF6bacZIOzgLmxsHbt2OecNgJC83JERmePUYq8ARGkJx6XtFsdddBQgZE2nPR6CICZhawjA4Fb/chv+399kfR+MMMDGOQAAAABJRU5ErkJggg==\\\");\\\r\n\tbackground-repeat: no-repeat;\\\r\n\tbackground-position: 2px center;\\\r\n\t}\\\r\n\t.ace_gutter-cell.ace_warning {\\\r\n\tbackground-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAmVBMVEX///8AAAD///8AAAAAAABPSzb/5sAAAAB/blH/73z/ulkAAAAAAAD85pkAAAAAAAACAgP/vGz/rkDerGbGrV7/pkQICAf////e0IsAAAD/oED/qTvhrnUAAAD/yHD/njcAAADuv2r/nz//oTj/p064oGf/zHAAAAA9Nir/tFIAAAD/tlTiuWf/tkIAAACynXEAAAAAAAAtIRW7zBpBAAAAM3RSTlMAABR1m7RXO8Ln31Z36zT+neXe5OzooRDfn+TZ4p3h2hTf4t3k3ucyrN1K5+Xaks52Sfs9CXgrAAAAjklEQVR42o3PbQ+CIBQFYEwboPhSYgoYunIqqLn6/z8uYdH8Vmdnu9vz4WwXgN/xTPRD2+sgOcZjsge/whXZgUaYYvT8QnuJaUrjrHUQreGczuEafQCO/SJTufTbroWsPgsllVhq3wJEk2jUSzX3CUEDJC84707djRc5MTAQxoLgupWRwW6UB5fS++NV8AbOZgnsC7BpEAAAAABJRU5ErkJggg==\\\");\\\r\n\tbackground-position: 2px center;\\\r\n\t}\\\r\n\t.ace_gutter-cell.ace_info {\\\r\n\tbackground-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAAAAAA6mKC9AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAAJ0Uk5TAAB2k804AAAAPklEQVQY02NgIB68QuO3tiLznjAwpKTgNyDbMegwisCHZUETUZV0ZqOquBpXj2rtnpSJT1AEnnRmL2OgGgAAIKkRQap2htgAAAAASUVORK5CYII=\\\");\\\r\n\tbackground-position: 2px center;\\\r\n\t}\\\r\n\t.ace_dark .ace_gutter-cell.ace_info {\\\r\n\tbackground-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAJFBMVEUAAAChoaGAgIAqKiq+vr6tra1ZWVmUlJSbm5s8PDxubm56enrdgzg3AAAAAXRSTlMAQObYZgAAAClJREFUeNpjYMAPdsMYHegyJZFQBlsUlMFVCWUYKkAZMxZAGdxlDMQBAG+TBP4B6RyJAAAAAElFTkSuQmCC\\\");\\\r\n\t}\\\r\n\t.ace_scrollbar {\\\r\n\tposition: absolute;\\\r\n\tright: 0;\\\r\n\tbottom: 0;\\\r\n\tz-index: 6;\\\r\n\t}\\\r\n\t.ace_scrollbar-inner {\\\r\n\tposition: absolute;\\\r\n\tcursor: text;\\\r\n\tleft: 0;\\\r\n\ttop: 0;\\\r\n\t}\\\r\n\t.ace_scrollbar-v{\\\r\n\toverflow-x: hidden;\\\r\n\toverflow-y: scroll;\\\r\n\ttop: 0;\\\r\n\t}\\\r\n\t.ace_scrollbar-h {\\\r\n\toverflow-x: scroll;\\\r\n\toverflow-y: hidden;\\\r\n\tleft: 0;\\\r\n\t}\\\r\n\t.ace_print-margin {\\\r\n\tposition: absolute;\\\r\n\theight: 100%;\\\r\n\t}\\\r\n\t.ace_text-input {\\\r\n\tposition: absolute;\\\r\n\tz-index: 0;\\\r\n\twidth: 0.5em;\\\r\n\theight: 1em;\\\r\n\topacity: 0;\\\r\n\tbackground: transparent;\\\r\n\t-moz-appearance: none;\\\r\n\tappearance: none;\\\r\n\tborder: none;\\\r\n\tresize: none;\\\r\n\toutline: none;\\\r\n\toverflow: hidden;\\\r\n\tfont: inherit;\\\r\n\tpadding: 0 1px;\\\r\n\tmargin: 0 -1px;\\\r\n\ttext-indent: -1em;\\\r\n\t-ms-user-select: text;\\\r\n\t-moz-user-select: text;\\\r\n\t-webkit-user-select: text;\\\r\n\tuser-select: text;\\\r\n\twhite-space: pre!important;\\\r\n\t}\\\r\n\t.ace_text-input.ace_composition {\\\r\n\tbackground: inherit;\\\r\n\tcolor: inherit;\\\r\n\tz-index: 1000;\\\r\n\topacity: 1;\\\r\n\ttext-indent: 0;\\\r\n\t}\\\r\n\t.ace_layer {\\\r\n\tz-index: 1;\\\r\n\tposition: absolute;\\\r\n\toverflow: hidden;\\\r\n\tword-wrap: normal;\\\r\n\twhite-space: pre;\\\r\n\theight: 100%;\\\r\n\twidth: 100%;\\\r\n\t-moz-box-sizing: border-box;\\\r\n\t-webkit-box-sizing: border-box;\\\r\n\tbox-sizing: border-box;\\\r\n\tpointer-events: none;\\\r\n\t}\\\r\n\t.ace_gutter-layer {\\\r\n\tposition: relative;\\\r\n\twidth: auto;\\\r\n\ttext-align: right;\\\r\n\tpointer-events: auto;\\\r\n\t}\\\r\n\t.ace_text-layer {\\\r\n\tfont: inherit !important;\\\r\n\t}\\\r\n\t.ace_cjk {\\\r\n\tdisplay: inline-block;\\\r\n\ttext-align: center;\\\r\n\t}\\\r\n\t.ace_cursor-layer {\\\r\n\tz-index: 4;\\\r\n\t}\\\r\n\t.ace_cursor {\\\r\n\tz-index: 4;\\\r\n\tposition: absolute;\\\r\n\t-moz-box-sizing: border-box;\\\r\n\t-webkit-box-sizing: border-box;\\\r\n\tbox-sizing: border-box;\\\r\n\tborder-left: 2px solid;\\\r\n\ttransform: translatez(0);\\\r\n\t}\\\r\n\t.ace_slim-cursors .ace_cursor {\\\r\n\tborder-left-width: 1px;\\\r\n\t}\\\r\n\t.ace_overwrite-cursors .ace_cursor {\\\r\n\tborder-left-width: 0;\\\r\n\tborder-bottom: 1px solid;\\\r\n\t}\\\r\n\t.ace_hidden-cursors .ace_cursor {\\\r\n\topacity: 0.2;\\\r\n\t}\\\r\n\t.ace_smooth-blinking .ace_cursor {\\\r\n\t-webkit-transition: opacity 0.18s;\\\r\n\ttransition: opacity 0.18s;\\\r\n\t}\\\r\n\t.ace_editor.ace_multiselect .ace_cursor {\\\r\n\tborder-left-width: 1px;\\\r\n\t}\\\r\n\t.ace_marker-layer .ace_step, .ace_marker-layer .ace_stack {\\\r\n\tposition: absolute;\\\r\n\tz-index: 3;\\\r\n\t}\\\r\n\t.ace_marker-layer .ace_selection {\\\r\n\tposition: absolute;\\\r\n\tz-index: 5;\\\r\n\t}\\\r\n\t.ace_marker-layer .ace_bracket {\\\r\n\tposition: absolute;\\\r\n\tz-index: 6;\\\r\n\t}\\\r\n\t.ace_marker-layer .ace_active-line {\\\r\n\tposition: absolute;\\\r\n\tz-index: 2;\\\r\n\t}\\\r\n\t.ace_marker-layer .ace_selected-word {\\\r\n\tposition: absolute;\\\r\n\tz-index: 4;\\\r\n\t-moz-box-sizing: border-box;\\\r\n\t-webkit-box-sizing: border-box;\\\r\n\tbox-sizing: border-box;\\\r\n\t}\\\r\n\t.ace_line .ace_fold {\\\r\n\t-moz-box-sizing: border-box;\\\r\n\t-webkit-box-sizing: border-box;\\\r\n\tbox-sizing: border-box;\\\r\n\tdisplay: inline-block;\\\r\n\theight: 11px;\\\r\n\tmargin-top: -2px;\\\r\n\tvertical-align: middle;\\\r\n\tbackground-image:\\\r\n\turl(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAAJCAYAAADU6McMAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAJpJREFUeNpi/P//PwOlgAXGYGRklAVSokD8GmjwY1wasKljQpYACtpCFeADcHVQfQyMQAwzwAZI3wJKvCLkfKBaMSClBlR7BOQikCFGQEErIH0VqkabiGCAqwUadAzZJRxQr/0gwiXIal8zQQPnNVTgJ1TdawL0T5gBIP1MUJNhBv2HKoQHHjqNrA4WO4zY0glyNKLT2KIfIMAAQsdgGiXvgnYAAAAASUVORK5CYII=\\\"),\\\r\n\turl(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAA3CAYAAADNNiA5AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACJJREFUeNpi+P//fxgTAwPDBxDxD078RSX+YeEyDFMCIMAAI3INmXiwf2YAAAAASUVORK5CYII=\\\");\\\r\n\tbackground-repeat: no-repeat, repeat-x;\\\r\n\tbackground-position: center center, top left;\\\r\n\tcolor: transparent;\\\r\n\tborder: 1px solid black;\\\r\n\tborder-radius: 2px;\\\r\n\tcursor: pointer;\\\r\n\tpointer-events: auto;\\\r\n\t}\\\r\n\t.ace_dark .ace_fold {\\\r\n\t}\\\r\n\t.ace_fold:hover{\\\r\n\tbackground-image:\\\r\n\turl(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAAJCAYAAADU6McMAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAJpJREFUeNpi/P//PwOlgAXGYGRklAVSokD8GmjwY1wasKljQpYACtpCFeADcHVQfQyMQAwzwAZI3wJKvCLkfKBaMSClBlR7BOQikCFGQEErIH0VqkabiGCAqwUadAzZJRxQr/0gwiXIal8zQQPnNVTgJ1TdawL0T5gBIP1MUJNhBv2HKoQHHjqNrA4WO4zY0glyNKLT2KIfIMAAQsdgGiXvgnYAAAAASUVORK5CYII=\\\"),\\\r\n\turl(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAA3CAYAAADNNiA5AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACBJREFUeNpi+P//fz4TAwPDZxDxD5X4i5fLMEwJgAADAEPVDbjNw87ZAAAAAElFTkSuQmCC\\\");\\\r\n\t}\\\r\n\t.ace_tooltip {\\\r\n\tbackground-color: #FFF;\\\r\n\tbackground-image: -webkit-linear-gradient(top, transparent, rgba(0, 0, 0, 0.1));\\\r\n\tbackground-image: linear-gradient(to bottom, transparent, rgba(0, 0, 0, 0.1));\\\r\n\tborder: 1px solid gray;\\\r\n\tborder-radius: 1px;\\\r\n\tbox-shadow: 0 1px 2px rgba(0, 0, 0, 0.3);\\\r\n\tcolor: black;\\\r\n\tmax-width: 100%;\\\r\n\tpadding: 3px 4px;\\\r\n\tposition: fixed;\\\r\n\tz-index: 999999;\\\r\n\t-moz-box-sizing: border-box;\\\r\n\t-webkit-box-sizing: border-box;\\\r\n\tbox-sizing: border-box;\\\r\n\tcursor: default;\\\r\n\twhite-space: pre;\\\r\n\tword-wrap: break-word;\\\r\n\tline-height: normal;\\\r\n\tfont-style: normal;\\\r\n\tfont-weight: normal;\\\r\n\tletter-spacing: normal;\\\r\n\tpointer-events: none;\\\r\n\t}\\\r\n\t.ace_folding-enabled > .ace_gutter-cell {\\\r\n\tpadding-right: 13px;\\\r\n\t}\\\r\n\t.ace_fold-widget {\\\r\n\t-moz-box-sizing: border-box;\\\r\n\t-webkit-box-sizing: border-box;\\\r\n\tbox-sizing: border-box;\\\r\n\tmargin: 0 -12px 0 1px;\\\r\n\tdisplay: none;\\\r\n\twidth: 11px;\\\r\n\tvertical-align: top;\\\r\n\tbackground-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAANElEQVR42mWKsQ0AMAzC8ixLlrzQjzmBiEjp0A6WwBCSPgKAXoLkqSot7nN3yMwR7pZ32NzpKkVoDBUxKAAAAABJRU5ErkJggg==\\\");\\\r\n\tbackground-repeat: no-repeat;\\\r\n\tbackground-position: center;\\\r\n\tborder-radius: 3px;\\\r\n\tborder: 1px solid transparent;\\\r\n\tcursor: pointer;\\\r\n\t}\\\r\n\t.ace_folding-enabled .ace_fold-widget {\\\r\n\tdisplay: inline-block; \\\r\n\t}\\\r\n\t.ace_fold-widget.ace_end {\\\r\n\tbackground-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAANElEQVR42m3HwQkAMAhD0YzsRchFKI7sAikeWkrxwScEB0nh5e7KTPWimZki4tYfVbX+MNl4pyZXejUO1QAAAABJRU5ErkJggg==\\\");\\\r\n\t}\\\r\n\t.ace_fold-widget.ace_closed {\\\r\n\tbackground-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAGCAYAAAAG5SQMAAAAOUlEQVR42jXKwQkAMAgDwKwqKD4EwQ26sSOkVWjgIIHAzPiCgaqiqnJHZnKICBERHN194O5b9vbLuAVRL+l0YWnZAAAAAElFTkSuQmCCXA==\\\");\\\r\n\t}\\\r\n\t.ace_fold-widget:hover {\\\r\n\tborder: 1px solid rgba(0, 0, 0, 0.3);\\\r\n\tbackground-color: rgba(255, 255, 255, 0.2);\\\r\n\tbox-shadow: 0 1px 1px rgba(255, 255, 255, 0.7);\\\r\n\t}\\\r\n\t.ace_fold-widget:active {\\\r\n\tborder: 1px solid rgba(0, 0, 0, 0.4);\\\r\n\tbackground-color: rgba(0, 0, 0, 0.05);\\\r\n\tbox-shadow: 0 1px 1px rgba(255, 255, 255, 0.8);\\\r\n\t}\\\r\n\t.ace_dark .ace_fold-widget {\\\r\n\tbackground-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHklEQVQIW2P4//8/AzoGEQ7oGCaLLAhWiSwB146BAQCSTPYocqT0AAAAAElFTkSuQmCC\\\");\\\r\n\t}\\\r\n\t.ace_dark .ace_fold-widget.ace_end {\\\r\n\tbackground-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAH0lEQVQIW2P4//8/AxQ7wNjIAjDMgC4AxjCVKBirIAAF0kz2rlhxpAAAAABJRU5ErkJggg==\\\");\\\r\n\t}\\\r\n\t.ace_dark .ace_fold-widget.ace_closed {\\\r\n\tbackground-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAFCAYAAACAcVaiAAAAHElEQVQIW2P4//+/AxAzgDADlOOAznHAKgPWAwARji8UIDTfQQAAAABJRU5ErkJggg==\\\");\\\r\n\t}\\\r\n\t.ace_dark .ace_fold-widget:hover {\\\r\n\tbox-shadow: 0 1px 1px rgba(255, 255, 255, 0.2);\\\r\n\tbackground-color: rgba(255, 255, 255, 0.1);\\\r\n\t}\\\r\n\t.ace_dark .ace_fold-widget:active {\\\r\n\tbox-shadow: 0 1px 1px rgba(255, 255, 255, 0.2);\\\r\n\t}\\\r\n\t.ace_fold-widget.ace_invalid {\\\r\n\tbackground-color: #FFB4B4;\\\r\n\tborder-color: #DE5555;\\\r\n\t}\\\r\n\t.ace_fade-fold-widgets .ace_fold-widget {\\\r\n\t-webkit-transition: opacity 0.4s ease 0.05s;\\\r\n\ttransition: opacity 0.4s ease 0.05s;\\\r\n\topacity: 0;\\\r\n\t}\\\r\n\t.ace_fade-fold-widgets:hover .ace_fold-widget {\\\r\n\t-webkit-transition: opacity 0.05s ease 0.05s;\\\r\n\ttransition: opacity 0.05s ease 0.05s;\\\r\n\topacity:1;\\\r\n\t}\\\r\n\t.ace_underline {\\\r\n\ttext-decoration: underline;\\\r\n\t}\\\r\n\t.ace_bold {\\\r\n\tfont-weight: bold;\\\r\n\t}\\\r\n\t.ace_nobold .ace_bold {\\\r\n\tfont-weight: normal;\\\r\n\t}\\\r\n\t.ace_italic {\\\r\n\tfont-style: italic;\\\r\n\t}\\\r\n\t.ace_error-marker {\\\r\n\tbackground-color: rgba(255, 0, 0,0.2);\\\r\n\tposition: absolute;\\\r\n\tz-index: 9;\\\r\n\t}\\\r\n\t.ace_highlight-marker {\\\r\n\tbackground-color: rgba(255, 255, 0,0.2);\\\r\n\tposition: absolute;\\\r\n\tz-index: 8;\\\r\n\t}\\\r\n\t.ace_br1 {border-top-left-radius : 3px;}\\\r\n\t.ace_br2 {border-top-right-radius : 3px;}\\\r\n\t.ace_br3 {border-top-left-radius : 3px; border-top-right-radius: 3px;}\\\r\n\t.ace_br4 {border-bottom-right-radius: 3px;}\\\r\n\t.ace_br5 {border-top-left-radius : 3px; border-bottom-right-radius: 3px;}\\\r\n\t.ace_br6 {border-top-right-radius : 3px; border-bottom-right-radius: 3px;}\\\r\n\t.ace_br7 {border-top-left-radius : 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px;}\\\r\n\t.ace_br8 {border-bottom-left-radius : 3px;}\\\r\n\t.ace_br9 {border-top-left-radius : 3px; border-bottom-left-radius: 3px;}\\\r\n\t.ace_br10{border-top-right-radius : 3px; border-bottom-left-radius: 3px;}\\\r\n\t.ace_br11{border-top-left-radius : 3px; border-top-right-radius: 3px; border-bottom-left-radius: 3px;}\\\r\n\t.ace_br12{border-bottom-right-radius: 3px; border-bottom-left-radius: 3px;}\\\r\n\t.ace_br13{border-top-left-radius : 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px;}\\\r\n\t.ace_br14{border-top-right-radius : 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px;}\\\r\n\t.ace_br15{border-top-left-radius : 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px;}\\\r\n\t\";\r\n\r\n\tdom.importCssString(editorCss, \"ace_editor.css\");\r\n\r\n\tvar VirtualRenderer = function(container, theme) {\r\n\t var _self = this;\r\n\r\n\t this.container = container || dom.createElement(\"div\");\r\n\t this.$keepTextAreaAtCursor = !useragent.isOldIE;\r\n\r\n\t dom.addCssClass(this.container, \"ace_editor\");\r\n\r\n\t this.setTheme(theme);\r\n\r\n\t this.$gutter = dom.createElement(\"div\");\r\n\t this.$gutter.className = \"ace_gutter\";\r\n\t this.container.appendChild(this.$gutter);\r\n\r\n\t this.scroller = dom.createElement(\"div\");\r\n\t this.scroller.className = \"ace_scroller\";\r\n\t this.container.appendChild(this.scroller);\r\n\r\n\t this.content = dom.createElement(\"div\");\r\n\t this.content.className = \"ace_content\";\r\n\t this.scroller.appendChild(this.content);\r\n\r\n\t this.$gutterLayer = new GutterLayer(this.$gutter);\r\n\t this.$gutterLayer.on(\"changeGutterWidth\", this.onGutterResize.bind(this));\r\n\r\n\t this.$markerBack = new MarkerLayer(this.content);\r\n\r\n\t var textLayer = this.$textLayer = new TextLayer(this.content);\r\n\t this.canvas = textLayer.element;\r\n\r\n\t this.$markerFront = new MarkerLayer(this.content);\r\n\r\n\t this.$cursorLayer = new CursorLayer(this.content);\r\n\t this.$horizScroll = false;\r\n\t this.$vScroll = false;\r\n\r\n\t this.scrollBar = \r\n\t this.scrollBarV = new VScrollBar(this.container, this);\r\n\t this.scrollBarH = new HScrollBar(this.container, this);\r\n\t this.scrollBarV.addEventListener(\"scroll\", function(e) {\r\n\t if (!_self.$scrollAnimation)\r\n\t _self.session.setScrollTop(e.data - _self.scrollMargin.top);\r\n\t });\r\n\t this.scrollBarH.addEventListener(\"scroll\", function(e) {\r\n\t if (!_self.$scrollAnimation)\r\n\t _self.session.setScrollLeft(e.data - _self.scrollMargin.left);\r\n\t });\r\n\r\n\t this.scrollTop = 0;\r\n\t this.scrollLeft = 0;\r\n\r\n\t this.cursorPos = {\r\n\t row : 0,\r\n\t column : 0\r\n\t };\r\n\r\n\t this.$fontMetrics = new FontMetrics(this.container);\r\n\t this.$textLayer.$setFontMetrics(this.$fontMetrics);\r\n\t this.$textLayer.addEventListener(\"changeCharacterSize\", function(e) {\r\n\t _self.updateCharacterSize();\r\n\t _self.onResize(true, _self.gutterWidth, _self.$size.width, _self.$size.height);\r\n\t _self._signal(\"changeCharacterSize\", e);\r\n\t });\r\n\r\n\t this.$size = {\r\n\t width: 0,\r\n\t height: 0,\r\n\t scrollerHeight: 0,\r\n\t scrollerWidth: 0,\r\n\t $dirty: true\r\n\t };\r\n\r\n\t this.layerConfig = {\r\n\t width : 1,\r\n\t padding : 0,\r\n\t firstRow : 0,\r\n\t firstRowScreen: 0,\r\n\t lastRow : 0,\r\n\t lineHeight : 0,\r\n\t characterWidth : 0,\r\n\t minHeight : 1,\r\n\t maxHeight : 1,\r\n\t offset : 0,\r\n\t height : 1,\r\n\t gutterOffset: 1\r\n\t };\r\n\t \r\n\t this.scrollMargin = {\r\n\t left: 0,\r\n\t right: 0,\r\n\t top: 0,\r\n\t bottom: 0,\r\n\t v: 0,\r\n\t h: 0\r\n\t };\r\n\r\n\t this.$loop = new RenderLoop(\r\n\t this.$renderChanges.bind(this),\r\n\t this.container.ownerDocument.defaultView\r\n\t );\r\n\t this.$loop.schedule(this.CHANGE_FULL);\r\n\r\n\t this.updateCharacterSize();\r\n\t this.setPadding(4);\r\n\t config.resetOptions(this);\r\n\t config._emit(\"renderer\", this);\r\n\t};\r\n\r\n\t(function() {\r\n\r\n\t this.CHANGE_CURSOR = 1;\r\n\t this.CHANGE_MARKER = 2;\r\n\t this.CHANGE_GUTTER = 4;\r\n\t this.CHANGE_SCROLL = 8;\r\n\t this.CHANGE_LINES = 16;\r\n\t this.CHANGE_TEXT = 32;\r\n\t this.CHANGE_SIZE = 64;\r\n\t this.CHANGE_MARKER_BACK = 128;\r\n\t this.CHANGE_MARKER_FRONT = 256;\r\n\t this.CHANGE_FULL = 512;\r\n\t this.CHANGE_H_SCROLL = 1024;\r\n\r\n\t oop.implement(this, EventEmitter);\r\n\r\n\t this.updateCharacterSize = function() {\r\n\t if (this.$textLayer.allowBoldFonts != this.$allowBoldFonts) {\r\n\t this.$allowBoldFonts = this.$textLayer.allowBoldFonts;\r\n\t this.setStyle(\"ace_nobold\", !this.$allowBoldFonts);\r\n\t }\r\n\r\n\t this.layerConfig.characterWidth =\r\n\t this.characterWidth = this.$textLayer.getCharacterWidth();\r\n\t this.layerConfig.lineHeight =\r\n\t this.lineHeight = this.$textLayer.getLineHeight();\r\n\t this.$updatePrintMargin();\r\n\t };\r\n\t this.setSession = function(session) {\r\n\t if (this.session)\r\n\t this.session.doc.off(\"changeNewLineMode\", this.onChangeNewLineMode);\r\n\t \r\n\t this.session = session;\r\n\t if (session && this.scrollMargin.top && session.getScrollTop() <= 0)\r\n\t session.setScrollTop(-this.scrollMargin.top);\r\n\r\n\t this.$cursorLayer.setSession(session);\r\n\t this.$markerBack.setSession(session);\r\n\t this.$markerFront.setSession(session);\r\n\t this.$gutterLayer.setSession(session);\r\n\t this.$textLayer.setSession(session);\r\n\t if (!session)\r\n\t return;\r\n\t \r\n\t this.$loop.schedule(this.CHANGE_FULL);\r\n\t this.session.$setFontMetrics(this.$fontMetrics);\r\n\t \r\n\t this.onChangeNewLineMode = this.onChangeNewLineMode.bind(this);\r\n\t this.onChangeNewLineMode()\r\n\t this.session.doc.on(\"changeNewLineMode\", this.onChangeNewLineMode);\r\n\t };\r\n\t this.updateLines = function(firstRow, lastRow, force) {\r\n\t if (lastRow === undefined)\r\n\t lastRow = Infinity;\r\n\r\n\t if (!this.$changedLines) {\r\n\t this.$changedLines = {\r\n\t firstRow: firstRow,\r\n\t lastRow: lastRow\r\n\t };\r\n\t }\r\n\t else {\r\n\t if (this.$changedLines.firstRow > firstRow)\r\n\t this.$changedLines.firstRow = firstRow;\r\n\r\n\t if (this.$changedLines.lastRow < lastRow)\r\n\t this.$changedLines.lastRow = lastRow;\r\n\t }\r\n\t if (this.$changedLines.lastRow < this.layerConfig.firstRow) {\r\n\t if (force)\r\n\t this.$changedLines.lastRow = this.layerConfig.lastRow;\r\n\t else\r\n\t return;\r\n\t }\r\n\t if (this.$changedLines.firstRow > this.layerConfig.lastRow)\r\n\t return;\r\n\t this.$loop.schedule(this.CHANGE_LINES);\r\n\t };\r\n\r\n\t this.onChangeNewLineMode = function() {\r\n\t this.$loop.schedule(this.CHANGE_TEXT);\r\n\t this.$textLayer.$updateEolChar();\r\n\t };\r\n\t \r\n\t this.onChangeTabSize = function() {\r\n\t this.$loop.schedule(this.CHANGE_TEXT | this.CHANGE_MARKER);\r\n\t this.$textLayer.onChangeTabSize();\r\n\t };\r\n\t this.updateText = function() {\r\n\t this.$loop.schedule(this.CHANGE_TEXT);\r\n\t };\r\n\t this.updateFull = function(force) {\r\n\t if (force)\r\n\t this.$renderChanges(this.CHANGE_FULL, true);\r\n\t else\r\n\t this.$loop.schedule(this.CHANGE_FULL);\r\n\t };\r\n\t this.updateFontSize = function() {\r\n\t this.$textLayer.checkForSizeChanges();\r\n\t };\r\n\r\n\t this.$changes = 0;\r\n\t this.$updateSizeAsync = function() {\r\n\t if (this.$loop.pending)\r\n\t this.$size.$dirty = true;\r\n\t else\r\n\t this.onResize();\r\n\t };\r\n\t this.onResize = function(force, gutterWidth, width, height) {\r\n\t if (this.resizing > 2)\r\n\t return;\r\n\t else if (this.resizing > 0)\r\n\t this.resizing++;\r\n\t else\r\n\t this.resizing = force ? 1 : 0;\r\n\t var el = this.container;\r\n\t if (!height)\r\n\t height = el.clientHeight || el.scrollHeight;\r\n\t if (!width)\r\n\t width = el.clientWidth || el.scrollWidth;\r\n\t var changes = this.$updateCachedSize(force, gutterWidth, width, height);\r\n\r\n\t \r\n\t if (!this.$size.scrollerHeight || (!width && !height))\r\n\t return this.resizing = 0;\r\n\r\n\t if (force)\r\n\t this.$gutterLayer.$padding = null;\r\n\r\n\t if (force)\r\n\t this.$renderChanges(changes | this.$changes, true);\r\n\t else\r\n\t this.$loop.schedule(changes | this.$changes);\r\n\r\n\t if (this.resizing)\r\n\t this.resizing = 0;\r\n\t this.scrollBarV.scrollLeft = this.scrollBarV.scrollTop = null;\r\n\t };\r\n\t \r\n\t this.$updateCachedSize = function(force, gutterWidth, width, height) {\r\n\t height -= (this.$extraHeight || 0);\r\n\t var changes = 0;\r\n\t var size = this.$size;\r\n\t var oldSize = {\r\n\t width: size.width,\r\n\t height: size.height,\r\n\t scrollerHeight: size.scrollerHeight,\r\n\t scrollerWidth: size.scrollerWidth\r\n\t };\r\n\t if (height && (force || size.height != height)) {\r\n\t size.height = height;\r\n\t changes |= this.CHANGE_SIZE;\r\n\r\n\t size.scrollerHeight = size.height;\r\n\t if (this.$horizScroll)\r\n\t size.scrollerHeight -= this.scrollBarH.getHeight();\r\n\t this.scrollBarV.element.style.bottom = this.scrollBarH.getHeight() + \"px\";\r\n\r\n\t changes = changes | this.CHANGE_SCROLL;\r\n\t }\r\n\r\n\t if (width && (force || size.width != width)) {\r\n\t changes |= this.CHANGE_SIZE;\r\n\t size.width = width;\r\n\t \r\n\t if (gutterWidth == null)\r\n\t gutterWidth = this.$showGutter ? this.$gutter.offsetWidth : 0;\r\n\t \r\n\t this.gutterWidth = gutterWidth;\r\n\t \r\n\t this.scrollBarH.element.style.left = \r\n\t this.scroller.style.left = gutterWidth + \"px\";\r\n\t size.scrollerWidth = Math.max(0, width - gutterWidth - this.scrollBarV.getWidth()); \r\n\t \r\n\t this.scrollBarH.element.style.right = \r\n\t this.scroller.style.right = this.scrollBarV.getWidth() + \"px\";\r\n\t this.scroller.style.bottom = this.scrollBarH.getHeight() + \"px\";\r\n\r\n\t if (this.session && this.session.getUseWrapMode() && this.adjustWrapLimit() || force)\r\n\t changes |= this.CHANGE_FULL;\r\n\t }\r\n\t \r\n\t size.$dirty = !width || !height;\r\n\r\n\t if (changes)\r\n\t this._signal(\"resize\", oldSize);\r\n\r\n\t return changes;\r\n\t };\r\n\r\n\t this.onGutterResize = function() {\r\n\t var gutterWidth = this.$showGutter ? this.$gutter.offsetWidth : 0;\r\n\t if (gutterWidth != this.gutterWidth)\r\n\t this.$changes |= this.$updateCachedSize(true, gutterWidth, this.$size.width, this.$size.height);\r\n\r\n\t if (this.session.getUseWrapMode() && this.adjustWrapLimit()) {\r\n\t this.$loop.schedule(this.CHANGE_FULL);\r\n\t } else if (this.$size.$dirty) {\r\n\t this.$loop.schedule(this.CHANGE_FULL);\r\n\t } else {\r\n\t this.$computeLayerConfig();\r\n\t this.$loop.schedule(this.CHANGE_MARKER);\r\n\t }\r\n\t };\r\n\t this.adjustWrapLimit = function() {\r\n\t var availableWidth = this.$size.scrollerWidth - this.$padding * 2;\r\n\t var limit = Math.floor(availableWidth / this.characterWidth);\r\n\t return this.session.adjustWrapLimit(limit, this.$showPrintMargin && this.$printMarginColumn);\r\n\t };\r\n\t this.setAnimatedScroll = function(shouldAnimate){\r\n\t this.setOption(\"animatedScroll\", shouldAnimate);\r\n\t };\r\n\t this.getAnimatedScroll = function() {\r\n\t return this.$animatedScroll;\r\n\t };\r\n\t this.setShowInvisibles = function(showInvisibles) {\r\n\t this.setOption(\"showInvisibles\", showInvisibles);\r\n\t };\r\n\t this.getShowInvisibles = function() {\r\n\t return this.getOption(\"showInvisibles\");\r\n\t };\r\n\t this.getDisplayIndentGuides = function() {\r\n\t return this.getOption(\"displayIndentGuides\");\r\n\t };\r\n\r\n\t this.setDisplayIndentGuides = function(display) {\r\n\t this.setOption(\"displayIndentGuides\", display);\r\n\t };\r\n\t this.setShowPrintMargin = function(showPrintMargin) {\r\n\t this.setOption(\"showPrintMargin\", showPrintMargin);\r\n\t };\r\n\t this.getShowPrintMargin = function() {\r\n\t return this.getOption(\"showPrintMargin\");\r\n\t };\r\n\t this.setPrintMarginColumn = function(showPrintMargin) {\r\n\t this.setOption(\"printMarginColumn\", showPrintMargin);\r\n\t };\r\n\t this.getPrintMarginColumn = function() {\r\n\t return this.getOption(\"printMarginColumn\");\r\n\t };\r\n\t this.getShowGutter = function(){\r\n\t return this.getOption(\"showGutter\");\r\n\t };\r\n\t this.setShowGutter = function(show){\r\n\t return this.setOption(\"showGutter\", show);\r\n\t };\r\n\r\n\t this.getFadeFoldWidgets = function(){\r\n\t return this.getOption(\"fadeFoldWidgets\")\r\n\t };\r\n\r\n\t this.setFadeFoldWidgets = function(show) {\r\n\t this.setOption(\"fadeFoldWidgets\", show);\r\n\t };\r\n\r\n\t this.setHighlightGutterLine = function(shouldHighlight) {\r\n\t this.setOption(\"highlightGutterLine\", shouldHighlight);\r\n\t };\r\n\r\n\t this.getHighlightGutterLine = function() {\r\n\t return this.getOption(\"highlightGutterLine\");\r\n\t };\r\n\r\n\t this.$updateGutterLineHighlight = function() {\r\n\t var pos = this.$cursorLayer.$pixelPos;\r\n\t var height = this.layerConfig.lineHeight;\r\n\t if (this.session.getUseWrapMode()) {\r\n\t var cursor = this.session.selection.getCursor();\r\n\t cursor.column = 0;\r\n\t pos = this.$cursorLayer.getPixelPosition(cursor, true);\r\n\t height *= this.session.getRowLength(cursor.row);\r\n\t }\r\n\t this.$gutterLineHighlight.style.top = pos.top - this.layerConfig.offset + \"px\";\r\n\t this.$gutterLineHighlight.style.height = height + \"px\";\r\n\t };\r\n\r\n\t this.$updatePrintMargin = function() {\r\n\t if (!this.$showPrintMargin && !this.$printMarginEl)\r\n\t return;\r\n\r\n\t if (!this.$printMarginEl) {\r\n\t var containerEl = dom.createElement(\"div\");\r\n\t containerEl.className = \"ace_layer ace_print-margin-layer\";\r\n\t this.$printMarginEl = dom.createElement(\"div\");\r\n\t this.$printMarginEl.className = \"ace_print-margin\";\r\n\t containerEl.appendChild(this.$printMarginEl);\r\n\t this.content.insertBefore(containerEl, this.content.firstChild);\r\n\t }\r\n\r\n\t var style = this.$printMarginEl.style;\r\n\t style.left = ((this.characterWidth * this.$printMarginColumn) + this.$padding) + \"px\";\r\n\t style.visibility = this.$showPrintMargin ? \"visible\" : \"hidden\";\r\n\t \r\n\t if (this.session && this.session.$wrap == -1)\r\n\t this.adjustWrapLimit();\r\n\t };\r\n\t this.getContainerElement = function() {\r\n\t return this.container;\r\n\t };\r\n\t this.getMouseEventTarget = function() {\r\n\t return this.scroller;\r\n\t };\r\n\t this.getTextAreaContainer = function() {\r\n\t return this.container;\r\n\t };\r\n\t this.$moveTextAreaToCursor = function() {\r\n\t if (!this.$keepTextAreaAtCursor)\r\n\t return;\r\n\t var config = this.layerConfig;\r\n\t var posTop = this.$cursorLayer.$pixelPos.top;\r\n\t var posLeft = this.$cursorLayer.$pixelPos.left;\r\n\t posTop -= config.offset;\r\n\r\n\t var style = this.textarea.style;\r\n\t var h = this.lineHeight;\r\n\t if (posTop < 0 || posTop > config.height - h) {\r\n\t style.top = style.left = \"0\";\r\n\t return;\r\n\t }\r\n\r\n\t var w = this.characterWidth;\r\n\t if (this.$composition) {\r\n\t var val = this.textarea.value.replace(/^\\x01+/, \"\");\r\n\t w *= (this.session.$getStringScreenWidth(val)[0]+2);\r\n\t h += 2;\r\n\t }\r\n\t posLeft -= this.scrollLeft;\r\n\t if (posLeft > this.$size.scrollerWidth - w)\r\n\t posLeft = this.$size.scrollerWidth - w;\r\n\r\n\t posLeft += this.gutterWidth;\r\n\t style.height = h + \"px\";\r\n\t style.width = w + \"px\";\r\n\t style.left = Math.min(posLeft, this.$size.scrollerWidth - w) + \"px\";\r\n\t style.top = Math.min(posTop, this.$size.height - h) + \"px\";\r\n\t };\r\n\t this.getFirstVisibleRow = function() {\r\n\t return this.layerConfig.firstRow;\r\n\t };\r\n\t this.getFirstFullyVisibleRow = function() {\r\n\t return this.layerConfig.firstRow + (this.layerConfig.offset === 0 ? 0 : 1);\r\n\t };\r\n\t this.getLastFullyVisibleRow = function() {\r\n\t var config = this.layerConfig;\r\n\t var lastRow = config.lastRow\r\n\t var top = this.session.documentToScreenRow(lastRow, 0) * config.lineHeight;\r\n\t if (top - this.session.getScrollTop() > config.height - config.lineHeight)\r\n\t return lastRow - 1;\r\n\t return lastRow;\r\n\t };\r\n\t this.getLastVisibleRow = function() {\r\n\t return this.layerConfig.lastRow;\r\n\t };\r\n\r\n\t this.$padding = null;\r\n\t this.setPadding = function(padding) {\r\n\t this.$padding = padding;\r\n\t this.$textLayer.setPadding(padding);\r\n\t this.$cursorLayer.setPadding(padding);\r\n\t this.$markerFront.setPadding(padding);\r\n\t this.$markerBack.setPadding(padding);\r\n\t this.$loop.schedule(this.CHANGE_FULL);\r\n\t this.$updatePrintMargin();\r\n\t };\r\n\t \r\n\t this.setScrollMargin = function(top, bottom, left, right) {\r\n\t var sm = this.scrollMargin;\r\n\t sm.top = top|0;\r\n\t sm.bottom = bottom|0;\r\n\t sm.right = right|0;\r\n\t sm.left = left|0;\r\n\t sm.v = sm.top + sm.bottom;\r\n\t sm.h = sm.left + sm.right;\r\n\t if (sm.top && this.scrollTop <= 0 && this.session)\r\n\t this.session.setScrollTop(-sm.top);\r\n\t this.updateFull();\r\n\t };\r\n\t this.getHScrollBarAlwaysVisible = function() {\r\n\t return this.$hScrollBarAlwaysVisible;\r\n\t };\r\n\t this.setHScrollBarAlwaysVisible = function(alwaysVisible) {\r\n\t this.setOption(\"hScrollBarAlwaysVisible\", alwaysVisible);\r\n\t };\r\n\t this.getVScrollBarAlwaysVisible = function() {\r\n\t return this.$vScrollBarAlwaysVisible;\r\n\t };\r\n\t this.setVScrollBarAlwaysVisible = function(alwaysVisible) {\r\n\t this.setOption(\"vScrollBarAlwaysVisible\", alwaysVisible);\r\n\t };\r\n\r\n\t this.$updateScrollBarV = function() {\r\n\t var scrollHeight = this.layerConfig.maxHeight;\r\n\t var scrollerHeight = this.$size.scrollerHeight;\r\n\t if (!this.$maxLines && this.$scrollPastEnd) {\r\n\t scrollHeight -= (scrollerHeight - this.lineHeight) * this.$scrollPastEnd;\r\n\t if (this.scrollTop > scrollHeight - scrollerHeight) {\r\n\t scrollHeight = this.scrollTop + scrollerHeight;\r\n\t this.scrollBarV.scrollTop = null;\r\n\t }\r\n\t }\r\n\t this.scrollBarV.setScrollHeight(scrollHeight + this.scrollMargin.v);\r\n\t this.scrollBarV.setScrollTop(this.scrollTop + this.scrollMargin.top);\r\n\t };\r\n\t this.$updateScrollBarH = function() {\r\n\t this.scrollBarH.setScrollWidth(this.layerConfig.width + 2 * this.$padding + this.scrollMargin.h);\r\n\t this.scrollBarH.setScrollLeft(this.scrollLeft + this.scrollMargin.left);\r\n\t };\r\n\t \r\n\t this.$frozen = false;\r\n\t this.freeze = function() {\r\n\t this.$frozen = true;\r\n\t };\r\n\t \r\n\t this.unfreeze = function() {\r\n\t this.$frozen = false;\r\n\t };\r\n\r\n\t this.$renderChanges = function(changes, force) {\r\n\t if (this.$changes) {\r\n\t changes |= this.$changes;\r\n\t this.$changes = 0;\r\n\t }\r\n\t if ((!this.session || !this.container.offsetWidth || this.$frozen) || (!changes && !force)) {\r\n\t this.$changes |= changes;\r\n\t return; \r\n\t } \r\n\t if (this.$size.$dirty) {\r\n\t this.$changes |= changes;\r\n\t return this.onResize(true);\r\n\t }\r\n\t if (!this.lineHeight) {\r\n\t this.$textLayer.checkForSizeChanges();\r\n\t }\r\n\t \r\n\t this._signal(\"beforeRender\");\r\n\t var config = this.layerConfig;\r\n\t if (changes & this.CHANGE_FULL ||\r\n\t changes & this.CHANGE_SIZE ||\r\n\t changes & this.CHANGE_TEXT ||\r\n\t changes & this.CHANGE_LINES ||\r\n\t changes & this.CHANGE_SCROLL ||\r\n\t changes & this.CHANGE_H_SCROLL\r\n\t ) {\r\n\t changes |= this.$computeLayerConfig();\r\n\t if (config.firstRow != this.layerConfig.firstRow && config.firstRowScreen == this.layerConfig.firstRowScreen) {\r\n\t var st = this.scrollTop + (config.firstRow - this.layerConfig.firstRow) * this.lineHeight;\r\n\t if (st > 0) {\r\n\t this.scrollTop = st;\r\n\t changes = changes | this.CHANGE_SCROLL;\r\n\t changes |= this.$computeLayerConfig();\r\n\t }\r\n\t }\r\n\t config = this.layerConfig;\r\n\t this.$updateScrollBarV();\r\n\t if (changes & this.CHANGE_H_SCROLL)\r\n\t this.$updateScrollBarH();\r\n\t this.$gutterLayer.element.style.marginTop = (-config.offset) + \"px\";\r\n\t this.content.style.marginTop = (-config.offset) + \"px\";\r\n\t this.content.style.width = config.width + 2 * this.$padding + \"px\";\r\n\t this.content.style.height = config.minHeight + \"px\";\r\n\t }\r\n\t if (changes & this.CHANGE_H_SCROLL) {\r\n\t this.content.style.marginLeft = -this.scrollLeft + \"px\";\r\n\t this.scroller.className = this.scrollLeft <= 0 ? \"ace_scroller\" : \"ace_scroller ace_scroll-left\";\r\n\t }\r\n\t if (changes & this.CHANGE_FULL) {\r\n\t this.$textLayer.update(config);\r\n\t if (this.$showGutter)\r\n\t this.$gutterLayer.update(config);\r\n\t this.$markerBack.update(config);\r\n\t this.$markerFront.update(config);\r\n\t this.$cursorLayer.update(config);\r\n\t this.$moveTextAreaToCursor();\r\n\t this.$highlightGutterLine && this.$updateGutterLineHighlight();\r\n\t this._signal(\"afterRender\");\r\n\t return;\r\n\t }\r\n\t if (changes & this.CHANGE_SCROLL) {\r\n\t if (changes & this.CHANGE_TEXT || changes & this.CHANGE_LINES)\r\n\t this.$textLayer.update(config);\r\n\t else\r\n\t this.$textLayer.scrollLines(config);\r\n\r\n\t if (this.$showGutter)\r\n\t this.$gutterLayer.update(config);\r\n\t this.$markerBack.update(config);\r\n\t this.$markerFront.update(config);\r\n\t this.$cursorLayer.update(config);\r\n\t this.$highlightGutterLine && this.$updateGutterLineHighlight();\r\n\t this.$moveTextAreaToCursor();\r\n\t this._signal(\"afterRender\");\r\n\t return;\r\n\t }\r\n\r\n\t if (changes & this.CHANGE_TEXT) {\r\n\t this.$textLayer.update(config);\r\n\t if (this.$showGutter)\r\n\t this.$gutterLayer.update(config);\r\n\t }\r\n\t else if (changes & this.CHANGE_LINES) {\r\n\t if (this.$updateLines() || (changes & this.CHANGE_GUTTER) && this.$showGutter)\r\n\t this.$gutterLayer.update(config);\r\n\t }\r\n\t else if (changes & this.CHANGE_TEXT || changes & this.CHANGE_GUTTER) {\r\n\t if (this.$showGutter)\r\n\t this.$gutterLayer.update(config);\r\n\t }\r\n\r\n\t if (changes & this.CHANGE_CURSOR) {\r\n\t this.$cursorLayer.update(config);\r\n\t this.$moveTextAreaToCursor();\r\n\t this.$highlightGutterLine && this.$updateGutterLineHighlight();\r\n\t }\r\n\r\n\t if (changes & (this.CHANGE_MARKER | this.CHANGE_MARKER_FRONT)) {\r\n\t this.$markerFront.update(config);\r\n\t }\r\n\r\n\t if (changes & (this.CHANGE_MARKER | this.CHANGE_MARKER_BACK)) {\r\n\t this.$markerBack.update(config);\r\n\t }\r\n\r\n\t this._signal(\"afterRender\");\r\n\t };\r\n\r\n\t \r\n\t this.$autosize = function() {\r\n\t var height = this.session.getScreenLength() * this.lineHeight;\r\n\t var maxHeight = this.$maxLines * this.lineHeight;\r\n\t var desiredHeight = Math.max(\r\n\t (this.$minLines||1) * this.lineHeight,\r\n\t Math.min(maxHeight, height)\r\n\t ) + this.scrollMargin.v + (this.$extraHeight || 0);\r\n\t if (this.$horizScroll)\r\n\t desiredHeight += this.scrollBarH.getHeight();\r\n\t var vScroll = height > maxHeight;\r\n\t \r\n\t if (desiredHeight != this.desiredHeight ||\r\n\t this.$size.height != this.desiredHeight || vScroll != this.$vScroll) {\r\n\t if (vScroll != this.$vScroll) {\r\n\t this.$vScroll = vScroll;\r\n\t this.scrollBarV.setVisible(vScroll);\r\n\t }\r\n\t \r\n\t var w = this.container.clientWidth;\r\n\t this.container.style.height = desiredHeight + \"px\";\r\n\t this.$updateCachedSize(true, this.$gutterWidth, w, desiredHeight);\r\n\t this.desiredHeight = desiredHeight;\r\n\t \r\n\t this._signal(\"autosize\");\r\n\t }\r\n\t };\r\n\t \r\n\t this.$computeLayerConfig = function() {\r\n\t var session = this.session;\r\n\t var size = this.$size;\r\n\t \r\n\t var hideScrollbars = size.height <= 2 * this.lineHeight;\r\n\t var screenLines = this.session.getScreenLength();\r\n\t var maxHeight = screenLines * this.lineHeight;\r\n\r\n\t var longestLine = this.$getLongestLine();\r\n\t \r\n\t var horizScroll = !hideScrollbars && (this.$hScrollBarAlwaysVisible ||\r\n\t size.scrollerWidth - longestLine - 2 * this.$padding < 0);\r\n\r\n\t var hScrollChanged = this.$horizScroll !== horizScroll;\r\n\t if (hScrollChanged) {\r\n\t this.$horizScroll = horizScroll;\r\n\t this.scrollBarH.setVisible(horizScroll);\r\n\t }\r\n\t var vScrollBefore = this.$vScroll; // autosize can change vscroll value in which case we need to update longestLine\r\n\t if (this.$maxLines && this.lineHeight > 1)\r\n\t this.$autosize();\r\n\r\n\t var offset = this.scrollTop % this.lineHeight;\r\n\t var minHeight = size.scrollerHeight + this.lineHeight;\r\n\t \r\n\t var scrollPastEnd = !this.$maxLines && this.$scrollPastEnd\r\n\t ? (size.scrollerHeight - this.lineHeight) * this.$scrollPastEnd\r\n\t : 0;\r\n\t maxHeight += scrollPastEnd;\r\n\t \r\n\t var sm = this.scrollMargin;\r\n\t this.session.setScrollTop(Math.max(-sm.top,\r\n\t Math.min(this.scrollTop, maxHeight - size.scrollerHeight + sm.bottom)));\r\n\r\n\t this.session.setScrollLeft(Math.max(-sm.left, Math.min(this.scrollLeft, \r\n\t longestLine + 2 * this.$padding - size.scrollerWidth + sm.right)));\r\n\t \r\n\t var vScroll = !hideScrollbars && (this.$vScrollBarAlwaysVisible ||\r\n\t size.scrollerHeight - maxHeight + scrollPastEnd < 0 || this.scrollTop > sm.top);\r\n\t var vScrollChanged = vScrollBefore !== vScroll;\r\n\t if (vScrollChanged) {\r\n\t this.$vScroll = vScroll;\r\n\t this.scrollBarV.setVisible(vScroll);\r\n\t }\r\n\r\n\t var lineCount = Math.ceil(minHeight / this.lineHeight) - 1;\r\n\t var firstRow = Math.max(0, Math.round((this.scrollTop - offset) / this.lineHeight));\r\n\t var lastRow = firstRow + lineCount;\r\n\t var firstRowScreen, firstRowHeight;\r\n\t var lineHeight = this.lineHeight;\r\n\t firstRow = session.screenToDocumentRow(firstRow, 0);\r\n\t var foldLine = session.getFoldLine(firstRow);\r\n\t if (foldLine) {\r\n\t firstRow = foldLine.start.row;\r\n\t }\r\n\r\n\t firstRowScreen = session.documentToScreenRow(firstRow, 0);\r\n\t firstRowHeight = session.getRowLength(firstRow) * lineHeight;\r\n\r\n\t lastRow = Math.min(session.screenToDocumentRow(lastRow, 0), session.getLength() - 1);\r\n\t minHeight = size.scrollerHeight + session.getRowLength(lastRow) * lineHeight +\r\n\t firstRowHeight;\r\n\r\n\t offset = this.scrollTop - firstRowScreen * lineHeight;\r\n\r\n\t var changes = 0;\r\n\t if (this.layerConfig.width != longestLine) \r\n\t changes = this.CHANGE_H_SCROLL;\r\n\t if (hScrollChanged || vScrollChanged) {\r\n\t changes = this.$updateCachedSize(true, this.gutterWidth, size.width, size.height);\r\n\t this._signal(\"scrollbarVisibilityChanged\");\r\n\t if (vScrollChanged)\r\n\t longestLine = this.$getLongestLine();\r\n\t }\r\n\t \r\n\t this.layerConfig = {\r\n\t width : longestLine,\r\n\t padding : this.$padding,\r\n\t firstRow : firstRow,\r\n\t firstRowScreen: firstRowScreen,\r\n\t lastRow : lastRow,\r\n\t lineHeight : lineHeight,\r\n\t characterWidth : this.characterWidth,\r\n\t minHeight : minHeight,\r\n\t maxHeight : maxHeight,\r\n\t offset : offset,\r\n\t gutterOffset : Math.max(0, Math.ceil((offset + size.height - size.scrollerHeight) / lineHeight)),\r\n\t height : this.$size.scrollerHeight\r\n\t };\r\n\r\n\t return changes;\r\n\t };\r\n\r\n\t this.$updateLines = function() {\r\n\t var firstRow = this.$changedLines.firstRow;\r\n\t var lastRow = this.$changedLines.lastRow;\r\n\t this.$changedLines = null;\r\n\r\n\t var layerConfig = this.layerConfig;\r\n\r\n\t if (firstRow > layerConfig.lastRow + 1) { return; }\r\n\t if (lastRow < layerConfig.firstRow) { return; }\r\n\t if (lastRow === Infinity) {\r\n\t if (this.$showGutter)\r\n\t this.$gutterLayer.update(layerConfig);\r\n\t this.$textLayer.update(layerConfig);\r\n\t return;\r\n\t }\r\n\t this.$textLayer.updateLines(layerConfig, firstRow, lastRow);\r\n\t return true;\r\n\t };\r\n\r\n\t this.$getLongestLine = function() {\r\n\t var charCount = this.session.getScreenWidth();\r\n\t if (this.showInvisibles && !this.session.$useWrapMode)\r\n\t charCount += 1;\r\n\r\n\t return Math.max(this.$size.scrollerWidth - 2 * this.$padding, Math.round(charCount * this.characterWidth));\r\n\t };\r\n\t this.updateFrontMarkers = function() {\r\n\t this.$markerFront.setMarkers(this.session.getMarkers(true));\r\n\t this.$loop.schedule(this.CHANGE_MARKER_FRONT);\r\n\t };\r\n\t this.updateBackMarkers = function() {\r\n\t this.$markerBack.setMarkers(this.session.getMarkers());\r\n\t this.$loop.schedule(this.CHANGE_MARKER_BACK);\r\n\t };\r\n\t this.addGutterDecoration = function(row, className){\r\n\t this.$gutterLayer.addGutterDecoration(row, className);\r\n\t };\r\n\t this.removeGutterDecoration = function(row, className){\r\n\t this.$gutterLayer.removeGutterDecoration(row, className);\r\n\t };\r\n\t this.updateBreakpoints = function(rows) {\r\n\t this.$loop.schedule(this.CHANGE_GUTTER);\r\n\t };\r\n\t this.setAnnotations = function(annotations) {\r\n\t this.$gutterLayer.setAnnotations(annotations);\r\n\t this.$loop.schedule(this.CHANGE_GUTTER);\r\n\t };\r\n\t this.updateCursor = function() {\r\n\t this.$loop.schedule(this.CHANGE_CURSOR);\r\n\t };\r\n\t this.hideCursor = function() {\r\n\t this.$cursorLayer.hideCursor();\r\n\t };\r\n\t this.showCursor = function() {\r\n\t this.$cursorLayer.showCursor();\r\n\t };\r\n\r\n\t this.scrollSelectionIntoView = function(anchor, lead, offset) {\r\n\t this.scrollCursorIntoView(anchor, offset);\r\n\t this.scrollCursorIntoView(lead, offset);\r\n\t };\r\n\t this.scrollCursorIntoView = function(cursor, offset, $viewMargin) {\r\n\t if (this.$size.scrollerHeight === 0)\r\n\t return;\r\n\r\n\t var pos = this.$cursorLayer.getPixelPosition(cursor);\r\n\r\n\t var left = pos.left;\r\n\t var top = pos.top;\r\n\t \r\n\t var topMargin = $viewMargin && $viewMargin.top || 0;\r\n\t var bottomMargin = $viewMargin && $viewMargin.bottom || 0;\r\n\t \r\n\t var scrollTop = this.$scrollAnimation ? this.session.getScrollTop() : this.scrollTop;\r\n\t \r\n\t if (scrollTop + topMargin > top) {\r\n\t if (offset && scrollTop + topMargin > top + this.lineHeight)\r\n\t top -= offset * this.$size.scrollerHeight;\r\n\t if (top === 0)\r\n\t top = -this.scrollMargin.top;\r\n\t this.session.setScrollTop(top);\r\n\t } else if (scrollTop + this.$size.scrollerHeight - bottomMargin < top + this.lineHeight) {\r\n\t if (offset && scrollTop + this.$size.scrollerHeight - bottomMargin < top - this.lineHeight)\r\n\t top += offset * this.$size.scrollerHeight;\r\n\t this.session.setScrollTop(top + this.lineHeight - this.$size.scrollerHeight);\r\n\t }\r\n\r\n\t var scrollLeft = this.scrollLeft;\r\n\r\n\t if (scrollLeft > left) {\r\n\t if (left < this.$padding + 2 * this.layerConfig.characterWidth)\r\n\t left = -this.scrollMargin.left;\r\n\t this.session.setScrollLeft(left);\r\n\t } else if (scrollLeft + this.$size.scrollerWidth < left + this.characterWidth) {\r\n\t this.session.setScrollLeft(Math.round(left + this.characterWidth - this.$size.scrollerWidth));\r\n\t } else if (scrollLeft <= this.$padding && left - scrollLeft < this.characterWidth) {\r\n\t this.session.setScrollLeft(0);\r\n\t }\r\n\t };\r\n\t this.getScrollTop = function() {\r\n\t return this.session.getScrollTop();\r\n\t };\r\n\t this.getScrollLeft = function() {\r\n\t return this.session.getScrollLeft();\r\n\t };\r\n\t this.getScrollTopRow = function() {\r\n\t return this.scrollTop / this.lineHeight;\r\n\t };\r\n\t this.getScrollBottomRow = function() {\r\n\t return Math.max(0, Math.floor((this.scrollTop + this.$size.scrollerHeight) / this.lineHeight) - 1);\r\n\t };\r\n\t this.scrollToRow = function(row) {\r\n\t this.session.setScrollTop(row * this.lineHeight);\r\n\t };\r\n\r\n\t this.alignCursor = function(cursor, alignment) {\r\n\t if (typeof cursor == \"number\")\r\n\t cursor = {row: cursor, column: 0};\r\n\r\n\t var pos = this.$cursorLayer.getPixelPosition(cursor);\r\n\t var h = this.$size.scrollerHeight - this.lineHeight;\r\n\t var offset = pos.top - h * (alignment || 0);\r\n\r\n\t this.session.setScrollTop(offset);\r\n\t return offset;\r\n\t };\r\n\r\n\t this.STEPS = 8;\r\n\t this.$calcSteps = function(fromValue, toValue){\r\n\t var i = 0;\r\n\t var l = this.STEPS;\r\n\t var steps = [];\r\n\r\n\t var func = function(t, x_min, dx) {\r\n\t return dx * (Math.pow(t - 1, 3) + 1) + x_min;\r\n\t };\r\n\r\n\t for (i = 0; i < l; ++i)\r\n\t steps.push(func(i / this.STEPS, fromValue, toValue - fromValue));\r\n\r\n\t return steps;\r\n\t };\r\n\t this.scrollToLine = function(line, center, animate, callback) {\r\n\t var pos = this.$cursorLayer.getPixelPosition({row: line, column: 0});\r\n\t var offset = pos.top;\r\n\t if (center)\r\n\t offset -= this.$size.scrollerHeight / 2;\r\n\r\n\t var initialScroll = this.scrollTop;\r\n\t this.session.setScrollTop(offset);\r\n\t if (animate !== false)\r\n\t this.animateScrolling(initialScroll, callback);\r\n\t };\r\n\r\n\t this.animateScrolling = function(fromValue, callback) {\r\n\t var toValue = this.scrollTop;\r\n\t if (!this.$animatedScroll)\r\n\t return;\r\n\t var _self = this;\r\n\t \r\n\t if (fromValue == toValue)\r\n\t return;\r\n\t \r\n\t if (this.$scrollAnimation) {\r\n\t var oldSteps = this.$scrollAnimation.steps;\r\n\t if (oldSteps.length) {\r\n\t fromValue = oldSteps[0];\r\n\t if (fromValue == toValue)\r\n\t return;\r\n\t }\r\n\t }\r\n\t \r\n\t var steps = _self.$calcSteps(fromValue, toValue);\r\n\t this.$scrollAnimation = {from: fromValue, to: toValue, steps: steps};\r\n\r\n\t clearInterval(this.$timer);\r\n\r\n\t _self.session.setScrollTop(steps.shift());\r\n\t _self.session.$scrollTop = toValue;\r\n\t this.$timer = setInterval(function() {\r\n\t if (steps.length) {\r\n\t _self.session.setScrollTop(steps.shift());\r\n\t _self.session.$scrollTop = toValue;\r\n\t } else if (toValue != null) {\r\n\t _self.session.$scrollTop = -1;\r\n\t _self.session.setScrollTop(toValue);\r\n\t toValue = null;\r\n\t } else {\r\n\t _self.$timer = clearInterval(_self.$timer);\r\n\t _self.$scrollAnimation = null;\r\n\t callback && callback();\r\n\t }\r\n\t }, 10);\r\n\t };\r\n\t this.scrollToY = function(scrollTop) {\r\n\t if (this.scrollTop !== scrollTop) {\r\n\t this.$loop.schedule(this.CHANGE_SCROLL);\r\n\t this.scrollTop = scrollTop;\r\n\t }\r\n\t };\r\n\t this.scrollToX = function(scrollLeft) {\r\n\t if (this.scrollLeft !== scrollLeft)\r\n\t this.scrollLeft = scrollLeft;\r\n\t this.$loop.schedule(this.CHANGE_H_SCROLL);\r\n\t };\r\n\t this.scrollTo = function(x, y) {\r\n\t this.session.setScrollTop(y);\r\n\t this.session.setScrollLeft(y);\r\n\t };\r\n\t this.scrollBy = function(deltaX, deltaY) {\r\n\t deltaY && this.session.setScrollTop(this.session.getScrollTop() + deltaY);\r\n\t deltaX && this.session.setScrollLeft(this.session.getScrollLeft() + deltaX);\r\n\t };\r\n\t this.isScrollableBy = function(deltaX, deltaY) {\r\n\t if (deltaY < 0 && this.session.getScrollTop() >= 1 - this.scrollMargin.top)\r\n\t return true;\r\n\t if (deltaY > 0 && this.session.getScrollTop() + this.$size.scrollerHeight\r\n\t - this.layerConfig.maxHeight < -1 + this.scrollMargin.bottom)\r\n\t return true;\r\n\t if (deltaX < 0 && this.session.getScrollLeft() >= 1 - this.scrollMargin.left)\r\n\t return true;\r\n\t if (deltaX > 0 && this.session.getScrollLeft() + this.$size.scrollerWidth\r\n\t - this.layerConfig.width < -1 + this.scrollMargin.right)\r\n\t return true;\r\n\t };\r\n\r\n\t this.pixelToScreenCoordinates = function(x, y) {\r\n\t var canvasPos = this.scroller.getBoundingClientRect();\r\n\r\n\t var offset = (x + this.scrollLeft - canvasPos.left - this.$padding) / this.characterWidth;\r\n\t var row = Math.floor((y + this.scrollTop - canvasPos.top) / this.lineHeight);\r\n\t var col = Math.round(offset);\r\n\r\n\t return {row: row, column: col, side: offset - col > 0 ? 1 : -1};\r\n\t };\r\n\r\n\t this.screenToTextCoordinates = function(x, y) {\r\n\t var canvasPos = this.scroller.getBoundingClientRect();\r\n\r\n\t var col = Math.round(\r\n\t (x + this.scrollLeft - canvasPos.left - this.$padding) / this.characterWidth\r\n\t );\r\n\r\n\t var row = (y + this.scrollTop - canvasPos.top) / this.lineHeight;\r\n\r\n\t return this.session.screenToDocumentPosition(row, Math.max(col, 0));\r\n\t };\r\n\t this.textToScreenCoordinates = function(row, column) {\r\n\t var canvasPos = this.scroller.getBoundingClientRect();\r\n\t var pos = this.session.documentToScreenPosition(row, column);\r\n\r\n\t var x = this.$padding + Math.round(pos.column * this.characterWidth);\r\n\t var y = pos.row * this.lineHeight;\r\n\r\n\t return {\r\n\t pageX: canvasPos.left + x - this.scrollLeft,\r\n\t pageY: canvasPos.top + y - this.scrollTop\r\n\t };\r\n\t };\r\n\t this.visualizeFocus = function() {\r\n\t dom.addCssClass(this.container, \"ace_focus\");\r\n\t };\r\n\t this.visualizeBlur = function() {\r\n\t dom.removeCssClass(this.container, \"ace_focus\");\r\n\t };\r\n\t this.showComposition = function(position) {\r\n\t if (!this.$composition)\r\n\t this.$composition = {\r\n\t keepTextAreaAtCursor: this.$keepTextAreaAtCursor,\r\n\t cssText: this.textarea.style.cssText\r\n\t };\r\n\r\n\t this.$keepTextAreaAtCursor = true;\r\n\t dom.addCssClass(this.textarea, \"ace_composition\");\r\n\t this.textarea.style.cssText = \"\";\r\n\t this.$moveTextAreaToCursor();\r\n\t };\r\n\t this.setCompositionText = function(text) {\r\n\t this.$moveTextAreaToCursor();\r\n\t };\r\n\t this.hideComposition = function() {\r\n\t if (!this.$composition)\r\n\t return;\r\n\r\n\t dom.removeCssClass(this.textarea, \"ace_composition\");\r\n\t this.$keepTextAreaAtCursor = this.$composition.keepTextAreaAtCursor;\r\n\t this.textarea.style.cssText = this.$composition.cssText;\r\n\t this.$composition = null;\r\n\t };\r\n\t this.setTheme = function(theme, cb) {\r\n\t var _self = this;\r\n\t this.$themeId = theme;\r\n\t _self._dispatchEvent('themeChange',{theme:theme});\r\n\r\n\t if (!theme || typeof theme == \"string\") {\r\n\t var moduleName = theme || this.$options.theme.initialValue;\r\n\t config.loadModule([\"theme\", moduleName], afterLoad);\r\n\t } else {\r\n\t afterLoad(theme);\r\n\t }\r\n\r\n\t function afterLoad(module) {\r\n\t if (_self.$themeId != theme)\r\n\t return cb && cb();\r\n\t if (!module.cssClass)\r\n\t return;\r\n\t dom.importCssString(\r\n\t module.cssText,\r\n\t module.cssClass,\r\n\t _self.container.ownerDocument\r\n\t );\r\n\r\n\t if (_self.theme)\r\n\t dom.removeCssClass(_self.container, _self.theme.cssClass);\r\n\r\n\t var padding = \"padding\" in module ? module.padding \r\n\t : \"padding\" in (_self.theme || {}) ? 4 : _self.$padding;\r\n\t if (_self.$padding && padding != _self.$padding)\r\n\t _self.setPadding(padding);\r\n\t _self.$theme = module.cssClass;\r\n\r\n\t _self.theme = module;\r\n\t dom.addCssClass(_self.container, module.cssClass);\r\n\t dom.setCssClass(_self.container, \"ace_dark\", module.isDark);\r\n\t if (_self.$size) {\r\n\t _self.$size.width = 0;\r\n\t _self.$updateSizeAsync();\r\n\t }\r\n\r\n\t _self._dispatchEvent('themeLoaded', {theme:module});\r\n\t cb && cb();\r\n\t }\r\n\t };\r\n\t this.getTheme = function() {\r\n\t return this.$themeId;\r\n\t };\r\n\t this.setStyle = function(style, include) {\r\n\t dom.setCssClass(this.container, style, include !== false);\r\n\t };\r\n\t this.unsetStyle = function(style) {\r\n\t dom.removeCssClass(this.container, style);\r\n\t };\r\n\t \r\n\t this.setCursorStyle = function(style) {\r\n\t if (this.scroller.style.cursor != style)\r\n\t this.scroller.style.cursor = style;\r\n\t };\r\n\t this.setMouseCursor = function(cursorStyle) {\r\n\t this.scroller.style.cursor = cursorStyle;\r\n\t };\r\n\t this.destroy = function() {\r\n\t this.$textLayer.destroy();\r\n\t this.$cursorLayer.destroy();\r\n\t };\r\n\r\n\t}).call(VirtualRenderer.prototype);\r\n\r\n\r\n\tconfig.defineOptions(VirtualRenderer.prototype, \"renderer\", {\r\n\t animatedScroll: {initialValue: false},\r\n\t showInvisibles: {\r\n\t set: function(value) {\r\n\t if (this.$textLayer.setShowInvisibles(value))\r\n\t this.$loop.schedule(this.CHANGE_TEXT);\r\n\t },\r\n\t initialValue: false\r\n\t },\r\n\t showPrintMargin: {\r\n\t set: function() { this.$updatePrintMargin(); },\r\n\t initialValue: true\r\n\t },\r\n\t printMarginColumn: {\r\n\t set: function() { this.$updatePrintMargin(); },\r\n\t initialValue: 80\r\n\t },\r\n\t printMargin: {\r\n\t set: function(val) {\r\n\t if (typeof val == \"number\")\r\n\t this.$printMarginColumn = val;\r\n\t this.$showPrintMargin = !!val;\r\n\t this.$updatePrintMargin();\r\n\t },\r\n\t get: function() {\r\n\t return this.$showPrintMargin && this.$printMarginColumn; \r\n\t }\r\n\t },\r\n\t showGutter: {\r\n\t set: function(show){\r\n\t this.$gutter.style.display = show ? \"block\" : \"none\";\r\n\t this.$loop.schedule(this.CHANGE_FULL);\r\n\t this.onGutterResize();\r\n\t },\r\n\t initialValue: true\r\n\t },\r\n\t fadeFoldWidgets: {\r\n\t set: function(show) {\r\n\t dom.setCssClass(this.$gutter, \"ace_fade-fold-widgets\", show);\r\n\t },\r\n\t initialValue: false\r\n\t },\r\n\t showFoldWidgets: {\r\n\t set: function(show) {this.$gutterLayer.setShowFoldWidgets(show)},\r\n\t initialValue: true\r\n\t },\r\n\t showLineNumbers: {\r\n\t set: function(show) {\r\n\t this.$gutterLayer.setShowLineNumbers(show);\r\n\t this.$loop.schedule(this.CHANGE_GUTTER);\r\n\t },\r\n\t initialValue: true\r\n\t },\r\n\t displayIndentGuides: {\r\n\t set: function(show) {\r\n\t if (this.$textLayer.setDisplayIndentGuides(show))\r\n\t this.$loop.schedule(this.CHANGE_TEXT);\r\n\t },\r\n\t initialValue: true\r\n\t },\r\n\t highlightGutterLine: {\r\n\t set: function(shouldHighlight) {\r\n\t if (!this.$gutterLineHighlight) {\r\n\t this.$gutterLineHighlight = dom.createElement(\"div\");\r\n\t this.$gutterLineHighlight.className = \"ace_gutter-active-line\";\r\n\t this.$gutter.appendChild(this.$gutterLineHighlight);\r\n\t return;\r\n\t }\r\n\r\n\t this.$gutterLineHighlight.style.display = shouldHighlight ? \"\" : \"none\";\r\n\t if (this.$cursorLayer.$pixelPos)\r\n\t this.$updateGutterLineHighlight();\r\n\t },\r\n\t initialValue: false,\r\n\t value: true\r\n\t },\r\n\t hScrollBarAlwaysVisible: {\r\n\t set: function(val) {\r\n\t if (!this.$hScrollBarAlwaysVisible || !this.$horizScroll)\r\n\t this.$loop.schedule(this.CHANGE_SCROLL);\r\n\t },\r\n\t initialValue: false\r\n\t },\r\n\t vScrollBarAlwaysVisible: {\r\n\t set: function(val) {\r\n\t if (!this.$vScrollBarAlwaysVisible || !this.$vScroll)\r\n\t this.$loop.schedule(this.CHANGE_SCROLL);\r\n\t },\r\n\t initialValue: false\r\n\t },\r\n\t fontSize: {\r\n\t set: function(size) {\r\n\t if (typeof size == \"number\")\r\n\t size = size + \"px\";\r\n\t this.container.style.fontSize = size;\r\n\t this.updateFontSize();\r\n\t },\r\n\t initialValue: 12\r\n\t },\r\n\t fontFamily: {\r\n\t set: function(name) {\r\n\t this.container.style.fontFamily = name;\r\n\t this.updateFontSize();\r\n\t }\r\n\t },\r\n\t maxLines: {\r\n\t set: function(val) {\r\n\t this.updateFull();\r\n\t }\r\n\t },\r\n\t minLines: {\r\n\t set: function(val) {\r\n\t this.updateFull();\r\n\t }\r\n\t },\r\n\t scrollPastEnd: {\r\n\t set: function(val) {\r\n\t val = +val || 0;\r\n\t if (this.$scrollPastEnd == val)\r\n\t return;\r\n\t this.$scrollPastEnd = val;\r\n\t this.$loop.schedule(this.CHANGE_SCROLL);\r\n\t },\r\n\t initialValue: 0,\r\n\t handlesSet: true\r\n\t },\r\n\t fixedWidthGutter: {\r\n\t set: function(val) {\r\n\t this.$gutterLayer.$fixedWidth = !!val;\r\n\t this.$loop.schedule(this.CHANGE_GUTTER);\r\n\t }\r\n\t },\r\n\t theme: {\r\n\t set: function(val) { this.setTheme(val) },\r\n\t get: function() { return this.$themeId || this.theme; },\r\n\t initialValue: \"./theme/textmate\",\r\n\t handlesSet: true\r\n\t }\r\n\t});\r\n\r\n\texports.VirtualRenderer = VirtualRenderer;\r\n\t});\r\n\r\n\tace.define(\"ace/worker/worker_client\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/net\",\"ace/lib/event_emitter\",\"ace/config\"], function(acequire, exports, module) {\r\n\t\"use strict\";\r\n\r\n\tvar oop = acequire(\"../lib/oop\");\r\n\tvar net = acequire(\"../lib/net\");\r\n\tvar EventEmitter = acequire(\"../lib/event_emitter\").EventEmitter;\r\n\tvar config = acequire(\"../config\");\r\n\r\n\tvar WorkerClient = function(topLevelNamespaces, mod, classname, workerUrl) {\r\n\t this.$sendDeltaQueue = this.$sendDeltaQueue.bind(this);\r\n\t this.changeListener = this.changeListener.bind(this);\r\n\t this.onMessage = this.onMessage.bind(this);\r\n\t if (acequire.nameToUrl && !acequire.toUrl)\r\n\t acequire.toUrl = acequire.nameToUrl;\r\n\t \r\n\t if (config.get(\"packaged\") || !acequire.toUrl) {\r\n\t workerUrl = workerUrl || config.moduleUrl(mod.id, \"worker\")\r\n\t } else {\r\n\t var normalizePath = this.$normalizePath;\r\n\t workerUrl = workerUrl || normalizePath(acequire.toUrl(\"ace/worker/worker.js\", null, \"_\"));\r\n\r\n\t var tlns = {};\r\n\t topLevelNamespaces.forEach(function(ns) {\r\n\t tlns[ns] = normalizePath(acequire.toUrl(ns, null, \"_\").replace(/(\\.js)?(\\?.*)?$/, \"\"));\r\n\t });\r\n\t }\r\n\r\n\t try {\r\n\t var workerSrc = mod.src;\r\n\t var Blob = __webpack_require__(66);\r\n\t var blob = new Blob([ workerSrc ], { type: 'application/javascript' });\r\n\t var blobUrl = (window.URL || window.webkitURL).createObjectURL(blob);\r\n\r\n\t this.$worker = new Worker(blobUrl);\r\n\r\n\t } catch(e) {\r\n\t if (e instanceof window.DOMException) {\r\n\t var blob = this.$workerBlob(workerUrl);\r\n\t var URL = window.URL || window.webkitURL;\r\n\t var blobURL = URL.createObjectURL(blob);\r\n\r\n\t this.$worker = new Worker(blobURL);\r\n\t URL.revokeObjectURL(blobURL);\r\n\t } else {\r\n\t throw e;\r\n\t }\r\n\t }\r\n\t this.$worker.postMessage({\r\n\t init : true,\r\n\t tlns : tlns,\r\n\t module : mod.id,\r\n\t classname : classname\r\n\t });\r\n\r\n\t this.callbackId = 1;\r\n\t this.callbacks = {};\r\n\r\n\t this.$worker.onmessage = this.onMessage;\r\n\t};\r\n\r\n\t(function(){\r\n\r\n\t oop.implement(this, EventEmitter);\r\n\r\n\t this.onMessage = function(e) {\r\n\t var msg = e.data;\r\n\t switch(msg.type) {\r\n\t case \"event\":\r\n\t this._signal(msg.name, {data: msg.data});\r\n\t break;\r\n\t case \"call\":\r\n\t var callback = this.callbacks[msg.id];\r\n\t if (callback) {\r\n\t callback(msg.data);\r\n\t delete this.callbacks[msg.id];\r\n\t }\r\n\t break;\r\n\t case \"error\":\r\n\t this.reportError(msg.data);\r\n\t break;\r\n\t case \"log\":\r\n\t window.console && console.log && console.log.apply(console, msg.data);\r\n\t break;\r\n\t }\r\n\t };\r\n\t \r\n\t this.reportError = function(err) {\r\n\t window.console && console.error && console.error(err);\r\n\t };\r\n\r\n\t this.$normalizePath = function(path) {\r\n\t return net.qualifyURL(path);\r\n\t };\r\n\r\n\t this.terminate = function() {\r\n\t this._signal(\"terminate\", {});\r\n\t this.deltaQueue = null;\r\n\t this.$worker.terminate();\r\n\t this.$worker = null;\r\n\t if (this.$doc)\r\n\t this.$doc.off(\"change\", this.changeListener);\r\n\t this.$doc = null;\r\n\t };\r\n\r\n\t this.send = function(cmd, args) {\r\n\t this.$worker.postMessage({command: cmd, args: args});\r\n\t };\r\n\r\n\t this.call = function(cmd, args, callback) {\r\n\t if (callback) {\r\n\t var id = this.callbackId++;\r\n\t this.callbacks[id] = callback;\r\n\t args.push(id);\r\n\t }\r\n\t this.send(cmd, args);\r\n\t };\r\n\r\n\t this.emit = function(event, data) {\r\n\t try {\r\n\t this.$worker.postMessage({event: event, data: {data: data.data}});\r\n\t }\r\n\t catch(ex) {\r\n\t console.error(ex.stack);\r\n\t }\r\n\t };\r\n\r\n\t this.attachToDocument = function(doc) {\r\n\t if(this.$doc)\r\n\t this.terminate();\r\n\r\n\t this.$doc = doc;\r\n\t this.call(\"setValue\", [doc.getValue()]);\r\n\t doc.on(\"change\", this.changeListener);\r\n\t };\r\n\r\n\t this.changeListener = function(delta) {\r\n\t if (!this.deltaQueue) {\r\n\t this.deltaQueue = [];\r\n\t setTimeout(this.$sendDeltaQueue, 0);\r\n\t }\r\n\t if (delta.action == \"insert\")\r\n\t this.deltaQueue.push(delta.start, delta.lines);\r\n\t else\r\n\t this.deltaQueue.push(delta.start, delta.end);\r\n\t };\r\n\r\n\t this.$sendDeltaQueue = function() {\r\n\t var q = this.deltaQueue;\r\n\t if (!q) return;\r\n\t this.deltaQueue = null;\r\n\t if (q.length > 50 && q.length > this.$doc.getLength() >> 1) {\r\n\t this.call(\"setValue\", [this.$doc.getValue()]);\r\n\t } else\r\n\t this.emit(\"change\", {data: q});\r\n\t };\r\n\r\n\t this.$workerBlob = function(workerUrl) {\r\n\t var script = \"importScripts('\" + net.qualifyURL(workerUrl) + \"');\";\r\n\t try {\r\n\t return new Blob([script], {\"type\": \"application/javascript\"});\r\n\t } catch (e) { // Backwards-compatibility\r\n\t var BlobBuilder = window.BlobBuilder || window.WebKitBlobBuilder || window.MozBlobBuilder;\r\n\t var blobBuilder = new BlobBuilder();\r\n\t blobBuilder.append(script);\r\n\t return blobBuilder.getBlob(\"application/javascript\");\r\n\t }\r\n\t };\r\n\r\n\t}).call(WorkerClient.prototype);\r\n\r\n\r\n\tvar UIWorkerClient = function(topLevelNamespaces, mod, classname) {\r\n\t this.$sendDeltaQueue = this.$sendDeltaQueue.bind(this);\r\n\t this.changeListener = this.changeListener.bind(this);\r\n\t this.callbackId = 1;\r\n\t this.callbacks = {};\r\n\t this.messageBuffer = [];\r\n\r\n\t var main = null;\r\n\t var emitSync = false;\r\n\t var sender = Object.create(EventEmitter);\r\n\t var _self = this;\r\n\r\n\t this.$worker = {};\r\n\t this.$worker.terminate = function() {};\r\n\t this.$worker.postMessage = function(e) {\r\n\t _self.messageBuffer.push(e);\r\n\t if (main) {\r\n\t if (emitSync)\r\n\t setTimeout(processNext);\r\n\t else\r\n\t processNext();\r\n\t }\r\n\t };\r\n\t this.setEmitSync = function(val) { emitSync = val };\r\n\r\n\t var processNext = function() {\r\n\t var msg = _self.messageBuffer.shift();\r\n\t if (msg.command)\r\n\t main[msg.command].apply(main, msg.args);\r\n\t else if (msg.event)\r\n\t sender._signal(msg.event, msg.data);\r\n\t };\r\n\r\n\t sender.postMessage = function(msg) {\r\n\t _self.onMessage({data: msg});\r\n\t };\r\n\t sender.callback = function(data, callbackId) {\r\n\t this.postMessage({type: \"call\", id: callbackId, data: data});\r\n\t };\r\n\t sender.emit = function(name, data) {\r\n\t this.postMessage({type: \"event\", name: name, data: data});\r\n\t };\r\n\r\n\t config.loadModule([\"worker\", mod], function(Main) {\r\n\t main = new Main[classname](sender);\r\n\t while (_self.messageBuffer.length)\r\n\t processNext();\r\n\t });\r\n\t};\r\n\r\n\tUIWorkerClient.prototype = WorkerClient.prototype;\r\n\r\n\texports.UIWorkerClient = UIWorkerClient;\r\n\texports.WorkerClient = WorkerClient;\r\n\r\n\t});\r\n\r\n\tace.define(\"ace/placeholder\",[\"require\",\"exports\",\"module\",\"ace/range\",\"ace/lib/event_emitter\",\"ace/lib/oop\"], function(acequire, exports, module) {\r\n\t\"use strict\";\r\n\r\n\tvar Range = acequire(\"./range\").Range;\r\n\tvar EventEmitter = acequire(\"./lib/event_emitter\").EventEmitter;\r\n\tvar oop = acequire(\"./lib/oop\");\r\n\r\n\tvar PlaceHolder = function(session, length, pos, others, mainClass, othersClass) {\r\n\t var _self = this;\r\n\t this.length = length;\r\n\t this.session = session;\r\n\t this.doc = session.getDocument();\r\n\t this.mainClass = mainClass;\r\n\t this.othersClass = othersClass;\r\n\t this.$onUpdate = this.onUpdate.bind(this);\r\n\t this.doc.on(\"change\", this.$onUpdate);\r\n\t this.$others = others;\r\n\t \r\n\t this.$onCursorChange = function() {\r\n\t setTimeout(function() {\r\n\t _self.onCursorChange();\r\n\t });\r\n\t };\r\n\t \r\n\t this.$pos = pos;\r\n\t var undoStack = session.getUndoManager().$undoStack || session.getUndoManager().$undostack || {length: -1};\r\n\t this.$undoStackDepth = undoStack.length;\r\n\t this.setup();\r\n\r\n\t session.selection.on(\"changeCursor\", this.$onCursorChange);\r\n\t};\r\n\r\n\t(function() {\r\n\r\n\t oop.implement(this, EventEmitter);\r\n\t this.setup = function() {\r\n\t var _self = this;\r\n\t var doc = this.doc;\r\n\t var session = this.session;\r\n\t \r\n\t this.selectionBefore = session.selection.toJSON();\r\n\t if (session.selection.inMultiSelectMode)\r\n\t session.selection.toSingleRange();\r\n\r\n\t this.pos = doc.createAnchor(this.$pos.row, this.$pos.column);\r\n\t var pos = this.pos;\r\n\t pos.$insertRight = true;\r\n\t pos.detach();\r\n\t pos.markerId = session.addMarker(new Range(pos.row, pos.column, pos.row, pos.column + this.length), this.mainClass, null, false);\r\n\t this.others = [];\r\n\t this.$others.forEach(function(other) {\r\n\t var anchor = doc.createAnchor(other.row, other.column);\r\n\t anchor.$insertRight = true;\r\n\t anchor.detach();\r\n\t _self.others.push(anchor);\r\n\t });\r\n\t session.setUndoSelect(false);\r\n\t };\r\n\t this.showOtherMarkers = function() {\r\n\t if (this.othersActive) return;\r\n\t var session = this.session;\r\n\t var _self = this;\r\n\t this.othersActive = true;\r\n\t this.others.forEach(function(anchor) {\r\n\t anchor.markerId = session.addMarker(new Range(anchor.row, anchor.column, anchor.row, anchor.column+_self.length), _self.othersClass, null, false);\r\n\t });\r\n\t };\r\n\t this.hideOtherMarkers = function() {\r\n\t if (!this.othersActive) return;\r\n\t this.othersActive = false;\r\n\t for (var i = 0; i < this.others.length; i++) {\r\n\t this.session.removeMarker(this.others[i].markerId);\r\n\t }\r\n\t };\r\n\t this.onUpdate = function(delta) {\r\n\t if (this.$updating)\r\n\t return this.updateAnchors(delta);\r\n\t \r\n\t var range = delta;\r\n\t if (range.start.row !== range.end.row) return;\r\n\t if (range.start.row !== this.pos.row) return;\r\n\t this.$updating = true;\r\n\t var lengthDiff = delta.action === \"insert\" ? range.end.column - range.start.column : range.start.column - range.end.column;\r\n\t var inMainRange = range.start.column >= this.pos.column && range.start.column <= this.pos.column + this.length + 1;\r\n\t var distanceFromStart = range.start.column - this.pos.column;\r\n\t \r\n\t this.updateAnchors(delta);\r\n\t \r\n\t if (inMainRange)\r\n\t this.length += lengthDiff;\r\n\r\n\t if (inMainRange && !this.session.$fromUndo) {\r\n\t if (delta.action === 'insert') {\r\n\t for (var i = this.others.length - 1; i >= 0; i--) {\r\n\t var otherPos = this.others[i];\r\n\t var newPos = {row: otherPos.row, column: otherPos.column + distanceFromStart};\r\n\t this.doc.insertMergedLines(newPos, delta.lines);\r\n\t }\r\n\t } else if (delta.action === 'remove') {\r\n\t for (var i = this.others.length - 1; i >= 0; i--) {\r\n\t var otherPos = this.others[i];\r\n\t var newPos = {row: otherPos.row, column: otherPos.column + distanceFromStart};\r\n\t this.doc.remove(new Range(newPos.row, newPos.column, newPos.row, newPos.column - lengthDiff));\r\n\t }\r\n\t }\r\n\t }\r\n\t \r\n\t this.$updating = false;\r\n\t this.updateMarkers();\r\n\t };\r\n\t \r\n\t this.updateAnchors = function(delta) {\r\n\t this.pos.onChange(delta);\r\n\t for (var i = this.others.length; i--;)\r\n\t this.others[i].onChange(delta);\r\n\t this.updateMarkers();\r\n\t };\r\n\t \r\n\t this.updateMarkers = function() {\r\n\t if (this.$updating)\r\n\t return;\r\n\t var _self = this;\r\n\t var session = this.session;\r\n\t var updateMarker = function(pos, className) {\r\n\t session.removeMarker(pos.markerId);\r\n\t pos.markerId = session.addMarker(new Range(pos.row, pos.column, pos.row, pos.column+_self.length), className, null, false);\r\n\t };\r\n\t updateMarker(this.pos, this.mainClass);\r\n\t for (var i = this.others.length; i--;)\r\n\t updateMarker(this.others[i], this.othersClass);\r\n\t };\r\n\r\n\t this.onCursorChange = function(event) {\r\n\t if (this.$updating || !this.session) return;\r\n\t var pos = this.session.selection.getCursor();\r\n\t if (pos.row === this.pos.row && pos.column >= this.pos.column && pos.column <= this.pos.column + this.length) {\r\n\t this.showOtherMarkers();\r\n\t this._emit(\"cursorEnter\", event);\r\n\t } else {\r\n\t this.hideOtherMarkers();\r\n\t this._emit(\"cursorLeave\", event);\r\n\t }\r\n\t }; \r\n\t this.detach = function() {\r\n\t this.session.removeMarker(this.pos && this.pos.markerId);\r\n\t this.hideOtherMarkers();\r\n\t this.doc.removeEventListener(\"change\", this.$onUpdate);\r\n\t this.session.selection.removeEventListener(\"changeCursor\", this.$onCursorChange);\r\n\t this.session.setUndoSelect(true);\r\n\t this.session = null;\r\n\t };\r\n\t this.cancel = function() {\r\n\t if (this.$undoStackDepth === -1)\r\n\t return;\r\n\t var undoManager = this.session.getUndoManager();\r\n\t var undosRequired = (undoManager.$undoStack || undoManager.$undostack).length - this.$undoStackDepth;\r\n\t for (var i = 0; i < undosRequired; i++) {\r\n\t undoManager.undo(true);\r\n\t }\r\n\t if (this.selectionBefore)\r\n\t this.session.selection.fromJSON(this.selectionBefore);\r\n\t };\r\n\t}).call(PlaceHolder.prototype);\r\n\r\n\r\n\texports.PlaceHolder = PlaceHolder;\r\n\t});\r\n\r\n\tace.define(\"ace/mouse/multi_select_handler\",[\"require\",\"exports\",\"module\",\"ace/lib/event\",\"ace/lib/useragent\"], function(acequire, exports, module) {\r\n\r\n\tvar event = acequire(\"../lib/event\");\r\n\tvar useragent = acequire(\"../lib/useragent\");\r\n\tfunction isSamePoint(p1, p2) {\r\n\t return p1.row == p2.row && p1.column == p2.column;\r\n\t}\r\n\r\n\tfunction onMouseDown(e) {\r\n\t var ev = e.domEvent;\r\n\t var alt = ev.altKey;\r\n\t var shift = ev.shiftKey;\r\n\t var ctrl = ev.ctrlKey;\r\n\t var accel = e.getAccelKey();\r\n\t var button = e.getButton();\r\n\t \r\n\t if (ctrl && useragent.isMac)\r\n\t button = ev.button;\r\n\r\n\t if (e.editor.inMultiSelectMode && button == 2) {\r\n\t e.editor.textInput.onContextMenu(e.domEvent);\r\n\t return;\r\n\t }\r\n\t \r\n\t if (!ctrl && !alt && !accel) {\r\n\t if (button === 0 && e.editor.inMultiSelectMode)\r\n\t e.editor.exitMultiSelectMode();\r\n\t return;\r\n\t }\r\n\t \r\n\t if (button !== 0)\r\n\t return;\r\n\r\n\t var editor = e.editor;\r\n\t var selection = editor.selection;\r\n\t var isMultiSelect = editor.inMultiSelectMode;\r\n\t var pos = e.getDocumentPosition();\r\n\t var cursor = selection.getCursor();\r\n\t var inSelection = e.inSelection() || (selection.isEmpty() && isSamePoint(pos, cursor));\r\n\r\n\t var mouseX = e.x, mouseY = e.y;\r\n\t var onMouseSelection = function(e) {\r\n\t mouseX = e.clientX;\r\n\t mouseY = e.clientY;\r\n\t };\r\n\t \r\n\t var session = editor.session;\r\n\t var screenAnchor = editor.renderer.pixelToScreenCoordinates(mouseX, mouseY);\r\n\t var screenCursor = screenAnchor;\r\n\t \r\n\t var selectionMode;\r\n\t if (editor.$mouseHandler.$enableJumpToDef) {\r\n\t if (ctrl && alt || accel && alt)\r\n\t selectionMode = shift ? \"block\" : \"add\";\r\n\t else if (alt && editor.$blockSelectEnabled)\r\n\t selectionMode = \"block\";\r\n\t } else {\r\n\t if (accel && !alt) {\r\n\t selectionMode = \"add\";\r\n\t if (!isMultiSelect && shift)\r\n\t return;\r\n\t } else if (alt && editor.$blockSelectEnabled) {\r\n\t selectionMode = \"block\";\r\n\t }\r\n\t }\r\n\t \r\n\t if (selectionMode && useragent.isMac && ev.ctrlKey) {\r\n\t editor.$mouseHandler.cancelContextMenu();\r\n\t }\r\n\r\n\t if (selectionMode == \"add\") {\r\n\t if (!isMultiSelect && inSelection)\r\n\t return; // dragging\r\n\r\n\t if (!isMultiSelect) {\r\n\t var range = selection.toOrientedRange();\r\n\t editor.addSelectionMarker(range);\r\n\t }\r\n\r\n\t var oldRange = selection.rangeList.rangeAtPoint(pos);\r\n\t \r\n\t \r\n\t editor.$blockScrolling++;\r\n\t editor.inVirtualSelectionMode = true;\r\n\t \r\n\t if (shift) {\r\n\t oldRange = null;\r\n\t range = selection.ranges[0] || range;\r\n\t editor.removeSelectionMarker(range);\r\n\t }\r\n\t editor.once(\"mouseup\", function() {\r\n\t var tmpSel = selection.toOrientedRange();\r\n\r\n\t if (oldRange && tmpSel.isEmpty() && isSamePoint(oldRange.cursor, tmpSel.cursor))\r\n\t selection.substractPoint(tmpSel.cursor);\r\n\t else {\r\n\t if (shift) {\r\n\t selection.substractPoint(range.cursor);\r\n\t } else if (range) {\r\n\t editor.removeSelectionMarker(range);\r\n\t selection.addRange(range);\r\n\t }\r\n\t selection.addRange(tmpSel);\r\n\t }\r\n\t editor.$blockScrolling--;\r\n\t editor.inVirtualSelectionMode = false;\r\n\t });\r\n\r\n\t } else if (selectionMode == \"block\") {\r\n\t e.stop();\r\n\t editor.inVirtualSelectionMode = true; \r\n\t var initialRange;\r\n\t var rectSel = [];\r\n\t var blockSelect = function() {\r\n\t var newCursor = editor.renderer.pixelToScreenCoordinates(mouseX, mouseY);\r\n\t var cursor = session.screenToDocumentPosition(newCursor.row, newCursor.column);\r\n\r\n\t if (isSamePoint(screenCursor, newCursor) && isSamePoint(cursor, selection.lead))\r\n\t return;\r\n\t screenCursor = newCursor;\r\n\t \r\n\t editor.$blockScrolling++;\r\n\t editor.selection.moveToPosition(cursor);\r\n\t editor.renderer.scrollCursorIntoView();\r\n\r\n\t editor.removeSelectionMarkers(rectSel);\r\n\t rectSel = selection.rectangularRangeBlock(screenCursor, screenAnchor);\r\n\t if (editor.$mouseHandler.$clickSelection && rectSel.length == 1 && rectSel[0].isEmpty())\r\n\t rectSel[0] = editor.$mouseHandler.$clickSelection.clone();\r\n\t rectSel.forEach(editor.addSelectionMarker, editor);\r\n\t editor.updateSelectionMarkers();\r\n\t editor.$blockScrolling--;\r\n\t };\r\n\t editor.$blockScrolling++;\r\n\t if (isMultiSelect && !accel) {\r\n\t selection.toSingleRange();\r\n\t } else if (!isMultiSelect && accel) {\r\n\t initialRange = selection.toOrientedRange();\r\n\t editor.addSelectionMarker(initialRange);\r\n\t }\r\n\t \r\n\t if (shift)\r\n\t screenAnchor = session.documentToScreenPosition(selection.lead); \r\n\t else\r\n\t selection.moveToPosition(pos);\r\n\t editor.$blockScrolling--;\r\n\t \r\n\t screenCursor = {row: -1, column: -1};\r\n\r\n\t var onMouseSelectionEnd = function(e) {\r\n\t clearInterval(timerId);\r\n\t editor.removeSelectionMarkers(rectSel);\r\n\t if (!rectSel.length)\r\n\t rectSel = [selection.toOrientedRange()];\r\n\t editor.$blockScrolling++;\r\n\t if (initialRange) {\r\n\t editor.removeSelectionMarker(initialRange);\r\n\t selection.toSingleRange(initialRange);\r\n\t }\r\n\t for (var i = 0; i < rectSel.length; i++)\r\n\t selection.addRange(rectSel[i]);\r\n\t editor.inVirtualSelectionMode = false;\r\n\t editor.$mouseHandler.$clickSelection = null;\r\n\t editor.$blockScrolling--;\r\n\t };\r\n\r\n\t var onSelectionInterval = blockSelect;\r\n\r\n\t event.capture(editor.container, onMouseSelection, onMouseSelectionEnd);\r\n\t var timerId = setInterval(function() {onSelectionInterval();}, 20);\r\n\r\n\t return e.preventDefault();\r\n\t }\r\n\t}\r\n\r\n\r\n\texports.onMouseDown = onMouseDown;\r\n\r\n\t});\r\n\r\n\tace.define(\"ace/commands/multi_select_commands\",[\"require\",\"exports\",\"module\",\"ace/keyboard/hash_handler\"], function(acequire, exports, module) {\r\n\texports.defaultCommands = [{\r\n\t name: \"addCursorAbove\",\r\n\t exec: function(editor) { editor.selectMoreLines(-1); },\r\n\t bindKey: {win: \"Ctrl-Alt-Up\", mac: \"Ctrl-Alt-Up\"},\r\n\t scrollIntoView: \"cursor\",\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"addCursorBelow\",\r\n\t exec: function(editor) { editor.selectMoreLines(1); },\r\n\t bindKey: {win: \"Ctrl-Alt-Down\", mac: \"Ctrl-Alt-Down\"},\r\n\t scrollIntoView: \"cursor\",\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"addCursorAboveSkipCurrent\",\r\n\t exec: function(editor) { editor.selectMoreLines(-1, true); },\r\n\t bindKey: {win: \"Ctrl-Alt-Shift-Up\", mac: \"Ctrl-Alt-Shift-Up\"},\r\n\t scrollIntoView: \"cursor\",\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"addCursorBelowSkipCurrent\",\r\n\t exec: function(editor) { editor.selectMoreLines(1, true); },\r\n\t bindKey: {win: \"Ctrl-Alt-Shift-Down\", mac: \"Ctrl-Alt-Shift-Down\"},\r\n\t scrollIntoView: \"cursor\",\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"selectMoreBefore\",\r\n\t exec: function(editor) { editor.selectMore(-1); },\r\n\t bindKey: {win: \"Ctrl-Alt-Left\", mac: \"Ctrl-Alt-Left\"},\r\n\t scrollIntoView: \"cursor\",\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"selectMoreAfter\",\r\n\t exec: function(editor) { editor.selectMore(1); },\r\n\t bindKey: {win: \"Ctrl-Alt-Right\", mac: \"Ctrl-Alt-Right\"},\r\n\t scrollIntoView: \"cursor\",\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"selectNextBefore\",\r\n\t exec: function(editor) { editor.selectMore(-1, true); },\r\n\t bindKey: {win: \"Ctrl-Alt-Shift-Left\", mac: \"Ctrl-Alt-Shift-Left\"},\r\n\t scrollIntoView: \"cursor\",\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"selectNextAfter\",\r\n\t exec: function(editor) { editor.selectMore(1, true); },\r\n\t bindKey: {win: \"Ctrl-Alt-Shift-Right\", mac: \"Ctrl-Alt-Shift-Right\"},\r\n\t scrollIntoView: \"cursor\",\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"splitIntoLines\",\r\n\t exec: function(editor) { editor.multiSelect.splitIntoLines(); },\r\n\t bindKey: {win: \"Ctrl-Alt-L\", mac: \"Ctrl-Alt-L\"},\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"alignCursors\",\r\n\t exec: function(editor) { editor.alignCursors(); },\r\n\t bindKey: {win: \"Ctrl-Alt-A\", mac: \"Ctrl-Alt-A\"},\r\n\t scrollIntoView: \"cursor\"\r\n\t}, {\r\n\t name: \"findAll\",\r\n\t exec: function(editor) { editor.findAll(); },\r\n\t bindKey: {win: \"Ctrl-Alt-K\", mac: \"Ctrl-Alt-G\"},\r\n\t scrollIntoView: \"cursor\",\r\n\t readOnly: true\r\n\t}];\r\n\texports.multiSelectCommands = [{\r\n\t name: \"singleSelection\",\r\n\t bindKey: \"esc\",\r\n\t exec: function(editor) { editor.exitMultiSelectMode(); },\r\n\t scrollIntoView: \"cursor\",\r\n\t readOnly: true,\r\n\t isAvailable: function(editor) {return editor && editor.inMultiSelectMode}\r\n\t}];\r\n\r\n\tvar HashHandler = acequire(\"../keyboard/hash_handler\").HashHandler;\r\n\texports.keyboardHandler = new HashHandler(exports.multiSelectCommands);\r\n\r\n\t});\r\n\r\n\tace.define(\"ace/multi_select\",[\"require\",\"exports\",\"module\",\"ace/range_list\",\"ace/range\",\"ace/selection\",\"ace/mouse/multi_select_handler\",\"ace/lib/event\",\"ace/lib/lang\",\"ace/commands/multi_select_commands\",\"ace/search\",\"ace/edit_session\",\"ace/editor\",\"ace/config\"], function(acequire, exports, module) {\r\n\r\n\tvar RangeList = acequire(\"./range_list\").RangeList;\r\n\tvar Range = acequire(\"./range\").Range;\r\n\tvar Selection = acequire(\"./selection\").Selection;\r\n\tvar onMouseDown = acequire(\"./mouse/multi_select_handler\").onMouseDown;\r\n\tvar event = acequire(\"./lib/event\");\r\n\tvar lang = acequire(\"./lib/lang\");\r\n\tvar commands = acequire(\"./commands/multi_select_commands\");\r\n\texports.commands = commands.defaultCommands.concat(commands.multiSelectCommands);\r\n\tvar Search = acequire(\"./search\").Search;\r\n\tvar search = new Search();\r\n\r\n\tfunction find(session, needle, dir) {\r\n\t search.$options.wrap = true;\r\n\t search.$options.needle = needle;\r\n\t search.$options.backwards = dir == -1;\r\n\t return search.find(session);\r\n\t}\r\n\tvar EditSession = acequire(\"./edit_session\").EditSession;\r\n\t(function() {\r\n\t this.getSelectionMarkers = function() {\r\n\t return this.$selectionMarkers;\r\n\t };\r\n\t}).call(EditSession.prototype);\r\n\t(function() {\r\n\t this.ranges = null;\r\n\t this.rangeList = null;\r\n\t this.addRange = function(range, $blockChangeEvents) {\r\n\t if (!range)\r\n\t return;\r\n\r\n\t if (!this.inMultiSelectMode && this.rangeCount === 0) {\r\n\t var oldRange = this.toOrientedRange();\r\n\t this.rangeList.add(oldRange);\r\n\t this.rangeList.add(range);\r\n\t if (this.rangeList.ranges.length != 2) {\r\n\t this.rangeList.removeAll();\r\n\t return $blockChangeEvents || this.fromOrientedRange(range);\r\n\t }\r\n\t this.rangeList.removeAll();\r\n\t this.rangeList.add(oldRange);\r\n\t this.$onAddRange(oldRange);\r\n\t }\r\n\r\n\t if (!range.cursor)\r\n\t range.cursor = range.end;\r\n\r\n\t var removed = this.rangeList.add(range);\r\n\r\n\t this.$onAddRange(range);\r\n\r\n\t if (removed.length)\r\n\t this.$onRemoveRange(removed);\r\n\r\n\t if (this.rangeCount > 1 && !this.inMultiSelectMode) {\r\n\t this._signal(\"multiSelect\");\r\n\t this.inMultiSelectMode = true;\r\n\t this.session.$undoSelect = false;\r\n\t this.rangeList.attach(this.session);\r\n\t }\r\n\r\n\t return $blockChangeEvents || this.fromOrientedRange(range);\r\n\t };\r\n\r\n\t this.toSingleRange = function(range) {\r\n\t range = range || this.ranges[0];\r\n\t var removed = this.rangeList.removeAll();\r\n\t if (removed.length)\r\n\t this.$onRemoveRange(removed);\r\n\r\n\t range && this.fromOrientedRange(range);\r\n\t };\r\n\t this.substractPoint = function(pos) {\r\n\t var removed = this.rangeList.substractPoint(pos);\r\n\t if (removed) {\r\n\t this.$onRemoveRange(removed);\r\n\t return removed[0];\r\n\t }\r\n\t };\r\n\t this.mergeOverlappingRanges = function() {\r\n\t var removed = this.rangeList.merge();\r\n\t if (removed.length)\r\n\t this.$onRemoveRange(removed);\r\n\t else if(this.ranges[0])\r\n\t this.fromOrientedRange(this.ranges[0]);\r\n\t };\r\n\r\n\t this.$onAddRange = function(range) {\r\n\t this.rangeCount = this.rangeList.ranges.length;\r\n\t this.ranges.unshift(range);\r\n\t this._signal(\"addRange\", {range: range});\r\n\t };\r\n\r\n\t this.$onRemoveRange = function(removed) {\r\n\t this.rangeCount = this.rangeList.ranges.length;\r\n\t if (this.rangeCount == 1 && this.inMultiSelectMode) {\r\n\t var lastRange = this.rangeList.ranges.pop();\r\n\t removed.push(lastRange);\r\n\t this.rangeCount = 0;\r\n\t }\r\n\r\n\t for (var i = removed.length; i--; ) {\r\n\t var index = this.ranges.indexOf(removed[i]);\r\n\t this.ranges.splice(index, 1);\r\n\t }\r\n\r\n\t this._signal(\"removeRange\", {ranges: removed});\r\n\r\n\t if (this.rangeCount === 0 && this.inMultiSelectMode) {\r\n\t this.inMultiSelectMode = false;\r\n\t this._signal(\"singleSelect\");\r\n\t this.session.$undoSelect = true;\r\n\t this.rangeList.detach(this.session);\r\n\t }\r\n\r\n\t lastRange = lastRange || this.ranges[0];\r\n\t if (lastRange && !lastRange.isEqual(this.getRange()))\r\n\t this.fromOrientedRange(lastRange);\r\n\t };\r\n\t this.$initRangeList = function() {\r\n\t if (this.rangeList)\r\n\t return;\r\n\r\n\t this.rangeList = new RangeList();\r\n\t this.ranges = [];\r\n\t this.rangeCount = 0;\r\n\t };\r\n\t this.getAllRanges = function() {\r\n\t return this.rangeCount ? this.rangeList.ranges.concat() : [this.getRange()];\r\n\t };\r\n\r\n\t this.splitIntoLines = function () {\r\n\t if (this.rangeCount > 1) {\r\n\t var ranges = this.rangeList.ranges;\r\n\t var lastRange = ranges[ranges.length - 1];\r\n\t var range = Range.fromPoints(ranges[0].start, lastRange.end);\r\n\r\n\t this.toSingleRange();\r\n\t this.setSelectionRange(range, lastRange.cursor == lastRange.start);\r\n\t } else {\r\n\t var range = this.getRange();\r\n\t var isBackwards = this.isBackwards();\r\n\t var startRow = range.start.row;\r\n\t var endRow = range.end.row;\r\n\t if (startRow == endRow) {\r\n\t if (isBackwards)\r\n\t var start = range.end, end = range.start;\r\n\t else\r\n\t var start = range.start, end = range.end;\r\n\t \r\n\t this.addRange(Range.fromPoints(end, end));\r\n\t this.addRange(Range.fromPoints(start, start));\r\n\t return;\r\n\t }\r\n\r\n\t var rectSel = [];\r\n\t var r = this.getLineRange(startRow, true);\r\n\t r.start.column = range.start.column;\r\n\t rectSel.push(r);\r\n\r\n\t for (var i = startRow + 1; i < endRow; i++)\r\n\t rectSel.push(this.getLineRange(i, true));\r\n\r\n\t r = this.getLineRange(endRow, true);\r\n\t r.end.column = range.end.column;\r\n\t rectSel.push(r);\r\n\r\n\t rectSel.forEach(this.addRange, this);\r\n\t }\r\n\t };\r\n\t this.toggleBlockSelection = function () {\r\n\t if (this.rangeCount > 1) {\r\n\t var ranges = this.rangeList.ranges;\r\n\t var lastRange = ranges[ranges.length - 1];\r\n\t var range = Range.fromPoints(ranges[0].start, lastRange.end);\r\n\r\n\t this.toSingleRange();\r\n\t this.setSelectionRange(range, lastRange.cursor == lastRange.start);\r\n\t } else {\r\n\t var cursor = this.session.documentToScreenPosition(this.selectionLead);\r\n\t var anchor = this.session.documentToScreenPosition(this.selectionAnchor);\r\n\r\n\t var rectSel = this.rectangularRangeBlock(cursor, anchor);\r\n\t rectSel.forEach(this.addRange, this);\r\n\t }\r\n\t };\r\n\t this.rectangularRangeBlock = function(screenCursor, screenAnchor, includeEmptyLines) {\r\n\t var rectSel = [];\r\n\r\n\t var xBackwards = screenCursor.column < screenAnchor.column;\r\n\t if (xBackwards) {\r\n\t var startColumn = screenCursor.column;\r\n\t var endColumn = screenAnchor.column;\r\n\t } else {\r\n\t var startColumn = screenAnchor.column;\r\n\t var endColumn = screenCursor.column;\r\n\t }\r\n\r\n\t var yBackwards = screenCursor.row < screenAnchor.row;\r\n\t if (yBackwards) {\r\n\t var startRow = screenCursor.row;\r\n\t var endRow = screenAnchor.row;\r\n\t } else {\r\n\t var startRow = screenAnchor.row;\r\n\t var endRow = screenCursor.row;\r\n\t }\r\n\r\n\t if (startColumn < 0)\r\n\t startColumn = 0;\r\n\t if (startRow < 0)\r\n\t startRow = 0;\r\n\r\n\t if (startRow == endRow)\r\n\t includeEmptyLines = true;\r\n\r\n\t for (var row = startRow; row <= endRow; row++) {\r\n\t var range = Range.fromPoints(\r\n\t this.session.screenToDocumentPosition(row, startColumn),\r\n\t this.session.screenToDocumentPosition(row, endColumn)\r\n\t );\r\n\t if (range.isEmpty()) {\r\n\t if (docEnd && isSamePoint(range.end, docEnd))\r\n\t break;\r\n\t var docEnd = range.end;\r\n\t }\r\n\t range.cursor = xBackwards ? range.start : range.end;\r\n\t rectSel.push(range);\r\n\t }\r\n\r\n\t if (yBackwards)\r\n\t rectSel.reverse();\r\n\r\n\t if (!includeEmptyLines) {\r\n\t var end = rectSel.length - 1;\r\n\t while (rectSel[end].isEmpty() && end > 0)\r\n\t end--;\r\n\t if (end > 0) {\r\n\t var start = 0;\r\n\t while (rectSel[start].isEmpty())\r\n\t start++;\r\n\t }\r\n\t for (var i = end; i >= start; i--) {\r\n\t if (rectSel[i].isEmpty())\r\n\t rectSel.splice(i, 1);\r\n\t }\r\n\t }\r\n\r\n\t return rectSel;\r\n\t };\r\n\t}).call(Selection.prototype);\r\n\tvar Editor = acequire(\"./editor\").Editor;\r\n\t(function() {\r\n\t this.updateSelectionMarkers = function() {\r\n\t this.renderer.updateCursor();\r\n\t this.renderer.updateBackMarkers();\r\n\t };\r\n\t this.addSelectionMarker = function(orientedRange) {\r\n\t if (!orientedRange.cursor)\r\n\t orientedRange.cursor = orientedRange.end;\r\n\r\n\t var style = this.getSelectionStyle();\r\n\t orientedRange.marker = this.session.addMarker(orientedRange, \"ace_selection\", style);\r\n\r\n\t this.session.$selectionMarkers.push(orientedRange);\r\n\t this.session.selectionMarkerCount = this.session.$selectionMarkers.length;\r\n\t return orientedRange;\r\n\t };\r\n\t this.removeSelectionMarker = function(range) {\r\n\t if (!range.marker)\r\n\t return;\r\n\t this.session.removeMarker(range.marker);\r\n\t var index = this.session.$selectionMarkers.indexOf(range);\r\n\t if (index != -1)\r\n\t this.session.$selectionMarkers.splice(index, 1);\r\n\t this.session.selectionMarkerCount = this.session.$selectionMarkers.length;\r\n\t };\r\n\r\n\t this.removeSelectionMarkers = function(ranges) {\r\n\t var markerList = this.session.$selectionMarkers;\r\n\t for (var i = ranges.length; i--; ) {\r\n\t var range = ranges[i];\r\n\t if (!range.marker)\r\n\t continue;\r\n\t this.session.removeMarker(range.marker);\r\n\t var index = markerList.indexOf(range);\r\n\t if (index != -1)\r\n\t markerList.splice(index, 1);\r\n\t }\r\n\t this.session.selectionMarkerCount = markerList.length;\r\n\t };\r\n\r\n\t this.$onAddRange = function(e) {\r\n\t this.addSelectionMarker(e.range);\r\n\t this.renderer.updateCursor();\r\n\t this.renderer.updateBackMarkers();\r\n\t };\r\n\r\n\t this.$onRemoveRange = function(e) {\r\n\t this.removeSelectionMarkers(e.ranges);\r\n\t this.renderer.updateCursor();\r\n\t this.renderer.updateBackMarkers();\r\n\t };\r\n\r\n\t this.$onMultiSelect = function(e) {\r\n\t if (this.inMultiSelectMode)\r\n\t return;\r\n\t this.inMultiSelectMode = true;\r\n\r\n\t this.setStyle(\"ace_multiselect\");\r\n\t this.keyBinding.addKeyboardHandler(commands.keyboardHandler);\r\n\t this.commands.setDefaultHandler(\"exec\", this.$onMultiSelectExec);\r\n\r\n\t this.renderer.updateCursor();\r\n\t this.renderer.updateBackMarkers();\r\n\t };\r\n\r\n\t this.$onSingleSelect = function(e) {\r\n\t if (this.session.multiSelect.inVirtualMode)\r\n\t return;\r\n\t this.inMultiSelectMode = false;\r\n\r\n\t this.unsetStyle(\"ace_multiselect\");\r\n\t this.keyBinding.removeKeyboardHandler(commands.keyboardHandler);\r\n\r\n\t this.commands.removeDefaultHandler(\"exec\", this.$onMultiSelectExec);\r\n\t this.renderer.updateCursor();\r\n\t this.renderer.updateBackMarkers();\r\n\t this._emit(\"changeSelection\");\r\n\t };\r\n\r\n\t this.$onMultiSelectExec = function(e) {\r\n\t var command = e.command;\r\n\t var editor = e.editor;\r\n\t if (!editor.multiSelect)\r\n\t return;\r\n\t if (!command.multiSelectAction) {\r\n\t var result = command.exec(editor, e.args || {});\r\n\t editor.multiSelect.addRange(editor.multiSelect.toOrientedRange());\r\n\t editor.multiSelect.mergeOverlappingRanges();\r\n\t } else if (command.multiSelectAction == \"forEach\") {\r\n\t result = editor.forEachSelection(command, e.args);\r\n\t } else if (command.multiSelectAction == \"forEachLine\") {\r\n\t result = editor.forEachSelection(command, e.args, true);\r\n\t } else if (command.multiSelectAction == \"single\") {\r\n\t editor.exitMultiSelectMode();\r\n\t result = command.exec(editor, e.args || {});\r\n\t } else {\r\n\t result = command.multiSelectAction(editor, e.args || {});\r\n\t }\r\n\t return result;\r\n\t }; \r\n\t this.forEachSelection = function(cmd, args, options) {\r\n\t if (this.inVirtualSelectionMode)\r\n\t return;\r\n\t var keepOrder = options && options.keepOrder;\r\n\t var $byLines = options == true || options && options.$byLines\r\n\t var session = this.session;\r\n\t var selection = this.selection;\r\n\t var rangeList = selection.rangeList;\r\n\t var ranges = (keepOrder ? selection : rangeList).ranges;\r\n\t var result;\r\n\t \r\n\t if (!ranges.length)\r\n\t return cmd.exec ? cmd.exec(this, args || {}) : cmd(this, args || {});\r\n\t \r\n\t var reg = selection._eventRegistry;\r\n\t selection._eventRegistry = {};\r\n\r\n\t var tmpSel = new Selection(session);\r\n\t this.inVirtualSelectionMode = true;\r\n\t for (var i = ranges.length; i--;) {\r\n\t if ($byLines) {\r\n\t while (i > 0 && ranges[i].start.row == ranges[i - 1].end.row)\r\n\t i--;\r\n\t }\r\n\t tmpSel.fromOrientedRange(ranges[i]);\r\n\t tmpSel.index = i;\r\n\t this.selection = session.selection = tmpSel;\r\n\t var cmdResult = cmd.exec ? cmd.exec(this, args || {}) : cmd(this, args || {});\r\n\t if (!result && cmdResult !== undefined)\r\n\t result = cmdResult;\r\n\t tmpSel.toOrientedRange(ranges[i]);\r\n\t }\r\n\t tmpSel.detach();\r\n\r\n\t this.selection = session.selection = selection;\r\n\t this.inVirtualSelectionMode = false;\r\n\t selection._eventRegistry = reg;\r\n\t selection.mergeOverlappingRanges();\r\n\t \r\n\t var anim = this.renderer.$scrollAnimation;\r\n\t this.onCursorChange();\r\n\t this.onSelectionChange();\r\n\t if (anim && anim.from == anim.to)\r\n\t this.renderer.animateScrolling(anim.from);\r\n\t \r\n\t return result;\r\n\t };\r\n\t this.exitMultiSelectMode = function() {\r\n\t if (!this.inMultiSelectMode || this.inVirtualSelectionMode)\r\n\t return;\r\n\t this.multiSelect.toSingleRange();\r\n\t };\r\n\r\n\t this.getSelectedText = function() {\r\n\t var text = \"\";\r\n\t if (this.inMultiSelectMode && !this.inVirtualSelectionMode) {\r\n\t var ranges = this.multiSelect.rangeList.ranges;\r\n\t var buf = [];\r\n\t for (var i = 0; i < ranges.length; i++) {\r\n\t buf.push(this.session.getTextRange(ranges[i]));\r\n\t }\r\n\t var nl = this.session.getDocument().getNewLineCharacter();\r\n\t text = buf.join(nl);\r\n\t if (text.length == (buf.length - 1) * nl.length)\r\n\t text = \"\";\r\n\t } else if (!this.selection.isEmpty()) {\r\n\t text = this.session.getTextRange(this.getSelectionRange());\r\n\t }\r\n\t return text;\r\n\t };\r\n\t \r\n\t this.$checkMultiselectChange = function(e, anchor) {\r\n\t if (this.inMultiSelectMode && !this.inVirtualSelectionMode) {\r\n\t var range = this.multiSelect.ranges[0];\r\n\t if (this.multiSelect.isEmpty() && anchor == this.multiSelect.anchor)\r\n\t return;\r\n\t var pos = anchor == this.multiSelect.anchor\r\n\t ? range.cursor == range.start ? range.end : range.start\r\n\t : range.cursor;\r\n\t if (pos.row != anchor.row \r\n\t || this.session.$clipPositionToDocument(pos.row, pos.column).column != anchor.column)\r\n\t this.multiSelect.toSingleRange(this.multiSelect.toOrientedRange());\r\n\t }\r\n\t };\r\n\t this.findAll = function(needle, options, additive) {\r\n\t options = options || {};\r\n\t options.needle = needle || options.needle;\r\n\t if (options.needle == undefined) {\r\n\t var range = this.selection.isEmpty()\r\n\t ? this.selection.getWordRange()\r\n\t : this.selection.getRange();\r\n\t options.needle = this.session.getTextRange(range);\r\n\t } \r\n\t this.$search.set(options);\r\n\t \r\n\t var ranges = this.$search.findAll(this.session);\r\n\t if (!ranges.length)\r\n\t return 0;\r\n\r\n\t this.$blockScrolling += 1;\r\n\t var selection = this.multiSelect;\r\n\r\n\t if (!additive)\r\n\t selection.toSingleRange(ranges[0]);\r\n\r\n\t for (var i = ranges.length; i--; )\r\n\t selection.addRange(ranges[i], true);\r\n\t if (range && selection.rangeList.rangeAtPoint(range.start))\r\n\t selection.addRange(range, true);\r\n\t \r\n\t this.$blockScrolling -= 1;\r\n\r\n\t return ranges.length;\r\n\t };\r\n\t this.selectMoreLines = function(dir, skip) {\r\n\t var range = this.selection.toOrientedRange();\r\n\t var isBackwards = range.cursor == range.end;\r\n\r\n\t var screenLead = this.session.documentToScreenPosition(range.cursor);\r\n\t if (this.selection.$desiredColumn)\r\n\t screenLead.column = this.selection.$desiredColumn;\r\n\r\n\t var lead = this.session.screenToDocumentPosition(screenLead.row + dir, screenLead.column);\r\n\r\n\t if (!range.isEmpty()) {\r\n\t var screenAnchor = this.session.documentToScreenPosition(isBackwards ? range.end : range.start);\r\n\t var anchor = this.session.screenToDocumentPosition(screenAnchor.row + dir, screenAnchor.column);\r\n\t } else {\r\n\t var anchor = lead;\r\n\t }\r\n\r\n\t if (isBackwards) {\r\n\t var newRange = Range.fromPoints(lead, anchor);\r\n\t newRange.cursor = newRange.start;\r\n\t } else {\r\n\t var newRange = Range.fromPoints(anchor, lead);\r\n\t newRange.cursor = newRange.end;\r\n\t }\r\n\r\n\t newRange.desiredColumn = screenLead.column;\r\n\t if (!this.selection.inMultiSelectMode) {\r\n\t this.selection.addRange(range);\r\n\t } else {\r\n\t if (skip)\r\n\t var toRemove = range.cursor;\r\n\t }\r\n\r\n\t this.selection.addRange(newRange);\r\n\t if (toRemove)\r\n\t this.selection.substractPoint(toRemove);\r\n\t };\r\n\t this.transposeSelections = function(dir) {\r\n\t var session = this.session;\r\n\t var sel = session.multiSelect;\r\n\t var all = sel.ranges;\r\n\r\n\t for (var i = all.length; i--; ) {\r\n\t var range = all[i];\r\n\t if (range.isEmpty()) {\r\n\t var tmp = session.getWordRange(range.start.row, range.start.column);\r\n\t range.start.row = tmp.start.row;\r\n\t range.start.column = tmp.start.column;\r\n\t range.end.row = tmp.end.row;\r\n\t range.end.column = tmp.end.column;\r\n\t }\r\n\t }\r\n\t sel.mergeOverlappingRanges();\r\n\r\n\t var words = [];\r\n\t for (var i = all.length; i--; ) {\r\n\t var range = all[i];\r\n\t words.unshift(session.getTextRange(range));\r\n\t }\r\n\r\n\t if (dir < 0)\r\n\t words.unshift(words.pop());\r\n\t else\r\n\t words.push(words.shift());\r\n\r\n\t for (var i = all.length; i--; ) {\r\n\t var range = all[i];\r\n\t var tmp = range.clone();\r\n\t session.replace(range, words[i]);\r\n\t range.start.row = tmp.start.row;\r\n\t range.start.column = tmp.start.column;\r\n\t }\r\n\t };\r\n\t this.selectMore = function(dir, skip, stopAtFirst) {\r\n\t var session = this.session;\r\n\t var sel = session.multiSelect;\r\n\r\n\t var range = sel.toOrientedRange();\r\n\t if (range.isEmpty()) {\r\n\t range = session.getWordRange(range.start.row, range.start.column);\r\n\t range.cursor = dir == -1 ? range.start : range.end;\r\n\t this.multiSelect.addRange(range);\r\n\t if (stopAtFirst)\r\n\t return;\r\n\t }\r\n\t var needle = session.getTextRange(range);\r\n\r\n\t var newRange = find(session, needle, dir);\r\n\t if (newRange) {\r\n\t newRange.cursor = dir == -1 ? newRange.start : newRange.end;\r\n\t this.$blockScrolling += 1;\r\n\t this.session.unfold(newRange);\r\n\t this.multiSelect.addRange(newRange);\r\n\t this.$blockScrolling -= 1;\r\n\t this.renderer.scrollCursorIntoView(null, 0.5);\r\n\t }\r\n\t if (skip)\r\n\t this.multiSelect.substractPoint(range.cursor);\r\n\t };\r\n\t this.alignCursors = function() {\r\n\t var session = this.session;\r\n\t var sel = session.multiSelect;\r\n\t var ranges = sel.ranges;\r\n\t var row = -1;\r\n\t var sameRowRanges = ranges.filter(function(r) {\r\n\t if (r.cursor.row == row)\r\n\t return true;\r\n\t row = r.cursor.row;\r\n\t });\r\n\t \r\n\t if (!ranges.length || sameRowRanges.length == ranges.length - 1) {\r\n\t var range = this.selection.getRange();\r\n\t var fr = range.start.row, lr = range.end.row;\r\n\t var guessRange = fr == lr;\r\n\t if (guessRange) {\r\n\t var max = this.session.getLength();\r\n\t var line;\r\n\t do {\r\n\t line = this.session.getLine(lr);\r\n\t } while (/[=:]/.test(line) && ++lr < max);\r\n\t do {\r\n\t line = this.session.getLine(fr);\r\n\t } while (/[=:]/.test(line) && --fr > 0);\r\n\t \r\n\t if (fr < 0) fr = 0;\r\n\t if (lr >= max) lr = max - 1;\r\n\t }\r\n\t var lines = this.session.removeFullLines(fr, lr);\r\n\t lines = this.$reAlignText(lines, guessRange);\r\n\t this.session.insert({row: fr, column: 0}, lines.join(\"\\n\") + \"\\n\");\r\n\t if (!guessRange) {\r\n\t range.start.column = 0;\r\n\t range.end.column = lines[lines.length - 1].length;\r\n\t }\r\n\t this.selection.setRange(range);\r\n\t } else {\r\n\t sameRowRanges.forEach(function(r) {\r\n\t sel.substractPoint(r.cursor);\r\n\t });\r\n\r\n\t var maxCol = 0;\r\n\t var minSpace = Infinity;\r\n\t var spaceOffsets = ranges.map(function(r) {\r\n\t var p = r.cursor;\r\n\t var line = session.getLine(p.row);\r\n\t var spaceOffset = line.substr(p.column).search(/\\S/g);\r\n\t if (spaceOffset == -1)\r\n\t spaceOffset = 0;\r\n\r\n\t if (p.column > maxCol)\r\n\t maxCol = p.column;\r\n\t if (spaceOffset < minSpace)\r\n\t minSpace = spaceOffset;\r\n\t return spaceOffset;\r\n\t });\r\n\t ranges.forEach(function(r, i) {\r\n\t var p = r.cursor;\r\n\t var l = maxCol - p.column;\r\n\t var d = spaceOffsets[i] - minSpace;\r\n\t if (l > d)\r\n\t session.insert(p, lang.stringRepeat(\" \", l - d));\r\n\t else\r\n\t session.remove(new Range(p.row, p.column, p.row, p.column - l + d));\r\n\r\n\t r.start.column = r.end.column = maxCol;\r\n\t r.start.row = r.end.row = p.row;\r\n\t r.cursor = r.end;\r\n\t });\r\n\t sel.fromOrientedRange(ranges[0]);\r\n\t this.renderer.updateCursor();\r\n\t this.renderer.updateBackMarkers();\r\n\t }\r\n\t };\r\n\r\n\t this.$reAlignText = function(lines, forceLeft) {\r\n\t var isLeftAligned = true, isRightAligned = true;\r\n\t var startW, textW, endW;\r\n\r\n\t return lines.map(function(line) {\r\n\t var m = line.match(/(\\s*)(.*?)(\\s*)([=:].*)/);\r\n\t if (!m)\r\n\t return [line];\r\n\r\n\t if (startW == null) {\r\n\t startW = m[1].length;\r\n\t textW = m[2].length;\r\n\t endW = m[3].length;\r\n\t return m;\r\n\t }\r\n\r\n\t if (startW + textW + endW != m[1].length + m[2].length + m[3].length)\r\n\t isRightAligned = false;\r\n\t if (startW != m[1].length)\r\n\t isLeftAligned = false;\r\n\r\n\t if (startW > m[1].length)\r\n\t startW = m[1].length;\r\n\t if (textW < m[2].length)\r\n\t textW = m[2].length;\r\n\t if (endW > m[3].length)\r\n\t endW = m[3].length;\r\n\r\n\t return m;\r\n\t }).map(forceLeft ? alignLeft :\r\n\t isLeftAligned ? isRightAligned ? alignRight : alignLeft : unAlign);\r\n\r\n\t function spaces(n) {\r\n\t return lang.stringRepeat(\" \", n);\r\n\t }\r\n\r\n\t function alignLeft(m) {\r\n\t return !m[2] ? m[0] : spaces(startW) + m[2]\r\n\t + spaces(textW - m[2].length + endW)\r\n\t + m[4].replace(/^([=:])\\s+/, \"$1 \");\r\n\t }\r\n\t function alignRight(m) {\r\n\t return !m[2] ? m[0] : spaces(startW + textW - m[2].length) + m[2]\r\n\t + spaces(endW, \" \")\r\n\t + m[4].replace(/^([=:])\\s+/, \"$1 \");\r\n\t }\r\n\t function unAlign(m) {\r\n\t return !m[2] ? m[0] : spaces(startW) + m[2]\r\n\t + spaces(endW)\r\n\t + m[4].replace(/^([=:])\\s+/, \"$1 \");\r\n\t }\r\n\t };\r\n\t}).call(Editor.prototype);\r\n\r\n\r\n\tfunction isSamePoint(p1, p2) {\r\n\t return p1.row == p2.row && p1.column == p2.column;\r\n\t}\r\n\texports.onSessionChange = function(e) {\r\n\t var session = e.session;\r\n\t if (session && !session.multiSelect) {\r\n\t session.$selectionMarkers = [];\r\n\t session.selection.$initRangeList();\r\n\t session.multiSelect = session.selection;\r\n\t }\r\n\t this.multiSelect = session && session.multiSelect;\r\n\r\n\t var oldSession = e.oldSession;\r\n\t if (oldSession) {\r\n\t oldSession.multiSelect.off(\"addRange\", this.$onAddRange);\r\n\t oldSession.multiSelect.off(\"removeRange\", this.$onRemoveRange);\r\n\t oldSession.multiSelect.off(\"multiSelect\", this.$onMultiSelect);\r\n\t oldSession.multiSelect.off(\"singleSelect\", this.$onSingleSelect);\r\n\t oldSession.multiSelect.lead.off(\"change\", this.$checkMultiselectChange);\r\n\t oldSession.multiSelect.anchor.off(\"change\", this.$checkMultiselectChange);\r\n\t }\r\n\r\n\t if (session) {\r\n\t session.multiSelect.on(\"addRange\", this.$onAddRange);\r\n\t session.multiSelect.on(\"removeRange\", this.$onRemoveRange);\r\n\t session.multiSelect.on(\"multiSelect\", this.$onMultiSelect);\r\n\t session.multiSelect.on(\"singleSelect\", this.$onSingleSelect);\r\n\t session.multiSelect.lead.on(\"change\", this.$checkMultiselectChange);\r\n\t session.multiSelect.anchor.on(\"change\", this.$checkMultiselectChange);\r\n\t }\r\n\r\n\t if (session && this.inMultiSelectMode != session.selection.inMultiSelectMode) {\r\n\t if (session.selection.inMultiSelectMode)\r\n\t this.$onMultiSelect();\r\n\t else\r\n\t this.$onSingleSelect();\r\n\t }\r\n\t};\r\n\tfunction MultiSelect(editor) {\r\n\t if (editor.$multiselectOnSessionChange)\r\n\t return;\r\n\t editor.$onAddRange = editor.$onAddRange.bind(editor);\r\n\t editor.$onRemoveRange = editor.$onRemoveRange.bind(editor);\r\n\t editor.$onMultiSelect = editor.$onMultiSelect.bind(editor);\r\n\t editor.$onSingleSelect = editor.$onSingleSelect.bind(editor);\r\n\t editor.$multiselectOnSessionChange = exports.onSessionChange.bind(editor);\r\n\t editor.$checkMultiselectChange = editor.$checkMultiselectChange.bind(editor);\r\n\r\n\t editor.$multiselectOnSessionChange(editor);\r\n\t editor.on(\"changeSession\", editor.$multiselectOnSessionChange);\r\n\r\n\t editor.on(\"mousedown\", onMouseDown);\r\n\t editor.commands.addCommands(commands.defaultCommands);\r\n\r\n\t addAltCursorListeners(editor);\r\n\t}\r\n\r\n\tfunction addAltCursorListeners(editor){\r\n\t var el = editor.textInput.getElement();\r\n\t var altCursor = false;\r\n\t event.addListener(el, \"keydown\", function(e) {\r\n\t var altDown = e.keyCode == 18 && !(e.ctrlKey || e.shiftKey || e.metaKey);\r\n\t if (editor.$blockSelectEnabled && altDown) {\r\n\t if (!altCursor) {\r\n\t editor.renderer.setMouseCursor(\"crosshair\");\r\n\t altCursor = true;\r\n\t }\r\n\t } else if (altCursor) {\r\n\t reset();\r\n\t }\r\n\t });\r\n\r\n\t event.addListener(el, \"keyup\", reset);\r\n\t event.addListener(el, \"blur\", reset);\r\n\t function reset(e) {\r\n\t if (altCursor) {\r\n\t editor.renderer.setMouseCursor(\"\");\r\n\t altCursor = false;\r\n\t }\r\n\t }\r\n\t}\r\n\r\n\texports.MultiSelect = MultiSelect;\r\n\r\n\r\n\tacequire(\"./config\").defineOptions(Editor.prototype, \"editor\", {\r\n\t enableMultiselect: {\r\n\t set: function(val) {\r\n\t MultiSelect(this);\r\n\t if (val) {\r\n\t this.on(\"changeSession\", this.$multiselectOnSessionChange);\r\n\t this.on(\"mousedown\", onMouseDown);\r\n\t } else {\r\n\t this.off(\"changeSession\", this.$multiselectOnSessionChange);\r\n\t this.off(\"mousedown\", onMouseDown);\r\n\t }\r\n\t },\r\n\t value: true\r\n\t },\r\n\t enableBlockSelect: {\r\n\t set: function(val) {\r\n\t this.$blockSelectEnabled = val;\r\n\t },\r\n\t value: true\r\n\t }\r\n\t});\r\n\r\n\r\n\r\n\t});\r\n\r\n\tace.define(\"ace/mode/folding/fold_mode\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(acequire, exports, module) {\r\n\t\"use strict\";\r\n\r\n\tvar Range = acequire(\"../../range\").Range;\r\n\r\n\tvar FoldMode = exports.FoldMode = function() {};\r\n\r\n\t(function() {\r\n\r\n\t this.foldingStartMarker = null;\r\n\t this.foldingStopMarker = null;\r\n\t this.getFoldWidget = function(session, foldStyle, row) {\r\n\t var line = session.getLine(row);\r\n\t if (this.foldingStartMarker.test(line))\r\n\t return \"start\";\r\n\t if (foldStyle == \"markbeginend\"\r\n\t && this.foldingStopMarker\r\n\t && this.foldingStopMarker.test(line))\r\n\t return \"end\";\r\n\t return \"\";\r\n\t };\r\n\r\n\t this.getFoldWidgetRange = function(session, foldStyle, row) {\r\n\t return null;\r\n\t };\r\n\r\n\t this.indentationBlock = function(session, row, column) {\r\n\t var re = /\\S/;\r\n\t var line = session.getLine(row);\r\n\t var startLevel = line.search(re);\r\n\t if (startLevel == -1)\r\n\t return;\r\n\r\n\t var startColumn = column || line.length;\r\n\t var maxRow = session.getLength();\r\n\t var startRow = row;\r\n\t var endRow = row;\r\n\r\n\t while (++row < maxRow) {\r\n\t var level = session.getLine(row).search(re);\r\n\r\n\t if (level == -1)\r\n\t continue;\r\n\r\n\t if (level <= startLevel)\r\n\t break;\r\n\r\n\t endRow = row;\r\n\t }\r\n\r\n\t if (endRow > startRow) {\r\n\t var endColumn = session.getLine(endRow).length;\r\n\t return new Range(startRow, startColumn, endRow, endColumn);\r\n\t }\r\n\t };\r\n\r\n\t this.openingBracketBlock = function(session, bracket, row, column, typeRe) {\r\n\t var start = {row: row, column: column + 1};\r\n\t var end = session.$findClosingBracket(bracket, start, typeRe);\r\n\t if (!end)\r\n\t return;\r\n\r\n\t var fw = session.foldWidgets[end.row];\r\n\t if (fw == null)\r\n\t fw = session.getFoldWidget(end.row);\r\n\r\n\t if (fw == \"start\" && end.row > start.row) {\r\n\t end.row --;\r\n\t end.column = session.getLine(end.row).length;\r\n\t }\r\n\t return Range.fromPoints(start, end);\r\n\t };\r\n\r\n\t this.closingBracketBlock = function(session, bracket, row, column, typeRe) {\r\n\t var end = {row: row, column: column};\r\n\t var start = session.$findOpeningBracket(bracket, end);\r\n\r\n\t if (!start)\r\n\t return;\r\n\r\n\t start.column++;\r\n\t end.column--;\r\n\r\n\t return Range.fromPoints(start, end);\r\n\t };\r\n\t}).call(FoldMode.prototype);\r\n\r\n\t});\r\n\r\n\tace.define(\"ace/theme/textmate\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(acequire, exports, module) {\r\n\t\"use strict\";\r\n\r\n\texports.isDark = false;\r\n\texports.cssClass = \"ace-tm\";\r\n\texports.cssText = \".ace-tm .ace_gutter {\\\r\n\tbackground: #f0f0f0;\\\r\n\tcolor: #333;\\\r\n\t}\\\r\n\t.ace-tm .ace_print-margin {\\\r\n\twidth: 1px;\\\r\n\tbackground: #e8e8e8;\\\r\n\t}\\\r\n\t.ace-tm .ace_fold {\\\r\n\tbackground-color: #6B72E6;\\\r\n\t}\\\r\n\t.ace-tm {\\\r\n\tbackground-color: #FFFFFF;\\\r\n\tcolor: black;\\\r\n\t}\\\r\n\t.ace-tm .ace_cursor {\\\r\n\tcolor: black;\\\r\n\t}\\\r\n\t.ace-tm .ace_invisible {\\\r\n\tcolor: rgb(191, 191, 191);\\\r\n\t}\\\r\n\t.ace-tm .ace_storage,\\\r\n\t.ace-tm .ace_keyword {\\\r\n\tcolor: blue;\\\r\n\t}\\\r\n\t.ace-tm .ace_constant {\\\r\n\tcolor: rgb(197, 6, 11);\\\r\n\t}\\\r\n\t.ace-tm .ace_constant.ace_buildin {\\\r\n\tcolor: rgb(88, 72, 246);\\\r\n\t}\\\r\n\t.ace-tm .ace_constant.ace_language {\\\r\n\tcolor: rgb(88, 92, 246);\\\r\n\t}\\\r\n\t.ace-tm .ace_constant.ace_library {\\\r\n\tcolor: rgb(6, 150, 14);\\\r\n\t}\\\r\n\t.ace-tm .ace_invalid {\\\r\n\tbackground-color: rgba(255, 0, 0, 0.1);\\\r\n\tcolor: red;\\\r\n\t}\\\r\n\t.ace-tm .ace_support.ace_function {\\\r\n\tcolor: rgb(60, 76, 114);\\\r\n\t}\\\r\n\t.ace-tm .ace_support.ace_constant {\\\r\n\tcolor: rgb(6, 150, 14);\\\r\n\t}\\\r\n\t.ace-tm .ace_support.ace_type,\\\r\n\t.ace-tm .ace_support.ace_class {\\\r\n\tcolor: rgb(109, 121, 222);\\\r\n\t}\\\r\n\t.ace-tm .ace_keyword.ace_operator {\\\r\n\tcolor: rgb(104, 118, 135);\\\r\n\t}\\\r\n\t.ace-tm .ace_string {\\\r\n\tcolor: rgb(3, 106, 7);\\\r\n\t}\\\r\n\t.ace-tm .ace_comment {\\\r\n\tcolor: rgb(76, 136, 107);\\\r\n\t}\\\r\n\t.ace-tm .ace_comment.ace_doc {\\\r\n\tcolor: rgb(0, 102, 255);\\\r\n\t}\\\r\n\t.ace-tm .ace_comment.ace_doc.ace_tag {\\\r\n\tcolor: rgb(128, 159, 191);\\\r\n\t}\\\r\n\t.ace-tm .ace_constant.ace_numeric {\\\r\n\tcolor: rgb(0, 0, 205);\\\r\n\t}\\\r\n\t.ace-tm .ace_variable {\\\r\n\tcolor: rgb(49, 132, 149);\\\r\n\t}\\\r\n\t.ace-tm .ace_xml-pe {\\\r\n\tcolor: rgb(104, 104, 91);\\\r\n\t}\\\r\n\t.ace-tm .ace_entity.ace_name.ace_function {\\\r\n\tcolor: #0000A2;\\\r\n\t}\\\r\n\t.ace-tm .ace_heading {\\\r\n\tcolor: rgb(12, 7, 255);\\\r\n\t}\\\r\n\t.ace-tm .ace_list {\\\r\n\tcolor:rgb(185, 6, 144);\\\r\n\t}\\\r\n\t.ace-tm .ace_meta.ace_tag {\\\r\n\tcolor:rgb(0, 22, 142);\\\r\n\t}\\\r\n\t.ace-tm .ace_string.ace_regex {\\\r\n\tcolor: rgb(255, 0, 0)\\\r\n\t}\\\r\n\t.ace-tm .ace_marker-layer .ace_selection {\\\r\n\tbackground: rgb(181, 213, 255);\\\r\n\t}\\\r\n\t.ace-tm.ace_multiselect .ace_selection.ace_start {\\\r\n\tbox-shadow: 0 0 3px 0px white;\\\r\n\t}\\\r\n\t.ace-tm .ace_marker-layer .ace_step {\\\r\n\tbackground: rgb(252, 255, 0);\\\r\n\t}\\\r\n\t.ace-tm .ace_marker-layer .ace_stack {\\\r\n\tbackground: rgb(164, 229, 101);\\\r\n\t}\\\r\n\t.ace-tm .ace_marker-layer .ace_bracket {\\\r\n\tmargin: -1px 0 0 -1px;\\\r\n\tborder: 1px solid rgb(192, 192, 192);\\\r\n\t}\\\r\n\t.ace-tm .ace_marker-layer .ace_active-line {\\\r\n\tbackground: rgba(0, 0, 0, 0.07);\\\r\n\t}\\\r\n\t.ace-tm .ace_gutter-active-line {\\\r\n\tbackground-color : #dcdcdc;\\\r\n\t}\\\r\n\t.ace-tm .ace_marker-layer .ace_selected-word {\\\r\n\tbackground: rgb(250, 250, 255);\\\r\n\tborder: 1px solid rgb(200, 200, 250);\\\r\n\t}\\\r\n\t.ace-tm .ace_indent-guide {\\\r\n\tbackground: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAE0lEQVQImWP4////f4bLly//BwAmVgd1/w11/gAAAABJRU5ErkJggg==\\\") right repeat-y;\\\r\n\t}\\\r\n\t\";\r\n\r\n\tvar dom = acequire(\"../lib/dom\");\r\n\tdom.importCssString(exports.cssText, exports.cssClass);\r\n\t});\r\n\r\n\tace.define(\"ace/line_widgets\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/dom\",\"ace/range\"], function(acequire, exports, module) {\r\n\t\"use strict\";\r\n\r\n\tvar oop = acequire(\"./lib/oop\");\r\n\tvar dom = acequire(\"./lib/dom\");\r\n\tvar Range = acequire(\"./range\").Range;\r\n\r\n\r\n\tfunction LineWidgets(session) {\r\n\t this.session = session;\r\n\t this.session.widgetManager = this;\r\n\t this.session.getRowLength = this.getRowLength;\r\n\t this.session.$getWidgetScreenLength = this.$getWidgetScreenLength;\r\n\t this.updateOnChange = this.updateOnChange.bind(this);\r\n\t this.renderWidgets = this.renderWidgets.bind(this);\r\n\t this.measureWidgets = this.measureWidgets.bind(this);\r\n\t this.session._changedWidgets = [];\r\n\t this.$onChangeEditor = this.$onChangeEditor.bind(this);\r\n\t \r\n\t this.session.on(\"change\", this.updateOnChange);\r\n\t this.session.on(\"changeFold\", this.updateOnFold);\r\n\t this.session.on(\"changeEditor\", this.$onChangeEditor);\r\n\t}\r\n\r\n\t(function() {\r\n\t this.getRowLength = function(row) {\r\n\t var h;\r\n\t if (this.lineWidgets)\r\n\t h = this.lineWidgets[row] && this.lineWidgets[row].rowCount || 0;\r\n\t else \r\n\t h = 0;\r\n\t if (!this.$useWrapMode || !this.$wrapData[row]) {\r\n\t return 1 + h;\r\n\t } else {\r\n\t return this.$wrapData[row].length + 1 + h;\r\n\t }\r\n\t };\r\n\r\n\t this.$getWidgetScreenLength = function() {\r\n\t var screenRows = 0;\r\n\t this.lineWidgets.forEach(function(w){\r\n\t if (w && w.rowCount && !w.hidden)\r\n\t screenRows += w.rowCount;\r\n\t });\r\n\t return screenRows;\r\n\t }; \r\n\t \r\n\t this.$onChangeEditor = function(e) {\r\n\t this.attach(e.editor);\r\n\t };\r\n\t \r\n\t this.attach = function(editor) {\r\n\t if (editor && editor.widgetManager && editor.widgetManager != this)\r\n\t editor.widgetManager.detach();\r\n\r\n\t if (this.editor == editor)\r\n\t return;\r\n\r\n\t this.detach();\r\n\t this.editor = editor;\r\n\t \r\n\t if (editor) {\r\n\t editor.widgetManager = this;\r\n\t editor.renderer.on(\"beforeRender\", this.measureWidgets);\r\n\t editor.renderer.on(\"afterRender\", this.renderWidgets);\r\n\t }\r\n\t };\r\n\t this.detach = function(e) {\r\n\t var editor = this.editor;\r\n\t if (!editor)\r\n\t return;\r\n\t \r\n\t this.editor = null;\r\n\t editor.widgetManager = null;\r\n\t \r\n\t editor.renderer.off(\"beforeRender\", this.measureWidgets);\r\n\t editor.renderer.off(\"afterRender\", this.renderWidgets);\r\n\t var lineWidgets = this.session.lineWidgets;\r\n\t lineWidgets && lineWidgets.forEach(function(w) {\r\n\t if (w && w.el && w.el.parentNode) {\r\n\t w._inDocument = false;\r\n\t w.el.parentNode.removeChild(w.el);\r\n\t }\r\n\t });\r\n\t };\r\n\r\n\t this.updateOnFold = function(e, session) {\r\n\t var lineWidgets = session.lineWidgets;\r\n\t if (!lineWidgets || !e.action)\r\n\t return;\r\n\t var fold = e.data;\r\n\t var start = fold.start.row;\r\n\t var end = fold.end.row;\r\n\t var hide = e.action == \"add\";\r\n\t for (var i = start + 1; i < end; i++) {\r\n\t if (lineWidgets[i])\r\n\t lineWidgets[i].hidden = hide;\r\n\t }\r\n\t if (lineWidgets[end]) {\r\n\t if (hide) {\r\n\t if (!lineWidgets[start])\r\n\t lineWidgets[start] = lineWidgets[end];\r\n\t else\r\n\t lineWidgets[end].hidden = hide;\r\n\t } else {\r\n\t if (lineWidgets[start] == lineWidgets[end])\r\n\t lineWidgets[start] = undefined;\r\n\t lineWidgets[end].hidden = hide;\r\n\t }\r\n\t }\r\n\t };\r\n\t \r\n\t this.updateOnChange = function(delta) {\r\n\t var lineWidgets = this.session.lineWidgets;\r\n\t if (!lineWidgets) return;\r\n\t \r\n\t var startRow = delta.start.row;\r\n\t var len = delta.end.row - startRow;\r\n\r\n\t if (len === 0) {\r\n\t } else if (delta.action == 'remove') {\r\n\t var removed = lineWidgets.splice(startRow + 1, len);\r\n\t removed.forEach(function(w) {\r\n\t w && this.removeLineWidget(w);\r\n\t }, this);\r\n\t this.$updateRows();\r\n\t } else {\r\n\t var args = new Array(len);\r\n\t args.unshift(startRow, 0);\r\n\t lineWidgets.splice.apply(lineWidgets, args);\r\n\t this.$updateRows();\r\n\t }\r\n\t };\r\n\t \r\n\t this.$updateRows = function() {\r\n\t var lineWidgets = this.session.lineWidgets;\r\n\t if (!lineWidgets) return;\r\n\t var noWidgets = true;\r\n\t lineWidgets.forEach(function(w, i) {\r\n\t if (w) {\r\n\t noWidgets = false;\r\n\t w.row = i;\r\n\t while (w.$oldWidget) {\r\n\t w.$oldWidget.row = i;\r\n\t w = w.$oldWidget;\r\n\t }\r\n\t }\r\n\t });\r\n\t if (noWidgets)\r\n\t this.session.lineWidgets = null;\r\n\t };\r\n\r\n\t this.addLineWidget = function(w) {\r\n\t if (!this.session.lineWidgets)\r\n\t this.session.lineWidgets = new Array(this.session.getLength());\r\n\t \r\n\t var old = this.session.lineWidgets[w.row];\r\n\t if (old) {\r\n\t w.$oldWidget = old;\r\n\t if (old.el && old.el.parentNode) {\r\n\t old.el.parentNode.removeChild(old.el);\r\n\t old._inDocument = false;\r\n\t }\r\n\t }\r\n\t \r\n\t this.session.lineWidgets[w.row] = w;\r\n\t \r\n\t w.session = this.session;\r\n\t \r\n\t var renderer = this.editor.renderer;\r\n\t if (w.html && !w.el) {\r\n\t w.el = dom.createElement(\"div\");\r\n\t w.el.innerHTML = w.html;\r\n\t }\r\n\t if (w.el) {\r\n\t dom.addCssClass(w.el, \"ace_lineWidgetContainer\");\r\n\t w.el.style.position = \"absolute\";\r\n\t w.el.style.zIndex = 5;\r\n\t renderer.container.appendChild(w.el);\r\n\t w._inDocument = true;\r\n\t }\r\n\t \r\n\t if (!w.coverGutter) {\r\n\t w.el.style.zIndex = 3;\r\n\t }\r\n\t if (!w.pixelHeight) {\r\n\t w.pixelHeight = w.el.offsetHeight;\r\n\t }\r\n\t if (w.rowCount == null) {\r\n\t w.rowCount = w.pixelHeight / renderer.layerConfig.lineHeight;\r\n\t }\r\n\t \r\n\t var fold = this.session.getFoldAt(w.row, 0);\r\n\t w.$fold = fold;\r\n\t if (fold) {\r\n\t var lineWidgets = this.session.lineWidgets;\r\n\t if (w.row == fold.end.row && !lineWidgets[fold.start.row])\r\n\t lineWidgets[fold.start.row] = w;\r\n\t else\r\n\t w.hidden = true;\r\n\t }\r\n\t \r\n\t this.session._emit(\"changeFold\", {data:{start:{row: w.row}}});\r\n\t \r\n\t this.$updateRows();\r\n\t this.renderWidgets(null, renderer);\r\n\t this.onWidgetChanged(w);\r\n\t return w;\r\n\t };\r\n\t \r\n\t this.removeLineWidget = function(w) {\r\n\t w._inDocument = false;\r\n\t w.session = null;\r\n\t if (w.el && w.el.parentNode)\r\n\t w.el.parentNode.removeChild(w.el);\r\n\t if (w.editor && w.editor.destroy) try {\r\n\t w.editor.destroy();\r\n\t } catch(e){}\r\n\t if (this.session.lineWidgets) {\r\n\t var w1 = this.session.lineWidgets[w.row]\r\n\t if (w1 == w) {\r\n\t this.session.lineWidgets[w.row] = w.$oldWidget;\r\n\t if (w.$oldWidget)\r\n\t this.onWidgetChanged(w.$oldWidget);\r\n\t } else {\r\n\t while (w1) {\r\n\t if (w1.$oldWidget == w) {\r\n\t w1.$oldWidget = w.$oldWidget;\r\n\t break;\r\n\t }\r\n\t w1 = w1.$oldWidget;\r\n\t }\r\n\t }\r\n\t }\r\n\t this.session._emit(\"changeFold\", {data:{start:{row: w.row}}});\r\n\t this.$updateRows();\r\n\t };\r\n\t \r\n\t this.getWidgetsAtRow = function(row) {\r\n\t var lineWidgets = this.session.lineWidgets;\r\n\t var w = lineWidgets && lineWidgets[row];\r\n\t var list = [];\r\n\t while (w) {\r\n\t list.push(w);\r\n\t w = w.$oldWidget;\r\n\t }\r\n\t return list;\r\n\t };\r\n\t \r\n\t this.onWidgetChanged = function(w) {\r\n\t this.session._changedWidgets.push(w);\r\n\t this.editor && this.editor.renderer.updateFull();\r\n\t };\r\n\t \r\n\t this.measureWidgets = function(e, renderer) {\r\n\t var changedWidgets = this.session._changedWidgets;\r\n\t var config = renderer.layerConfig;\r\n\t \r\n\t if (!changedWidgets || !changedWidgets.length) return;\r\n\t var min = Infinity;\r\n\t for (var i = 0; i < changedWidgets.length; i++) {\r\n\t var w = changedWidgets[i];\r\n\t if (!w || !w.el) continue;\r\n\t if (w.session != this.session) continue;\r\n\t if (!w._inDocument) {\r\n\t if (this.session.lineWidgets[w.row] != w)\r\n\t continue;\r\n\t w._inDocument = true;\r\n\t renderer.container.appendChild(w.el);\r\n\t }\r\n\t \r\n\t w.h = w.el.offsetHeight;\r\n\t \r\n\t if (!w.fixedWidth) {\r\n\t w.w = w.el.offsetWidth;\r\n\t w.screenWidth = Math.ceil(w.w / config.characterWidth);\r\n\t }\r\n\t \r\n\t var rowCount = w.h / config.lineHeight;\r\n\t if (w.coverLine) {\r\n\t rowCount -= this.session.getRowLineCount(w.row);\r\n\t if (rowCount < 0)\r\n\t rowCount = 0;\r\n\t }\r\n\t if (w.rowCount != rowCount) {\r\n\t w.rowCount = rowCount;\r\n\t if (w.row < min)\r\n\t min = w.row;\r\n\t }\r\n\t }\r\n\t if (min != Infinity) {\r\n\t this.session._emit(\"changeFold\", {data:{start:{row: min}}});\r\n\t this.session.lineWidgetWidth = null;\r\n\t }\r\n\t this.session._changedWidgets = [];\r\n\t };\r\n\t \r\n\t this.renderWidgets = function(e, renderer) {\r\n\t var config = renderer.layerConfig;\r\n\t var lineWidgets = this.session.lineWidgets;\r\n\t if (!lineWidgets)\r\n\t return;\r\n\t var first = Math.min(this.firstRow, config.firstRow);\r\n\t var last = Math.max(this.lastRow, config.lastRow, lineWidgets.length);\r\n\t \r\n\t while (first > 0 && !lineWidgets[first])\r\n\t first--;\r\n\t \r\n\t this.firstRow = config.firstRow;\r\n\t this.lastRow = config.lastRow;\r\n\r\n\t renderer.$cursorLayer.config = config;\r\n\t for (var i = first; i <= last; i++) {\r\n\t var w = lineWidgets[i];\r\n\t if (!w || !w.el) continue;\r\n\t if (w.hidden) {\r\n\t w.el.style.top = -100 - (w.pixelHeight || 0) + \"px\";\r\n\t continue;\r\n\t }\r\n\t if (!w._inDocument) {\r\n\t w._inDocument = true;\r\n\t renderer.container.appendChild(w.el);\r\n\t }\r\n\t var top = renderer.$cursorLayer.getPixelPosition({row: i, column:0}, true).top;\r\n\t if (!w.coverLine)\r\n\t top += config.lineHeight * this.session.getRowLineCount(w.row);\r\n\t w.el.style.top = top - config.offset + \"px\";\r\n\t \r\n\t var left = w.coverGutter ? 0 : renderer.gutterWidth;\r\n\t if (!w.fixedWidth)\r\n\t left -= renderer.scrollLeft;\r\n\t w.el.style.left = left + \"px\";\r\n\t \r\n\t if (w.fullWidth && w.screenWidth) {\r\n\t w.el.style.minWidth = config.width + 2 * config.padding + \"px\";\r\n\t }\r\n\t \r\n\t if (w.fixedWidth) {\r\n\t w.el.style.right = renderer.scrollBar.getWidth() + \"px\";\r\n\t } else {\r\n\t w.el.style.right = \"\";\r\n\t }\r\n\t }\r\n\t };\r\n\t \r\n\t}).call(LineWidgets.prototype);\r\n\r\n\r\n\texports.LineWidgets = LineWidgets;\r\n\r\n\t});\r\n\r\n\tace.define(\"ace/ext/error_marker\",[\"require\",\"exports\",\"module\",\"ace/line_widgets\",\"ace/lib/dom\",\"ace/range\"], function(acequire, exports, module) {\r\n\t\"use strict\";\r\n\tvar LineWidgets = acequire(\"../line_widgets\").LineWidgets;\r\n\tvar dom = acequire(\"../lib/dom\");\r\n\tvar Range = acequire(\"../range\").Range;\r\n\r\n\tfunction binarySearch(array, needle, comparator) {\r\n\t var first = 0;\r\n\t var last = array.length - 1;\r\n\r\n\t while (first <= last) {\r\n\t var mid = (first + last) >> 1;\r\n\t var c = comparator(needle, array[mid]);\r\n\t if (c > 0)\r\n\t first = mid + 1;\r\n\t else if (c < 0)\r\n\t last = mid - 1;\r\n\t else\r\n\t return mid;\r\n\t }\r\n\t return -(first + 1);\r\n\t}\r\n\r\n\tfunction findAnnotations(session, row, dir) {\r\n\t var annotations = session.getAnnotations().sort(Range.comparePoints);\r\n\t if (!annotations.length)\r\n\t return;\r\n\t \r\n\t var i = binarySearch(annotations, {row: row, column: -1}, Range.comparePoints);\r\n\t if (i < 0)\r\n\t i = -i - 1;\r\n\t \r\n\t if (i >= annotations.length)\r\n\t i = dir > 0 ? 0 : annotations.length - 1;\r\n\t else if (i === 0 && dir < 0)\r\n\t i = annotations.length - 1;\r\n\t \r\n\t var annotation = annotations[i];\r\n\t if (!annotation || !dir)\r\n\t return;\r\n\r\n\t if (annotation.row === row) {\r\n\t do {\r\n\t annotation = annotations[i += dir];\r\n\t } while (annotation && annotation.row === row);\r\n\t if (!annotation)\r\n\t return annotations.slice();\r\n\t }\r\n\t \r\n\t \r\n\t var matched = [];\r\n\t row = annotation.row;\r\n\t do {\r\n\t matched[dir < 0 ? \"unshift\" : \"push\"](annotation);\r\n\t annotation = annotations[i += dir];\r\n\t } while (annotation && annotation.row == row);\r\n\t return matched.length && matched;\r\n\t}\r\n\r\n\texports.showErrorMarker = function(editor, dir) {\r\n\t var session = editor.session;\r\n\t if (!session.widgetManager) {\r\n\t session.widgetManager = new LineWidgets(session);\r\n\t session.widgetManager.attach(editor);\r\n\t }\r\n\t \r\n\t var pos = editor.getCursorPosition();\r\n\t var row = pos.row;\r\n\t var oldWidget = session.widgetManager.getWidgetsAtRow(row).filter(function(w) {\r\n\t return w.type == \"errorMarker\";\r\n\t })[0];\r\n\t if (oldWidget) {\r\n\t oldWidget.destroy();\r\n\t } else {\r\n\t row -= dir;\r\n\t }\r\n\t var annotations = findAnnotations(session, row, dir);\r\n\t var gutterAnno;\r\n\t if (annotations) {\r\n\t var annotation = annotations[0];\r\n\t pos.column = (annotation.pos && typeof annotation.column != \"number\"\r\n\t ? annotation.pos.sc\r\n\t : annotation.column) || 0;\r\n\t pos.row = annotation.row;\r\n\t gutterAnno = editor.renderer.$gutterLayer.$annotations[pos.row];\r\n\t } else if (oldWidget) {\r\n\t return;\r\n\t } else {\r\n\t gutterAnno = {\r\n\t text: [\"Looks good!\"],\r\n\t className: \"ace_ok\"\r\n\t };\r\n\t }\r\n\t editor.session.unfold(pos.row);\r\n\t editor.selection.moveToPosition(pos);\r\n\t \r\n\t var w = {\r\n\t row: pos.row, \r\n\t fixedWidth: true,\r\n\t coverGutter: true,\r\n\t el: dom.createElement(\"div\"),\r\n\t type: \"errorMarker\"\r\n\t };\r\n\t var el = w.el.appendChild(dom.createElement(\"div\"));\r\n\t var arrow = w.el.appendChild(dom.createElement(\"div\"));\r\n\t arrow.className = \"error_widget_arrow \" + gutterAnno.className;\r\n\t \r\n\t var left = editor.renderer.$cursorLayer\r\n\t .getPixelPosition(pos).left;\r\n\t arrow.style.left = left + editor.renderer.gutterWidth - 5 + \"px\";\r\n\t \r\n\t w.el.className = \"error_widget_wrapper\";\r\n\t el.className = \"error_widget \" + gutterAnno.className;\r\n\t el.innerHTML = gutterAnno.text.join(\"
\");\r\n\t \r\n\t el.appendChild(dom.createElement(\"div\"));\r\n\t \r\n\t var kb = function(_, hashId, keyString) {\r\n\t if (hashId === 0 && (keyString === \"esc\" || keyString === \"return\")) {\r\n\t w.destroy();\r\n\t return {command: \"null\"};\r\n\t }\r\n\t };\r\n\t \r\n\t w.destroy = function() {\r\n\t if (editor.$mouseHandler.isMousePressed)\r\n\t return;\r\n\t editor.keyBinding.removeKeyboardHandler(kb);\r\n\t session.widgetManager.removeLineWidget(w);\r\n\t editor.off(\"changeSelection\", w.destroy);\r\n\t editor.off(\"changeSession\", w.destroy);\r\n\t editor.off(\"mouseup\", w.destroy);\r\n\t editor.off(\"change\", w.destroy);\r\n\t };\r\n\t \r\n\t editor.keyBinding.addKeyboardHandler(kb);\r\n\t editor.on(\"changeSelection\", w.destroy);\r\n\t editor.on(\"changeSession\", w.destroy);\r\n\t editor.on(\"mouseup\", w.destroy);\r\n\t editor.on(\"change\", w.destroy);\r\n\t \r\n\t editor.session.widgetManager.addLineWidget(w);\r\n\t \r\n\t w.el.onmousedown = editor.focus.bind(editor);\r\n\t \r\n\t editor.renderer.scrollCursorIntoView(null, 0.5, {bottom: w.el.offsetHeight});\r\n\t};\r\n\r\n\r\n\tdom.importCssString(\"\\\r\n\t .error_widget_wrapper {\\\r\n\t background: inherit;\\\r\n\t color: inherit;\\\r\n\t border:none\\\r\n\t }\\\r\n\t .error_widget {\\\r\n\t border-top: solid 2px;\\\r\n\t border-bottom: solid 2px;\\\r\n\t margin: 5px 0;\\\r\n\t padding: 10px 40px;\\\r\n\t white-space: pre-wrap;\\\r\n\t }\\\r\n\t .error_widget.ace_error, .error_widget_arrow.ace_error{\\\r\n\t border-color: #ff5a5a\\\r\n\t }\\\r\n\t .error_widget.ace_warning, .error_widget_arrow.ace_warning{\\\r\n\t border-color: #F1D817\\\r\n\t }\\\r\n\t .error_widget.ace_info, .error_widget_arrow.ace_info{\\\r\n\t border-color: #5a5a5a\\\r\n\t }\\\r\n\t .error_widget.ace_ok, .error_widget_arrow.ace_ok{\\\r\n\t border-color: #5aaa5a\\\r\n\t }\\\r\n\t .error_widget_arrow {\\\r\n\t position: absolute;\\\r\n\t border: solid 5px;\\\r\n\t border-top-color: transparent!important;\\\r\n\t border-right-color: transparent!important;\\\r\n\t border-left-color: transparent!important;\\\r\n\t top: -5px;\\\r\n\t }\\\r\n\t\", \"\");\r\n\r\n\t});\r\n\r\n\tace.define(\"ace/ace\",[\"require\",\"exports\",\"module\",\"ace/lib/fixoldbrowsers\",\"ace/lib/dom\",\"ace/lib/event\",\"ace/editor\",\"ace/edit_session\",\"ace/undomanager\",\"ace/virtual_renderer\",\"ace/worker/worker_client\",\"ace/keyboard/hash_handler\",\"ace/placeholder\",\"ace/multi_select\",\"ace/mode/folding/fold_mode\",\"ace/theme/textmate\",\"ace/ext/error_marker\",\"ace/config\"], function(acequire, exports, module) {\r\n\t\"use strict\";\r\n\r\n\tacequire(\"./lib/fixoldbrowsers\");\r\n\r\n\tvar dom = acequire(\"./lib/dom\");\r\n\tvar event = acequire(\"./lib/event\");\r\n\r\n\tvar Editor = acequire(\"./editor\").Editor;\r\n\tvar EditSession = acequire(\"./edit_session\").EditSession;\r\n\tvar UndoManager = acequire(\"./undomanager\").UndoManager;\r\n\tvar Renderer = acequire(\"./virtual_renderer\").VirtualRenderer;\r\n\tacequire(\"./worker/worker_client\");\r\n\tacequire(\"./keyboard/hash_handler\");\r\n\tacequire(\"./placeholder\");\r\n\tacequire(\"./multi_select\");\r\n\tacequire(\"./mode/folding/fold_mode\");\r\n\tacequire(\"./theme/textmate\");\r\n\tacequire(\"./ext/error_marker\");\r\n\r\n\texports.config = acequire(\"./config\");\r\n\texports.acequire = acequire;\r\n\texports.edit = function(el) {\r\n\t if (typeof el == \"string\") {\r\n\t var _id = el;\r\n\t el = document.getElementById(_id);\r\n\t if (!el)\r\n\t throw new Error(\"ace.edit can't find div #\" + _id);\r\n\t }\r\n\r\n\t if (el && el.env && el.env.editor instanceof Editor)\r\n\t return el.env.editor;\r\n\r\n\t var value = \"\";\r\n\t if (el && /input|textarea/i.test(el.tagName)) {\r\n\t var oldNode = el;\r\n\t value = oldNode.value;\r\n\t el = dom.createElement(\"pre\");\r\n\t oldNode.parentNode.replaceChild(el, oldNode);\r\n\t } else if (el) {\r\n\t value = dom.getInnerText(el);\r\n\t el.innerHTML = \"\";\r\n\t }\r\n\r\n\t var doc = exports.createEditSession(value);\r\n\r\n\t var editor = new Editor(new Renderer(el));\r\n\t editor.setSession(doc);\r\n\r\n\t var env = {\r\n\t document: doc,\r\n\t editor: editor,\r\n\t onResize: editor.resize.bind(editor, null)\r\n\t };\r\n\t if (oldNode) env.textarea = oldNode;\r\n\t event.addListener(window, \"resize\", env.onResize);\r\n\t editor.on(\"destroy\", function() {\r\n\t event.removeListener(window, \"resize\", env.onResize);\r\n\t env.editor.container.env = null; // prevent memory leak on old ie\r\n\t });\r\n\t editor.container.env = editor.env = env;\r\n\t return editor;\r\n\t};\r\n\texports.createEditSession = function(text, mode) {\r\n\t var doc = new EditSession(text, mode);\r\n\t doc.setUndoManager(new UndoManager());\r\n\t return doc;\r\n\t}\r\n\texports.EditSession = EditSession;\r\n\texports.UndoManager = UndoManager;\r\n\texports.version = \"1.2.3\";\r\n\t});\r\n\t (function() {\r\n\t ace.acequire([\"ace/ace\"], function(a) {\r\n\t a && a.config.init(true);\r\n\t if (!window.ace)\r\n\t window.ace = a;\r\n\t for (var key in a) if (a.hasOwnProperty(key))\r\n\t window.ace[key] = a[key];\r\n\t });\r\n\t })();\r\n\t \r\n\tmodule.exports = window.ace.acequire(\"ace/ace\");\r\n\r\n/***/ },\r\n/* 65 */\r\n/***/ function(module, exports) {\r\n\r\n\tmodule.exports = function() { throw new Error(\"define cannot be used indirect\"); };\r\n\r\n\r\n/***/ },\r\n/* 66 */\r\n/***/ function(module, exports) {\r\n\r\n\t/* WEBPACK VAR INJECTION */(function(global) {module.exports = get_blob()\r\n\r\n\tfunction get_blob() {\r\n\t if(global.Blob) {\r\n\t try {\r\n\t new Blob(['asdf'], {type: 'text/plain'})\r\n\t return Blob\r\n\t } catch(err) {}\r\n\t }\r\n\r\n\t var Builder = global.WebKitBlobBuilder ||\r\n\t global.MozBlobBuilder ||\r\n\t global.MSBlobBuilder\r\n\r\n\t return function(parts, bag) {\r\n\t var builder = new Builder\r\n\t , endings = bag.endings\r\n\t , type = bag.type\r\n\r\n\t if(endings) for(var i = 0, len = parts.length; i < len; ++i) {\r\n\t builder.append(parts[i], endings)\r\n\t } else for(var i = 0, len = parts.length; i < len; ++i) {\r\n\t builder.append(parts[i])\r\n\t }\r\n\r\n\t return type ? builder.getBlob(type) : builder.getBlob()\r\n\t }\r\n\t}\r\n\r\n\t/* WEBPACK VAR INJECTION */}.call(exports, (function() { return this; }())))\r\n\r\n/***/ },\r\n/* 67 */\r\n/***/ function(module, exports, __webpack_require__) {\r\n\r\n\tace.define(\"ace/mode/json_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(acequire, exports, module) {\r\n\t\"use strict\";\r\n\r\n\tvar oop = acequire(\"../lib/oop\");\r\n\tvar TextHighlightRules = acequire(\"./text_highlight_rules\").TextHighlightRules;\r\n\r\n\tvar JsonHighlightRules = function() {\r\n\t this.$rules = {\r\n\t \"start\" : [\r\n\t {\r\n\t token : \"variable\", // single line\r\n\t regex : '[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]\\\\s*(?=:)'\r\n\t }, {\r\n\t token : \"string\", // single line\r\n\t regex : '\"',\r\n\t next : \"string\"\r\n\t }, {\r\n\t token : \"constant.numeric\", // hex\r\n\t regex : \"0[xX][0-9a-fA-F]+\\\\b\"\r\n\t }, {\r\n\t token : \"constant.numeric\", // float\r\n\t regex : \"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"\r\n\t }, {\r\n\t token : \"constant.language.boolean\",\r\n\t regex : \"(?:true|false)\\\\b\"\r\n\t }, {\r\n\t token : \"invalid.illegal\", // single quoted strings are not allowed\r\n\t regex : \"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"\r\n\t }, {\r\n\t token : \"invalid.illegal\", // comments are not allowed\r\n\t regex : \"\\\\/\\\\/.*$\"\r\n\t }, {\r\n\t token : \"paren.lparen\",\r\n\t regex : \"[[({]\"\r\n\t }, {\r\n\t token : \"paren.rparen\",\r\n\t regex : \"[\\\\])}]\"\r\n\t }, {\r\n\t token : \"text\",\r\n\t regex : \"\\\\s+\"\r\n\t }\r\n\t ],\r\n\t \"string\" : [\r\n\t {\r\n\t token : \"constant.language.escape\",\r\n\t regex : /\\\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|[\"\\\\\\/bfnrt])/\r\n\t }, {\r\n\t token : \"string\",\r\n\t regex : '[^\"\\\\\\\\]+'\r\n\t }, {\r\n\t token : \"string\",\r\n\t regex : '\"',\r\n\t next : \"start\"\r\n\t }, {\r\n\t token : \"string\",\r\n\t regex : \"\",\r\n\t next : \"start\"\r\n\t }\r\n\t ]\r\n\t };\r\n\t \r\n\t};\r\n\r\n\toop.inherits(JsonHighlightRules, TextHighlightRules);\r\n\r\n\texports.JsonHighlightRules = JsonHighlightRules;\r\n\t});\r\n\r\n\tace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(acequire, exports, module) {\r\n\t\"use strict\";\r\n\r\n\tvar Range = acequire(\"../range\").Range;\r\n\r\n\tvar MatchingBraceOutdent = function() {};\r\n\r\n\t(function() {\r\n\r\n\t this.checkOutdent = function(line, input) {\r\n\t if (! /^\\s+$/.test(line))\r\n\t return false;\r\n\r\n\t return /^\\s*\\}/.test(input);\r\n\t };\r\n\r\n\t this.autoOutdent = function(doc, row) {\r\n\t var line = doc.getLine(row);\r\n\t var match = line.match(/^(\\s*\\})/);\r\n\r\n\t if (!match) return 0;\r\n\r\n\t var column = match[1].length;\r\n\t var openBracePos = doc.findMatchingBracket({row: row, column: column});\r\n\r\n\t if (!openBracePos || openBracePos.row == row) return 0;\r\n\r\n\t var indent = this.$getIndent(doc.getLine(openBracePos.row));\r\n\t doc.replace(new Range(row, 0, row, column-1), indent);\r\n\t };\r\n\r\n\t this.$getIndent = function(line) {\r\n\t return line.match(/^\\s*/)[0];\r\n\t };\r\n\r\n\t}).call(MatchingBraceOutdent.prototype);\r\n\r\n\texports.MatchingBraceOutdent = MatchingBraceOutdent;\r\n\t});\r\n\r\n\tace.define(\"ace/mode/behaviour/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"], function(acequire, exports, module) {\r\n\t\"use strict\";\r\n\r\n\tvar oop = acequire(\"../../lib/oop\");\r\n\tvar Behaviour = acequire(\"../behaviour\").Behaviour;\r\n\tvar TokenIterator = acequire(\"../../token_iterator\").TokenIterator;\r\n\tvar lang = acequire(\"../../lib/lang\");\r\n\r\n\tvar SAFE_INSERT_IN_TOKENS =\r\n\t [\"text\", \"paren.rparen\", \"punctuation.operator\"];\r\n\tvar SAFE_INSERT_BEFORE_TOKENS =\r\n\t [\"text\", \"paren.rparen\", \"punctuation.operator\", \"comment\"];\r\n\r\n\tvar context;\r\n\tvar contextCache = {};\r\n\tvar initContext = function(editor) {\r\n\t var id = -1;\r\n\t if (editor.multiSelect) {\r\n\t id = editor.selection.index;\r\n\t if (contextCache.rangeCount != editor.multiSelect.rangeCount)\r\n\t contextCache = {rangeCount: editor.multiSelect.rangeCount};\r\n\t }\r\n\t if (contextCache[id])\r\n\t return context = contextCache[id];\r\n\t context = contextCache[id] = {\r\n\t autoInsertedBrackets: 0,\r\n\t autoInsertedRow: -1,\r\n\t autoInsertedLineEnd: \"\",\r\n\t maybeInsertedBrackets: 0,\r\n\t maybeInsertedRow: -1,\r\n\t maybeInsertedLineStart: \"\",\r\n\t maybeInsertedLineEnd: \"\"\r\n\t };\r\n\t};\r\n\r\n\tvar getWrapped = function(selection, selected, opening, closing) {\r\n\t var rowDiff = selection.end.row - selection.start.row;\r\n\t return {\r\n\t text: opening + selected + closing,\r\n\t selection: [\r\n\t 0,\r\n\t selection.start.column + 1,\r\n\t rowDiff,\r\n\t selection.end.column + (rowDiff ? 0 : 1)\r\n\t ]\r\n\t };\r\n\t};\r\n\r\n\tvar CstyleBehaviour = function() {\r\n\t this.add(\"braces\", \"insertion\", function(state, action, editor, session, text) {\r\n\t var cursor = editor.getCursorPosition();\r\n\t var line = session.doc.getLine(cursor.row);\r\n\t if (text == '{') {\r\n\t initContext(editor);\r\n\t var selection = editor.getSelectionRange();\r\n\t var selected = session.doc.getTextRange(selection);\r\n\t if (selected !== \"\" && selected !== \"{\" && editor.getWrapBehavioursEnabled()) {\r\n\t return getWrapped(selection, selected, '{', '}');\r\n\t } else if (CstyleBehaviour.isSaneInsertion(editor, session)) {\r\n\t if (/[\\]\\}\\)]/.test(line[cursor.column]) || editor.inMultiSelectMode) {\r\n\t CstyleBehaviour.recordAutoInsert(editor, session, \"}\");\r\n\t return {\r\n\t text: '{}',\r\n\t selection: [1, 1]\r\n\t };\r\n\t } else {\r\n\t CstyleBehaviour.recordMaybeInsert(editor, session, \"{\");\r\n\t return {\r\n\t text: '{',\r\n\t selection: [1, 1]\r\n\t };\r\n\t }\r\n\t }\r\n\t } else if (text == '}') {\r\n\t initContext(editor);\r\n\t var rightChar = line.substring(cursor.column, cursor.column + 1);\r\n\t if (rightChar == '}') {\r\n\t var matching = session.$findOpeningBracket('}', {column: cursor.column + 1, row: cursor.row});\r\n\t if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) {\r\n\t CstyleBehaviour.popAutoInsertedClosing();\r\n\t return {\r\n\t text: '',\r\n\t selection: [1, 1]\r\n\t };\r\n\t }\r\n\t }\r\n\t } else if (text == \"\\n\" || text == \"\\r\\n\") {\r\n\t initContext(editor);\r\n\t var closing = \"\";\r\n\t if (CstyleBehaviour.isMaybeInsertedClosing(cursor, line)) {\r\n\t closing = lang.stringRepeat(\"}\", context.maybeInsertedBrackets);\r\n\t CstyleBehaviour.clearMaybeInsertedClosing();\r\n\t }\r\n\t var rightChar = line.substring(cursor.column, cursor.column + 1);\r\n\t if (rightChar === '}') {\r\n\t var openBracePos = session.findMatchingBracket({row: cursor.row, column: cursor.column+1}, '}');\r\n\t if (!openBracePos)\r\n\t return null;\r\n\t var next_indent = this.$getIndent(session.getLine(openBracePos.row));\r\n\t } else if (closing) {\r\n\t var next_indent = this.$getIndent(line);\r\n\t } else {\r\n\t CstyleBehaviour.clearMaybeInsertedClosing();\r\n\t return;\r\n\t }\r\n\t var indent = next_indent + session.getTabString();\r\n\r\n\t return {\r\n\t text: '\\n' + indent + '\\n' + next_indent + closing,\r\n\t selection: [1, indent.length, 1, indent.length]\r\n\t };\r\n\t } else {\r\n\t CstyleBehaviour.clearMaybeInsertedClosing();\r\n\t }\r\n\t });\r\n\r\n\t this.add(\"braces\", \"deletion\", function(state, action, editor, session, range) {\r\n\t var selected = session.doc.getTextRange(range);\r\n\t if (!range.isMultiLine() && selected == '{') {\r\n\t initContext(editor);\r\n\t var line = session.doc.getLine(range.start.row);\r\n\t var rightChar = line.substring(range.end.column, range.end.column + 1);\r\n\t if (rightChar == '}') {\r\n\t range.end.column++;\r\n\t return range;\r\n\t } else {\r\n\t context.maybeInsertedBrackets--;\r\n\t }\r\n\t }\r\n\t });\r\n\r\n\t this.add(\"parens\", \"insertion\", function(state, action, editor, session, text) {\r\n\t if (text == '(') {\r\n\t initContext(editor);\r\n\t var selection = editor.getSelectionRange();\r\n\t var selected = session.doc.getTextRange(selection);\r\n\t if (selected !== \"\" && editor.getWrapBehavioursEnabled()) {\r\n\t return getWrapped(selection, selected, '(', ')');\r\n\t } else if (CstyleBehaviour.isSaneInsertion(editor, session)) {\r\n\t CstyleBehaviour.recordAutoInsert(editor, session, \")\");\r\n\t return {\r\n\t text: '()',\r\n\t selection: [1, 1]\r\n\t };\r\n\t }\r\n\t } else if (text == ')') {\r\n\t initContext(editor);\r\n\t var cursor = editor.getCursorPosition();\r\n\t var line = session.doc.getLine(cursor.row);\r\n\t var rightChar = line.substring(cursor.column, cursor.column + 1);\r\n\t if (rightChar == ')') {\r\n\t var matching = session.$findOpeningBracket(')', {column: cursor.column + 1, row: cursor.row});\r\n\t if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) {\r\n\t CstyleBehaviour.popAutoInsertedClosing();\r\n\t return {\r\n\t text: '',\r\n\t selection: [1, 1]\r\n\t };\r\n\t }\r\n\t }\r\n\t }\r\n\t });\r\n\r\n\t this.add(\"parens\", \"deletion\", function(state, action, editor, session, range) {\r\n\t var selected = session.doc.getTextRange(range);\r\n\t if (!range.isMultiLine() && selected == '(') {\r\n\t initContext(editor);\r\n\t var line = session.doc.getLine(range.start.row);\r\n\t var rightChar = line.substring(range.start.column + 1, range.start.column + 2);\r\n\t if (rightChar == ')') {\r\n\t range.end.column++;\r\n\t return range;\r\n\t }\r\n\t }\r\n\t });\r\n\r\n\t this.add(\"brackets\", \"insertion\", function(state, action, editor, session, text) {\r\n\t if (text == '[') {\r\n\t initContext(editor);\r\n\t var selection = editor.getSelectionRange();\r\n\t var selected = session.doc.getTextRange(selection);\r\n\t if (selected !== \"\" && editor.getWrapBehavioursEnabled()) {\r\n\t return getWrapped(selection, selected, '[', ']');\r\n\t } else if (CstyleBehaviour.isSaneInsertion(editor, session)) {\r\n\t CstyleBehaviour.recordAutoInsert(editor, session, \"]\");\r\n\t return {\r\n\t text: '[]',\r\n\t selection: [1, 1]\r\n\t };\r\n\t }\r\n\t } else if (text == ']') {\r\n\t initContext(editor);\r\n\t var cursor = editor.getCursorPosition();\r\n\t var line = session.doc.getLine(cursor.row);\r\n\t var rightChar = line.substring(cursor.column, cursor.column + 1);\r\n\t if (rightChar == ']') {\r\n\t var matching = session.$findOpeningBracket(']', {column: cursor.column + 1, row: cursor.row});\r\n\t if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) {\r\n\t CstyleBehaviour.popAutoInsertedClosing();\r\n\t return {\r\n\t text: '',\r\n\t selection: [1, 1]\r\n\t };\r\n\t }\r\n\t }\r\n\t }\r\n\t });\r\n\r\n\t this.add(\"brackets\", \"deletion\", function(state, action, editor, session, range) {\r\n\t var selected = session.doc.getTextRange(range);\r\n\t if (!range.isMultiLine() && selected == '[') {\r\n\t initContext(editor);\r\n\t var line = session.doc.getLine(range.start.row);\r\n\t var rightChar = line.substring(range.start.column + 1, range.start.column + 2);\r\n\t if (rightChar == ']') {\r\n\t range.end.column++;\r\n\t return range;\r\n\t }\r\n\t }\r\n\t });\r\n\r\n\t this.add(\"string_dquotes\", \"insertion\", function(state, action, editor, session, text) {\r\n\t if (text == '\"' || text == \"'\") {\r\n\t initContext(editor);\r\n\t var quote = text;\r\n\t var selection = editor.getSelectionRange();\r\n\t var selected = session.doc.getTextRange(selection);\r\n\t if (selected !== \"\" && selected !== \"'\" && selected != '\"' && editor.getWrapBehavioursEnabled()) {\r\n\t return getWrapped(selection, selected, quote, quote);\r\n\t } else if (!selected) {\r\n\t var cursor = editor.getCursorPosition();\r\n\t var line = session.doc.getLine(cursor.row);\r\n\t var leftChar = line.substring(cursor.column-1, cursor.column);\r\n\t var rightChar = line.substring(cursor.column, cursor.column + 1);\r\n\t \r\n\t var token = session.getTokenAt(cursor.row, cursor.column);\r\n\t var rightToken = session.getTokenAt(cursor.row, cursor.column + 1);\r\n\t if (leftChar == \"\\\\\" && token && /escape/.test(token.type))\r\n\t return null;\r\n\t \r\n\t var stringBefore = token && /string|escape/.test(token.type);\r\n\t var stringAfter = !rightToken || /string|escape/.test(rightToken.type);\r\n\t \r\n\t var pair;\r\n\t if (rightChar == quote) {\r\n\t pair = stringBefore !== stringAfter;\r\n\t } else {\r\n\t if (stringBefore && !stringAfter)\r\n\t return null; // wrap string with different quote\r\n\t if (stringBefore && stringAfter)\r\n\t return null; // do not pair quotes inside strings\r\n\t var wordRe = session.$mode.tokenRe;\r\n\t wordRe.lastIndex = 0;\r\n\t var isWordBefore = wordRe.test(leftChar);\r\n\t wordRe.lastIndex = 0;\r\n\t var isWordAfter = wordRe.test(leftChar);\r\n\t if (isWordBefore || isWordAfter)\r\n\t return null; // before or after alphanumeric\r\n\t if (rightChar && !/[\\s;,.})\\]\\\\]/.test(rightChar))\r\n\t return null; // there is rightChar and it isn't closing\r\n\t pair = true;\r\n\t }\r\n\t return {\r\n\t text: pair ? quote + quote : \"\",\r\n\t selection: [1,1]\r\n\t };\r\n\t }\r\n\t }\r\n\t });\r\n\r\n\t this.add(\"string_dquotes\", \"deletion\", function(state, action, editor, session, range) {\r\n\t var selected = session.doc.getTextRange(range);\r\n\t if (!range.isMultiLine() && (selected == '\"' || selected == \"'\")) {\r\n\t initContext(editor);\r\n\t var line = session.doc.getLine(range.start.row);\r\n\t var rightChar = line.substring(range.start.column + 1, range.start.column + 2);\r\n\t if (rightChar == selected) {\r\n\t range.end.column++;\r\n\t return range;\r\n\t }\r\n\t }\r\n\t });\r\n\r\n\t};\r\n\r\n\t \r\n\tCstyleBehaviour.isSaneInsertion = function(editor, session) {\r\n\t var cursor = editor.getCursorPosition();\r\n\t var iterator = new TokenIterator(session, cursor.row, cursor.column);\r\n\t if (!this.$matchTokenType(iterator.getCurrentToken() || \"text\", SAFE_INSERT_IN_TOKENS)) {\r\n\t var iterator2 = new TokenIterator(session, cursor.row, cursor.column + 1);\r\n\t if (!this.$matchTokenType(iterator2.getCurrentToken() || \"text\", SAFE_INSERT_IN_TOKENS))\r\n\t return false;\r\n\t }\r\n\t iterator.stepForward();\r\n\t return iterator.getCurrentTokenRow() !== cursor.row ||\r\n\t this.$matchTokenType(iterator.getCurrentToken() || \"text\", SAFE_INSERT_BEFORE_TOKENS);\r\n\t};\r\n\r\n\tCstyleBehaviour.$matchTokenType = function(token, types) {\r\n\t return types.indexOf(token.type || token) > -1;\r\n\t};\r\n\r\n\tCstyleBehaviour.recordAutoInsert = function(editor, session, bracket) {\r\n\t var cursor = editor.getCursorPosition();\r\n\t var line = session.doc.getLine(cursor.row);\r\n\t if (!this.isAutoInsertedClosing(cursor, line, context.autoInsertedLineEnd[0]))\r\n\t context.autoInsertedBrackets = 0;\r\n\t context.autoInsertedRow = cursor.row;\r\n\t context.autoInsertedLineEnd = bracket + line.substr(cursor.column);\r\n\t context.autoInsertedBrackets++;\r\n\t};\r\n\r\n\tCstyleBehaviour.recordMaybeInsert = function(editor, session, bracket) {\r\n\t var cursor = editor.getCursorPosition();\r\n\t var line = session.doc.getLine(cursor.row);\r\n\t if (!this.isMaybeInsertedClosing(cursor, line))\r\n\t context.maybeInsertedBrackets = 0;\r\n\t context.maybeInsertedRow = cursor.row;\r\n\t context.maybeInsertedLineStart = line.substr(0, cursor.column) + bracket;\r\n\t context.maybeInsertedLineEnd = line.substr(cursor.column);\r\n\t context.maybeInsertedBrackets++;\r\n\t};\r\n\r\n\tCstyleBehaviour.isAutoInsertedClosing = function(cursor, line, bracket) {\r\n\t return context.autoInsertedBrackets > 0 &&\r\n\t cursor.row === context.autoInsertedRow &&\r\n\t bracket === context.autoInsertedLineEnd[0] &&\r\n\t line.substr(cursor.column) === context.autoInsertedLineEnd;\r\n\t};\r\n\r\n\tCstyleBehaviour.isMaybeInsertedClosing = function(cursor, line) {\r\n\t return context.maybeInsertedBrackets > 0 &&\r\n\t cursor.row === context.maybeInsertedRow &&\r\n\t line.substr(cursor.column) === context.maybeInsertedLineEnd &&\r\n\t line.substr(0, cursor.column) == context.maybeInsertedLineStart;\r\n\t};\r\n\r\n\tCstyleBehaviour.popAutoInsertedClosing = function() {\r\n\t context.autoInsertedLineEnd = context.autoInsertedLineEnd.substr(1);\r\n\t context.autoInsertedBrackets--;\r\n\t};\r\n\r\n\tCstyleBehaviour.clearMaybeInsertedClosing = function() {\r\n\t if (context) {\r\n\t context.maybeInsertedBrackets = 0;\r\n\t context.maybeInsertedRow = -1;\r\n\t }\r\n\t};\r\n\r\n\r\n\r\n\toop.inherits(CstyleBehaviour, Behaviour);\r\n\r\n\texports.CstyleBehaviour = CstyleBehaviour;\r\n\t});\r\n\r\n\tace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(acequire, exports, module) {\r\n\t\"use strict\";\r\n\r\n\tvar oop = acequire(\"../../lib/oop\");\r\n\tvar Range = acequire(\"../../range\").Range;\r\n\tvar BaseFoldMode = acequire(\"./fold_mode\").FoldMode;\r\n\r\n\tvar FoldMode = exports.FoldMode = function(commentRegex) {\r\n\t if (commentRegex) {\r\n\t this.foldingStartMarker = new RegExp(\r\n\t this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start)\r\n\t );\r\n\t this.foldingStopMarker = new RegExp(\r\n\t this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end)\r\n\t );\r\n\t }\r\n\t};\r\n\toop.inherits(FoldMode, BaseFoldMode);\r\n\r\n\t(function() {\r\n\t \r\n\t this.foldingStartMarker = /(\\{|\\[)[^\\}\\]]*$|^\\s*(\\/\\*)/;\r\n\t this.foldingStopMarker = /^[^\\[\\{]*(\\}|\\])|^[\\s\\*]*(\\*\\/)/;\r\n\t this.singleLineBlockCommentRe= /^\\s*(\\/\\*).*\\*\\/\\s*$/;\r\n\t this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\r\n\t this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\r\n\t this._getFoldWidgetBase = this.getFoldWidget;\r\n\t this.getFoldWidget = function(session, foldStyle, row) {\r\n\t var line = session.getLine(row);\r\n\t \r\n\t if (this.singleLineBlockCommentRe.test(line)) {\r\n\t if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\r\n\t return \"\";\r\n\t }\r\n\t \r\n\t var fw = this._getFoldWidgetBase(session, foldStyle, row);\r\n\t \r\n\t if (!fw && this.startRegionRe.test(line))\r\n\t return \"start\"; // lineCommentRegionStart\r\n\t \r\n\t return fw;\r\n\t };\r\n\r\n\t this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) {\r\n\t var line = session.getLine(row);\r\n\t \r\n\t if (this.startRegionRe.test(line))\r\n\t return this.getCommentRegionBlock(session, line, row);\r\n\t \r\n\t var match = line.match(this.foldingStartMarker);\r\n\t if (match) {\r\n\t var i = match.index;\r\n\r\n\t if (match[1])\r\n\t return this.openingBracketBlock(session, match[1], row, i);\r\n\t \r\n\t var range = session.getCommentFoldRange(row, i + match[0].length, 1);\r\n\t \r\n\t if (range && !range.isMultiLine()) {\r\n\t if (forceMultiline) {\r\n\t range = this.getSectionRange(session, row);\r\n\t } else if (foldStyle != \"all\")\r\n\t range = null;\r\n\t }\r\n\t \r\n\t return range;\r\n\t }\r\n\r\n\t if (foldStyle === \"markbegin\")\r\n\t return;\r\n\r\n\t var match = line.match(this.foldingStopMarker);\r\n\t if (match) {\r\n\t var i = match.index + match[0].length;\r\n\r\n\t if (match[1])\r\n\t return this.closingBracketBlock(session, match[1], row, i);\r\n\r\n\t return session.getCommentFoldRange(row, i, -1);\r\n\t }\r\n\t };\r\n\t \r\n\t this.getSectionRange = function(session, row) {\r\n\t var line = session.getLine(row);\r\n\t var startIndent = line.search(/\\S/);\r\n\t var startRow = row;\r\n\t var startColumn = line.length;\r\n\t row = row + 1;\r\n\t var endRow = row;\r\n\t var maxRow = session.getLength();\r\n\t while (++row < maxRow) {\r\n\t line = session.getLine(row);\r\n\t var indent = line.search(/\\S/);\r\n\t if (indent === -1)\r\n\t continue;\r\n\t if (startIndent > indent)\r\n\t break;\r\n\t var subRange = this.getFoldWidgetRange(session, \"all\", row);\r\n\t \r\n\t if (subRange) {\r\n\t if (subRange.start.row <= startRow) {\r\n\t break;\r\n\t } else if (subRange.isMultiLine()) {\r\n\t row = subRange.end.row;\r\n\t } else if (startIndent == indent) {\r\n\t break;\r\n\t }\r\n\t }\r\n\t endRow = row;\r\n\t }\r\n\t \r\n\t return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\r\n\t };\r\n\t this.getCommentRegionBlock = function(session, line, row) {\r\n\t var startColumn = line.search(/\\s*$/);\r\n\t var maxRow = session.getLength();\r\n\t var startRow = row;\r\n\t \r\n\t var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\r\n\t var depth = 1;\r\n\t while (++row < maxRow) {\r\n\t line = session.getLine(row);\r\n\t var m = re.exec(line);\r\n\t if (!m) continue;\r\n\t if (m[1]) depth--;\r\n\t else depth++;\r\n\r\n\t if (!depth) break;\r\n\t }\r\n\r\n\t var endRow = row;\r\n\t if (endRow > startRow) {\r\n\t return new Range(startRow, startColumn, endRow, line.length);\r\n\t }\r\n\t };\r\n\r\n\t}).call(FoldMode.prototype);\r\n\r\n\t});\r\n\r\n\tace.define(\"ace/mode/json\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/json_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\",\"ace/worker/worker_client\"], function(acequire, exports, module) {\r\n\t\"use strict\";\r\n\r\n\tvar oop = acequire(\"../lib/oop\");\r\n\tvar TextMode = acequire(\"./text\").Mode;\r\n\tvar HighlightRules = acequire(\"./json_highlight_rules\").JsonHighlightRules;\r\n\tvar MatchingBraceOutdent = acequire(\"./matching_brace_outdent\").MatchingBraceOutdent;\r\n\tvar CstyleBehaviour = acequire(\"./behaviour/cstyle\").CstyleBehaviour;\r\n\tvar CStyleFoldMode = acequire(\"./folding/cstyle\").FoldMode;\r\n\tvar WorkerClient = acequire(\"../worker/worker_client\").WorkerClient;\r\n\r\n\tvar Mode = function() {\r\n\t this.HighlightRules = HighlightRules;\r\n\t this.$outdent = new MatchingBraceOutdent();\r\n\t this.$behaviour = new CstyleBehaviour();\r\n\t this.foldingRules = new CStyleFoldMode();\r\n\t};\r\n\toop.inherits(Mode, TextMode);\r\n\r\n\t(function() {\r\n\r\n\t this.getNextLineIndent = function(state, line, tab) {\r\n\t var indent = this.$getIndent(line);\r\n\r\n\t if (state == \"start\") {\r\n\t var match = line.match(/^.*[\\{\\(\\[]\\s*$/);\r\n\t if (match) {\r\n\t indent += tab;\r\n\t }\r\n\t }\r\n\r\n\t return indent;\r\n\t };\r\n\r\n\t this.checkOutdent = function(state, line, input) {\r\n\t return this.$outdent.checkOutdent(line, input);\r\n\t };\r\n\r\n\t this.autoOutdent = function(state, doc, row) {\r\n\t this.$outdent.autoOutdent(doc, row);\r\n\t };\r\n\r\n\t this.createWorker = function(session) {\r\n\t var worker = new WorkerClient([\"ace\"], __webpack_require__(68), \"JsonWorker\");\r\n\t worker.attachToDocument(session.getDocument());\r\n\r\n\t worker.on(\"annotate\", function(e) {\r\n\t session.setAnnotations(e.data);\r\n\t });\r\n\r\n\t worker.on(\"terminate\", function() {\r\n\t session.clearAnnotations();\r\n\t });\r\n\r\n\t return worker;\r\n\t };\r\n\r\n\r\n\t this.$id = \"ace/mode/json\";\r\n\t}).call(Mode.prototype);\r\n\r\n\texports.Mode = Mode;\r\n\t});\r\n\r\n\r\n/***/ },\r\n/* 68 */\r\n/***/ function(module, exports) {\r\n\r\n\tmodule.exports.id = 'ace/mode/json_worker';\r\n\tmodule.exports.src = \"\\\"no use strict\\\";(function(window){function resolveModuleId(id,paths){for(var testPath=id,tail=\\\"\\\";testPath;){var alias=paths[testPath];if(\\\"string\\\"==typeof alias)return alias+tail;if(alias)return alias.location.replace(/\\\\/*$/,\\\"/\\\")+(tail||alias.main||alias.name);if(alias===!1)return\\\"\\\";var i=testPath.lastIndexOf(\\\"/\\\");if(-1===i)break;tail=testPath.substr(i)+tail,testPath=testPath.slice(0,i)}return id}if(!(void 0!==window.window&&window.document||window.acequire&&window.define)){window.console||(window.console=function(){var msgs=Array.prototype.slice.call(arguments,0);postMessage({type:\\\"log\\\",data:msgs})},window.console.error=window.console.warn=window.console.log=window.console.trace=window.console),window.window=window,window.ace=window,window.onerror=function(message,file,line,col,err){postMessage({type:\\\"error\\\",data:{message:message,data:err.data,file:file,line:line,col:col,stack:err.stack}})},window.normalizeModule=function(parentId,moduleName){if(-1!==moduleName.indexOf(\\\"!\\\")){var chunks=moduleName.split(\\\"!\\\");return window.normalizeModule(parentId,chunks[0])+\\\"!\\\"+window.normalizeModule(parentId,chunks[1])}if(\\\".\\\"==moduleName.charAt(0)){var base=parentId.split(\\\"/\\\").slice(0,-1).join(\\\"/\\\");for(moduleName=(base?base+\\\"/\\\":\\\"\\\")+moduleName;-1!==moduleName.indexOf(\\\".\\\")&&previous!=moduleName;){var previous=moduleName;moduleName=moduleName.replace(/^\\\\.\\\\//,\\\"\\\").replace(/\\\\/\\\\.\\\\//,\\\"/\\\").replace(/[^\\\\/]+\\\\/\\\\.\\\\.\\\\//,\\\"\\\")}}return moduleName},window.acequire=function acequire(parentId,id){if(id||(id=parentId,parentId=null),!id.charAt)throw Error(\\\"worker.js acequire() accepts only (parentId, id) as arguments\\\");id=window.normalizeModule(parentId,id);var module=window.acequire.modules[id];if(module)return module.initialized||(module.initialized=!0,module.exports=module.factory().exports),module.exports;if(!window.acequire.tlns)return console.log(\\\"unable to load \\\"+id);var path=resolveModuleId(id,window.acequire.tlns);return\\\".js\\\"!=path.slice(-3)&&(path+=\\\".js\\\"),window.acequire.id=id,window.acequire.modules[id]={},importScripts(path),window.acequire(parentId,id)},window.acequire.modules={},window.acequire.tlns={},window.define=function(id,deps,factory){if(2==arguments.length?(factory=deps,\\\"string\\\"!=typeof id&&(deps=id,id=window.acequire.id)):1==arguments.length&&(factory=id,deps=[],id=window.acequire.id),\\\"function\\\"!=typeof factory)return window.acequire.modules[id]={exports:factory,initialized:!0},void 0;deps.length||(deps=[\\\"require\\\",\\\"exports\\\",\\\"module\\\"]);var req=function(childId){return window.acequire(id,childId)};window.acequire.modules[id]={exports:{},factory:function(){var module=this,returnExports=factory.apply(this,deps.map(function(dep){switch(dep){case\\\"require\\\":return req;case\\\"exports\\\":return module.exports;case\\\"module\\\":return module;default:return req(dep)}}));return returnExports&&(module.exports=returnExports),module}}},window.define.amd={},acequire.tlns={},window.initBaseUrls=function(topLevelNamespaces){for(var i in topLevelNamespaces)acequire.tlns[i]=topLevelNamespaces[i]},window.initSender=function(){var EventEmitter=window.acequire(\\\"ace/lib/event_emitter\\\").EventEmitter,oop=window.acequire(\\\"ace/lib/oop\\\"),Sender=function(){};return function(){oop.implement(this,EventEmitter),this.callback=function(data,callbackId){postMessage({type:\\\"call\\\",id:callbackId,data:data})},this.emit=function(name,data){postMessage({type:\\\"event\\\",name:name,data:data})}}.call(Sender.prototype),new Sender};var main=window.main=null,sender=window.sender=null;window.onmessage=function(e){var msg=e.data;if(msg.event&&sender)sender._signal(msg.event,msg.data);else if(msg.command)if(main[msg.command])main[msg.command].apply(main,msg.args);else{if(!window[msg.command])throw Error(\\\"Unknown command:\\\"+msg.command);window[msg.command].apply(window,msg.args)}else if(msg.init){window.initBaseUrls(msg.tlns),acequire(\\\"ace/lib/es5-shim\\\"),sender=window.sender=window.initSender();var clazz=acequire(msg.module)[msg.classname];main=window.main=new clazz(sender)}}}})(this),ace.define(\\\"ace/lib/oop\\\",[\\\"require\\\",\\\"exports\\\",\\\"module\\\"],function(acequire,exports){\\\"use strict\\\";exports.inherits=function(ctor,superCtor){ctor.super_=superCtor,ctor.prototype=Object.create(superCtor.prototype,{constructor:{value:ctor,enumerable:!1,writable:!0,configurable:!0}})},exports.mixin=function(obj,mixin){for(var key in mixin)obj[key]=mixin[key];return obj},exports.implement=function(proto,mixin){exports.mixin(proto,mixin)}}),ace.define(\\\"ace/range\\\",[\\\"require\\\",\\\"exports\\\",\\\"module\\\"],function(acequire,exports){\\\"use strict\\\";var comparePoints=function(p1,p2){return p1.row-p2.row||p1.column-p2.column},Range=function(startRow,startColumn,endRow,endColumn){this.start={row:startRow,column:startColumn},this.end={row:endRow,column:endColumn}};(function(){this.isEqual=function(range){return this.start.row===range.start.row&&this.end.row===range.end.row&&this.start.column===range.start.column&&this.end.column===range.end.column},this.toString=function(){return\\\"Range: [\\\"+this.start.row+\\\"/\\\"+this.start.column+\\\"] -> [\\\"+this.end.row+\\\"/\\\"+this.end.column+\\\"]\\\"},this.contains=function(row,column){return 0==this.compare(row,column)},this.compareRange=function(range){var cmp,end=range.end,start=range.start;return cmp=this.compare(end.row,end.column),1==cmp?(cmp=this.compare(start.row,start.column),1==cmp?2:0==cmp?1:0):-1==cmp?-2:(cmp=this.compare(start.row,start.column),-1==cmp?-1:1==cmp?42:0)},this.comparePoint=function(p){return this.compare(p.row,p.column)},this.containsRange=function(range){return 0==this.comparePoint(range.start)&&0==this.comparePoint(range.end)},this.intersects=function(range){var cmp=this.compareRange(range);return-1==cmp||0==cmp||1==cmp},this.isEnd=function(row,column){return this.end.row==row&&this.end.column==column},this.isStart=function(row,column){return this.start.row==row&&this.start.column==column},this.setStart=function(row,column){\\\"object\\\"==typeof row?(this.start.column=row.column,this.start.row=row.row):(this.start.row=row,this.start.column=column)},this.setEnd=function(row,column){\\\"object\\\"==typeof row?(this.end.column=row.column,this.end.row=row.row):(this.end.row=row,this.end.column=column)},this.inside=function(row,column){return 0==this.compare(row,column)?this.isEnd(row,column)||this.isStart(row,column)?!1:!0:!1},this.insideStart=function(row,column){return 0==this.compare(row,column)?this.isEnd(row,column)?!1:!0:!1},this.insideEnd=function(row,column){return 0==this.compare(row,column)?this.isStart(row,column)?!1:!0:!1},this.compare=function(row,column){return this.isMultiLine()||row!==this.start.row?this.start.row>row?-1:row>this.end.row?1:this.start.row===row?column>=this.start.column?0:-1:this.end.row===row?this.end.column>=column?0:1:0:this.start.column>column?-1:column>this.end.column?1:0},this.compareStart=function(row,column){return this.start.row==row&&this.start.column==column?-1:this.compare(row,column)},this.compareEnd=function(row,column){return this.end.row==row&&this.end.column==column?1:this.compare(row,column)},this.compareInside=function(row,column){return this.end.row==row&&this.end.column==column?1:this.start.row==row&&this.start.column==column?-1:this.compare(row,column)},this.clipRows=function(firstRow,lastRow){if(this.end.row>lastRow)var end={row:lastRow+1,column:0};else if(firstRow>this.end.row)var end={row:firstRow,column:0};if(this.start.row>lastRow)var start={row:lastRow+1,column:0};else if(firstRow>this.start.row)var start={row:firstRow,column:0};return Range.fromPoints(start||this.start,end||this.end)},this.extend=function(row,column){var cmp=this.compare(row,column);if(0==cmp)return this;if(-1==cmp)var start={row:row,column:column};else var end={row:row,column:column};return Range.fromPoints(start||this.start,end||this.end)},this.isEmpty=function(){return this.start.row===this.end.row&&this.start.column===this.end.column},this.isMultiLine=function(){return this.start.row!==this.end.row},this.clone=function(){return Range.fromPoints(this.start,this.end)},this.collapseRows=function(){return 0==this.end.column?new Range(this.start.row,0,Math.max(this.start.row,this.end.row-1),0):new Range(this.start.row,0,this.end.row,0)},this.toScreenRange=function(session){var screenPosStart=session.documentToScreenPosition(this.start),screenPosEnd=session.documentToScreenPosition(this.end);return new Range(screenPosStart.row,screenPosStart.column,screenPosEnd.row,screenPosEnd.column)},this.moveBy=function(row,column){this.start.row+=row,this.start.column+=column,this.end.row+=row,this.end.column+=column}}).call(Range.prototype),Range.fromPoints=function(start,end){return new Range(start.row,start.column,end.row,end.column)},Range.comparePoints=comparePoints,Range.comparePoints=function(p1,p2){return p1.row-p2.row||p1.column-p2.column},exports.Range=Range}),ace.define(\\\"ace/apply_delta\\\",[\\\"require\\\",\\\"exports\\\",\\\"module\\\"],function(acequire,exports){\\\"use strict\\\";exports.applyDelta=function(docLines,delta){var row=delta.start.row,startColumn=delta.start.column,line=docLines[row]||\\\"\\\";switch(delta.action){case\\\"insert\\\":var lines=delta.lines;if(1===lines.length)docLines[row]=line.substring(0,startColumn)+delta.lines[0]+line.substring(startColumn);else{var args=[row,1].concat(delta.lines);docLines.splice.apply(docLines,args),docLines[row]=line.substring(0,startColumn)+docLines[row],docLines[row+delta.lines.length-1]+=line.substring(startColumn)}break;case\\\"remove\\\":var endColumn=delta.end.column,endRow=delta.end.row;row===endRow?docLines[row]=line.substring(0,startColumn)+line.substring(endColumn):docLines.splice(row,endRow-row+1,line.substring(0,startColumn)+docLines[endRow].substring(endColumn))}}}),ace.define(\\\"ace/lib/event_emitter\\\",[\\\"require\\\",\\\"exports\\\",\\\"module\\\"],function(acequire,exports){\\\"use strict\\\";var EventEmitter={},stopPropagation=function(){this.propagationStopped=!0},preventDefault=function(){this.defaultPrevented=!0};EventEmitter._emit=EventEmitter._dispatchEvent=function(eventName,e){this._eventRegistry||(this._eventRegistry={}),this._defaultHandlers||(this._defaultHandlers={});var listeners=this._eventRegistry[eventName]||[],defaultHandler=this._defaultHandlers[eventName];if(listeners.length||defaultHandler){\\\"object\\\"==typeof e&&e||(e={}),e.type||(e.type=eventName),e.stopPropagation||(e.stopPropagation=stopPropagation),e.preventDefault||(e.preventDefault=preventDefault),listeners=listeners.slice();for(var i=0;listeners.length>i&&(listeners[i](e,this),!e.propagationStopped);i++);return defaultHandler&&!e.defaultPrevented?defaultHandler(e,this):void 0}},EventEmitter._signal=function(eventName,e){var listeners=(this._eventRegistry||{})[eventName];if(listeners){listeners=listeners.slice();for(var i=0;listeners.length>i;i++)listeners[i](e,this)}},EventEmitter.once=function(eventName,callback){var _self=this;callback&&this.addEventListener(eventName,function newCallback(){_self.removeEventListener(eventName,newCallback),callback.apply(null,arguments)})},EventEmitter.setDefaultHandler=function(eventName,callback){var handlers=this._defaultHandlers;if(handlers||(handlers=this._defaultHandlers={_disabled_:{}}),handlers[eventName]){var old=handlers[eventName],disabled=handlers._disabled_[eventName];disabled||(handlers._disabled_[eventName]=disabled=[]),disabled.push(old);var i=disabled.indexOf(callback);-1!=i&&disabled.splice(i,1)}handlers[eventName]=callback},EventEmitter.removeDefaultHandler=function(eventName,callback){var handlers=this._defaultHandlers;if(handlers){var disabled=handlers._disabled_[eventName];if(handlers[eventName]==callback)handlers[eventName],disabled&&this.setDefaultHandler(eventName,disabled.pop());else if(disabled){var i=disabled.indexOf(callback);-1!=i&&disabled.splice(i,1)}}},EventEmitter.on=EventEmitter.addEventListener=function(eventName,callback,capturing){this._eventRegistry=this._eventRegistry||{};var listeners=this._eventRegistry[eventName];return listeners||(listeners=this._eventRegistry[eventName]=[]),-1==listeners.indexOf(callback)&&listeners[capturing?\\\"unshift\\\":\\\"push\\\"](callback),callback},EventEmitter.off=EventEmitter.removeListener=EventEmitter.removeEventListener=function(eventName,callback){this._eventRegistry=this._eventRegistry||{};var listeners=this._eventRegistry[eventName];if(listeners){var index=listeners.indexOf(callback);-1!==index&&listeners.splice(index,1)}},EventEmitter.removeAllListeners=function(eventName){this._eventRegistry&&(this._eventRegistry[eventName]=[])},exports.EventEmitter=EventEmitter}),ace.define(\\\"ace/anchor\\\",[\\\"require\\\",\\\"exports\\\",\\\"module\\\",\\\"ace/lib/oop\\\",\\\"ace/lib/event_emitter\\\"],function(acequire,exports){\\\"use strict\\\";var oop=acequire(\\\"./lib/oop\\\"),EventEmitter=acequire(\\\"./lib/event_emitter\\\").EventEmitter,Anchor=exports.Anchor=function(doc,row,column){this.$onChange=this.onChange.bind(this),this.attach(doc),column===void 0?this.setPosition(row.row,row.column):this.setPosition(row,column)};(function(){function $pointsInOrder(point1,point2,equalPointsInOrder){var bColIsAfter=equalPointsInOrder?point1.column<=point2.column:point1.columnthis.row)){var point=$getTransformedPoint(delta,{row:this.row,column:this.column},this.$insertRight);this.setPosition(point.row,point.column,!0)}},this.setPosition=function(row,column,noClip){var pos;if(pos=noClip?{row:row,column:column}:this.$clipPositionToDocument(row,column),this.row!=pos.row||this.column!=pos.column){var old={row:this.row,column:this.column};this.row=pos.row,this.column=pos.column,this._signal(\\\"change\\\",{old:old,value:pos})}},this.detach=function(){this.document.removeEventListener(\\\"change\\\",this.$onChange)},this.attach=function(doc){this.document=doc||this.document,this.document.on(\\\"change\\\",this.$onChange)},this.$clipPositionToDocument=function(row,column){var pos={};return row>=this.document.getLength()?(pos.row=Math.max(0,this.document.getLength()-1),pos.column=this.document.getLine(pos.row).length):0>row?(pos.row=0,pos.column=0):(pos.row=row,pos.column=Math.min(this.document.getLine(pos.row).length,Math.max(0,column))),0>column&&(pos.column=0),pos}}).call(Anchor.prototype)}),ace.define(\\\"ace/document\\\",[\\\"require\\\",\\\"exports\\\",\\\"module\\\",\\\"ace/lib/oop\\\",\\\"ace/apply_delta\\\",\\\"ace/lib/event_emitter\\\",\\\"ace/range\\\",\\\"ace/anchor\\\"],function(acequire,exports){\\\"use strict\\\";var oop=acequire(\\\"./lib/oop\\\"),applyDelta=acequire(\\\"./apply_delta\\\").applyDelta,EventEmitter=acequire(\\\"./lib/event_emitter\\\").EventEmitter,Range=acequire(\\\"./range\\\").Range,Anchor=acequire(\\\"./anchor\\\").Anchor,Document=function(textOrLines){this.$lines=[\\\"\\\"],0===textOrLines.length?this.$lines=[\\\"\\\"]:Array.isArray(textOrLines)?this.insertMergedLines({row:0,column:0},textOrLines):this.insert({row:0,column:0},textOrLines)};(function(){oop.implement(this,EventEmitter),this.setValue=function(text){var len=this.getLength()-1;this.remove(new Range(0,0,len,this.getLine(len).length)),this.insert({row:0,column:0},text)},this.getValue=function(){return this.getAllLines().join(this.getNewLineCharacter())},this.createAnchor=function(row,column){return new Anchor(this,row,column)},this.$split=0===\\\"aaa\\\".split(/a/).length?function(text){return text.replace(/\\\\r\\\\n|\\\\r/g,\\\"\\\\n\\\").split(\\\"\\\\n\\\")}:function(text){return text.split(/\\\\r\\\\n|\\\\r|\\\\n/)},this.$detectNewLine=function(text){var match=text.match(/^.*?(\\\\r\\\\n|\\\\r|\\\\n)/m);this.$autoNewLine=match?match[1]:\\\"\\\\n\\\",this._signal(\\\"changeNewLineMode\\\")},this.getNewLineCharacter=function(){switch(this.$newLineMode){case\\\"windows\\\":return\\\"\\\\r\\\\n\\\";case\\\"unix\\\":return\\\"\\\\n\\\";default:return this.$autoNewLine||\\\"\\\\n\\\"}},this.$autoNewLine=\\\"\\\",this.$newLineMode=\\\"auto\\\",this.setNewLineMode=function(newLineMode){this.$newLineMode!==newLineMode&&(this.$newLineMode=newLineMode,this._signal(\\\"changeNewLineMode\\\"))},this.getNewLineMode=function(){return this.$newLineMode},this.isNewLine=function(text){return\\\"\\\\r\\\\n\\\"==text||\\\"\\\\r\\\"==text||\\\"\\\\n\\\"==text},this.getLine=function(row){return this.$lines[row]||\\\"\\\"},this.getLines=function(firstRow,lastRow){return this.$lines.slice(firstRow,lastRow+1)},this.getAllLines=function(){return this.getLines(0,this.getLength())},this.getLength=function(){return this.$lines.length},this.getTextRange=function(range){return this.getLinesForRange(range).join(this.getNewLineCharacter())},this.getLinesForRange=function(range){var lines;if(range.start.row===range.end.row)lines=[this.getLine(range.start.row).substring(range.start.column,range.end.column)];else{lines=this.getLines(range.start.row,range.end.row),lines[0]=(lines[0]||\\\"\\\").substring(range.start.column);var l=lines.length-1;range.end.row-range.start.row==l&&(lines[l]=lines[l].substring(0,range.end.column))}return lines},this.insertLines=function(row,lines){return console.warn(\\\"Use of document.insertLines is deprecated. Use the insertFullLines method instead.\\\"),this.insertFullLines(row,lines)},this.removeLines=function(firstRow,lastRow){return console.warn(\\\"Use of document.removeLines is deprecated. Use the removeFullLines method instead.\\\"),this.removeFullLines(firstRow,lastRow)},this.insertNewLine=function(position){return console.warn(\\\"Use of document.insertNewLine is deprecated. Use insertMergedLines(position, ['', '']) instead.\\\"),this.insertMergedLines(position,[\\\"\\\",\\\"\\\"])},this.insert=function(position,text){return 1>=this.getLength()&&this.$detectNewLine(text),this.insertMergedLines(position,this.$split(text))},this.insertInLine=function(position,text){var start=this.clippedPos(position.row,position.column),end=this.pos(position.row,position.column+text.length);return this.applyDelta({start:start,end:end,action:\\\"insert\\\",lines:[text]},!0),this.clonePos(end)},this.clippedPos=function(row,column){var length=this.getLength();void 0===row?row=length:0>row?row=0:row>=length&&(row=length-1,column=void 0);var line=this.getLine(row);return void 0==column&&(column=line.length),column=Math.min(Math.max(column,0),line.length),{row:row,column:column}},this.clonePos=function(pos){return{row:pos.row,column:pos.column}},this.pos=function(row,column){return{row:row,column:column}},this.$clipPosition=function(position){var length=this.getLength();return position.row>=length?(position.row=Math.max(0,length-1),position.column=this.getLine(length-1).length):(position.row=Math.max(0,position.row),position.column=Math.min(Math.max(position.column,0),this.getLine(position.row).length)),position},this.insertFullLines=function(row,lines){row=Math.min(Math.max(row,0),this.getLength());var column=0;this.getLength()>row?(lines=lines.concat([\\\"\\\"]),column=0):(lines=[\\\"\\\"].concat(lines),row--,column=this.$lines[row].length),this.insertMergedLines({row:row,column:column},lines)},this.insertMergedLines=function(position,lines){var start=this.clippedPos(position.row,position.column),end={row:start.row+lines.length-1,column:(1==lines.length?start.column:0)+lines[lines.length-1].length};return this.applyDelta({start:start,end:end,action:\\\"insert\\\",lines:lines}),this.clonePos(end)},this.remove=function(range){var start=this.clippedPos(range.start.row,range.start.column),end=this.clippedPos(range.end.row,range.end.column);return this.applyDelta({start:start,end:end,action:\\\"remove\\\",lines:this.getLinesForRange({start:start,end:end})}),this.clonePos(start)},this.removeInLine=function(row,startColumn,endColumn){var start=this.clippedPos(row,startColumn),end=this.clippedPos(row,endColumn);return this.applyDelta({start:start,end:end,action:\\\"remove\\\",lines:this.getLinesForRange({start:start,end:end})},!0),this.clonePos(start)},this.removeFullLines=function(firstRow,lastRow){firstRow=Math.min(Math.max(0,firstRow),this.getLength()-1),lastRow=Math.min(Math.max(0,lastRow),this.getLength()-1);var deleteFirstNewLine=lastRow==this.getLength()-1&&firstRow>0,deleteLastNewLine=this.getLength()-1>lastRow,startRow=deleteFirstNewLine?firstRow-1:firstRow,startCol=deleteFirstNewLine?this.getLine(startRow).length:0,endRow=deleteLastNewLine?lastRow+1:lastRow,endCol=deleteLastNewLine?0:this.getLine(endRow).length,range=new Range(startRow,startCol,endRow,endCol),deletedLines=this.$lines.slice(firstRow,lastRow+1);return this.applyDelta({start:range.start,end:range.end,action:\\\"remove\\\",lines:this.getLinesForRange(range)}),deletedLines},this.removeNewLine=function(row){this.getLength()-1>row&&row>=0&&this.applyDelta({start:this.pos(row,this.getLine(row).length),end:this.pos(row+1,0),action:\\\"remove\\\",lines:[\\\"\\\",\\\"\\\"]})},this.replace=function(range,text){if(range instanceof Range||(range=Range.fromPoints(range.start,range.end)),0===text.length&&range.isEmpty())return range.start;if(text==this.getTextRange(range))return range.end;this.remove(range);var end;return end=text?this.insert(range.start,text):range.start},this.applyDeltas=function(deltas){for(var i=0;deltas.length>i;i++)this.applyDelta(deltas[i])},this.revertDeltas=function(deltas){for(var i=deltas.length-1;i>=0;i--)this.revertDelta(deltas[i])},this.applyDelta=function(delta,doNotValidate){var isInsert=\\\"insert\\\"==delta.action;(isInsert?1>=delta.lines.length&&!delta.lines[0]:!Range.comparePoints(delta.start,delta.end))||(isInsert&&delta.lines.length>2e4&&this.$splitAndapplyLargeDelta(delta,2e4),applyDelta(this.$lines,delta,doNotValidate),this._signal(\\\"change\\\",delta))},this.$splitAndapplyLargeDelta=function(delta,MAX){for(var lines=delta.lines,l=lines.length,row=delta.start.row,column=delta.start.column,from=0,to=0;;){from=to,to+=MAX-1;var chunk=lines.slice(from,to);if(to>l){delta.lines=chunk,delta.start.row=row+from,delta.start.column=column;break}chunk.push(\\\"\\\"),this.applyDelta({start:this.pos(row+from,column),end:this.pos(row+to,column=0),action:delta.action,lines:chunk},!0)}},this.revertDelta=function(delta){this.applyDelta({start:this.clonePos(delta.start),end:this.clonePos(delta.end),action:\\\"insert\\\"==delta.action?\\\"remove\\\":\\\"insert\\\",lines:delta.lines.slice()})},this.indexToPosition=function(index,startRow){for(var lines=this.$lines||this.getAllLines(),newlineLength=this.getNewLineCharacter().length,i=startRow||0,l=lines.length;l>i;i++)if(index-=lines[i].length+newlineLength,0>index)return{row:i,column:index+lines[i].length+newlineLength};return{row:l-1,column:lines[l-1].length}},this.positionToIndex=function(pos,startRow){for(var lines=this.$lines||this.getAllLines(),newlineLength=this.getNewLineCharacter().length,index=0,row=Math.min(pos.row,lines.length),i=startRow||0;row>i;++i)index+=lines[i].length+newlineLength;return index+pos.column}}).call(Document.prototype),exports.Document=Document}),ace.define(\\\"ace/lib/lang\\\",[\\\"require\\\",\\\"exports\\\",\\\"module\\\"],function(acequire,exports){\\\"use strict\\\";exports.last=function(a){return a[a.length-1]},exports.stringReverse=function(string){return string.split(\\\"\\\").reverse().join(\\\"\\\")},exports.stringRepeat=function(string,count){for(var result=\\\"\\\";count>0;)1&count&&(result+=string),(count>>=1)&&(string+=string);return result};var trimBeginRegexp=/^\\\\s\\\\s*/,trimEndRegexp=/\\\\s\\\\s*$/;exports.stringTrimLeft=function(string){return string.replace(trimBeginRegexp,\\\"\\\")},exports.stringTrimRight=function(string){return string.replace(trimEndRegexp,\\\"\\\")},exports.copyObject=function(obj){var copy={};for(var key in obj)copy[key]=obj[key];return copy},exports.copyArray=function(array){for(var copy=[],i=0,l=array.length;l>i;i++)copy[i]=array[i]&&\\\"object\\\"==typeof array[i]?this.copyObject(array[i]):array[i];return copy},exports.deepCopy=function deepCopy(obj){if(\\\"object\\\"!=typeof obj||!obj)return obj;var copy;if(Array.isArray(obj)){copy=[];for(var key=0;obj.length>key;key++)copy[key]=deepCopy(obj[key]);return copy}var cons=obj.constructor;if(cons===RegExp)return obj;copy=cons();for(var key in obj)copy[key]=deepCopy(obj[key]);return copy},exports.arrayToMap=function(arr){for(var map={},i=0;arr.length>i;i++)map[arr[i]]=1;return map},exports.createMap=function(props){var map=Object.create(null);for(var i in props)map[i]=props[i];return map},exports.arrayRemove=function(array,value){for(var i=0;array.length>=i;i++)value===array[i]&&array.splice(i,1)},exports.escapeRegExp=function(str){return str.replace(/([.*+?^${}()|[\\\\]\\\\/\\\\\\\\])/g,\\\"\\\\\\\\$1\\\")},exports.escapeHTML=function(str){return str.replace(/&/g,\\\"&\\\").replace(/\\\"/g,\\\""\\\").replace(/'/g,\\\"'\\\").replace(/i;i+=2){if(Array.isArray(data[i+1]))var d={action:\\\"insert\\\",start:data[i],lines:data[i+1]};else var d={action:\\\"remove\\\",start:data[i],end:data[i+1]};doc.applyDelta(d,!0)}return _self.$timeout?deferredUpdate.schedule(_self.$timeout):(_self.onUpdate(),void 0)})};(function(){this.$timeout=500,this.setTimeout=function(timeout){this.$timeout=timeout},this.setValue=function(value){this.doc.setValue(value),this.deferredUpdate.schedule(this.$timeout)},this.getValue=function(callbackId){this.sender.callback(this.doc.getValue(),callbackId)},this.onUpdate=function(){},this.isPending=function(){return this.deferredUpdate.isPending()}}).call(Mirror.prototype)}),ace.define(\\\"ace/mode/json/json_parse\\\",[\\\"require\\\",\\\"exports\\\",\\\"module\\\"],function(){\\\"use strict\\\";var at,ch,text,value,escapee={'\\\"':'\\\"',\\\"\\\\\\\\\\\":\\\"\\\\\\\\\\\",\\\"/\\\":\\\"/\\\",b:\\\"\\\\b\\\",f:\\\"\\\\f\\\",n:\\\"\\\\n\\\",r:\\\"\\\\r\\\",t:\\\"\\t\\\"},error=function(m){throw{name:\\\"SyntaxError\\\",message:m,at:at,text:text}},next=function(c){return c&&c!==ch&&error(\\\"Expected '\\\"+c+\\\"' instead of '\\\"+ch+\\\"'\\\"),ch=text.charAt(at),at+=1,ch},number=function(){var number,string=\\\"\\\";for(\\\"-\\\"===ch&&(string=\\\"-\\\",next(\\\"-\\\"));ch>=\\\"0\\\"&&\\\"9\\\">=ch;)string+=ch,next();if(\\\".\\\"===ch)for(string+=\\\".\\\";next()&&ch>=\\\"0\\\"&&\\\"9\\\">=ch;)string+=ch;if(\\\"e\\\"===ch||\\\"E\\\"===ch)for(string+=ch,next(),(\\\"-\\\"===ch||\\\"+\\\"===ch)&&(string+=ch,next());ch>=\\\"0\\\"&&\\\"9\\\">=ch;)string+=ch,next();return number=+string,isNaN(number)?(error(\\\"Bad number\\\"),void 0):number},string=function(){var hex,i,uffff,string=\\\"\\\";if('\\\"'===ch)for(;next();){if('\\\"'===ch)return next(),string;if(\\\"\\\\\\\\\\\"===ch)if(next(),\\\"u\\\"===ch){for(uffff=0,i=0;4>i&&(hex=parseInt(next(),16),isFinite(hex));i+=1)uffff=16*uffff+hex;string+=String.fromCharCode(uffff)}else{if(\\\"string\\\"!=typeof escapee[ch])break;string+=escapee[ch]}else string+=ch}error(\\\"Bad string\\\")},white=function(){for(;ch&&\\\" \\\">=ch;)next()},word=function(){switch(ch){case\\\"t\\\":return next(\\\"t\\\"),next(\\\"r\\\"),next(\\\"u\\\"),next(\\\"e\\\"),!0;case\\\"f\\\":return next(\\\"f\\\"),next(\\\"a\\\"),next(\\\"l\\\"),next(\\\"s\\\"),next(\\\"e\\\"),!1;case\\\"n\\\":return next(\\\"n\\\"),next(\\\"u\\\"),next(\\\"l\\\"),next(\\\"l\\\"),null}error(\\\"Unexpected '\\\"+ch+\\\"'\\\")},array=function(){var array=[];if(\\\"[\\\"===ch){if(next(\\\"[\\\"),white(),\\\"]\\\"===ch)return next(\\\"]\\\"),array;for(;ch;){if(array.push(value()),white(),\\\"]\\\"===ch)return next(\\\"]\\\"),array;next(\\\",\\\"),white()}}error(\\\"Bad array\\\")},object=function(){var key,object={};if(\\\"{\\\"===ch){if(next(\\\"{\\\"),white(),\\\"}\\\"===ch)return next(\\\"}\\\"),object;for(;ch;){if(key=string(),white(),next(\\\":\\\"),Object.hasOwnProperty.call(object,key)&&error('Duplicate key \\\"'+key+'\\\"'),object[key]=value(),white(),\\\"}\\\"===ch)return next(\\\"}\\\"),object;next(\\\",\\\"),white()}}error(\\\"Bad object\\\")};return value=function(){switch(white(),ch){case\\\"{\\\":return object();case\\\"[\\\":return array();case'\\\"':return string();case\\\"-\\\":return number();default:return ch>=\\\"0\\\"&&\\\"9\\\">=ch?number():word()}},function(source,reviver){var result;return text=source,at=0,ch=\\\" \\\",result=value(),white(),ch&&error(\\\"Syntax error\\\"),\\\"function\\\"==typeof reviver?function walk(holder,key){var k,v,value=holder[key];if(value&&\\\"object\\\"==typeof value)for(k in value)Object.hasOwnProperty.call(value,k)&&(v=walk(value,k),void 0!==v?value[k]=v:delete value[k]);return reviver.call(holder,key,value)}({\\\"\\\":result},\\\"\\\"):result}}),ace.define(\\\"ace/mode/json_worker\\\",[\\\"require\\\",\\\"exports\\\",\\\"module\\\",\\\"ace/lib/oop\\\",\\\"ace/worker/mirror\\\",\\\"ace/mode/json/json_parse\\\"],function(acequire,exports){\\\"use strict\\\";var oop=acequire(\\\"../lib/oop\\\"),Mirror=acequire(\\\"../worker/mirror\\\").Mirror,parse=acequire(\\\"./json/json_parse\\\"),JsonWorker=exports.JsonWorker=function(sender){Mirror.call(this,sender),this.setTimeout(200)};oop.inherits(JsonWorker,Mirror),function(){this.onUpdate=function(){var value=this.doc.getValue(),errors=[];try{value&&parse(value)}catch(e){var pos=this.doc.indexToPosition(e.at-1);errors.push({row:pos.row,column:pos.column,text:e.message,type:\\\"error\\\"})}this.sender.emit(\\\"annotate\\\",errors)}}.call(JsonWorker.prototype)}),ace.define(\\\"ace/lib/es5-shim\\\",[\\\"require\\\",\\\"exports\\\",\\\"module\\\"],function(){function Empty(){}function doesDefinePropertyWork(object){try{return Object.defineProperty(object,\\\"sentinel\\\",{}),\\\"sentinel\\\"in object}catch(exception){}}function toInteger(n){return n=+n,n!==n?n=0:0!==n&&n!==1/0&&n!==-(1/0)&&(n=(n>0||-1)*Math.floor(Math.abs(n))),n}Function.prototype.bind||(Function.prototype.bind=function(that){var target=this;if(\\\"function\\\"!=typeof target)throw new TypeError(\\\"Function.prototype.bind called on incompatible \\\"+target);var args=slice.call(arguments,1),bound=function(){if(this instanceof bound){var result=target.apply(this,args.concat(slice.call(arguments)));return Object(result)===result?result:this}return target.apply(that,args.concat(slice.call(arguments)))};return target.prototype&&(Empty.prototype=target.prototype,bound.prototype=new Empty,Empty.prototype=null),bound});var defineGetter,defineSetter,lookupGetter,lookupSetter,supportsAccessors,call=Function.prototype.call,prototypeOfArray=Array.prototype,prototypeOfObject=Object.prototype,slice=prototypeOfArray.slice,_toString=call.bind(prototypeOfObject.toString),owns=call.bind(prototypeOfObject.hasOwnProperty);if((supportsAccessors=owns(prototypeOfObject,\\\"__defineGetter__\\\"))&&(defineGetter=call.bind(prototypeOfObject.__defineGetter__),defineSetter=call.bind(prototypeOfObject.__defineSetter__),lookupGetter=call.bind(prototypeOfObject.__lookupGetter__),lookupSetter=call.bind(prototypeOfObject.__lookupSetter__)),2!=[1,2].splice(0).length)if(function(){function makeArray(l){var a=Array(l+2);return a[0]=a[1]=0,a}var lengthBefore,array=[];return array.splice.apply(array,makeArray(20)),array.splice.apply(array,makeArray(26)),lengthBefore=array.length,array.splice(5,0,\\\"XXX\\\"),lengthBefore+1==array.length,lengthBefore+1==array.length?!0:void 0\\n}()){var array_splice=Array.prototype.splice;Array.prototype.splice=function(start,deleteCount){return arguments.length?array_splice.apply(this,[void 0===start?0:start,void 0===deleteCount?this.length-start:deleteCount].concat(slice.call(arguments,2))):[]}}else Array.prototype.splice=function(pos,removeCount){var length=this.length;pos>0?pos>length&&(pos=length):void 0==pos?pos=0:0>pos&&(pos=Math.max(length+pos,0)),length>pos+removeCount||(removeCount=length-pos);var removed=this.slice(pos,pos+removeCount),insert=slice.call(arguments,2),add=insert.length;if(pos===length)add&&this.push.apply(this,insert);else{var remove=Math.min(removeCount,length-pos),tailOldPos=pos+remove,tailNewPos=tailOldPos+add-remove,tailCount=length-tailOldPos,lengthAfterRemove=length-remove;if(tailOldPos>tailNewPos)for(var i=0;tailCount>i;++i)this[tailNewPos+i]=this[tailOldPos+i];else if(tailNewPos>tailOldPos)for(i=tailCount;i--;)this[tailNewPos+i]=this[tailOldPos+i];if(add&&pos===lengthAfterRemove)this.length=lengthAfterRemove,this.push.apply(this,insert);else for(this.length=lengthAfterRemove+add,i=0;add>i;++i)this[pos+i]=insert[i]}return removed};Array.isArray||(Array.isArray=function(obj){return\\\"[object Array]\\\"==_toString(obj)});var boxedString=Object(\\\"a\\\"),splitString=\\\"a\\\"!=boxedString[0]||!(0 in boxedString);if(Array.prototype.forEach||(Array.prototype.forEach=function(fun){var object=toObject(this),self=splitString&&\\\"[object String]\\\"==_toString(this)?this.split(\\\"\\\"):object,thisp=arguments[1],i=-1,length=self.length>>>0;if(\\\"[object Function]\\\"!=_toString(fun))throw new TypeError;for(;length>++i;)i in self&&fun.call(thisp,self[i],i,object)}),Array.prototype.map||(Array.prototype.map=function(fun){var object=toObject(this),self=splitString&&\\\"[object String]\\\"==_toString(this)?this.split(\\\"\\\"):object,length=self.length>>>0,result=Array(length),thisp=arguments[1];if(\\\"[object Function]\\\"!=_toString(fun))throw new TypeError(fun+\\\" is not a function\\\");for(var i=0;length>i;i++)i in self&&(result[i]=fun.call(thisp,self[i],i,object));return result}),Array.prototype.filter||(Array.prototype.filter=function(fun){var value,object=toObject(this),self=splitString&&\\\"[object String]\\\"==_toString(this)?this.split(\\\"\\\"):object,length=self.length>>>0,result=[],thisp=arguments[1];if(\\\"[object Function]\\\"!=_toString(fun))throw new TypeError(fun+\\\" is not a function\\\");for(var i=0;length>i;i++)i in self&&(value=self[i],fun.call(thisp,value,i,object)&&result.push(value));return result}),Array.prototype.every||(Array.prototype.every=function(fun){var object=toObject(this),self=splitString&&\\\"[object String]\\\"==_toString(this)?this.split(\\\"\\\"):object,length=self.length>>>0,thisp=arguments[1];if(\\\"[object Function]\\\"!=_toString(fun))throw new TypeError(fun+\\\" is not a function\\\");for(var i=0;length>i;i++)if(i in self&&!fun.call(thisp,self[i],i,object))return!1;return!0}),Array.prototype.some||(Array.prototype.some=function(fun){var object=toObject(this),self=splitString&&\\\"[object String]\\\"==_toString(this)?this.split(\\\"\\\"):object,length=self.length>>>0,thisp=arguments[1];if(\\\"[object Function]\\\"!=_toString(fun))throw new TypeError(fun+\\\" is not a function\\\");for(var i=0;length>i;i++)if(i in self&&fun.call(thisp,self[i],i,object))return!0;return!1}),Array.prototype.reduce||(Array.prototype.reduce=function(fun){var object=toObject(this),self=splitString&&\\\"[object String]\\\"==_toString(this)?this.split(\\\"\\\"):object,length=self.length>>>0;if(\\\"[object Function]\\\"!=_toString(fun))throw new TypeError(fun+\\\" is not a function\\\");if(!length&&1==arguments.length)throw new TypeError(\\\"reduce of empty array with no initial value\\\");var result,i=0;if(arguments.length>=2)result=arguments[1];else for(;;){if(i in self){result=self[i++];break}if(++i>=length)throw new TypeError(\\\"reduce of empty array with no initial value\\\")}for(;length>i;i++)i in self&&(result=fun.call(void 0,result,self[i],i,object));return result}),Array.prototype.reduceRight||(Array.prototype.reduceRight=function(fun){var object=toObject(this),self=splitString&&\\\"[object String]\\\"==_toString(this)?this.split(\\\"\\\"):object,length=self.length>>>0;if(\\\"[object Function]\\\"!=_toString(fun))throw new TypeError(fun+\\\" is not a function\\\");if(!length&&1==arguments.length)throw new TypeError(\\\"reduceRight of empty array with no initial value\\\");var result,i=length-1;if(arguments.length>=2)result=arguments[1];else for(;;){if(i in self){result=self[i--];break}if(0>--i)throw new TypeError(\\\"reduceRight of empty array with no initial value\\\")}do i in this&&(result=fun.call(void 0,result,self[i],i,object));while(i--);return result}),Array.prototype.indexOf&&-1==[0,1].indexOf(1,2)||(Array.prototype.indexOf=function(sought){var self=splitString&&\\\"[object String]\\\"==_toString(this)?this.split(\\\"\\\"):toObject(this),length=self.length>>>0;if(!length)return-1;var i=0;for(arguments.length>1&&(i=toInteger(arguments[1])),i=i>=0?i:Math.max(0,length+i);length>i;i++)if(i in self&&self[i]===sought)return i;return-1}),Array.prototype.lastIndexOf&&-1==[0,1].lastIndexOf(0,-3)||(Array.prototype.lastIndexOf=function(sought){var self=splitString&&\\\"[object String]\\\"==_toString(this)?this.split(\\\"\\\"):toObject(this),length=self.length>>>0;if(!length)return-1;var i=length-1;for(arguments.length>1&&(i=Math.min(i,toInteger(arguments[1]))),i=i>=0?i:length-Math.abs(i);i>=0;i--)if(i in self&&sought===self[i])return i;return-1}),Object.getPrototypeOf||(Object.getPrototypeOf=function(object){return object.__proto__||(object.constructor?object.constructor.prototype:prototypeOfObject)}),!Object.getOwnPropertyDescriptor){var ERR_NON_OBJECT=\\\"Object.getOwnPropertyDescriptor called on a non-object: \\\";Object.getOwnPropertyDescriptor=function(object,property){if(\\\"object\\\"!=typeof object&&\\\"function\\\"!=typeof object||null===object)throw new TypeError(ERR_NON_OBJECT+object);if(owns(object,property)){var descriptor,getter,setter;if(descriptor={enumerable:!0,configurable:!0},supportsAccessors){var prototype=object.__proto__;object.__proto__=prototypeOfObject;var getter=lookupGetter(object,property),setter=lookupSetter(object,property);if(object.__proto__=prototype,getter||setter)return getter&&(descriptor.get=getter),setter&&(descriptor.set=setter),descriptor}return descriptor.value=object[property],descriptor}}}if(Object.getOwnPropertyNames||(Object.getOwnPropertyNames=function(object){return Object.keys(object)}),!Object.create){var createEmpty;createEmpty=null===Object.prototype.__proto__?function(){return{__proto__:null}}:function(){var empty={};for(var i in empty)empty[i]=null;return empty.constructor=empty.hasOwnProperty=empty.propertyIsEnumerable=empty.isPrototypeOf=empty.toLocaleString=empty.toString=empty.valueOf=empty.__proto__=null,empty},Object.create=function(prototype,properties){var object;if(null===prototype)object=createEmpty();else{if(\\\"object\\\"!=typeof prototype)throw new TypeError(\\\"typeof prototype[\\\"+typeof prototype+\\\"] != 'object'\\\");var Type=function(){};Type.prototype=prototype,object=new Type,object.__proto__=prototype}return void 0!==properties&&Object.defineProperties(object,properties),object}}if(Object.defineProperty){var definePropertyWorksOnObject=doesDefinePropertyWork({}),definePropertyWorksOnDom=\\\"undefined\\\"==typeof document||doesDefinePropertyWork(document.createElement(\\\"div\\\"));if(!definePropertyWorksOnObject||!definePropertyWorksOnDom)var definePropertyFallback=Object.defineProperty}if(!Object.defineProperty||definePropertyFallback){var ERR_NON_OBJECT_DESCRIPTOR=\\\"Property description must be an object: \\\",ERR_NON_OBJECT_TARGET=\\\"Object.defineProperty called on non-object: \\\",ERR_ACCESSORS_NOT_SUPPORTED=\\\"getters & setters can not be defined on this javascript engine\\\";Object.defineProperty=function(object,property,descriptor){if(\\\"object\\\"!=typeof object&&\\\"function\\\"!=typeof object||null===object)throw new TypeError(ERR_NON_OBJECT_TARGET+object);if(\\\"object\\\"!=typeof descriptor&&\\\"function\\\"!=typeof descriptor||null===descriptor)throw new TypeError(ERR_NON_OBJECT_DESCRIPTOR+descriptor);if(definePropertyFallback)try{return definePropertyFallback.call(Object,object,property,descriptor)}catch(exception){}if(owns(descriptor,\\\"value\\\"))if(supportsAccessors&&(lookupGetter(object,property)||lookupSetter(object,property))){var prototype=object.__proto__;object.__proto__=prototypeOfObject,delete object[property],object[property]=descriptor.value,object.__proto__=prototype}else object[property]=descriptor.value;else{if(!supportsAccessors)throw new TypeError(ERR_ACCESSORS_NOT_SUPPORTED);owns(descriptor,\\\"get\\\")&&defineGetter(object,property,descriptor.get),owns(descriptor,\\\"set\\\")&&defineSetter(object,property,descriptor.set)}return object}}Object.defineProperties||(Object.defineProperties=function(object,properties){for(var property in properties)owns(properties,property)&&Object.defineProperty(object,property,properties[property]);return object}),Object.seal||(Object.seal=function(object){return object}),Object.freeze||(Object.freeze=function(object){return object});try{Object.freeze(function(){})}catch(exception){Object.freeze=function(freezeObject){return function(object){return\\\"function\\\"==typeof object?object:freezeObject(object)}}(Object.freeze)}if(Object.preventExtensions||(Object.preventExtensions=function(object){return object}),Object.isSealed||(Object.isSealed=function(){return!1}),Object.isFrozen||(Object.isFrozen=function(){return!1}),Object.isExtensible||(Object.isExtensible=function(object){if(Object(object)===object)throw new TypeError;for(var name=\\\"\\\";owns(object,name);)name+=\\\"?\\\";object[name]=!0;var returnValue=owns(object,name);return delete object[name],returnValue}),!Object.keys){var hasDontEnumBug=!0,dontEnums=[\\\"toString\\\",\\\"toLocaleString\\\",\\\"valueOf\\\",\\\"hasOwnProperty\\\",\\\"isPrototypeOf\\\",\\\"propertyIsEnumerable\\\",\\\"constructor\\\"],dontEnumsLength=dontEnums.length;for(var key in{toString:null})hasDontEnumBug=!1;Object.keys=function(object){if(\\\"object\\\"!=typeof object&&\\\"function\\\"!=typeof object||null===object)throw new TypeError(\\\"Object.keys called on a non-object\\\");var keys=[];for(var name in object)owns(object,name)&&keys.push(name);if(hasDontEnumBug)for(var i=0,ii=dontEnumsLength;ii>i;i++){var dontEnum=dontEnums[i];owns(object,dontEnum)&&keys.push(dontEnum)}return keys}}Date.now||(Date.now=function(){return(new Date).getTime()});var ws=\\\"\\t\\\\n\\u000b\\\\f\\\\r   ᠎              \\\\u2028\\\\u2029\\\";if(!String.prototype.trim||ws.trim()){ws=\\\"[\\\"+ws+\\\"]\\\";var trimBeginRegexp=RegExp(\\\"^\\\"+ws+ws+\\\"*\\\"),trimEndRegexp=RegExp(ws+ws+\\\"*$\\\");String.prototype.trim=function(){return(this+\\\"\\\").replace(trimBeginRegexp,\\\"\\\").replace(trimEndRegexp,\\\"\\\")}}var toObject=function(o){if(null==o)throw new TypeError(\\\"can't convert \\\"+o+\\\" to object\\\");return Object(o)}});\";\r\n\r\n/***/ },\r\n/* 69 */\r\n/***/ function(module, exports) {\r\n\r\n\tace.define(\"ace/ext/searchbox\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\",\"ace/lib/lang\",\"ace/lib/event\",\"ace/keyboard/hash_handler\",\"ace/lib/keys\"], function(acequire, exports, module) {\r\n\t\"use strict\";\r\n\r\n\tvar dom = acequire(\"../lib/dom\");\r\n\tvar lang = acequire(\"../lib/lang\");\r\n\tvar event = acequire(\"../lib/event\");\r\n\tvar searchboxCss = \"\\\r\n\t.ace_search {\\\r\n\tbackground-color: #ddd;\\\r\n\tborder: 1px solid #cbcbcb;\\\r\n\tborder-top: 0 none;\\\r\n\tmax-width: 325px;\\\r\n\toverflow: hidden;\\\r\n\tmargin: 0;\\\r\n\tpadding: 4px;\\\r\n\tpadding-right: 6px;\\\r\n\tpadding-bottom: 0;\\\r\n\tposition: absolute;\\\r\n\ttop: 0px;\\\r\n\tz-index: 99;\\\r\n\twhite-space: normal;\\\r\n\t}\\\r\n\t.ace_search.left {\\\r\n\tborder-left: 0 none;\\\r\n\tborder-radius: 0px 0px 5px 0px;\\\r\n\tleft: 0;\\\r\n\t}\\\r\n\t.ace_search.right {\\\r\n\tborder-radius: 0px 0px 0px 5px;\\\r\n\tborder-right: 0 none;\\\r\n\tright: 0;\\\r\n\t}\\\r\n\t.ace_search_form, .ace_replace_form {\\\r\n\tborder-radius: 3px;\\\r\n\tborder: 1px solid #cbcbcb;\\\r\n\tfloat: left;\\\r\n\tmargin-bottom: 4px;\\\r\n\toverflow: hidden;\\\r\n\t}\\\r\n\t.ace_search_form.ace_nomatch {\\\r\n\toutline: 1px solid red;\\\r\n\t}\\\r\n\t.ace_search_field {\\\r\n\tbackground-color: white;\\\r\n\tborder-right: 1px solid #cbcbcb;\\\r\n\tborder: 0 none;\\\r\n\t-webkit-box-sizing: border-box;\\\r\n\t-moz-box-sizing: border-box;\\\r\n\tbox-sizing: border-box;\\\r\n\tfloat: left;\\\r\n\theight: 22px;\\\r\n\toutline: 0;\\\r\n\tpadding: 0 7px;\\\r\n\twidth: 214px;\\\r\n\tmargin: 0;\\\r\n\t}\\\r\n\t.ace_searchbtn,\\\r\n\t.ace_replacebtn {\\\r\n\tbackground: #fff;\\\r\n\tborder: 0 none;\\\r\n\tborder-left: 1px solid #dcdcdc;\\\r\n\tcursor: pointer;\\\r\n\tfloat: left;\\\r\n\theight: 22px;\\\r\n\tmargin: 0;\\\r\n\tposition: relative;\\\r\n\t}\\\r\n\t.ace_searchbtn:last-child,\\\r\n\t.ace_replacebtn:last-child {\\\r\n\tborder-top-right-radius: 3px;\\\r\n\tborder-bottom-right-radius: 3px;\\\r\n\t}\\\r\n\t.ace_searchbtn:disabled {\\\r\n\tbackground: none;\\\r\n\tcursor: default;\\\r\n\t}\\\r\n\t.ace_searchbtn {\\\r\n\tbackground-position: 50% 50%;\\\r\n\tbackground-repeat: no-repeat;\\\r\n\twidth: 27px;\\\r\n\t}\\\r\n\t.ace_searchbtn.prev {\\\r\n\tbackground-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAFCAYAAAB4ka1VAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAADFJREFUeNpiSU1NZUAC/6E0I0yACYskCpsJiySKIiY0SUZk40FyTEgCjGgKwTRAgAEAQJUIPCE+qfkAAAAASUVORK5CYII=); \\\r\n\t}\\\r\n\t.ace_searchbtn.next {\\\r\n\tbackground-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAFCAYAAAB4ka1VAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAADRJREFUeNpiTE1NZQCC/0DMyIAKwGJMUAYDEo3M/s+EpvM/mkKwCQxYjIeLMaELoLMBAgwAU7UJObTKsvAAAAAASUVORK5CYII=); \\\r\n\t}\\\r\n\t.ace_searchbtn_close {\\\r\n\tbackground: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAcCAYAAABRVo5BAAAAZ0lEQVR42u2SUQrAMAhDvazn8OjZBilCkYVVxiis8H4CT0VrAJb4WHT3C5xU2a2IQZXJjiQIRMdkEoJ5Q2yMqpfDIo+XY4k6h+YXOyKqTIj5REaxloNAd0xiKmAtsTHqW8sR2W5f7gCu5nWFUpVjZwAAAABJRU5ErkJggg==) no-repeat 50% 0;\\\r\n\tborder-radius: 50%;\\\r\n\tborder: 0 none;\\\r\n\tcolor: #656565;\\\r\n\tcursor: pointer;\\\r\n\tfloat: right;\\\r\n\tfont: 16px/16px Arial;\\\r\n\theight: 14px;\\\r\n\tmargin: 5px 1px 9px 5px;\\\r\n\tpadding: 0;\\\r\n\ttext-align: center;\\\r\n\twidth: 14px;\\\r\n\t}\\\r\n\t.ace_searchbtn_close:hover {\\\r\n\tbackground-color: #656565;\\\r\n\tbackground-position: 50% 100%;\\\r\n\tcolor: white;\\\r\n\t}\\\r\n\t.ace_replacebtn.prev {\\\r\n\twidth: 54px\\\r\n\t}\\\r\n\t.ace_replacebtn.next {\\\r\n\twidth: 27px\\\r\n\t}\\\r\n\t.ace_button {\\\r\n\tmargin-left: 2px;\\\r\n\tcursor: pointer;\\\r\n\t-webkit-user-select: none;\\\r\n\t-moz-user-select: none;\\\r\n\t-o-user-select: none;\\\r\n\t-ms-user-select: none;\\\r\n\tuser-select: none;\\\r\n\toverflow: hidden;\\\r\n\topacity: 0.7;\\\r\n\tborder: 1px solid rgba(100,100,100,0.23);\\\r\n\tpadding: 1px;\\\r\n\t-moz-box-sizing: border-box;\\\r\n\tbox-sizing: border-box;\\\r\n\tcolor: black;\\\r\n\t}\\\r\n\t.ace_button:hover {\\\r\n\tbackground-color: #eee;\\\r\n\topacity:1;\\\r\n\t}\\\r\n\t.ace_button:active {\\\r\n\tbackground-color: #ddd;\\\r\n\t}\\\r\n\t.ace_button.checked {\\\r\n\tborder-color: #3399ff;\\\r\n\topacity:1;\\\r\n\t}\\\r\n\t.ace_search_options{\\\r\n\tmargin-bottom: 3px;\\\r\n\ttext-align: right;\\\r\n\t-webkit-user-select: none;\\\r\n\t-moz-user-select: none;\\\r\n\t-o-user-select: none;\\\r\n\t-ms-user-select: none;\\\r\n\tuser-select: none;\\\r\n\t}\";\r\n\tvar HashHandler = acequire(\"../keyboard/hash_handler\").HashHandler;\r\n\tvar keyUtil = acequire(\"../lib/keys\");\r\n\r\n\tdom.importCssString(searchboxCss, \"ace_searchbox\");\r\n\r\n\tvar html = ''.replace(/>\\s+/g, \">\");\r\n\r\n\tvar SearchBox = function(editor, range, showReplaceForm) {\r\n\t var div = dom.createElement(\"div\");\r\n\t div.innerHTML = html;\r\n\t this.element = div.firstChild;\r\n\r\n\t this.$init();\r\n\t this.setEditor(editor);\r\n\t};\r\n\r\n\t(function() {\r\n\t this.setEditor = function(editor) {\r\n\t editor.searchBox = this;\r\n\t editor.container.appendChild(this.element);\r\n\t this.editor = editor;\r\n\t };\r\n\r\n\t this.$initElements = function(sb) {\r\n\t this.searchBox = sb.querySelector(\".ace_search_form\");\r\n\t this.replaceBox = sb.querySelector(\".ace_replace_form\");\r\n\t this.searchOptions = sb.querySelector(\".ace_search_options\");\r\n\t this.regExpOption = sb.querySelector(\"[action=toggleRegexpMode]\");\r\n\t this.caseSensitiveOption = sb.querySelector(\"[action=toggleCaseSensitive]\");\r\n\t this.wholeWordOption = sb.querySelector(\"[action=toggleWholeWords]\");\r\n\t this.searchInput = this.searchBox.querySelector(\".ace_search_field\");\r\n\t this.replaceInput = this.replaceBox.querySelector(\".ace_search_field\");\r\n\t };\r\n\t \r\n\t this.$init = function() {\r\n\t var sb = this.element;\r\n\t \r\n\t this.$initElements(sb);\r\n\t \r\n\t var _this = this;\r\n\t event.addListener(sb, \"mousedown\", function(e) {\r\n\t setTimeout(function(){\r\n\t _this.activeInput.focus();\r\n\t }, 0);\r\n\t event.stopPropagation(e);\r\n\t });\r\n\t event.addListener(sb, \"click\", function(e) {\r\n\t var t = e.target || e.srcElement;\r\n\t var action = t.getAttribute(\"action\");\r\n\t if (action && _this[action])\r\n\t _this[action]();\r\n\t else if (_this.$searchBarKb.commands[action])\r\n\t _this.$searchBarKb.commands[action].exec(_this);\r\n\t event.stopPropagation(e);\r\n\t });\r\n\r\n\t event.addCommandKeyListener(sb, function(e, hashId, keyCode) {\r\n\t var keyString = keyUtil.keyCodeToString(keyCode);\r\n\t var command = _this.$searchBarKb.findKeyCommand(hashId, keyString);\r\n\t if (command && command.exec) {\r\n\t command.exec(_this);\r\n\t event.stopEvent(e);\r\n\t }\r\n\t });\r\n\r\n\t this.$onChange = lang.delayedCall(function() {\r\n\t _this.find(false, false);\r\n\t });\r\n\r\n\t event.addListener(this.searchInput, \"input\", function() {\r\n\t _this.$onChange.schedule(20);\r\n\t });\r\n\t event.addListener(this.searchInput, \"focus\", function() {\r\n\t _this.activeInput = _this.searchInput;\r\n\t _this.searchInput.value && _this.highlight();\r\n\t });\r\n\t event.addListener(this.replaceInput, \"focus\", function() {\r\n\t _this.activeInput = _this.replaceInput;\r\n\t _this.searchInput.value && _this.highlight();\r\n\t });\r\n\t };\r\n\t this.$closeSearchBarKb = new HashHandler([{\r\n\t bindKey: \"Esc\",\r\n\t name: \"closeSearchBar\",\r\n\t exec: function(editor) {\r\n\t editor.searchBox.hide();\r\n\t }\r\n\t }]);\r\n\t this.$searchBarKb = new HashHandler();\r\n\t this.$searchBarKb.bindKeys({\r\n\t \"Ctrl-f|Command-f\": function(sb) {\r\n\t var isReplace = sb.isReplace = !sb.isReplace;\r\n\t sb.replaceBox.style.display = isReplace ? \"\" : \"none\";\r\n\t sb.searchInput.focus();\r\n\t },\r\n\t \"Ctrl-H|Command-Option-F\": function(sb) {\r\n\t sb.replaceBox.style.display = \"\";\r\n\t sb.replaceInput.focus();\r\n\t },\r\n\t \"Ctrl-G|Command-G\": function(sb) {\r\n\t sb.findNext();\r\n\t },\r\n\t \"Ctrl-Shift-G|Command-Shift-G\": function(sb) {\r\n\t sb.findPrev();\r\n\t },\r\n\t \"esc\": function(sb) {\r\n\t setTimeout(function() { sb.hide();});\r\n\t },\r\n\t \"Return\": function(sb) {\r\n\t if (sb.activeInput == sb.replaceInput)\r\n\t sb.replace();\r\n\t sb.findNext();\r\n\t },\r\n\t \"Shift-Return\": function(sb) {\r\n\t if (sb.activeInput == sb.replaceInput)\r\n\t sb.replace();\r\n\t sb.findPrev();\r\n\t },\r\n\t \"Alt-Return\": function(sb) {\r\n\t if (sb.activeInput == sb.replaceInput)\r\n\t sb.replaceAll();\r\n\t sb.findAll();\r\n\t },\r\n\t \"Tab\": function(sb) {\r\n\t (sb.activeInput == sb.replaceInput ? sb.searchInput : sb.replaceInput).focus();\r\n\t }\r\n\t });\r\n\r\n\t this.$searchBarKb.addCommands([{\r\n\t name: \"toggleRegexpMode\",\r\n\t bindKey: {win: \"Alt-R|Alt-/\", mac: \"Ctrl-Alt-R|Ctrl-Alt-/\"},\r\n\t exec: function(sb) {\r\n\t sb.regExpOption.checked = !sb.regExpOption.checked;\r\n\t sb.$syncOptions();\r\n\t }\r\n\t }, {\r\n\t name: \"toggleCaseSensitive\",\r\n\t bindKey: {win: \"Alt-C|Alt-I\", mac: \"Ctrl-Alt-R|Ctrl-Alt-I\"},\r\n\t exec: function(sb) {\r\n\t sb.caseSensitiveOption.checked = !sb.caseSensitiveOption.checked;\r\n\t sb.$syncOptions();\r\n\t }\r\n\t }, {\r\n\t name: \"toggleWholeWords\",\r\n\t bindKey: {win: \"Alt-B|Alt-W\", mac: \"Ctrl-Alt-B|Ctrl-Alt-W\"},\r\n\t exec: function(sb) {\r\n\t sb.wholeWordOption.checked = !sb.wholeWordOption.checked;\r\n\t sb.$syncOptions();\r\n\t }\r\n\t }]);\r\n\r\n\t this.$syncOptions = function() {\r\n\t dom.setCssClass(this.regExpOption, \"checked\", this.regExpOption.checked);\r\n\t dom.setCssClass(this.wholeWordOption, \"checked\", this.wholeWordOption.checked);\r\n\t dom.setCssClass(this.caseSensitiveOption, \"checked\", this.caseSensitiveOption.checked);\r\n\t this.find(false, false);\r\n\t };\r\n\r\n\t this.highlight = function(re) {\r\n\t this.editor.session.highlight(re || this.editor.$search.$options.re);\r\n\t this.editor.renderer.updateBackMarkers()\r\n\t };\r\n\t this.find = function(skipCurrent, backwards, preventScroll) {\r\n\t var range = this.editor.find(this.searchInput.value, {\r\n\t skipCurrent: skipCurrent,\r\n\t backwards: backwards,\r\n\t wrap: true,\r\n\t regExp: this.regExpOption.checked,\r\n\t caseSensitive: this.caseSensitiveOption.checked,\r\n\t wholeWord: this.wholeWordOption.checked,\r\n\t preventScroll: preventScroll\r\n\t });\r\n\t var noMatch = !range && this.searchInput.value;\r\n\t dom.setCssClass(this.searchBox, \"ace_nomatch\", noMatch);\r\n\t this.editor._emit(\"findSearchBox\", { match: !noMatch });\r\n\t this.highlight();\r\n\t };\r\n\t this.findNext = function() {\r\n\t this.find(true, false);\r\n\t };\r\n\t this.findPrev = function() {\r\n\t this.find(true, true);\r\n\t };\r\n\t this.findAll = function(){\r\n\t var range = this.editor.findAll(this.searchInput.value, { \r\n\t regExp: this.regExpOption.checked,\r\n\t caseSensitive: this.caseSensitiveOption.checked,\r\n\t wholeWord: this.wholeWordOption.checked\r\n\t });\r\n\t var noMatch = !range && this.searchInput.value;\r\n\t dom.setCssClass(this.searchBox, \"ace_nomatch\", noMatch);\r\n\t this.editor._emit(\"findSearchBox\", { match: !noMatch });\r\n\t this.highlight();\r\n\t this.hide();\r\n\t };\r\n\t this.replace = function() {\r\n\t if (!this.editor.getReadOnly())\r\n\t this.editor.replace(this.replaceInput.value);\r\n\t }; \r\n\t this.replaceAndFindNext = function() {\r\n\t if (!this.editor.getReadOnly()) {\r\n\t this.editor.replace(this.replaceInput.value);\r\n\t this.findNext()\r\n\t }\r\n\t };\r\n\t this.replaceAll = function() {\r\n\t if (!this.editor.getReadOnly())\r\n\t this.editor.replaceAll(this.replaceInput.value);\r\n\t };\r\n\r\n\t this.hide = function() {\r\n\t this.element.style.display = \"none\";\r\n\t this.editor.keyBinding.removeKeyboardHandler(this.$closeSearchBarKb);\r\n\t this.editor.focus();\r\n\t };\r\n\t this.show = function(value, isReplace) {\r\n\t this.element.style.display = \"\";\r\n\t this.replaceBox.style.display = isReplace ? \"\" : \"none\";\r\n\r\n\t this.isReplace = isReplace;\r\n\r\n\t if (value)\r\n\t this.searchInput.value = value;\r\n\t \r\n\t this.find(false, false, true);\r\n\t \r\n\t this.searchInput.focus();\r\n\t this.searchInput.select();\r\n\r\n\t this.editor.keyBinding.addKeyboardHandler(this.$closeSearchBarKb);\r\n\t };\r\n\r\n\t this.isFocused = function() {\r\n\t var el = document.activeElement;\r\n\t return el == this.searchInput || el == this.replaceInput;\r\n\t }\r\n\t}).call(SearchBox.prototype);\r\n\r\n\texports.SearchBox = SearchBox;\r\n\r\n\texports.Search = function(editor, isReplace) {\r\n\t var sb = editor.searchBox || new SearchBox(editor);\r\n\t sb.show(editor.session.getTextRange(), isReplace);\r\n\t};\r\n\r\n\t});\r\n\t (function() {\r\n\t ace.acequire([\"ace/ext/searchbox\"], function() {});\r\n\t })();\r\n\t \r\n\r\n/***/ },\r\n/* 70 */\r\n/***/ function(module, exports) {\r\n\r\n\t/* ***** BEGIN LICENSE BLOCK *****\r\n\t * Distributed under the BSD license:\r\n\t *\r\n\t * Copyright (c) 2010, Ajax.org B.V.\r\n\t * All rights reserved.\r\n\t * \r\n\t * Redistribution and use in source and binary forms, with or without\r\n\t * modification, are permitted provided that the following conditions are met:\r\n\t * * Redistributions of source code must retain the above copyright\r\n\t * notice, this list of conditions and the following disclaimer.\r\n\t * * Redistributions in binary form must reproduce the above copyright\r\n\t * notice, this list of conditions and the following disclaimer in the\r\n\t * documentation and/or other materials provided with the distribution.\r\n\t * * Neither the name of Ajax.org B.V. nor the\r\n\t * names of its contributors may be used to endorse or promote products\r\n\t * derived from this software without specific prior written permission.\r\n\t * \r\n\t * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\r\n\t * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\r\n\t * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r\n\t * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\r\n\t * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\r\n\t * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\r\n\t * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\r\n\t * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\r\n\t * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\r\n\t * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n\t *\r\n\t * ***** END LICENSE BLOCK ***** */\r\n\r\n\tace.define('ace/theme/jsoneditor', ['require', 'exports', 'module', 'ace/lib/dom'], function(acequire, exports, module) {\r\n\r\n\texports.isDark = false;\r\n\texports.cssClass = \"ace-jsoneditor\";\r\n\texports.cssText = \".ace-jsoneditor .ace_gutter {\\\r\n\tbackground: #ebebeb;\\\r\n\tcolor: #333\\\r\n\t}\\\r\n\t\\\r\n\t.ace-jsoneditor.ace_editor {\\\r\n\tfont-family: droid sans mono, consolas, monospace, courier new, courier, sans-serif;\\\r\n\tline-height: 1.3;\\\r\n\t}\\\r\n\t.ace-jsoneditor .ace_print-margin {\\\r\n\twidth: 1px;\\\r\n\tbackground: #e8e8e8\\\r\n\t}\\\r\n\t.ace-jsoneditor .ace_scroller {\\\r\n\tbackground-color: #FFFFFF\\\r\n\t}\\\r\n\t.ace-jsoneditor .ace_text-layer {\\\r\n\tcolor: gray\\\r\n\t}\\\r\n\t.ace-jsoneditor .ace_variable {\\\r\n\tcolor: #1a1a1a\\\r\n\t}\\\r\n\t.ace-jsoneditor .ace_cursor {\\\r\n\tborder-left: 2px solid #000000\\\r\n\t}\\\r\n\t.ace-jsoneditor .ace_overwrite-cursors .ace_cursor {\\\r\n\tborder-left: 0px;\\\r\n\tborder-bottom: 1px solid #000000\\\r\n\t}\\\r\n\t.ace-jsoneditor .ace_marker-layer .ace_selection {\\\r\n\tbackground: lightgray\\\r\n\t}\\\r\n\t.ace-jsoneditor.ace_multiselect .ace_selection.ace_start {\\\r\n\tbox-shadow: 0 0 3px 0px #FFFFFF;\\\r\n\tborder-radius: 2px\\\r\n\t}\\\r\n\t.ace-jsoneditor .ace_marker-layer .ace_step {\\\r\n\tbackground: rgb(255, 255, 0)\\\r\n\t}\\\r\n\t.ace-jsoneditor .ace_marker-layer .ace_bracket {\\\r\n\tmargin: -1px 0 0 -1px;\\\r\n\tborder: 1px solid #BFBFBF\\\r\n\t}\\\r\n\t.ace-jsoneditor .ace_marker-layer .ace_active-line {\\\r\n\tbackground: #FFFBD1\\\r\n\t}\\\r\n\t.ace-jsoneditor .ace_gutter-active-line {\\\r\n\tbackground-color : #dcdcdc\\\r\n\t}\\\r\n\t.ace-jsoneditor .ace_marker-layer .ace_selected-word {\\\r\n\tborder: 1px solid lightgray\\\r\n\t}\\\r\n\t.ace-jsoneditor .ace_invisible {\\\r\n\tcolor: #BFBFBF\\\r\n\t}\\\r\n\t.ace-jsoneditor .ace_keyword,\\\r\n\t.ace-jsoneditor .ace_meta,\\\r\n\t.ace-jsoneditor .ace_support.ace_constant.ace_property-value {\\\r\n\tcolor: #AF956F\\\r\n\t}\\\r\n\t.ace-jsoneditor .ace_keyword.ace_operator {\\\r\n\tcolor: #484848\\\r\n\t}\\\r\n\t.ace-jsoneditor .ace_keyword.ace_other.ace_unit {\\\r\n\tcolor: #96DC5F\\\r\n\t}\\\r\n\t.ace-jsoneditor .ace_constant.ace_language {\\\r\n\tcolor: darkorange\\\r\n\t}\\\r\n\t.ace-jsoneditor .ace_constant.ace_numeric {\\\r\n\tcolor: red\\\r\n\t}\\\r\n\t.ace-jsoneditor .ace_constant.ace_character.ace_entity {\\\r\n\tcolor: #BF78CC\\\r\n\t}\\\r\n\t.ace-jsoneditor .ace_invalid {\\\r\n\tcolor: #FFFFFF;\\\r\n\tbackground-color: #FF002A;\\\r\n\t}\\\r\n\t.ace-jsoneditor .ace_fold {\\\r\n\tbackground-color: #AF956F;\\\r\n\tborder-color: #000000\\\r\n\t}\\\r\n\t.ace-jsoneditor .ace_storage,\\\r\n\t.ace-jsoneditor .ace_support.ace_class,\\\r\n\t.ace-jsoneditor .ace_support.ace_function,\\\r\n\t.ace-jsoneditor .ace_support.ace_other,\\\r\n\t.ace-jsoneditor .ace_support.ace_type {\\\r\n\tcolor: #C52727\\\r\n\t}\\\r\n\t.ace-jsoneditor .ace_string {\\\r\n\tcolor: green\\\r\n\t}\\\r\n\t.ace-jsoneditor .ace_comment {\\\r\n\tcolor: #BCC8BA\\\r\n\t}\\\r\n\t.ace-jsoneditor .ace_entity.ace_name.ace_tag,\\\r\n\t.ace-jsoneditor .ace_entity.ace_other.ace_attribute-name {\\\r\n\tcolor: #606060\\\r\n\t}\\\r\n\t.ace-jsoneditor .ace_markup.ace_underline {\\\r\n\ttext-decoration: underline\\\r\n\t}\\\r\n\t.ace-jsoneditor .ace_indent-guide {\\\r\n\tbackground: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAE0lEQVQImWP4////f4bLly//BwAmVgd1/w11/gAAAABJRU5ErkJggg==\\\") right repeat-y\\\r\n\t}\";\r\n\r\n\tvar dom = acequire(\"../lib/dom\");\r\n\tdom.importCssString(exports.cssText, exports.cssClass);\r\n\t});\r\n\r\n\r\n/***/ }\r\n/******/ ])\r\n});\r\n;","\"use strict\";\n// External Files\nconst vue = require('vue');\n// CSS\nrequire('./scss/main.scss');\n// Interfaces\nconst { IView } = require('../interfaces/view.ts');\n// Components\nconst mainContent = require('./components/mainContent.ts');\nconst topbar = require('./components/topbar.ts');\nconst bottomBar = require('./components/bottomBar.ts');\nconst pantry = new vue({\n el: '.app',\n components: {\n mainContent,\n topbar,\n bottomBar,\n },\n data() {\n return {\n view: IView.home,\n };\n },\n methods: {\n changeView(view) {\n this.view = IView[view];\n },\n checkIfInView() {\n if (window.location.search) {\n const _view = decodeURIComponent(window.location.search.match(/(\\?|&)show\\=([^&]*)/)[2]);\n if (IView[_view]) {\n this.view = IView[_view];\n }\n }\n },\n },\n created() {\n this.checkIfInView();\n },\n});\nmodule.exports = pantry;\n","/*!\n * Vue.js v2.6.14\n * (c) 2014-2021 Evan You\n * Released under the MIT License.\n */\n!function(e,t){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=t():\"function\"==typeof define&&define.amd?define(t):(e=e||self).Vue=t()}(this,function(){\"use strict\";var e=Object.freeze({});function t(e){return null==e}function n(e){return null!=e}function r(e){return!0===e}function i(e){return\"string\"==typeof e||\"number\"==typeof e||\"symbol\"==typeof e||\"boolean\"==typeof e}function o(e){return null!==e&&\"object\"==typeof e}var a=Object.prototype.toString;function s(e){return\"[object Object]\"===a.call(e)}function c(e){var t=parseFloat(String(e));return t>=0&&Math.floor(t)===t&&isFinite(e)}function u(e){return n(e)&&\"function\"==typeof e.then&&\"function\"==typeof e.catch}function l(e){return null==e?\"\":Array.isArray(e)||s(e)&&e.toString===a?JSON.stringify(e,null,2):String(e)}function f(e){var t=parseFloat(e);return isNaN(t)?e:t}function p(e,t){for(var n=Object.create(null),r=e.split(\",\"),i=0;i-1)return e.splice(n,1)}}var m=Object.prototype.hasOwnProperty;function y(e,t){return m.call(e,t)}function g(e){var t=Object.create(null);return function(n){return t[n]||(t[n]=e(n))}}var _=/-(\\w)/g,b=g(function(e){return e.replace(_,function(e,t){return t?t.toUpperCase():\"\"})}),$=g(function(e){return e.charAt(0).toUpperCase()+e.slice(1)}),w=/\\B([A-Z])/g,C=g(function(e){return e.replace(w,\"-$1\").toLowerCase()});var x=Function.prototype.bind?function(e,t){return e.bind(t)}:function(e,t){function n(n){var r=arguments.length;return r?r>1?e.apply(t,arguments):e.call(t,n):e.call(t)}return n._length=e.length,n};function k(e,t){t=t||0;for(var n=e.length-t,r=new Array(n);n--;)r[n]=e[n+t];return r}function A(e,t){for(var n in t)e[n]=t[n];return e}function O(e){for(var t={},n=0;n0,Z=J&&J.indexOf(\"edge/\")>0,G=(J&&J.indexOf(\"android\"),J&&/iphone|ipad|ipod|ios/.test(J)||\"ios\"===K),X=(J&&/chrome\\/\\d+/.test(J),J&&/phantomjs/.test(J),J&&J.match(/firefox\\/(\\d+)/)),Y={}.watch,Q=!1;if(V)try{var ee={};Object.defineProperty(ee,\"passive\",{get:function(){Q=!0}}),window.addEventListener(\"test-passive\",null,ee)}catch(e){}var te=function(){return void 0===B&&(B=!V&&!z&&\"undefined\"!=typeof global&&(global.process&&\"server\"===global.process.env.VUE_ENV)),B},ne=V&&window.__VUE_DEVTOOLS_GLOBAL_HOOK__;function re(e){return\"function\"==typeof e&&/native code/.test(e.toString())}var ie,oe=\"undefined\"!=typeof Symbol&&re(Symbol)&&\"undefined\"!=typeof Reflect&&re(Reflect.ownKeys);ie=\"undefined\"!=typeof Set&&re(Set)?Set:function(){function e(){this.set=Object.create(null)}return e.prototype.has=function(e){return!0===this.set[e]},e.prototype.add=function(e){this.set[e]=!0},e.prototype.clear=function(){this.set=Object.create(null)},e}();var ae=S,se=0,ce=function(){this.id=se++,this.subs=[]};ce.prototype.addSub=function(e){this.subs.push(e)},ce.prototype.removeSub=function(e){h(this.subs,e)},ce.prototype.depend=function(){ce.target&&ce.target.addDep(this)},ce.prototype.notify=function(){for(var e=this.subs.slice(),t=0,n=e.length;t-1)if(o&&!y(i,\"default\"))a=!1;else if(\"\"===a||a===C(e)){var c=Re(String,i.type);(c<0||s0&&(ct((u=e(u,(a||\"\")+\"_\"+c))[0])&&ct(f)&&(s[l]=he(f.text+u[0].text),u.shift()),s.push.apply(s,u)):i(u)?ct(f)?s[l]=he(f.text+u):\"\"!==u&&s.push(he(u)):ct(u)&&ct(f)?s[l]=he(f.text+u.text):(r(o._isVList)&&n(u.tag)&&t(u.key)&&n(a)&&(u.key=\"__vlist\"+a+\"_\"+c+\"__\"),s.push(u)));return s}(e):void 0}function ct(e){return n(e)&&n(e.text)&&!1===e.isComment}function ut(e,t){if(e){for(var n=Object.create(null),r=oe?Reflect.ownKeys(e):Object.keys(e),i=0;i0,a=t?!!t.$stable:!o,s=t&&t.$key;if(t){if(t._normalized)return t._normalized;if(a&&r&&r!==e&&s===r.$key&&!o&&!r.$hasNormal)return r;for(var c in i={},t)t[c]&&\"$\"!==c[0]&&(i[c]=vt(n,c,t[c]))}else i={};for(var u in n)u in i||(i[u]=ht(n,u));return t&&Object.isExtensible(t)&&(t._normalized=i),R(i,\"$stable\",a),R(i,\"$key\",s),R(i,\"$hasNormal\",o),i}function vt(e,t,n){var r=function(){var e=arguments.length?n.apply(null,arguments):n({}),t=(e=e&&\"object\"==typeof e&&!Array.isArray(e)?[e]:st(e))&&e[0];return e&&(!t||1===e.length&&t.isComment&&!pt(t))?void 0:e};return n.proxy&&Object.defineProperty(e,t,{get:r,enumerable:!0,configurable:!0}),r}function ht(e,t){return function(){return e[t]}}function mt(e,t){var r,i,a,s,c;if(Array.isArray(e)||\"string\"==typeof e)for(r=new Array(e.length),i=0,a=e.length;idocument.createEvent(\"Event\").timeStamp&&(cn=function(){return un.now()})}function ln(){var e,t;for(sn=cn(),on=!0,en.sort(function(e,t){return e.id-t.id}),an=0;anan&&en[n].id>e.id;)n--;en.splice(n+1,0,e)}else en.push(e);rn||(rn=!0,Qe(ln))}}(this)},pn.prototype.run=function(){if(this.active){var e=this.get();if(e!==this.value||o(e)||this.deep){var t=this.value;if(this.value=e,this.user){var n='callback for watcher \"'+this.expression+'\"';Be(this.cb,this.vm,[e,t],this.vm,n)}else this.cb.call(this.vm,e,t)}}},pn.prototype.evaluate=function(){this.value=this.get(),this.dirty=!1},pn.prototype.depend=function(){for(var e=this.deps.length;e--;)this.deps[e].depend()},pn.prototype.teardown=function(){if(this.active){this.vm._isBeingDestroyed||h(this.vm._watchers,this);for(var e=this.deps.length;e--;)this.deps[e].removeSub(this);this.active=!1}};var dn={enumerable:!0,configurable:!0,get:S,set:S};function vn(e,t,n){dn.get=function(){return this[t][n]},dn.set=function(e){this[t][n]=e},Object.defineProperty(e,n,dn)}function hn(e){e._watchers=[];var t=e.$options;t.props&&function(e,t){var n=e.$options.propsData||{},r=e._props={},i=e.$options._propKeys=[];e.$parent&&$e(!1);var o=function(o){i.push(o);var a=Ie(o,t,n,e);xe(r,o,a),o in e||vn(e,\"_props\",o)};for(var a in t)o(a);$e(!0)}(e,t.props),t.methods&&function(e,t){e.$options.props;for(var n in t)e[n]=\"function\"!=typeof t[n]?S:x(t[n],e)}(e,t.methods),t.data?function(e){var t=e.$options.data;s(t=e._data=\"function\"==typeof t?function(e,t){le();try{return e.call(t,t)}catch(e){return He(e,t,\"data()\"),{}}finally{fe()}}(t,e):t||{})||(t={});var n=Object.keys(t),r=e.$options.props,i=(e.$options.methods,n.length);for(;i--;){var o=n[i];r&&y(r,o)||(a=void 0,36!==(a=(o+\"\").charCodeAt(0))&&95!==a&&vn(e,\"_data\",o))}var a;Ce(t,!0)}(e):Ce(e._data={},!0),t.computed&&function(e,t){var n=e._computedWatchers=Object.create(null),r=te();for(var i in t){var o=t[i],a=\"function\"==typeof o?o:o.get;r||(n[i]=new pn(e,a||S,S,mn)),i in e||yn(e,i,o)}}(e,t.computed),t.watch&&t.watch!==Y&&function(e,t){for(var n in t){var r=t[n];if(Array.isArray(r))for(var i=0;i-1:\"string\"==typeof e?e.split(\",\").indexOf(t)>-1:(n=e,\"[object RegExp]\"===a.call(n)&&e.test(t));var n}function On(e,t){var n=e.cache,r=e.keys,i=e._vnode;for(var o in n){var a=n[o];if(a){var s=a.name;s&&!t(s)&&Sn(n,o,r,i)}}}function Sn(e,t,n,r){var i=e[t];!i||r&&i.tag===r.tag||i.componentInstance.$destroy(),e[t]=null,h(n,t)}!function(t){t.prototype._init=function(t){var n=this;n._uid=$n++,n._isVue=!0,t&&t._isComponent?function(e,t){var n=e.$options=Object.create(e.constructor.options),r=t._parentVnode;n.parent=t.parent,n._parentVnode=r;var i=r.componentOptions;n.propsData=i.propsData,n._parentListeners=i.listeners,n._renderChildren=i.children,n._componentTag=i.tag,t.render&&(n.render=t.render,n.staticRenderFns=t.staticRenderFns)}(n,t):n.$options=De(wn(n.constructor),t||{},n),n._renderProxy=n,n._self=n,function(e){var t=e.$options,n=t.parent;if(n&&!t.abstract){for(;n.$options.abstract&&n.$parent;)n=n.$parent;n.$children.push(e)}e.$parent=n,e.$root=n?n.$root:e,e.$children=[],e.$refs={},e._watcher=null,e._inactive=null,e._directInactive=!1,e._isMounted=!1,e._isDestroyed=!1,e._isBeingDestroyed=!1}(n),function(e){e._events=Object.create(null),e._hasHookEvent=!1;var t=e.$options._parentListeners;t&&Wt(e,t)}(n),function(t){t._vnode=null,t._staticTrees=null;var n=t.$options,r=t.$vnode=n._parentVnode,i=r&&r.context;t.$slots=lt(n._renderChildren,i),t.$scopedSlots=e,t._c=function(e,n,r,i){return Ht(t,e,n,r,i,!1)},t.$createElement=function(e,n,r,i){return Ht(t,e,n,r,i,!0)};var o=r&&r.data;xe(t,\"$attrs\",o&&o.attrs||e,null,!0),xe(t,\"$listeners\",n._parentListeners||e,null,!0)}(n),Qt(n,\"beforeCreate\"),function(e){var t=ut(e.$options.inject,e);t&&($e(!1),Object.keys(t).forEach(function(n){xe(e,n,t[n])}),$e(!0))}(n),hn(n),function(e){var t=e.$options.provide;t&&(e._provided=\"function\"==typeof t?t.call(e):t)}(n),Qt(n,\"created\"),n.$options.el&&n.$mount(n.$options.el)}}(Cn),function(e){var t={get:function(){return this._data}},n={get:function(){return this._props}};Object.defineProperty(e.prototype,\"$data\",t),Object.defineProperty(e.prototype,\"$props\",n),e.prototype.$set=ke,e.prototype.$delete=Ae,e.prototype.$watch=function(e,t,n){if(s(t))return bn(this,e,t,n);(n=n||{}).user=!0;var r=new pn(this,e,t,n);if(n.immediate){var i='callback for immediate watcher \"'+r.expression+'\"';le(),Be(t,this,[r.value],this,i),fe()}return function(){r.teardown()}}}(Cn),function(e){var t=/^hook:/;e.prototype.$on=function(e,n){var r=this;if(Array.isArray(e))for(var i=0,o=e.length;i1?k(t):t;for(var n=k(arguments,1),r='event handler for \"'+e+'\"',i=0,o=t.length;iparseInt(this.max)&&Sn(e,t[0],t,this._vnode),this.vnodeToCache=null}}},created:function(){this.cache=Object.create(null),this.keys=[]},destroyed:function(){for(var e in this.cache)Sn(this.cache,e,this.keys)},mounted:function(){var e=this;this.cacheVNode(),this.$watch(\"include\",function(t){On(e,function(e){return An(t,e)})}),this.$watch(\"exclude\",function(t){On(e,function(e){return!An(t,e)})})},updated:function(){this.cacheVNode()},render:function(){var e=this.$slots.default,t=zt(e),n=t&&t.componentOptions;if(n){var r=kn(n),i=this.include,o=this.exclude;if(i&&(!r||!An(i,r))||o&&r&&An(o,r))return t;var a=this.cache,s=this.keys,c=null==t.key?n.Ctor.cid+(n.tag?\"::\"+n.tag:\"\"):t.key;a[c]?(t.componentInstance=a[c].componentInstance,h(s,c),s.push(c)):(this.vnodeToCache=t,this.keyToCache=c),t.data.keepAlive=!0}return t||e&&e[0]}}};!function(e){var t={get:function(){return F}};Object.defineProperty(e,\"config\",t),e.util={warn:ae,extend:A,mergeOptions:De,defineReactive:xe},e.set=ke,e.delete=Ae,e.nextTick=Qe,e.observable=function(e){return Ce(e),e},e.options=Object.create(null),I.forEach(function(t){e.options[t+\"s\"]=Object.create(null)}),e.options._base=e,A(e.options.components,Nn),function(e){e.use=function(e){var t=this._installedPlugins||(this._installedPlugins=[]);if(t.indexOf(e)>-1)return this;var n=k(arguments,1);return n.unshift(this),\"function\"==typeof e.install?e.install.apply(e,n):\"function\"==typeof e&&e.apply(null,n),t.push(e),this}}(e),function(e){e.mixin=function(e){return this.options=De(this.options,e),this}}(e),xn(e),function(e){I.forEach(function(t){e[t]=function(e,n){return n?(\"component\"===t&&s(n)&&(n.name=n.name||e,n=this.options._base.extend(n)),\"directive\"===t&&\"function\"==typeof n&&(n={bind:n,update:n}),this.options[t+\"s\"][e]=n,n):this.options[t+\"s\"][e]}})}(e)}(Cn),Object.defineProperty(Cn.prototype,\"$isServer\",{get:te}),Object.defineProperty(Cn.prototype,\"$ssrContext\",{get:function(){return this.$vnode&&this.$vnode.ssrContext}}),Object.defineProperty(Cn,\"FunctionalRenderContext\",{value:Et}),Cn.version=\"2.6.14\";var En=p(\"style,class\"),jn=p(\"input,textarea,option,select,progress\"),Dn=function(e,t,n){return\"value\"===n&&jn(e)&&\"button\"!==t||\"selected\"===n&&\"option\"===e||\"checked\"===n&&\"input\"===e||\"muted\"===n&&\"video\"===e},Ln=p(\"contenteditable,draggable,spellcheck\"),In=p(\"events,caret,typing,plaintext-only\"),Mn=function(e,t){return Bn(t)||\"false\"===t?\"false\":\"contenteditable\"===e&&In(t)?t:\"true\"},Fn=p(\"allowfullscreen,async,autofocus,autoplay,checked,compact,controls,declare,default,defaultchecked,defaultmuted,defaultselected,defer,disabled,enabled,formnovalidate,hidden,indeterminate,inert,ismap,itemscope,loop,multiple,muted,nohref,noresize,noshade,novalidate,nowrap,open,pauseonexit,readonly,required,reversed,scoped,seamless,selected,sortable,truespeed,typemustmatch,visible\"),Pn=\"http://www.w3.org/1999/xlink\",Rn=function(e){return\":\"===e.charAt(5)&&\"xlink\"===e.slice(0,5)},Hn=function(e){return Rn(e)?e.slice(6,e.length):\"\"},Bn=function(e){return null==e||!1===e};function Un(e){for(var t=e.data,r=e,i=e;n(i.componentInstance);)(i=i.componentInstance._vnode)&&i.data&&(t=Vn(i.data,t));for(;n(r=r.parent);)r&&r.data&&(t=Vn(t,r.data));return function(e,t){if(n(e)||n(t))return zn(e,Kn(t));return\"\"}(t.staticClass,t.class)}function Vn(e,t){return{staticClass:zn(e.staticClass,t.staticClass),class:n(e.class)?[e.class,t.class]:t.class}}function zn(e,t){return e?t?e+\" \"+t:e:t||\"\"}function Kn(e){return Array.isArray(e)?function(e){for(var t,r=\"\",i=0,o=e.length;i-1?mr(e,t,n):Fn(t)?Bn(n)?e.removeAttribute(t):(n=\"allowfullscreen\"===t&&\"EMBED\"===e.tagName?\"true\":t,e.setAttribute(t,n)):Ln(t)?e.setAttribute(t,Mn(t,n)):Rn(t)?Bn(n)?e.removeAttributeNS(Pn,Hn(t)):e.setAttributeNS(Pn,t,n):mr(e,t,n)}function mr(e,t,n){if(Bn(n))e.removeAttribute(t);else{if(q&&!W&&\"TEXTAREA\"===e.tagName&&\"placeholder\"===t&&\"\"!==n&&!e.__ieph){var r=function(t){t.stopImmediatePropagation(),e.removeEventListener(\"input\",r)};e.addEventListener(\"input\",r),e.__ieph=!0}e.setAttribute(t,n)}}var yr={create:vr,update:vr};function gr(e,r){var i=r.elm,o=r.data,a=e.data;if(!(t(o.staticClass)&&t(o.class)&&(t(a)||t(a.staticClass)&&t(a.class)))){var s=Un(r),c=i._transitionClasses;n(c)&&(s=zn(s,Kn(c))),s!==i._prevClass&&(i.setAttribute(\"class\",s),i._prevClass=s)}}var _r,br,$r,wr,Cr,xr,kr={create:gr,update:gr},Ar=/[\\w).+\\-_$\\]]/;function Or(e){var t,n,r,i,o,a=!1,s=!1,c=!1,u=!1,l=0,f=0,p=0,d=0;for(r=0;r=0&&\" \"===(h=e.charAt(v));v--);h&&Ar.test(h)||(u=!0)}}else void 0===i?(d=r+1,i=e.slice(0,r).trim()):m();function m(){(o||(o=[])).push(e.slice(d,r).trim()),d=r+1}if(void 0===i?i=e.slice(0,r).trim():0!==d&&m(),o)for(r=0;r-1?{exp:e.slice(0,wr),key:'\"'+e.slice(wr+1)+'\"'}:{exp:e,key:null};br=e,wr=Cr=xr=0;for(;!zr();)Kr($r=Vr())?qr($r):91===$r&&Jr($r);return{exp:e.slice(0,Cr),key:e.slice(Cr+1,xr)}}(e);return null===n.key?e+\"=\"+t:\"$set(\"+n.exp+\", \"+n.key+\", \"+t+\")\"}function Vr(){return br.charCodeAt(++wr)}function zr(){return wr>=_r}function Kr(e){return 34===e||39===e}function Jr(e){var t=1;for(Cr=wr;!zr();)if(Kr(e=Vr()))qr(e);else if(91===e&&t++,93===e&&t--,0===t){xr=wr;break}}function qr(e){for(var t=e;!zr()&&(e=Vr())!==t;);}var Wr,Zr=\"__r\",Gr=\"__c\";function Xr(e,t,n){var r=Wr;return function i(){null!==t.apply(null,arguments)&&ei(e,i,n,r)}}var Yr=Ke&&!(X&&Number(X[1])<=53);function Qr(e,t,n,r){if(Yr){var i=sn,o=t;t=o._wrapper=function(e){if(e.target===e.currentTarget||e.timeStamp>=i||e.timeStamp<=0||e.target.ownerDocument!==document)return o.apply(this,arguments)}}Wr.addEventListener(e,t,Q?{capture:n,passive:r}:n)}function ei(e,t,n,r){(r||Wr).removeEventListener(e,t._wrapper||t,n)}function ti(e,r){if(!t(e.data.on)||!t(r.data.on)){var i=r.data.on||{},o=e.data.on||{};Wr=r.elm,function(e){if(n(e[Zr])){var t=q?\"change\":\"input\";e[t]=[].concat(e[Zr],e[t]||[]),delete e[Zr]}n(e[Gr])&&(e.change=[].concat(e[Gr],e.change||[]),delete e[Gr])}(i),it(i,o,Qr,ei,Xr,r.context),Wr=void 0}}var ni,ri={create:ti,update:ti};function ii(e,r){if(!t(e.data.domProps)||!t(r.data.domProps)){var i,o,a=r.elm,s=e.data.domProps||{},c=r.data.domProps||{};for(i in n(c.__ob__)&&(c=r.data.domProps=A({},c)),s)i in c||(a[i]=\"\");for(i in c){if(o=c[i],\"textContent\"===i||\"innerHTML\"===i){if(r.children&&(r.children.length=0),o===s[i])continue;1===a.childNodes.length&&a.removeChild(a.childNodes[0])}if(\"value\"===i&&\"PROGRESS\"!==a.tagName){a._value=o;var u=t(o)?\"\":String(o);oi(a,u)&&(a.value=u)}else if(\"innerHTML\"===i&&Wn(a.tagName)&&t(a.innerHTML)){(ni=ni||document.createElement(\"div\")).innerHTML=\"\"+o+\"\";for(var l=ni.firstChild;a.firstChild;)a.removeChild(a.firstChild);for(;l.firstChild;)a.appendChild(l.firstChild)}else if(o!==s[i])try{a[i]=o}catch(e){}}}}function oi(e,t){return!e.composing&&(\"OPTION\"===e.tagName||function(e,t){var n=!0;try{n=document.activeElement!==e}catch(e){}return n&&e.value!==t}(e,t)||function(e,t){var r=e.value,i=e._vModifiers;if(n(i)){if(i.number)return f(r)!==f(t);if(i.trim)return r.trim()!==t.trim()}return r!==t}(e,t))}var ai={create:ii,update:ii},si=g(function(e){var t={},n=/:(.+)/;return e.split(/;(?![^(]*\\))/g).forEach(function(e){if(e){var r=e.split(n);r.length>1&&(t[r[0].trim()]=r[1].trim())}}),t});function ci(e){var t=ui(e.style);return e.staticStyle?A(e.staticStyle,t):t}function ui(e){return Array.isArray(e)?O(e):\"string\"==typeof e?si(e):e}var li,fi=/^--/,pi=/\\s*!important$/,di=function(e,t,n){if(fi.test(t))e.style.setProperty(t,n);else if(pi.test(n))e.style.setProperty(C(t),n.replace(pi,\"\"),\"important\");else{var r=hi(t);if(Array.isArray(n))for(var i=0,o=n.length;i-1?t.split(gi).forEach(function(t){return e.classList.add(t)}):e.classList.add(t);else{var n=\" \"+(e.getAttribute(\"class\")||\"\")+\" \";n.indexOf(\" \"+t+\" \")<0&&e.setAttribute(\"class\",(n+t).trim())}}function bi(e,t){if(t&&(t=t.trim()))if(e.classList)t.indexOf(\" \")>-1?t.split(gi).forEach(function(t){return e.classList.remove(t)}):e.classList.remove(t),e.classList.length||e.removeAttribute(\"class\");else{for(var n=\" \"+(e.getAttribute(\"class\")||\"\")+\" \",r=\" \"+t+\" \";n.indexOf(r)>=0;)n=n.replace(r,\" \");(n=n.trim())?e.setAttribute(\"class\",n):e.removeAttribute(\"class\")}}function $i(e){if(e){if(\"object\"==typeof e){var t={};return!1!==e.css&&A(t,wi(e.name||\"v\")),A(t,e),t}return\"string\"==typeof e?wi(e):void 0}}var wi=g(function(e){return{enterClass:e+\"-enter\",enterToClass:e+\"-enter-to\",enterActiveClass:e+\"-enter-active\",leaveClass:e+\"-leave\",leaveToClass:e+\"-leave-to\",leaveActiveClass:e+\"-leave-active\"}}),Ci=V&&!W,xi=\"transition\",ki=\"animation\",Ai=\"transition\",Oi=\"transitionend\",Si=\"animation\",Ti=\"animationend\";Ci&&(void 0===window.ontransitionend&&void 0!==window.onwebkittransitionend&&(Ai=\"WebkitTransition\",Oi=\"webkitTransitionEnd\"),void 0===window.onanimationend&&void 0!==window.onwebkitanimationend&&(Si=\"WebkitAnimation\",Ti=\"webkitAnimationEnd\"));var Ni=V?window.requestAnimationFrame?window.requestAnimationFrame.bind(window):setTimeout:function(e){return e()};function Ei(e){Ni(function(){Ni(e)})}function ji(e,t){var n=e._transitionClasses||(e._transitionClasses=[]);n.indexOf(t)<0&&(n.push(t),_i(e,t))}function Di(e,t){e._transitionClasses&&h(e._transitionClasses,t),bi(e,t)}function Li(e,t,n){var r=Mi(e,t),i=r.type,o=r.timeout,a=r.propCount;if(!i)return n();var s=i===xi?Oi:Ti,c=0,u=function(){e.removeEventListener(s,l),n()},l=function(t){t.target===e&&++c>=a&&u()};setTimeout(function(){c0&&(n=xi,l=a,f=o.length):t===ki?u>0&&(n=ki,l=u,f=c.length):f=(n=(l=Math.max(a,u))>0?a>u?xi:ki:null)?n===xi?o.length:c.length:0,{type:n,timeout:l,propCount:f,hasTransform:n===xi&&Ii.test(r[Ai+\"Property\"])}}function Fi(e,t){for(;e.length1}function Vi(e,t){!0!==t.data.show&&Ri(t)}var zi=function(e){var o,a,s={},c=e.modules,u=e.nodeOps;for(o=0;ov?_(e,t(i[y+1])?null:i[y+1].elm,i,d,y,o):d>y&&$(r,p,v)}(p,h,y,o,l):n(y)?(n(e.text)&&u.setTextContent(p,\"\"),_(p,null,y,0,y.length-1,o)):n(h)?$(h,0,h.length-1):n(e.text)&&u.setTextContent(p,\"\"):e.text!==i.text&&u.setTextContent(p,i.text),n(v)&&n(d=v.hook)&&n(d=d.postpatch)&&d(e,i)}}}function k(e,t,i){if(r(i)&&n(e.parent))e.parent.data.pendingInsert=t;else for(var o=0;o-1,a.selected!==o&&(a.selected=o);else if(E(Zi(a),r))return void(e.selectedIndex!==s&&(e.selectedIndex=s));i||(e.selectedIndex=-1)}}function Wi(e,t){return t.every(function(t){return!E(t,e)})}function Zi(e){return\"_value\"in e?e._value:e.value}function Gi(e){e.target.composing=!0}function Xi(e){e.target.composing&&(e.target.composing=!1,Yi(e.target,\"input\"))}function Yi(e,t){var n=document.createEvent(\"HTMLEvents\");n.initEvent(t,!0,!0),e.dispatchEvent(n)}function Qi(e){return!e.componentInstance||e.data&&e.data.transition?e:Qi(e.componentInstance._vnode)}var eo={model:Ki,show:{bind:function(e,t,n){var r=t.value,i=(n=Qi(n)).data&&n.data.transition,o=e.__vOriginalDisplay=\"none\"===e.style.display?\"\":e.style.display;r&&i?(n.data.show=!0,Ri(n,function(){e.style.display=o})):e.style.display=r?o:\"none\"},update:function(e,t,n){var r=t.value;!r!=!t.oldValue&&((n=Qi(n)).data&&n.data.transition?(n.data.show=!0,r?Ri(n,function(){e.style.display=e.__vOriginalDisplay}):Hi(n,function(){e.style.display=\"none\"})):e.style.display=r?e.__vOriginalDisplay:\"none\")},unbind:function(e,t,n,r,i){i||(e.style.display=e.__vOriginalDisplay)}}},to={name:String,appear:Boolean,css:Boolean,mode:String,type:String,enterClass:String,leaveClass:String,enterToClass:String,leaveToClass:String,enterActiveClass:String,leaveActiveClass:String,appearClass:String,appearActiveClass:String,appearToClass:String,duration:[Number,String,Object]};function no(e){var t=e&&e.componentOptions;return t&&t.Ctor.options.abstract?no(zt(t.children)):e}function ro(e){var t={},n=e.$options;for(var r in n.propsData)t[r]=e[r];var i=n._parentListeners;for(var o in i)t[b(o)]=i[o];return t}function io(e,t){if(/\\d-keep-alive$/.test(t.tag))return e(\"keep-alive\",{props:t.componentOptions.propsData})}var oo=function(e){return e.tag||pt(e)},ao=function(e){return\"show\"===e.name},so={name:\"transition\",props:to,abstract:!0,render:function(e){var t=this,n=this.$slots.default;if(n&&(n=n.filter(oo)).length){var r=this.mode,o=n[0];if(function(e){for(;e=e.parent;)if(e.data.transition)return!0}(this.$vnode))return o;var a=no(o);if(!a)return o;if(this._leaving)return io(e,o);var s=\"__transition-\"+this._uid+\"-\";a.key=null==a.key?a.isComment?s+\"comment\":s+a.tag:i(a.key)?0===String(a.key).indexOf(s)?a.key:s+a.key:a.key;var c=(a.data||(a.data={})).transition=ro(this),u=this._vnode,l=no(u);if(a.data.directives&&a.data.directives.some(ao)&&(a.data.show=!0),l&&l.data&&!function(e,t){return t.key===e.key&&t.tag===e.tag}(a,l)&&!pt(l)&&(!l.componentInstance||!l.componentInstance._vnode.isComment)){var f=l.data.transition=A({},c);if(\"out-in\"===r)return this._leaving=!0,ot(f,\"afterLeave\",function(){t._leaving=!1,t.$forceUpdate()}),io(e,o);if(\"in-out\"===r){if(pt(a))return u;var p,d=function(){p()};ot(c,\"afterEnter\",d),ot(c,\"enterCancelled\",d),ot(f,\"delayLeave\",function(e){p=e})}}return o}}},co=A({tag:String,moveClass:String},to);function uo(e){e.elm._moveCb&&e.elm._moveCb(),e.elm._enterCb&&e.elm._enterCb()}function lo(e){e.data.newPos=e.elm.getBoundingClientRect()}function fo(e){var t=e.data.pos,n=e.data.newPos,r=t.left-n.left,i=t.top-n.top;if(r||i){e.data.moved=!0;var o=e.elm.style;o.transform=o.WebkitTransform=\"translate(\"+r+\"px,\"+i+\"px)\",o.transitionDuration=\"0s\"}}delete co.mode;var po={Transition:so,TransitionGroup:{props:co,beforeMount:function(){var e=this,t=this._update;this._update=function(n,r){var i=Gt(e);e.__patch__(e._vnode,e.kept,!1,!0),e._vnode=e.kept,i(),t.call(e,n,r)}},render:function(e){for(var t=this.tag||this.$vnode.data.tag||\"span\",n=Object.create(null),r=this.prevChildren=this.children,i=this.$slots.default||[],o=this.children=[],a=ro(this),s=0;s-1?Xn[e]=t.constructor===window.HTMLUnknownElement||t.constructor===window.HTMLElement:Xn[e]=/HTMLUnknownElement/.test(t.toString())},A(Cn.options.directives,eo),A(Cn.options.components,po),Cn.prototype.__patch__=V?zi:S,Cn.prototype.$mount=function(e,t){return function(e,t,n){var r;return e.$el=t,e.$options.render||(e.$options.render=ve),Qt(e,\"beforeMount\"),r=function(){e._update(e._render(),n)},new pn(e,r,S,{before:function(){e._isMounted&&!e._isDestroyed&&Qt(e,\"beforeUpdate\")}},!0),n=!1,null==e.$vnode&&(e._isMounted=!0,Qt(e,\"mounted\")),e}(this,e=e&&V?Qn(e):void 0,t)},V&&setTimeout(function(){F.devtools&&ne&&ne.emit(\"init\",Cn)},0);var vo=/\\{\\{((?:.|\\r?\\n)+?)\\}\\}/g,ho=/[-.*+?^${}()|[\\]\\/\\\\]/g,mo=g(function(e){var t=e[0].replace(ho,\"\\\\$&\"),n=e[1].replace(ho,\"\\\\$&\");return new RegExp(t+\"((?:.|\\\\n)+?)\"+n,\"g\")});var yo={staticKeys:[\"staticClass\"],transformNode:function(e,t){t.warn;var n=Pr(e,\"class\");n&&(e.staticClass=JSON.stringify(n));var r=Fr(e,\"class\",!1);r&&(e.classBinding=r)},genData:function(e){var t=\"\";return e.staticClass&&(t+=\"staticClass:\"+e.staticClass+\",\"),e.classBinding&&(t+=\"class:\"+e.classBinding+\",\"),t}};var go,_o={staticKeys:[\"staticStyle\"],transformNode:function(e,t){t.warn;var n=Pr(e,\"style\");n&&(e.staticStyle=JSON.stringify(si(n)));var r=Fr(e,\"style\",!1);r&&(e.styleBinding=r)},genData:function(e){var t=\"\";return e.staticStyle&&(t+=\"staticStyle:\"+e.staticStyle+\",\"),e.styleBinding&&(t+=\"style:(\"+e.styleBinding+\"),\"),t}},bo=function(e){return(go=go||document.createElement(\"div\")).innerHTML=e,go.textContent},$o=p(\"area,base,br,col,embed,frame,hr,img,input,isindex,keygen,link,meta,param,source,track,wbr\"),wo=p(\"colgroup,dd,dt,li,options,p,td,tfoot,th,thead,tr,source\"),Co=p(\"address,article,aside,base,blockquote,body,caption,col,colgroup,dd,details,dialog,div,dl,dt,fieldset,figcaption,figure,footer,form,h1,h2,h3,h4,h5,h6,head,header,hgroup,hr,html,legend,li,menuitem,meta,optgroup,option,param,rp,rt,source,style,summary,tbody,td,tfoot,th,thead,title,tr,track\"),xo=/^\\s*([^\\s\"'<>\\/=]+)(?:\\s*(=)\\s*(?:\"([^\"]*)\"+|'([^']*)'+|([^\\s\"'=<>`]+)))?/,ko=/^\\s*((?:v-[\\w-]+:|@|:|#)\\[[^=]+?\\][^\\s\"'<>\\/=]*)(?:\\s*(=)\\s*(?:\"([^\"]*)\"+|'([^']*)'+|([^\\s\"'=<>`]+)))?/,Ao=\"[a-zA-Z_][\\\\-\\\\.0-9_a-zA-Z\"+P.source+\"]*\",Oo=\"((?:\"+Ao+\"\\\\:)?\"+Ao+\")\",So=new RegExp(\"^<\"+Oo),To=/^\\s*(\\/?)>/,No=new RegExp(\"^<\\\\/\"+Oo+\"[^>]*>\"),Eo=/^]+>/i,jo=/^\",\""\":'\"',\"&\":\"&\",\" \":\"\\n\",\" \":\"\\t\",\"'\":\"'\"},Fo=/&(?:lt|gt|quot|amp|#39);/g,Po=/&(?:lt|gt|quot|amp|#39|#10|#9);/g,Ro=p(\"pre,textarea\",!0),Ho=function(e,t){return e&&Ro(e)&&\"\\n\"===t[0]};function Bo(e,t){var n=t?Po:Fo;return e.replace(n,function(e){return Mo[e]})}var Uo,Vo,zo,Ko,Jo,qo,Wo,Zo,Go=/^@|^v-on:/,Xo=/^v-|^@|^:|^#/,Yo=/([\\s\\S]*?)\\s+(?:in|of)\\s+([\\s\\S]*)/,Qo=/,([^,\\}\\]]*)(?:,([^,\\}\\]]*))?$/,ea=/^\\(|\\)$/g,ta=/^\\[.*\\]$/,na=/:(.*)$/,ra=/^:|^\\.|^v-bind:/,ia=/\\.[^.\\]]+(?=[^\\]]*$)/g,oa=/^v-slot(:|$)|^#/,aa=/[\\r\\n]/,sa=/[ \\f\\t\\r\\n]+/g,ca=g(bo),ua=\"_empty_\";function la(e,t,n){return{type:1,tag:e,attrsList:t,attrsMap:ya(t),rawAttrsMap:{},parent:n,children:[]}}function fa(e,t){Uo=t.warn||Tr,qo=t.isPreTag||T,Wo=t.mustUseProp||T,Zo=t.getTagNamespace||T;t.isReservedTag;zo=Nr(t.modules,\"transformNode\"),Ko=Nr(t.modules,\"preTransformNode\"),Jo=Nr(t.modules,\"postTransformNode\"),Vo=t.delimiters;var n,r,i=[],o=!1!==t.preserveWhitespace,a=t.whitespace,s=!1,c=!1;function u(e){if(l(e),s||e.processed||(e=pa(e,t)),i.length||e===n||n.if&&(e.elseif||e.else)&&va(n,{exp:e.elseif,block:e}),r&&!e.forbidden)if(e.elseif||e.else)a=e,(u=function(e){var t=e.length;for(;t--;){if(1===e[t].type)return e[t];e.pop()}}(r.children))&&u.if&&va(u,{exp:a.elseif,block:a});else{if(e.slotScope){var o=e.slotTarget||'\"default\"';(r.scopedSlots||(r.scopedSlots={}))[o]=e}r.children.push(e),e.parent=r}var a,u;e.children=e.children.filter(function(e){return!e.slotScope}),l(e),e.pre&&(s=!1),qo(e.tag)&&(c=!1);for(var f=0;f]*>)\",\"i\")),p=e.replace(f,function(e,n,r){return u=r.length,Lo(l)||\"noscript\"===l||(n=n.replace(//g,\"$1\").replace(//g,\"$1\")),Ho(l,n)&&(n=n.slice(1)),t.chars&&t.chars(n),\"\"});c+=e.length-p.length,e=p,A(l,c-u,c)}else{var d=e.indexOf(\"<\");if(0===d){if(jo.test(e)){var v=e.indexOf(\"--\\x3e\");if(v>=0){t.shouldKeepComment&&t.comment(e.substring(4,v),c,c+v+3),C(v+3);continue}}if(Do.test(e)){var h=e.indexOf(\"]>\");if(h>=0){C(h+2);continue}}var m=e.match(Eo);if(m){C(m[0].length);continue}var y=e.match(No);if(y){var g=c;C(y[0].length),A(y[1],g,c);continue}var _=x();if(_){k(_),Ho(_.tagName,e)&&C(1);continue}}var b=void 0,$=void 0,w=void 0;if(d>=0){for($=e.slice(d);!(No.test($)||So.test($)||jo.test($)||Do.test($)||(w=$.indexOf(\"<\",1))<0);)d+=w,$=e.slice(d);b=e.substring(0,d)}d<0&&(b=e),b&&C(b.length),t.chars&&b&&t.chars(b,c-b.length,c)}if(e===n){t.chars&&t.chars(e);break}}function C(t){c+=t,e=e.substring(t)}function x(){var t=e.match(So);if(t){var n,r,i={tagName:t[1],attrs:[],start:c};for(C(t[0].length);!(n=e.match(To))&&(r=e.match(ko)||e.match(xo));)r.start=c,C(r[0].length),r.end=c,i.attrs.push(r);if(n)return i.unarySlash=n[1],C(n[0].length),i.end=c,i}}function k(e){var n=e.tagName,c=e.unarySlash;o&&(\"p\"===r&&Co(n)&&A(r),s(n)&&r===n&&A(n));for(var u=a(n)||!!c,l=e.attrs.length,f=new Array(l),p=0;p=0&&i[a].lowerCasedTag!==s;a--);else a=0;if(a>=0){for(var u=i.length-1;u>=a;u--)t.end&&t.end(i[u].tag,n,o);i.length=a,r=a&&i[a-1].tag}else\"br\"===s?t.start&&t.start(e,[],!0,n,o):\"p\"===s&&(t.start&&t.start(e,[],!1,n,o),t.end&&t.end(e,n,o))}A()}(e,{warn:Uo,expectHTML:t.expectHTML,isUnaryTag:t.isUnaryTag,canBeLeftOpenTag:t.canBeLeftOpenTag,shouldDecodeNewlines:t.shouldDecodeNewlines,shouldDecodeNewlinesForHref:t.shouldDecodeNewlinesForHref,shouldKeepComment:t.comments,outputSourceRange:t.outputSourceRange,start:function(e,o,a,l,f){var p=r&&r.ns||Zo(e);q&&\"svg\"===p&&(o=function(e){for(var t=[],n=0;nc&&(s.push(o=e.slice(c,i)),a.push(JSON.stringify(o)));var u=Or(r[1].trim());a.push(\"_s(\"+u+\")\"),s.push({\"@binding\":u}),c=i+r[0].length}return c-1\"+(\"true\"===o?\":(\"+t+\")\":\":_q(\"+t+\",\"+o+\")\")),Mr(e,\"change\",\"var $$a=\"+t+\",$$el=$event.target,$$c=$$el.checked?(\"+o+\"):(\"+a+\");if(Array.isArray($$a)){var $$v=\"+(r?\"_n(\"+i+\")\":i)+\",$$i=_i($$a,$$v);if($$el.checked){$$i<0&&(\"+Ur(t,\"$$a.concat([$$v])\")+\")}else{$$i>-1&&(\"+Ur(t,\"$$a.slice(0,$$i).concat($$a.slice($$i+1))\")+\")}}else{\"+Ur(t,\"$$c\")+\"}\",null,!0)}(e,r,i);else if(\"input\"===o&&\"radio\"===a)!function(e,t,n){var r=n&&n.number,i=Fr(e,\"value\")||\"null\";Er(e,\"checked\",\"_q(\"+t+\",\"+(i=r?\"_n(\"+i+\")\":i)+\")\"),Mr(e,\"change\",Ur(t,i),null,!0)}(e,r,i);else if(\"input\"===o||\"textarea\"===o)!function(e,t,n){var r=e.attrsMap.type,i=n||{},o=i.lazy,a=i.number,s=i.trim,c=!o&&\"range\"!==r,u=o?\"change\":\"range\"===r?Zr:\"input\",l=\"$event.target.value\";s&&(l=\"$event.target.value.trim()\"),a&&(l=\"_n(\"+l+\")\");var f=Ur(t,l);c&&(f=\"if($event.target.composing)return;\"+f),Er(e,\"value\",\"(\"+t+\")\"),Mr(e,u,f,null,!0),(s||a)&&Mr(e,\"blur\",\"$forceUpdate()\")}(e,r,i);else if(!F.isReservedTag(o))return Br(e,r,i),!1;return!0},text:function(e,t){t.value&&Er(e,\"textContent\",\"_s(\"+t.value+\")\",t)},html:function(e,t){t.value&&Er(e,\"innerHTML\",\"_s(\"+t.value+\")\",t)}},isPreTag:function(e){return\"pre\"===e},isUnaryTag:$o,mustUseProp:Dn,canBeLeftOpenTag:wo,isReservedTag:Zn,getTagNamespace:Gn,staticKeys:function(e){return e.reduce(function(e,t){return e.concat(t.staticKeys||[])},[]).join(\",\")}($a)},ka=g(function(e){return p(\"type,tag,attrsList,attrsMap,plain,parent,children,attrs,start,end,rawAttrsMap\"+(e?\",\"+e:\"\"))});function Aa(e,t){e&&(wa=ka(t.staticKeys||\"\"),Ca=t.isReservedTag||T,function e(t){t.static=function(e){if(2===e.type)return!1;if(3===e.type)return!0;return!(!e.pre&&(e.hasBindings||e.if||e.for||d(e.tag)||!Ca(e.tag)||function(e){for(;e.parent;){if(\"template\"!==(e=e.parent).tag)return!1;if(e.for)return!0}return!1}(e)||!Object.keys(e).every(wa)))}(t);if(1===t.type){if(!Ca(t.tag)&&\"slot\"!==t.tag&&null==t.attrsMap[\"inline-template\"])return;for(var n=0,r=t.children.length;n|^function(?:\\s+[\\w$]+)?\\s*\\(/,Sa=/\\([^)]*?\\);*$/,Ta=/^[A-Za-z_$][\\w$]*(?:\\.[A-Za-z_$][\\w$]*|\\['[^']*?']|\\[\"[^\"]*?\"]|\\[\\d+]|\\[[A-Za-z_$][\\w$]*])*$/,Na={esc:27,tab:9,enter:13,space:32,up:38,left:37,right:39,down:40,delete:[8,46]},Ea={esc:[\"Esc\",\"Escape\"],tab:\"Tab\",enter:\"Enter\",space:[\" \",\"Spacebar\"],up:[\"Up\",\"ArrowUp\"],left:[\"Left\",\"ArrowLeft\"],right:[\"Right\",\"ArrowRight\"],down:[\"Down\",\"ArrowDown\"],delete:[\"Backspace\",\"Delete\",\"Del\"]},ja=function(e){return\"if(\"+e+\")return null;\"},Da={stop:\"$event.stopPropagation();\",prevent:\"$event.preventDefault();\",self:ja(\"$event.target !== $event.currentTarget\"),ctrl:ja(\"!$event.ctrlKey\"),shift:ja(\"!$event.shiftKey\"),alt:ja(\"!$event.altKey\"),meta:ja(\"!$event.metaKey\"),left:ja(\"'button' in $event && $event.button !== 0\"),middle:ja(\"'button' in $event && $event.button !== 1\"),right:ja(\"'button' in $event && $event.button !== 2\")};function La(e,t){var n=t?\"nativeOn:\":\"on:\",r=\"\",i=\"\";for(var o in e){var a=Ia(e[o]);e[o]&&e[o].dynamic?i+=o+\",\"+a+\",\":r+='\"'+o+'\":'+a+\",\"}return r=\"{\"+r.slice(0,-1)+\"}\",i?n+\"_d(\"+r+\",[\"+i.slice(0,-1)+\"])\":n+r}function Ia(e){if(!e)return\"function(){}\";if(Array.isArray(e))return\"[\"+e.map(function(e){return Ia(e)}).join(\",\")+\"]\";var t=Ta.test(e.value),n=Oa.test(e.value),r=Ta.test(e.value.replace(Sa,\"\"));if(e.modifiers){var i=\"\",o=\"\",a=[];for(var s in e.modifiers)if(Da[s])o+=Da[s],Na[s]&&a.push(s);else if(\"exact\"===s){var c=e.modifiers;o+=ja([\"ctrl\",\"shift\",\"alt\",\"meta\"].filter(function(e){return!c[e]}).map(function(e){return\"$event.\"+e+\"Key\"}).join(\"||\"))}else a.push(s);return a.length&&(i+=function(e){return\"if(!$event.type.indexOf('key')&&\"+e.map(Ma).join(\"&&\")+\")return null;\"}(a)),o&&(i+=o),\"function($event){\"+i+(t?\"return \"+e.value+\".apply(null, arguments)\":n?\"return (\"+e.value+\").apply(null, arguments)\":r?\"return \"+e.value:e.value)+\"}\"}return t||n?e.value:\"function($event){\"+(r?\"return \"+e.value:e.value)+\"}\"}function Ma(e){var t=parseInt(e,10);if(t)return\"$event.keyCode!==\"+t;var n=Na[e],r=Ea[e];return\"_k($event.keyCode,\"+JSON.stringify(e)+\",\"+JSON.stringify(n)+\",$event.key,\"+JSON.stringify(r)+\")\"}var Fa={on:function(e,t){e.wrapListeners=function(e){return\"_g(\"+e+\",\"+t.value+\")\"}},bind:function(e,t){e.wrapData=function(n){return\"_b(\"+n+\",'\"+e.tag+\"',\"+t.value+\",\"+(t.modifiers&&t.modifiers.prop?\"true\":\"false\")+(t.modifiers&&t.modifiers.sync?\",true\":\"\")+\")\"}},cloak:S},Pa=function(e){this.options=e,this.warn=e.warn||Tr,this.transforms=Nr(e.modules,\"transformCode\"),this.dataGenFns=Nr(e.modules,\"genData\"),this.directives=A(A({},Fa),e.directives);var t=e.isReservedTag||T;this.maybeComponent=function(e){return!!e.component||!t(e.tag)},this.onceId=0,this.staticRenderFns=[],this.pre=!1};function Ra(e,t){var n=new Pa(t);return{render:\"with(this){return \"+(e?\"script\"===e.tag?\"null\":Ha(e,n):'_c(\"div\")')+\"}\",staticRenderFns:n.staticRenderFns}}function Ha(e,t){if(e.parent&&(e.pre=e.pre||e.parent.pre),e.staticRoot&&!e.staticProcessed)return Ba(e,t);if(e.once&&!e.onceProcessed)return Ua(e,t);if(e.for&&!e.forProcessed)return za(e,t);if(e.if&&!e.ifProcessed)return Va(e,t);if(\"template\"!==e.tag||e.slotTarget||t.pre){if(\"slot\"===e.tag)return function(e,t){var n=e.slotName||'\"default\"',r=Wa(e,t),i=\"_t(\"+n+(r?\",function(){return \"+r+\"}\":\"\"),o=e.attrs||e.dynamicAttrs?Xa((e.attrs||[]).concat(e.dynamicAttrs||[]).map(function(e){return{name:b(e.name),value:e.value,dynamic:e.dynamic}})):null,a=e.attrsMap[\"v-bind\"];!o&&!a||r||(i+=\",null\");o&&(i+=\",\"+o);a&&(i+=(o?\"\":\",null\")+\",\"+a);return i+\")\"}(e,t);var n;if(e.component)n=function(e,t,n){var r=t.inlineTemplate?null:Wa(t,n,!0);return\"_c(\"+e+\",\"+Ka(t,n)+(r?\",\"+r:\"\")+\")\"}(e.component,e,t);else{var r;(!e.plain||e.pre&&t.maybeComponent(e))&&(r=Ka(e,t));var i=e.inlineTemplate?null:Wa(e,t,!0);n=\"_c('\"+e.tag+\"'\"+(r?\",\"+r:\"\")+(i?\",\"+i:\"\")+\")\"}for(var o=0;o>>0}(a):\"\")+\")\"}(e,e.scopedSlots,t)+\",\"),e.model&&(n+=\"model:{value:\"+e.model.value+\",callback:\"+e.model.callback+\",expression:\"+e.model.expression+\"},\"),e.inlineTemplate){var o=function(e,t){var n=e.children[0];if(n&&1===n.type){var r=Ra(n,t.options);return\"inlineTemplate:{render:function(){\"+r.render+\"},staticRenderFns:[\"+r.staticRenderFns.map(function(e){return\"function(){\"+e+\"}\"}).join(\",\")+\"]}\"}}(e,t);o&&(n+=o+\",\")}return n=n.replace(/,$/,\"\")+\"}\",e.dynamicAttrs&&(n=\"_b(\"+n+',\"'+e.tag+'\",'+Xa(e.dynamicAttrs)+\")\"),e.wrapData&&(n=e.wrapData(n)),e.wrapListeners&&(n=e.wrapListeners(n)),n}function Ja(e){return 1===e.type&&(\"slot\"===e.tag||e.children.some(Ja))}function qa(e,t){var n=e.attrsMap[\"slot-scope\"];if(e.if&&!e.ifProcessed&&!n)return Va(e,t,qa,\"null\");if(e.for&&!e.forProcessed)return za(e,t,qa);var r=e.slotScope===ua?\"\":String(e.slotScope),i=\"function(\"+r+\"){return \"+(\"template\"===e.tag?e.if&&n?\"(\"+e.if+\")?\"+(Wa(e,t)||\"undefined\")+\":undefined\":Wa(e,t)||\"undefined\":Ha(e,t))+\"}\",o=r?\"\":\",proxy:true\";return\"{key:\"+(e.slotTarget||'\"default\"')+\",fn:\"+i+o+\"}\"}function Wa(e,t,n,r,i){var o=e.children;if(o.length){var a=o[0];if(1===o.length&&a.for&&\"template\"!==a.tag&&\"slot\"!==a.tag){var s=n?t.maybeComponent(a)?\",1\":\",0\":\"\";return\"\"+(r||Ha)(a,t)+s}var c=n?function(e,t){for(var n=0,r=0;r':'
',ns.innerHTML.indexOf(\" \")>0}var as=!!V&&os(!1),ss=!!V&&os(!0),cs=g(function(e){var t=Qn(e);return t&&t.innerHTML}),us=Cn.prototype.$mount;return Cn.prototype.$mount=function(e,t){if((e=e&&Qn(e))===document.body||e===document.documentElement)return this;var n=this.$options;if(!n.render){var r=n.template;if(r)if(\"string\"==typeof r)\"#\"===r.charAt(0)&&(r=cs(r));else{if(!r.nodeType)return this;r=r.innerHTML}else e&&(r=function(e){if(e.outerHTML)return e.outerHTML;var t=document.createElement(\"div\");return t.appendChild(e.cloneNode(!0)),t.innerHTML}(e));if(r){var i=is(r,{outputSourceRange:!1,shouldDecodeNewlines:as,shouldDecodeNewlinesForHref:ss,delimiters:n.delimiters,comments:n.comments},this),o=i.render,a=i.staticRenderFns;n.render=o,n.staticRenderFns=a}}return us.call(this,e,t)},Cn.compile=is,Cn});","var scope = (typeof global !== \"undefined\" && global) ||\n (typeof self !== \"undefined\" && self) ||\n window;\nvar apply = Function.prototype.apply;\n\n// DOM APIs, for completeness\n\nexports.setTimeout = function() {\n return new Timeout(apply.call(setTimeout, scope, arguments), clearTimeout);\n};\nexports.setInterval = function() {\n return new Timeout(apply.call(setInterval, scope, arguments), clearInterval);\n};\nexports.clearTimeout =\nexports.clearInterval = function(timeout) {\n if (timeout) {\n timeout.close();\n }\n};\n\nfunction Timeout(id, clearFn) {\n this._id = id;\n this._clearFn = clearFn;\n}\nTimeout.prototype.unref = Timeout.prototype.ref = function() {};\nTimeout.prototype.close = function() {\n this._clearFn.call(scope, this._id);\n};\n\n// Does not start the time, just sets up the members needed.\nexports.enroll = function(item, msecs) {\n clearTimeout(item._idleTimeoutId);\n item._idleTimeout = msecs;\n};\n\nexports.unenroll = function(item) {\n clearTimeout(item._idleTimeoutId);\n item._idleTimeout = -1;\n};\n\nexports._unrefActive = exports.active = function(item) {\n clearTimeout(item._idleTimeoutId);\n\n var msecs = item._idleTimeout;\n if (msecs >= 0) {\n item._idleTimeoutId = setTimeout(function onTimeout() {\n if (item._onTimeout)\n item._onTimeout();\n }, msecs);\n }\n};\n\n// setimmediate attaches itself to the global object\nrequire(\"setimmediate\");\n// On some exotic environments, it's not clear which object `setimmediate` was\n// able to install onto. Search each possibility in the same order as the\n// `setimmediate` library.\nexports.setImmediate = (typeof self !== \"undefined\" && self.setImmediate) ||\n (typeof global !== \"undefined\" && global.setImmediate) ||\n (this && this.setImmediate);\nexports.clearImmediate = (typeof self !== \"undefined\" && self.clearImmediate) ||\n (typeof global !== \"undefined\" && global.clearImmediate) ||\n (this && this.clearImmediate);\n","(function (global, undefined) {\n \"use strict\";\n\n if (global.setImmediate) {\n return;\n }\n\n var nextHandle = 1; // Spec says greater than zero\n var tasksByHandle = {};\n var currentlyRunningATask = false;\n var doc = global.document;\n var registerImmediate;\n\n function setImmediate(callback) {\n // Callback can either be a function or a string\n if (typeof callback !== \"function\") {\n callback = new Function(\"\" + callback);\n }\n // Copy function arguments\n var args = new Array(arguments.length - 1);\n for (var i = 0; i < args.length; i++) {\n args[i] = arguments[i + 1];\n }\n // Store and register the task\n var task = { callback: callback, args: args };\n tasksByHandle[nextHandle] = task;\n registerImmediate(nextHandle);\n return nextHandle++;\n }\n\n function clearImmediate(handle) {\n delete tasksByHandle[handle];\n }\n\n function run(task) {\n var callback = task.callback;\n var args = task.args;\n switch (args.length) {\n case 0:\n callback();\n break;\n case 1:\n callback(args[0]);\n break;\n case 2:\n callback(args[0], args[1]);\n break;\n case 3:\n callback(args[0], args[1], args[2]);\n break;\n default:\n callback.apply(undefined, args);\n break;\n }\n }\n\n function runIfPresent(handle) {\n // From the spec: \"Wait until any invocations of this algorithm started before this one have completed.\"\n // So if we're currently running a task, we'll need to delay this invocation.\n if (currentlyRunningATask) {\n // Delay by doing a setTimeout. setImmediate was tried instead, but in Firefox 7 it generated a\n // \"too much recursion\" error.\n setTimeout(runIfPresent, 0, handle);\n } else {\n var task = tasksByHandle[handle];\n if (task) {\n currentlyRunningATask = true;\n try {\n run(task);\n } finally {\n clearImmediate(handle);\n currentlyRunningATask = false;\n }\n }\n }\n }\n\n function installNextTickImplementation() {\n registerImmediate = function(handle) {\n process.nextTick(function () { runIfPresent(handle); });\n };\n }\n\n function canUsePostMessage() {\n // The test against `importScripts` prevents this implementation from being installed inside a web worker,\n // where `global.postMessage` means something completely different and can't be used for this purpose.\n if (global.postMessage && !global.importScripts) {\n var postMessageIsAsynchronous = true;\n var oldOnMessage = global.onmessage;\n global.onmessage = function() {\n postMessageIsAsynchronous = false;\n };\n global.postMessage(\"\", \"*\");\n global.onmessage = oldOnMessage;\n return postMessageIsAsynchronous;\n }\n }\n\n function installPostMessageImplementation() {\n // Installs an event handler on `global` for the `message` event: see\n // * https://developer.mozilla.org/en/DOM/window.postMessage\n // * http://www.whatwg.org/specs/web-apps/current-work/multipage/comms.html#crossDocumentMessages\n\n var messagePrefix = \"setImmediate$\" + Math.random() + \"$\";\n var onGlobalMessage = function(event) {\n if (event.source === global &&\n typeof event.data === \"string\" &&\n event.data.indexOf(messagePrefix) === 0) {\n runIfPresent(+event.data.slice(messagePrefix.length));\n }\n };\n\n if (global.addEventListener) {\n global.addEventListener(\"message\", onGlobalMessage, false);\n } else {\n global.attachEvent(\"onmessage\", onGlobalMessage);\n }\n\n registerImmediate = function(handle) {\n global.postMessage(messagePrefix + handle, \"*\");\n };\n }\n\n function installMessageChannelImplementation() {\n var channel = new MessageChannel();\n channel.port1.onmessage = function(event) {\n var handle = event.data;\n runIfPresent(handle);\n };\n\n registerImmediate = function(handle) {\n channel.port2.postMessage(handle);\n };\n }\n\n function installReadyStateChangeImplementation() {\n var html = doc.documentElement;\n registerImmediate = function(handle) {\n // Create a \r\n\r\n\r\n","import { render, staticRenderFns } from \"./vue-json-editor.vue?vue&type=template&id=551a97e0&scoped=true&\"\nimport script from \"./vue-json-editor.vue?vue&type=script&lang=js&\"\nexport * from \"./vue-json-editor.vue?vue&type=script&lang=js&\"\nimport style0 from \"./vue-json-editor.vue?vue&type=style&index=0&id=551a97e0&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"551a97e0\",\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/Users/rohanlikhite/Git/Pantry/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('551a97e0')) {\n api.createRecord('551a97e0', component.options)\n } else {\n api.reload('551a97e0', component.options)\n }\n module.hot.accept(\"./vue-json-editor.vue?vue&type=template&id=551a97e0&scoped=true&\", function () {\n api.rerender('551a97e0', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"node_modules/vue-json-editor/vue-json-editor.vue\"\nexport default component.exports","/* globals __VUE_SSR_CONTEXT__ */\n\n// IMPORTANT: Do NOT use ES2015 features in this file (except for modules).\n// This module is a runtime utility for cleaner component module output and will\n// be included in the final webpack user bundle.\n\nexport default function normalizeComponent (\n scriptExports,\n render,\n staticRenderFns,\n functionalTemplate,\n injectStyles,\n scopeId,\n moduleIdentifier, /* server only */\n shadowMode /* vue-cli only */\n) {\n // Vue.extend constructor export interop\n var options = typeof scriptExports === 'function'\n ? scriptExports.options\n : scriptExports\n\n // render functions\n if (render) {\n options.render = render\n options.staticRenderFns = staticRenderFns\n options._compiled = true\n }\n\n // functional template\n if (functionalTemplate) {\n options.functional = true\n }\n\n // scopedId\n if (scopeId) {\n options._scopeId = 'data-v-' + scopeId\n }\n\n var hook\n if (moduleIdentifier) { // server build\n hook = function (context) {\n // 2.3 injection\n context =\n context || // cached call\n (this.$vnode && this.$vnode.ssrContext) || // stateful\n (this.parent && this.parent.$vnode && this.parent.$vnode.ssrContext) // functional\n // 2.2 with runInNewContext: true\n if (!context && typeof __VUE_SSR_CONTEXT__ !== 'undefined') {\n context = __VUE_SSR_CONTEXT__\n }\n // inject component styles\n if (injectStyles) {\n injectStyles.call(this, context)\n }\n // register component module identifier for async chunk inferrence\n if (context && context._registeredComponents) {\n context._registeredComponents.add(moduleIdentifier)\n }\n }\n // used by ssr in case component is cached and beforeCreate\n // never gets called\n options._ssrRegister = hook\n } else if (injectStyles) {\n hook = shadowMode\n ? function () {\n injectStyles.call(\n this,\n (options.functional ? this.parent : this).$root.$options.shadowRoot\n )\n }\n : injectStyles\n }\n\n if (hook) {\n if (options.functional) {\n // for template-only hot-reload because in that case the render fn doesn't\n // go through the normalizer\n options._injectStyles = hook\n // register for functional component in vue file\n var originalRender = options.render\n options.render = function renderWithStyleInjection (h, context) {\n hook.call(context)\n return originalRender(h, context)\n }\n } else {\n // inject component registration as beforeCreate hook\n var existing = options.beforeCreate\n options.beforeCreate = existing\n ? [].concat(existing, hook)\n : [hook]\n }\n }\n\n return {\n exports: scriptExports,\n options: options\n }\n}\n","// shim for using process in browser\nvar process = module.exports = {};\n\n// cached from whatever global is present so that test runners that stub it\n// don't break things. But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals. It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout () {\n throw new Error('clearTimeout has not been defined');\n}\n(function () {\n try {\n if (typeof setTimeout === 'function') {\n cachedSetTimeout = setTimeout;\n } else {\n cachedSetTimeout = defaultSetTimout;\n }\n } catch (e) {\n cachedSetTimeout = defaultSetTimout;\n }\n try {\n if (typeof clearTimeout === 'function') {\n cachedClearTimeout = clearTimeout;\n } else {\n cachedClearTimeout = defaultClearTimeout;\n }\n } catch (e) {\n cachedClearTimeout = defaultClearTimeout;\n }\n} ())\nfunction runTimeout(fun) {\n if (cachedSetTimeout === setTimeout) {\n //normal enviroments in sane situations\n return setTimeout(fun, 0);\n }\n // if setTimeout wasn't available but was latter defined\n if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n cachedSetTimeout = setTimeout;\n return setTimeout(fun, 0);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedSetTimeout(fun, 0);\n } catch(e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedSetTimeout.call(null, fun, 0);\n } catch(e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n return cachedSetTimeout.call(this, fun, 0);\n }\n }\n\n\n}\nfunction runClearTimeout(marker) {\n if (cachedClearTimeout === clearTimeout) {\n //normal enviroments in sane situations\n return clearTimeout(marker);\n }\n // if clearTimeout wasn't available but was latter defined\n if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n cachedClearTimeout = clearTimeout;\n return clearTimeout(marker);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedClearTimeout(marker);\n } catch (e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedClearTimeout.call(null, marker);\n } catch (e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n return cachedClearTimeout.call(this, marker);\n }\n }\n\n\n\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n if (!draining || !currentQueue) {\n return;\n }\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = runTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n runTimeout(drainQueue);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\n\nprocess.listeners = function (name) { return [] }\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n","module.exports = function escape(url) {\n if (typeof url !== 'string') {\n return url\n }\n // If url is already wrapped in quotes, remove them\n if (/^['\"].*['\"]$/.test(url)) {\n url = url.slice(1, -1);\n }\n // Should url be wrapped?\n // See https://drafts.csswg.org/css-values-3/#urls\n if (/[\"'() \\t\\n]/.test(url)) {\n return '\"' + url.replace(/\"/g, '\\\\\"').replace(/\\n/g, '\\\\n') + '\"'\n }\n\n return url\n}\n","'use strict';\n\nmodule.exports = function bind(fn, thisArg) {\n return function wrap() {\n var args = new Array(arguments.length);\n for (var i = 0; i < args.length; i++) {\n args[i] = arguments[i];\n }\n return fn.apply(thisArg, args);\n };\n};\n","'use strict';\n\nvar utils = require('./../utils');\n\nfunction encode(val) {\n return encodeURIComponent(val).\n replace(/%3A/gi, ':').\n replace(/%24/g, '$').\n replace(/%2C/gi, ',').\n replace(/%20/g, '+').\n replace(/%5B/gi, '[').\n replace(/%5D/gi, ']');\n}\n\n/**\n * Build a URL by appending params to the end\n *\n * @param {string} url The base of the url (e.g., http://www.google.com)\n * @param {object} [params] The params to be appended\n * @returns {string} The formatted url\n */\nmodule.exports = function buildURL(url, params, paramsSerializer) {\n /*eslint no-param-reassign:0*/\n if (!params) {\n return url;\n }\n\n var serializedParams;\n if (paramsSerializer) {\n serializedParams = paramsSerializer(params);\n } else if (utils.isURLSearchParams(params)) {\n serializedParams = params.toString();\n } else {\n var parts = [];\n\n utils.forEach(params, function serialize(val, key) {\n if (val === null || typeof val === 'undefined') {\n return;\n }\n\n if (utils.isArray(val)) {\n key = key + '[]';\n } else {\n val = [val];\n }\n\n utils.forEach(val, function parseValue(v) {\n if (utils.isDate(v)) {\n v = v.toISOString();\n } else if (utils.isObject(v)) {\n v = JSON.stringify(v);\n }\n parts.push(encode(key) + '=' + encode(v));\n });\n });\n\n serializedParams = parts.join('&');\n }\n\n if (serializedParams) {\n var hashmarkIndex = url.indexOf('#');\n if (hashmarkIndex !== -1) {\n url = url.slice(0, hashmarkIndex);\n }\n\n url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\n }\n\n return url;\n};\n","'use strict';\n\n/**\n * Update an Error with the specified config, error code, and response.\n *\n * @param {Error} error The error to update.\n * @param {Object} config The config.\n * @param {string} [code] The error code (for example, 'ECONNABORTED').\n * @param {Object} [request] The request.\n * @param {Object} [response] The response.\n * @returns {Error} The error.\n */\nmodule.exports = function enhanceError(error, config, code, request, response) {\n error.config = config;\n if (code) {\n error.code = code;\n }\n\n error.request = request;\n error.response = response;\n error.isAxiosError = true;\n\n error.toJSON = function toJSON() {\n return {\n // Standard\n message: this.message,\n name: this.name,\n // Microsoft\n description: this.description,\n number: this.number,\n // Mozilla\n fileName: this.fileName,\n lineNumber: this.lineNumber,\n columnNumber: this.columnNumber,\n stack: this.stack,\n // Axios\n config: this.config,\n code: this.code\n };\n };\n return error;\n};\n","'use strict';\n\nvar utils = require('./../utils');\nvar settle = require('./../core/settle');\nvar cookies = require('./../helpers/cookies');\nvar buildURL = require('./../helpers/buildURL');\nvar buildFullPath = require('../core/buildFullPath');\nvar parseHeaders = require('./../helpers/parseHeaders');\nvar isURLSameOrigin = require('./../helpers/isURLSameOrigin');\nvar createError = require('../core/createError');\n\nmodule.exports = function xhrAdapter(config) {\n return new Promise(function dispatchXhrRequest(resolve, reject) {\n var requestData = config.data;\n var requestHeaders = config.headers;\n var responseType = config.responseType;\n\n if (utils.isFormData(requestData)) {\n delete requestHeaders['Content-Type']; // Let the browser set it\n }\n\n var request = new XMLHttpRequest();\n\n // HTTP basic authentication\n if (config.auth) {\n var username = config.auth.username || '';\n var password = config.auth.password ? unescape(encodeURIComponent(config.auth.password)) : '';\n requestHeaders.Authorization = 'Basic ' + btoa(username + ':' + password);\n }\n\n var fullPath = buildFullPath(config.baseURL, config.url);\n request.open(config.method.toUpperCase(), buildURL(fullPath, config.params, config.paramsSerializer), true);\n\n // Set the request timeout in MS\n request.timeout = config.timeout;\n\n function onloadend() {\n if (!request) {\n return;\n }\n // Prepare the response\n var responseHeaders = 'getAllResponseHeaders' in request ? parseHeaders(request.getAllResponseHeaders()) : null;\n var responseData = !responseType || responseType === 'text' || responseType === 'json' ?\n request.responseText : request.response;\n var response = {\n data: responseData,\n status: request.status,\n statusText: request.statusText,\n headers: responseHeaders,\n config: config,\n request: request\n };\n\n settle(resolve, reject, response);\n\n // Clean up request\n request = null;\n }\n\n if ('onloadend' in request) {\n // Use onloadend if available\n request.onloadend = onloadend;\n } else {\n // Listen for ready state to emulate onloadend\n request.onreadystatechange = function handleLoad() {\n if (!request || request.readyState !== 4) {\n return;\n }\n\n // The request errored out and we didn't get a response, this will be\n // handled by onerror instead\n // With one exception: request that using file: protocol, most browsers\n // will return status as 0 even though it's a successful request\n if (request.status === 0 && !(request.responseURL && request.responseURL.indexOf('file:') === 0)) {\n return;\n }\n // readystate handler is calling before onerror or ontimeout handlers,\n // so we should call onloadend on the next 'tick'\n setTimeout(onloadend);\n };\n }\n\n // Handle browser request cancellation (as opposed to a manual cancellation)\n request.onabort = function handleAbort() {\n if (!request) {\n return;\n }\n\n reject(createError('Request aborted', config, 'ECONNABORTED', request));\n\n // Clean up request\n request = null;\n };\n\n // Handle low level network errors\n request.onerror = function handleError() {\n // Real errors are hidden from us by the browser\n // onerror should only fire if it's a network error\n reject(createError('Network Error', config, null, request));\n\n // Clean up request\n request = null;\n };\n\n // Handle timeout\n request.ontimeout = function handleTimeout() {\n var timeoutErrorMessage = 'timeout of ' + config.timeout + 'ms exceeded';\n if (config.timeoutErrorMessage) {\n timeoutErrorMessage = config.timeoutErrorMessage;\n }\n reject(createError(\n timeoutErrorMessage,\n config,\n config.transitional && config.transitional.clarifyTimeoutError ? 'ETIMEDOUT' : 'ECONNABORTED',\n request));\n\n // Clean up request\n request = null;\n };\n\n // Add xsrf header\n // This is only done if running in a standard browser environment.\n // Specifically not if we're in a web worker, or react-native.\n if (utils.isStandardBrowserEnv()) {\n // Add xsrf header\n var xsrfValue = (config.withCredentials || isURLSameOrigin(fullPath)) && config.xsrfCookieName ?\n cookies.read(config.xsrfCookieName) :\n undefined;\n\n if (xsrfValue) {\n requestHeaders[config.xsrfHeaderName] = xsrfValue;\n }\n }\n\n // Add headers to the request\n if ('setRequestHeader' in request) {\n utils.forEach(requestHeaders, function setRequestHeader(val, key) {\n if (typeof requestData === 'undefined' && key.toLowerCase() === 'content-type') {\n // Remove Content-Type if data is undefined\n delete requestHeaders[key];\n } else {\n // Otherwise add header to the request\n request.setRequestHeader(key, val);\n }\n });\n }\n\n // Add withCredentials to request if needed\n if (!utils.isUndefined(config.withCredentials)) {\n request.withCredentials = !!config.withCredentials;\n }\n\n // Add responseType to request if needed\n if (responseType && responseType !== 'json') {\n request.responseType = config.responseType;\n }\n\n // Handle progress if needed\n if (typeof config.onDownloadProgress === 'function') {\n request.addEventListener('progress', config.onDownloadProgress);\n }\n\n // Not all browsers support upload events\n if (typeof config.onUploadProgress === 'function' && request.upload) {\n request.upload.addEventListener('progress', config.onUploadProgress);\n }\n\n if (config.cancelToken) {\n // Handle cancellation\n config.cancelToken.promise.then(function onCanceled(cancel) {\n if (!request) {\n return;\n }\n\n request.abort();\n reject(cancel);\n // Clean up request\n request = null;\n });\n }\n\n if (!requestData) {\n requestData = null;\n }\n\n // Send the request\n request.send(requestData);\n });\n};\n","'use strict';\n\nvar enhanceError = require('./enhanceError');\n\n/**\n * Create an Error with the specified message, config, error code, request and response.\n *\n * @param {string} message The error message.\n * @param {Object} config The config.\n * @param {string} [code] The error code (for example, 'ECONNABORTED').\n * @param {Object} [request] The request.\n * @param {Object} [response] The response.\n * @returns {Error} The created error.\n */\nmodule.exports = function createError(message, config, code, request, response) {\n var error = new Error(message);\n return enhanceError(error, config, code, request, response);\n};\n","'use strict';\n\nmodule.exports = function isCancel(value) {\n return !!(value && value.__CANCEL__);\n};\n","'use strict';\n\nvar utils = require('../utils');\n\n/**\n * Config-specific merge-function which creates a new config-object\n * by merging two configuration objects together.\n *\n * @param {Object} config1\n * @param {Object} config2\n * @returns {Object} New object resulting from merging config2 to config1\n */\nmodule.exports = function mergeConfig(config1, config2) {\n // eslint-disable-next-line no-param-reassign\n config2 = config2 || {};\n var config = {};\n\n var valueFromConfig2Keys = ['url', 'method', 'data'];\n var mergeDeepPropertiesKeys = ['headers', 'auth', 'proxy', 'params'];\n var defaultToConfig2Keys = [\n 'baseURL', 'transformRequest', 'transformResponse', 'paramsSerializer',\n 'timeout', 'timeoutMessage', 'withCredentials', 'adapter', 'responseType', 'xsrfCookieName',\n 'xsrfHeaderName', 'onUploadProgress', 'onDownloadProgress', 'decompress',\n 'maxContentLength', 'maxBodyLength', 'maxRedirects', 'transport', 'httpAgent',\n 'httpsAgent', 'cancelToken', 'socketPath', 'responseEncoding'\n ];\n var directMergeKeys = ['validateStatus'];\n\n function getMergedValue(target, source) {\n if (utils.isPlainObject(target) && utils.isPlainObject(source)) {\n return utils.merge(target, source);\n } else if (utils.isPlainObject(source)) {\n return utils.merge({}, source);\n } else if (utils.isArray(source)) {\n return source.slice();\n }\n return source;\n }\n\n function mergeDeepProperties(prop) {\n if (!utils.isUndefined(config2[prop])) {\n config[prop] = getMergedValue(config1[prop], config2[prop]);\n } else if (!utils.isUndefined(config1[prop])) {\n config[prop] = getMergedValue(undefined, config1[prop]);\n }\n }\n\n utils.forEach(valueFromConfig2Keys, function valueFromConfig2(prop) {\n if (!utils.isUndefined(config2[prop])) {\n config[prop] = getMergedValue(undefined, config2[prop]);\n }\n });\n\n utils.forEach(mergeDeepPropertiesKeys, mergeDeepProperties);\n\n utils.forEach(defaultToConfig2Keys, function defaultToConfig2(prop) {\n if (!utils.isUndefined(config2[prop])) {\n config[prop] = getMergedValue(undefined, config2[prop]);\n } else if (!utils.isUndefined(config1[prop])) {\n config[prop] = getMergedValue(undefined, config1[prop]);\n }\n });\n\n utils.forEach(directMergeKeys, function merge(prop) {\n if (prop in config2) {\n config[prop] = getMergedValue(config1[prop], config2[prop]);\n } else if (prop in config1) {\n config[prop] = getMergedValue(undefined, config1[prop]);\n }\n });\n\n var axiosKeys = valueFromConfig2Keys\n .concat(mergeDeepPropertiesKeys)\n .concat(defaultToConfig2Keys)\n .concat(directMergeKeys);\n\n var otherKeys = Object\n .keys(config1)\n .concat(Object.keys(config2))\n .filter(function filterAxiosKeys(key) {\n return axiosKeys.indexOf(key) === -1;\n });\n\n utils.forEach(otherKeys, mergeDeepProperties);\n\n return config;\n};\n","'use strict';\n\n/**\n * A `Cancel` is an object that is thrown when an operation is canceled.\n *\n * @class\n * @param {string=} message The message.\n */\nfunction Cancel(message) {\n this.message = message;\n}\n\nCancel.prototype.toString = function toString() {\n return 'Cancel' + (this.message ? ': ' + this.message : '');\n};\n\nCancel.prototype.__CANCEL__ = true;\n\nmodule.exports = Cancel;\n","\nvar content = require(\"!!../css-loader/index.js!../vue-loader/lib/loaders/stylePostLoader.js!../vue-loader/lib/index.js??vue-loader-options!./vue-json-editor.vue?vue&type=style&index=0&id=551a97e0&scoped=true&lang=css&\");\n\nif(typeof content === 'string') content = [[module.id, content, '']];\n\nvar transform;\nvar insertInto;\n\n\n\nvar options = {\"hmr\":true}\n\noptions.transform = transform\noptions.insertInto = undefined;\n\nvar update = require(\"!../style-loader/lib/addStyles.js\")(content, options);\n\nif(content.locals) module.exports = content.locals;\n\nif(module.hot) {\n\tmodule.hot.accept(\"!!../css-loader/index.js!../vue-loader/lib/loaders/stylePostLoader.js!../vue-loader/lib/index.js??vue-loader-options!./vue-json-editor.vue?vue&type=style&index=0&id=551a97e0&scoped=true&lang=css&\", function() {\n\t\tvar newContent = require(\"!!../css-loader/index.js!../vue-loader/lib/loaders/stylePostLoader.js!../vue-loader/lib/index.js??vue-loader-options!./vue-json-editor.vue?vue&type=style&index=0&id=551a97e0&scoped=true&lang=css&\");\n\n\t\tif(typeof newContent === 'string') newContent = [[module.id, newContent, '']];\n\n\t\tvar locals = (function(a, b) {\n\t\t\tvar key, idx = 0;\n\n\t\t\tfor(key in a) {\n\t\t\t\tif(!b || a[key] !== b[key]) return false;\n\t\t\t\tidx++;\n\t\t\t}\n\n\t\t\tfor(key in b) idx--;\n\n\t\t\treturn idx === 0;\n\t\t}(content.locals, newContent.locals));\n\n\t\tif(!locals) throw new Error('Aborting CSS HMR due to changed css-modules locals.');\n\n\t\tupdate(newContent);\n\t});\n\n\tmodule.hot.dispose(function() { update(); });\n}","\"use strict\";\n// Templates\nconst bannerTemplate = require('../templates/banner.html');\nconst banner = {\n name: 'banner',\n template: bannerTemplate,\n props: ['promo'],\n data() {\n return {\n visible: true,\n };\n },\n methods: {\n clickedCTA() {\n this.$emit('cta-clicked');\n },\n hide() {\n this.visible = false;\n },\n },\n};\nmodule.exports = banner;\n","/*!\r\n * jsoneditor.js\r\n *\r\n * @brief\r\n * JSONEditor is a web-based tool to view, edit, format, and validate JSON.\r\n * It has various modes such as a tree editor, a code editor, and a plain text\r\n * editor.\r\n *\r\n * Supported browsers: Chrome, Firefox, Safari, Opera, Internet Explorer 8+\r\n *\r\n * @license\r\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not\r\n * use this file except in compliance with the License. You may obtain a copy\r\n * of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\r\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\r\n * License for the specific language governing permissions and limitations under\r\n * the License.\r\n *\r\n * Copyright (c) 2011-2017 Jos de Jong, http://jsoneditoronline.org\r\n *\r\n * @author Jos de Jong, \r\n * @version 5.5.11\r\n * @date 2017-01-06\r\n */\r\n(function webpackUniversalModuleDefinition(root, factory) {\r\n\tif(typeof exports === 'object' && typeof module === 'object')\r\n\t\tmodule.exports = factory();\r\n\telse if(typeof define === 'function' && define.amd)\r\n\t\tdefine([], factory);\r\n\telse if(typeof exports === 'object')\r\n\t\texports[\"JSONEditor\"] = factory();\r\n\telse\r\n\t\troot[\"JSONEditor\"] = factory();\r\n})(this, function() {\r\nreturn /******/ (function(modules) { // webpackBootstrap\r\n/******/ \t// The module cache\r\n/******/ \tvar installedModules = {};\r\n\r\n/******/ \t// The require function\r\n/******/ \tfunction __webpack_require__(moduleId) {\r\n\r\n/******/ \t\t// Check if module is in cache\r\n/******/ \t\tif(installedModules[moduleId])\r\n/******/ \t\t\treturn installedModules[moduleId].exports;\r\n\r\n/******/ \t\t// Create a new module (and put it into the cache)\r\n/******/ \t\tvar module = installedModules[moduleId] = {\r\n/******/ \t\t\texports: {},\r\n/******/ \t\t\tid: moduleId,\r\n/******/ \t\t\tloaded: false\r\n/******/ \t\t};\r\n\r\n/******/ \t\t// Execute the module function\r\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\r\n\r\n/******/ \t\t// Flag the module as loaded\r\n/******/ \t\tmodule.loaded = true;\r\n\r\n/******/ \t\t// Return the exports of the module\r\n/******/ \t\treturn module.exports;\r\n/******/ \t}\r\n\r\n\r\n/******/ \t// expose the modules object (__webpack_modules__)\r\n/******/ \t__webpack_require__.m = modules;\r\n\r\n/******/ \t// expose the module cache\r\n/******/ \t__webpack_require__.c = installedModules;\r\n\r\n/******/ \t// __webpack_public_path__\r\n/******/ \t__webpack_require__.p = \"\";\r\n\r\n/******/ \t// Load entry module and return exports\r\n/******/ \treturn __webpack_require__(0);\r\n/******/ })\r\n/************************************************************************/\r\n/******/ ([\r\n/* 0 */\r\n/***/ function(module, exports, __webpack_require__) {\r\n\r\n\t'use strict';\r\n\r\n\tvar Ajv;\r\n\ttry {\r\n\t Ajv = __webpack_require__(1);\r\n\t}\r\n\tcatch (err) {\r\n\t // no problem... when we need Ajv we will throw a neat exception\r\n\t}\r\n\r\n\tvar treemode = __webpack_require__(51);\r\n\tvar textmode = __webpack_require__(62);\r\n\tvar util = __webpack_require__(54);\r\n\r\n\t/**\r\n\t * @constructor JSONEditor\r\n\t * @param {Element} container Container element\r\n\t * @param {Object} [options] Object with options. available options:\r\n\t * {String} mode Editor mode. Available values:\r\n\t * 'tree' (default), 'view',\r\n\t * 'form', 'text', and 'code'.\r\n\t * {function} onChange Callback method, triggered\r\n\t * on change of contents\r\n\t * {function} onError Callback method, triggered\r\n\t * when an error occurs\r\n\t * {Boolean} search Enable search box.\r\n\t * True by default\r\n\t * Only applicable for modes\r\n\t * 'tree', 'view', and 'form'\r\n\t * {Boolean} history Enable history (undo/redo).\r\n\t * True by default\r\n\t * Only applicable for modes\r\n\t * 'tree', 'view', and 'form'\r\n\t * {String} name Field name for the root node.\r\n\t * Only applicable for modes\r\n\t * 'tree', 'view', and 'form'\r\n\t * {Number} indentation Number of indentation\r\n\t * spaces. 4 by default.\r\n\t * Only applicable for\r\n\t * modes 'text' and 'code'\r\n\t * {boolean} escapeUnicode If true, unicode\r\n\t * characters are escaped.\r\n\t * false by default.\r\n\t * {boolean} sortObjectKeys If true, object keys are\r\n\t * sorted before display.\r\n\t * false by default.\r\n\t * @param {Object | undefined} json JSON object\r\n\t */\r\n\tfunction JSONEditor (container, options, json) {\r\n\t if (!(this instanceof JSONEditor)) {\r\n\t throw new Error('JSONEditor constructor called without \"new\".');\r\n\t }\r\n\r\n\t // check for unsupported browser (IE8 and older)\r\n\t var ieVersion = util.getInternetExplorerVersion();\r\n\t if (ieVersion != -1 && ieVersion < 9) {\r\n\t throw new Error('Unsupported browser, IE9 or newer required. ' +\r\n\t 'Please install the newest version of your browser.');\r\n\t }\r\n\r\n\t if (options) {\r\n\t // check for deprecated options\r\n\t if (options.error) {\r\n\t console.warn('Option \"error\" has been renamed to \"onError\"');\r\n\t options.onError = options.error;\r\n\t delete options.error;\r\n\t }\r\n\t if (options.change) {\r\n\t console.warn('Option \"change\" has been renamed to \"onChange\"');\r\n\t options.onChange = options.change;\r\n\t delete options.change;\r\n\t }\r\n\t if (options.editable) {\r\n\t console.warn('Option \"editable\" has been renamed to \"onEditable\"');\r\n\t options.onEditable = options.editable;\r\n\t delete options.editable;\r\n\t }\r\n\r\n\t // validate options\r\n\t if (options) {\r\n\t var VALID_OPTIONS = [\r\n\t 'ace', 'theme',\r\n\t 'ajv', 'schema',\r\n\t 'onChange', 'onEditable', 'onError', 'onModeChange',\r\n\t 'escapeUnicode', 'history', 'search', 'mode', 'modes', 'name', 'indentation', 'sortObjectKeys'\r\n\t ];\r\n\r\n\t Object.keys(options).forEach(function (option) {\r\n\t if (VALID_OPTIONS.indexOf(option) === -1) {\r\n\t console.warn('Unknown option \"' + option + '\". This option will be ignored');\r\n\t }\r\n\t });\r\n\t }\r\n\t }\r\n\r\n\t if (arguments.length) {\r\n\t this._create(container, options, json);\r\n\t }\r\n\t}\r\n\r\n\t/**\r\n\t * Configuration for all registered modes. Example:\r\n\t * {\r\n\t * tree: {\r\n\t * mixin: TreeEditor,\r\n\t * data: 'json'\r\n\t * },\r\n\t * text: {\r\n\t * mixin: TextEditor,\r\n\t * data: 'text'\r\n\t * }\r\n\t * }\r\n\t *\r\n\t * @type { Object. }\r\n\t */\r\n\tJSONEditor.modes = {};\r\n\r\n\t// debounce interval for JSON schema vaidation in milliseconds\r\n\tJSONEditor.prototype.DEBOUNCE_INTERVAL = 150;\r\n\r\n\t/**\r\n\t * Create the JSONEditor\r\n\t * @param {Element} container Container element\r\n\t * @param {Object} [options] See description in constructor\r\n\t * @param {Object | undefined} json JSON object\r\n\t * @private\r\n\t */\r\n\tJSONEditor.prototype._create = function (container, options, json) {\r\n\t this.container = container;\r\n\t this.options = options || {};\r\n\t this.json = json || {};\r\n\r\n\t var mode = this.options.mode || 'tree';\r\n\t this.setMode(mode);\r\n\t};\r\n\r\n\t/**\r\n\t * Destroy the editor. Clean up DOM, event listeners, and web workers.\r\n\t */\r\n\tJSONEditor.prototype.destroy = function () {};\r\n\r\n\t/**\r\n\t * Set JSON object in editor\r\n\t * @param {Object | undefined} json JSON data\r\n\t */\r\n\tJSONEditor.prototype.set = function (json) {\r\n\t this.json = json;\r\n\t};\r\n\r\n\t/**\r\n\t * Get JSON from the editor\r\n\t * @returns {Object} json\r\n\t */\r\n\tJSONEditor.prototype.get = function () {\r\n\t return this.json;\r\n\t};\r\n\r\n\t/**\r\n\t * Set string containing JSON for the editor\r\n\t * @param {String | undefined} jsonText\r\n\t */\r\n\tJSONEditor.prototype.setText = function (jsonText) {\r\n\t this.json = util.parse(jsonText);\r\n\t};\r\n\r\n\t/**\r\n\t * Get stringified JSON contents from the editor\r\n\t * @returns {String} jsonText\r\n\t */\r\n\tJSONEditor.prototype.getText = function () {\r\n\t return JSON.stringify(this.json);\r\n\t};\r\n\r\n\t/**\r\n\t * Set a field name for the root node.\r\n\t * @param {String | undefined} name\r\n\t */\r\n\tJSONEditor.prototype.setName = function (name) {\r\n\t if (!this.options) {\r\n\t this.options = {};\r\n\t }\r\n\t this.options.name = name;\r\n\t};\r\n\r\n\t/**\r\n\t * Get the field name for the root node.\r\n\t * @return {String | undefined} name\r\n\t */\r\n\tJSONEditor.prototype.getName = function () {\r\n\t return this.options && this.options.name;\r\n\t};\r\n\r\n\t/**\r\n\t * Change the mode of the editor.\r\n\t * JSONEditor will be extended with all methods needed for the chosen mode.\r\n\t * @param {String} mode Available modes: 'tree' (default), 'view', 'form',\r\n\t * 'text', and 'code'.\r\n\t */\r\n\tJSONEditor.prototype.setMode = function (mode) {\r\n\t var container = this.container;\r\n\t var options = util.extend({}, this.options);\r\n\t var oldMode = options.mode;\r\n\t var data;\r\n\t var name;\r\n\r\n\t options.mode = mode;\r\n\t var config = JSONEditor.modes[mode];\r\n\t if (config) {\r\n\t try {\r\n\t var asText = (config.data == 'text');\r\n\t name = this.getName();\r\n\t data = this[asText ? 'getText' : 'get'](); // get text or json\r\n\r\n\t this.destroy();\r\n\t util.clear(this);\r\n\t util.extend(this, config.mixin);\r\n\t this.create(container, options);\r\n\r\n\t this.setName(name);\r\n\t this[asText ? 'setText' : 'set'](data); // set text or json\r\n\r\n\t if (typeof config.load === 'function') {\r\n\t try {\r\n\t config.load.call(this);\r\n\t }\r\n\t catch (err) {\r\n\t console.error(err);\r\n\t }\r\n\t }\r\n\r\n\t if (typeof options.onModeChange === 'function' && mode !== oldMode) {\r\n\t try {\r\n\t options.onModeChange(mode, oldMode);\r\n\t }\r\n\t catch (err) {\r\n\t console.error(err);\r\n\t }\r\n\t }\r\n\t }\r\n\t catch (err) {\r\n\t this._onError(err);\r\n\t }\r\n\t }\r\n\t else {\r\n\t throw new Error('Unknown mode \"' + options.mode + '\"');\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Get the current mode\r\n\t * @return {string}\r\n\t */\r\n\tJSONEditor.prototype.getMode = function () {\r\n\t return this.options.mode;\r\n\t};\r\n\r\n\t/**\r\n\t * Throw an error. If an error callback is configured in options.error, this\r\n\t * callback will be invoked. Else, a regular error is thrown.\r\n\t * @param {Error} err\r\n\t * @private\r\n\t */\r\n\tJSONEditor.prototype._onError = function(err) {\r\n\t if (this.options && typeof this.options.onError === 'function') {\r\n\t this.options.onError(err);\r\n\t }\r\n\t else {\r\n\t throw err;\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Set a JSON schema for validation of the JSON object.\r\n\t * To remove the schema, call JSONEditor.setSchema(null)\r\n\t * @param {Object | null} schema\r\n\t */\r\n\tJSONEditor.prototype.setSchema = function (schema) {\r\n\t // compile a JSON schema validator if a JSON schema is provided\r\n\t if (schema) {\r\n\t var ajv;\r\n\t try {\r\n\t // grab ajv from options if provided, else create a new instance\r\n\t ajv = this.options.ajv || Ajv({ allErrors: true, verbose: true });\r\n\r\n\t }\r\n\t catch (err) {\r\n\t console.warn('Failed to create an instance of Ajv, JSON Schema validation is not available. Please use a JSONEditor bundle including Ajv, or pass an instance of Ajv as via the configuration option `ajv`.');\r\n\t }\r\n\r\n\t if (ajv) {\r\n\t this.validateSchema = ajv.compile(schema);\r\n\r\n\t // add schema to the options, so that when switching to an other mode,\r\n\t // the set schema is not lost\r\n\t this.options.schema = schema;\r\n\r\n\t // validate now\r\n\t this.validate();\r\n\t }\r\n\r\n\t this.refresh(); // update DOM\r\n\t }\r\n\t else {\r\n\t // remove current schema\r\n\t this.validateSchema = null;\r\n\t this.options.schema = null;\r\n\t this.validate(); // to clear current error messages\r\n\t this.refresh(); // update DOM\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Validate current JSON object against the configured JSON schema\r\n\t * Throws an exception when no JSON schema is configured\r\n\t */\r\n\tJSONEditor.prototype.validate = function () {\r\n\t // must be implemented by treemode and textmode\r\n\t};\r\n\r\n\t/**\r\n\t * Refresh the rendered contents\r\n\t */\r\n\tJSONEditor.prototype.refresh = function () {\r\n\t // can be implemented by treemode and textmode\r\n\t};\r\n\r\n\t/**\r\n\t * Register a plugin with one ore multiple modes for the JSON Editor.\r\n\t *\r\n\t * A mode is described as an object with properties:\r\n\t *\r\n\t * - `mode: String` The name of the mode.\r\n\t * - `mixin: Object` An object containing the mixin functions which\r\n\t * will be added to the JSONEditor. Must contain functions\r\n\t * create, get, getText, set, and setText. May have\r\n\t * additional functions.\r\n\t * When the JSONEditor switches to a mixin, all mixin\r\n\t * functions are added to the JSONEditor, and then\r\n\t * the function `create(container, options)` is executed.\r\n\t * - `data: 'text' | 'json'` The type of data that will be used to load the mixin.\r\n\t * - `[load: function]` An optional function called after the mixin\r\n\t * has been loaded.\r\n\t *\r\n\t * @param {Object | Array} mode A mode object or an array with multiple mode objects.\r\n\t */\r\n\tJSONEditor.registerMode = function (mode) {\r\n\t var i, prop;\r\n\r\n\t if (util.isArray(mode)) {\r\n\t // multiple modes\r\n\t for (i = 0; i < mode.length; i++) {\r\n\t JSONEditor.registerMode(mode[i]);\r\n\t }\r\n\t }\r\n\t else {\r\n\t // validate the new mode\r\n\t if (!('mode' in mode)) throw new Error('Property \"mode\" missing');\r\n\t if (!('mixin' in mode)) throw new Error('Property \"mixin\" missing');\r\n\t if (!('data' in mode)) throw new Error('Property \"data\" missing');\r\n\t var name = mode.mode;\r\n\t if (name in JSONEditor.modes) {\r\n\t throw new Error('Mode \"' + name + '\" already registered');\r\n\t }\r\n\r\n\t // validate the mixin\r\n\t if (typeof mode.mixin.create !== 'function') {\r\n\t throw new Error('Required function \"create\" missing on mixin');\r\n\t }\r\n\t var reserved = ['setMode', 'registerMode', 'modes'];\r\n\t for (i = 0; i < reserved.length; i++) {\r\n\t prop = reserved[i];\r\n\t if (prop in mode.mixin) {\r\n\t throw new Error('Reserved property \"' + prop + '\" not allowed in mixin');\r\n\t }\r\n\t }\r\n\r\n\t JSONEditor.modes[name] = mode;\r\n\t }\r\n\t};\r\n\r\n\t// register tree and text modes\r\n\tJSONEditor.registerMode(treemode);\r\n\tJSONEditor.registerMode(textmode);\r\n\r\n\tmodule.exports = JSONEditor;\r\n\r\n\r\n/***/ },\r\n/* 1 */\r\n/***/ function(module, exports, __webpack_require__) {\r\n\r\n\t'use strict';\r\n\r\n\tvar compileSchema = __webpack_require__(2)\r\n\t , resolve = __webpack_require__(3)\r\n\t , Cache = __webpack_require__(21)\r\n\t , SchemaObject = __webpack_require__(16)\r\n\t , stableStringify = __webpack_require__(12)\r\n\t , formats = __webpack_require__(22)\r\n\t , rules = __webpack_require__(23)\r\n\t , v5 = __webpack_require__(43)\r\n\t , util = __webpack_require__(11)\r\n\t , async = __webpack_require__(17)\r\n\t , co = __webpack_require__(19);\r\n\r\n\tmodule.exports = Ajv;\r\n\r\n\tAjv.prototype.compileAsync = async.compile;\r\n\tAjv.prototype.addKeyword = __webpack_require__(49);\r\n\tAjv.ValidationError = __webpack_require__(20);\r\n\r\n\tvar META_SCHEMA_ID = 'http://json-schema.org/draft-04/schema';\r\n\tvar SCHEMA_URI_FORMAT = /^(?:(?:[a-z][a-z0-9+-.]*:)?\\/\\/)?[^\\s]*$/i;\r\n\tfunction SCHEMA_URI_FORMAT_FUNC(str) {\r\n\t return SCHEMA_URI_FORMAT.test(str);\r\n\t}\r\n\r\n\tvar META_IGNORE_OPTIONS = [ 'removeAdditional', 'useDefaults', 'coerceTypes' ];\r\n\r\n\t/**\r\n\t * Creates validator instance.\r\n\t * Usage: `Ajv(opts)`\r\n\t * @param {Object} opts optional options\r\n\t * @return {Object} ajv instance\r\n\t */\r\n\tfunction Ajv(opts) {\r\n\t if (!(this instanceof Ajv)) return new Ajv(opts);\r\n\t var self = this;\r\n\r\n\t opts = this._opts = util.copy(opts) || {};\r\n\t this._schemas = {};\r\n\t this._refs = {};\r\n\t this._formats = formats(opts.format);\r\n\t this._cache = opts.cache || new Cache;\r\n\t this._loadingSchemas = {};\r\n\t this.RULES = rules();\r\n\r\n\t // this is done on purpose, so that methods are bound to the instance\r\n\t // (without using bind) so that they can be used without the instance\r\n\t this.validate = validate;\r\n\t this.compile = compile;\r\n\t this.addSchema = addSchema;\r\n\t this.addMetaSchema = addMetaSchema;\r\n\t this.validateSchema = validateSchema;\r\n\t this.getSchema = getSchema;\r\n\t this.removeSchema = removeSchema;\r\n\t this.addFormat = addFormat;\r\n\t this.errorsText = errorsText;\r\n\r\n\t this._addSchema = _addSchema;\r\n\t this._compile = _compile;\r\n\r\n\t opts.loopRequired = opts.loopRequired || Infinity;\r\n\t if (opts.async || opts.transpile) async.setup(opts);\r\n\t if (opts.beautify === true) opts.beautify = { indent_size: 2 };\r\n\t if (opts.errorDataPath == 'property') opts._errorDataPathProperty = true;\r\n\t this._metaOpts = getMetaSchemaOptions();\r\n\r\n\t addInitialSchemas();\r\n\t if (opts.formats) addInitialFormats();\r\n\t if (opts.v5) v5.enable(this);\r\n\t if (typeof opts.meta == 'object') addMetaSchema(opts.meta);\r\n\r\n\r\n\t /**\r\n\t * Validate data using schema\r\n\t * Schema will be compiled and cached (using serialized JSON as key. [json-stable-stringify](https://github.com/substack/json-stable-stringify) is used to serialize.\r\n\t * @param {String|Object} schemaKeyRef key, ref or schema object\r\n\t * @param {Any} data to be validated\r\n\t * @return {Boolean} validation result. Errors from the last validation will be available in `ajv.errors` (and also in compiled schema: `schema.errors`).\r\n\t */\r\n\t function validate(schemaKeyRef, data) {\r\n\t var v;\r\n\t if (typeof schemaKeyRef == 'string') {\r\n\t v = getSchema(schemaKeyRef);\r\n\t if (!v) throw new Error('no schema with key or ref \"' + schemaKeyRef + '\"');\r\n\t } else {\r\n\t var schemaObj = _addSchema(schemaKeyRef);\r\n\t v = schemaObj.validate || _compile(schemaObj);\r\n\t }\r\n\r\n\t var valid = v(data);\r\n\t if (v.async) return self._opts.async == '*' ? co(valid) : valid;\r\n\t self.errors = v.errors;\r\n\t return valid;\r\n\t }\r\n\r\n\r\n\t /**\r\n\t * Create validating function for passed schema.\r\n\t * @param {Object} schema schema object\r\n\t * @return {Function} validating function\r\n\t */\r\n\t function compile(schema) {\r\n\t var schemaObj = _addSchema(schema);\r\n\t return schemaObj.validate || _compile(schemaObj);\r\n\t }\r\n\r\n\r\n\t /**\r\n\t * Adds schema to the instance.\r\n\t * @param {Object|Array} schema schema or array of schemas. If array is passed, `key` and other parameters will be ignored.\r\n\t * @param {String} key Optional schema key. Can be passed to `validate` method instead of schema object or id/ref. One schema per instance can have empty `id` and `key`.\r\n\t * @param {Boolean} _skipValidation true to skip schema validation. Used internally, option validateSchema should be used instead.\r\n\t * @param {Boolean} _meta true if schema is a meta-schema. Used internally, addMetaSchema should be used instead.\r\n\t */\r\n\t function addSchema(schema, key, _skipValidation, _meta) {\r\n\t if (Array.isArray(schema)){\r\n\t for (var i=0; i} errors optional array of validation errors, if not passed errors from the instance are used.\r\n\t * @param {Object} options optional options with properties `separator` and `dataVar`.\r\n\t * @return {String} human readable string with all errors descriptions\r\n\t */\r\n\t function errorsText(errors, options) {\r\n\t errors = errors || self.errors;\r\n\t if (!errors) return 'No errors';\r\n\t options = options || {};\r\n\t var separator = options.separator === undefined ? ', ' : options.separator;\r\n\t var dataVar = options.dataVar === undefined ? 'data' : options.dataVar;\r\n\r\n\t var text = '';\r\n\t for (var i=0; i', '\"', '`', ' ', '\\r', '\\n', '\\t'],\r\n\r\n\t // RFC 2396: characters not allowed for various reasons.\r\n\t unwise = ['{', '}', '|', '\\\\', '^', '`'].concat(delims),\r\n\r\n\t // Allowed by RFCs, but cause of XSS attacks. Always escape these.\r\n\t autoEscape = ['\\''].concat(unwise),\r\n\t // Characters that are never ever allowed in a hostname.\r\n\t // Note that any invalid chars are also handled, but these\r\n\t // are the ones that are *expected* to be seen, so we fast-path\r\n\t // them.\r\n\t nonHostChars = ['%', '/', '?', ';', '#'].concat(autoEscape),\r\n\t hostEndingChars = ['/', '?', '#'],\r\n\t hostnameMaxLen = 255,\r\n\t hostnamePartPattern = /^[a-z0-9A-Z_-]{0,63}$/,\r\n\t hostnamePartStart = /^([a-z0-9A-Z_-]{0,63})(.*)$/,\r\n\t // protocols that can allow \"unsafe\" and \"unwise\" chars.\r\n\t unsafeProtocol = {\r\n\t 'javascript': true,\r\n\t 'javascript:': true\r\n\t },\r\n\t // protocols that never have a hostname.\r\n\t hostlessProtocol = {\r\n\t 'javascript': true,\r\n\t 'javascript:': true\r\n\t },\r\n\t // protocols that always contain a // bit.\r\n\t slashedProtocol = {\r\n\t 'http': true,\r\n\t 'https': true,\r\n\t 'ftp': true,\r\n\t 'gopher': true,\r\n\t 'file': true,\r\n\t 'http:': true,\r\n\t 'https:': true,\r\n\t 'ftp:': true,\r\n\t 'gopher:': true,\r\n\t 'file:': true\r\n\t },\r\n\t querystring = __webpack_require__(7);\r\n\r\n\tfunction urlParse(url, parseQueryString, slashesDenoteHost) {\r\n\t if (url && isObject(url) && url instanceof Url) return url;\r\n\r\n\t var u = new Url;\r\n\t u.parse(url, parseQueryString, slashesDenoteHost);\r\n\t return u;\r\n\t}\r\n\r\n\tUrl.prototype.parse = function(url, parseQueryString, slashesDenoteHost) {\r\n\t if (!isString(url)) {\r\n\t throw new TypeError(\"Parameter 'url' must be a string, not \" + typeof url);\r\n\t }\r\n\r\n\t var rest = url;\r\n\r\n\t // trim before proceeding.\r\n\t // This is to support parse stuff like \" http://foo.com \\n\"\r\n\t rest = rest.trim();\r\n\r\n\t var proto = protocolPattern.exec(rest);\r\n\t if (proto) {\r\n\t proto = proto[0];\r\n\t var lowerProto = proto.toLowerCase();\r\n\t this.protocol = lowerProto;\r\n\t rest = rest.substr(proto.length);\r\n\t }\r\n\r\n\t // figure out if it's got a host\r\n\t // user@server is *always* interpreted as a hostname, and url\r\n\t // resolution will treat //foo/bar as host=foo,path=bar because that's\r\n\t // how the browser resolves relative URLs.\r\n\t if (slashesDenoteHost || proto || rest.match(/^\\/\\/[^@\\/]+@[^@\\/]+/)) {\r\n\t var slashes = rest.substr(0, 2) === '//';\r\n\t if (slashes && !(proto && hostlessProtocol[proto])) {\r\n\t rest = rest.substr(2);\r\n\t this.slashes = true;\r\n\t }\r\n\t }\r\n\r\n\t if (!hostlessProtocol[proto] &&\r\n\t (slashes || (proto && !slashedProtocol[proto]))) {\r\n\r\n\t // there's a hostname.\r\n\t // the first instance of /, ?, ;, or # ends the host.\r\n\t //\r\n\t // If there is an @ in the hostname, then non-host chars *are* allowed\r\n\t // to the left of the last @ sign, unless some host-ending character\r\n\t // comes *before* the @-sign.\r\n\t // URLs are obnoxious.\r\n\t //\r\n\t // ex:\r\n\t // http://a@b@c/ => user:a@b host:c\r\n\t // http://a@b?@c => user:a host:c path:/?@c\r\n\r\n\t // v0.12 TODO(isaacs): This is not quite how Chrome does things.\r\n\t // Review our test case against browsers more comprehensively.\r\n\r\n\t // find the first instance of any hostEndingChars\r\n\t var hostEnd = -1;\r\n\t for (var i = 0; i < hostEndingChars.length; i++) {\r\n\t var hec = rest.indexOf(hostEndingChars[i]);\r\n\t if (hec !== -1 && (hostEnd === -1 || hec < hostEnd))\r\n\t hostEnd = hec;\r\n\t }\r\n\r\n\t // at this point, either we have an explicit point where the\r\n\t // auth portion cannot go past, or the last @ char is the decider.\r\n\t var auth, atSign;\r\n\t if (hostEnd === -1) {\r\n\t // atSign can be anywhere.\r\n\t atSign = rest.lastIndexOf('@');\r\n\t } else {\r\n\t // atSign must be in auth portion.\r\n\t // http://a@b/c@d => host:b auth:a path:/c@d\r\n\t atSign = rest.lastIndexOf('@', hostEnd);\r\n\t }\r\n\r\n\t // Now we have a portion which is definitely the auth.\r\n\t // Pull that off.\r\n\t if (atSign !== -1) {\r\n\t auth = rest.slice(0, atSign);\r\n\t rest = rest.slice(atSign + 1);\r\n\t this.auth = decodeURIComponent(auth);\r\n\t }\r\n\r\n\t // the host is the remaining to the left of the first non-host char\r\n\t hostEnd = -1;\r\n\t for (var i = 0; i < nonHostChars.length; i++) {\r\n\t var hec = rest.indexOf(nonHostChars[i]);\r\n\t if (hec !== -1 && (hostEnd === -1 || hec < hostEnd))\r\n\t hostEnd = hec;\r\n\t }\r\n\t // if we still have not hit it, then the entire thing is a host.\r\n\t if (hostEnd === -1)\r\n\t hostEnd = rest.length;\r\n\r\n\t this.host = rest.slice(0, hostEnd);\r\n\t rest = rest.slice(hostEnd);\r\n\r\n\t // pull out port.\r\n\t this.parseHost();\r\n\r\n\t // we've indicated that there is a hostname,\r\n\t // so even if it's empty, it has to be present.\r\n\t this.hostname = this.hostname || '';\r\n\r\n\t // if hostname begins with [ and ends with ]\r\n\t // assume that it's an IPv6 address.\r\n\t var ipv6Hostname = this.hostname[0] === '[' &&\r\n\t this.hostname[this.hostname.length - 1] === ']';\r\n\r\n\t // validate a little.\r\n\t if (!ipv6Hostname) {\r\n\t var hostparts = this.hostname.split(/\\./);\r\n\t for (var i = 0, l = hostparts.length; i < l; i++) {\r\n\t var part = hostparts[i];\r\n\t if (!part) continue;\r\n\t if (!part.match(hostnamePartPattern)) {\r\n\t var newpart = '';\r\n\t for (var j = 0, k = part.length; j < k; j++) {\r\n\t if (part.charCodeAt(j) > 127) {\r\n\t // we replace non-ASCII char with a temporary placeholder\r\n\t // we need this to make sure size of hostname is not\r\n\t // broken by replacing non-ASCII by nothing\r\n\t newpart += 'x';\r\n\t } else {\r\n\t newpart += part[j];\r\n\t }\r\n\t }\r\n\t // we test again with ASCII char only\r\n\t if (!newpart.match(hostnamePartPattern)) {\r\n\t var validParts = hostparts.slice(0, i);\r\n\t var notHost = hostparts.slice(i + 1);\r\n\t var bit = part.match(hostnamePartStart);\r\n\t if (bit) {\r\n\t validParts.push(bit[1]);\r\n\t notHost.unshift(bit[2]);\r\n\t }\r\n\t if (notHost.length) {\r\n\t rest = '/' + notHost.join('.') + rest;\r\n\t }\r\n\t this.hostname = validParts.join('.');\r\n\t break;\r\n\t }\r\n\t }\r\n\t }\r\n\t }\r\n\r\n\t if (this.hostname.length > hostnameMaxLen) {\r\n\t this.hostname = '';\r\n\t } else {\r\n\t // hostnames are always lower case.\r\n\t this.hostname = this.hostname.toLowerCase();\r\n\t }\r\n\r\n\t if (!ipv6Hostname) {\r\n\t // IDNA Support: Returns a puny coded representation of \"domain\".\r\n\t // It only converts the part of the domain name that\r\n\t // has non ASCII characters. I.e. it dosent matter if\r\n\t // you call it with a domain that already is in ASCII.\r\n\t var domainArray = this.hostname.split('.');\r\n\t var newOut = [];\r\n\t for (var i = 0; i < domainArray.length; ++i) {\r\n\t var s = domainArray[i];\r\n\t newOut.push(s.match(/[^A-Za-z0-9_-]/) ?\r\n\t 'xn--' + punycode.encode(s) : s);\r\n\t }\r\n\t this.hostname = newOut.join('.');\r\n\t }\r\n\r\n\t var p = this.port ? ':' + this.port : '';\r\n\t var h = this.hostname || '';\r\n\t this.host = h + p;\r\n\t this.href += this.host;\r\n\r\n\t // strip [ and ] from the hostname\r\n\t // the host field still retains them, though\r\n\t if (ipv6Hostname) {\r\n\t this.hostname = this.hostname.substr(1, this.hostname.length - 2);\r\n\t if (rest[0] !== '/') {\r\n\t rest = '/' + rest;\r\n\t }\r\n\t }\r\n\t }\r\n\r\n\t // now rest is set to the post-host stuff.\r\n\t // chop off any delim chars.\r\n\t if (!unsafeProtocol[lowerProto]) {\r\n\r\n\t // First, make 100% sure that any \"autoEscape\" chars get\r\n\t // escaped, even if encodeURIComponent doesn't think they\r\n\t // need to be.\r\n\t for (var i = 0, l = autoEscape.length; i < l; i++) {\r\n\t var ae = autoEscape[i];\r\n\t var esc = encodeURIComponent(ae);\r\n\t if (esc === ae) {\r\n\t esc = escape(ae);\r\n\t }\r\n\t rest = rest.split(ae).join(esc);\r\n\t }\r\n\t }\r\n\r\n\r\n\t // chop off from the tail first.\r\n\t var hash = rest.indexOf('#');\r\n\t if (hash !== -1) {\r\n\t // got a fragment string.\r\n\t this.hash = rest.substr(hash);\r\n\t rest = rest.slice(0, hash);\r\n\t }\r\n\t var qm = rest.indexOf('?');\r\n\t if (qm !== -1) {\r\n\t this.search = rest.substr(qm);\r\n\t this.query = rest.substr(qm + 1);\r\n\t if (parseQueryString) {\r\n\t this.query = querystring.parse(this.query);\r\n\t }\r\n\t rest = rest.slice(0, qm);\r\n\t } else if (parseQueryString) {\r\n\t // no query string, but parseQueryString still requested\r\n\t this.search = '';\r\n\t this.query = {};\r\n\t }\r\n\t if (rest) this.pathname = rest;\r\n\t if (slashedProtocol[lowerProto] &&\r\n\t this.hostname && !this.pathname) {\r\n\t this.pathname = '/';\r\n\t }\r\n\r\n\t //to support http.request\r\n\t if (this.pathname || this.search) {\r\n\t var p = this.pathname || '';\r\n\t var s = this.search || '';\r\n\t this.path = p + s;\r\n\t }\r\n\r\n\t // finally, reconstruct the href based on what has been validated.\r\n\t this.href = this.format();\r\n\t return this;\r\n\t};\r\n\r\n\t// format a parsed object into a url string\r\n\tfunction urlFormat(obj) {\r\n\t // ensure it's an object, and not a string url.\r\n\t // If it's an obj, this is a no-op.\r\n\t // this way, you can call url_format() on strings\r\n\t // to clean up potentially wonky urls.\r\n\t if (isString(obj)) obj = urlParse(obj);\r\n\t if (!(obj instanceof Url)) return Url.prototype.format.call(obj);\r\n\t return obj.format();\r\n\t}\r\n\r\n\tUrl.prototype.format = function() {\r\n\t var auth = this.auth || '';\r\n\t if (auth) {\r\n\t auth = encodeURIComponent(auth);\r\n\t auth = auth.replace(/%3A/i, ':');\r\n\t auth += '@';\r\n\t }\r\n\r\n\t var protocol = this.protocol || '',\r\n\t pathname = this.pathname || '',\r\n\t hash = this.hash || '',\r\n\t host = false,\r\n\t query = '';\r\n\r\n\t if (this.host) {\r\n\t host = auth + this.host;\r\n\t } else if (this.hostname) {\r\n\t host = auth + (this.hostname.indexOf(':') === -1 ?\r\n\t this.hostname :\r\n\t '[' + this.hostname + ']');\r\n\t if (this.port) {\r\n\t host += ':' + this.port;\r\n\t }\r\n\t }\r\n\r\n\t if (this.query &&\r\n\t isObject(this.query) &&\r\n\t Object.keys(this.query).length) {\r\n\t query = querystring.stringify(this.query);\r\n\t }\r\n\r\n\t var search = this.search || (query && ('?' + query)) || '';\r\n\r\n\t if (protocol && protocol.substr(-1) !== ':') protocol += ':';\r\n\r\n\t // only the slashedProtocols get the //. Not mailto:, xmpp:, etc.\r\n\t // unless they had them to begin with.\r\n\t if (this.slashes ||\r\n\t (!protocol || slashedProtocol[protocol]) && host !== false) {\r\n\t host = '//' + (host || '');\r\n\t if (pathname && pathname.charAt(0) !== '/') pathname = '/' + pathname;\r\n\t } else if (!host) {\r\n\t host = '';\r\n\t }\r\n\r\n\t if (hash && hash.charAt(0) !== '#') hash = '#' + hash;\r\n\t if (search && search.charAt(0) !== '?') search = '?' + search;\r\n\r\n\t pathname = pathname.replace(/[?#]/g, function(match) {\r\n\t return encodeURIComponent(match);\r\n\t });\r\n\t search = search.replace('#', '%23');\r\n\r\n\t return protocol + host + pathname + search + hash;\r\n\t};\r\n\r\n\tfunction urlResolve(source, relative) {\r\n\t return urlParse(source, false, true).resolve(relative);\r\n\t}\r\n\r\n\tUrl.prototype.resolve = function(relative) {\r\n\t return this.resolveObject(urlParse(relative, false, true)).format();\r\n\t};\r\n\r\n\tfunction urlResolveObject(source, relative) {\r\n\t if (!source) return relative;\r\n\t return urlParse(source, false, true).resolveObject(relative);\r\n\t}\r\n\r\n\tUrl.prototype.resolveObject = function(relative) {\r\n\t if (isString(relative)) {\r\n\t var rel = new Url();\r\n\t rel.parse(relative, false, true);\r\n\t relative = rel;\r\n\t }\r\n\r\n\t var result = new Url();\r\n\t Object.keys(this).forEach(function(k) {\r\n\t result[k] = this[k];\r\n\t }, this);\r\n\r\n\t // hash is always overridden, no matter what.\r\n\t // even href=\"\" will remove it.\r\n\t result.hash = relative.hash;\r\n\r\n\t // if the relative url is empty, then there's nothing left to do here.\r\n\t if (relative.href === '') {\r\n\t result.href = result.format();\r\n\t return result;\r\n\t }\r\n\r\n\t // hrefs like //foo/bar always cut to the protocol.\r\n\t if (relative.slashes && !relative.protocol) {\r\n\t // take everything except the protocol from relative\r\n\t Object.keys(relative).forEach(function(k) {\r\n\t if (k !== 'protocol')\r\n\t result[k] = relative[k];\r\n\t });\r\n\r\n\t //urlParse appends trailing / to urls like http://www.example.com\r\n\t if (slashedProtocol[result.protocol] &&\r\n\t result.hostname && !result.pathname) {\r\n\t result.path = result.pathname = '/';\r\n\t }\r\n\r\n\t result.href = result.format();\r\n\t return result;\r\n\t }\r\n\r\n\t if (relative.protocol && relative.protocol !== result.protocol) {\r\n\t // if it's a known url protocol, then changing\r\n\t // the protocol does weird things\r\n\t // first, if it's not file:, then we MUST have a host,\r\n\t // and if there was a path\r\n\t // to begin with, then we MUST have a path.\r\n\t // if it is file:, then the host is dropped,\r\n\t // because that's known to be hostless.\r\n\t // anything else is assumed to be absolute.\r\n\t if (!slashedProtocol[relative.protocol]) {\r\n\t Object.keys(relative).forEach(function(k) {\r\n\t result[k] = relative[k];\r\n\t });\r\n\t result.href = result.format();\r\n\t return result;\r\n\t }\r\n\r\n\t result.protocol = relative.protocol;\r\n\t if (!relative.host && !hostlessProtocol[relative.protocol]) {\r\n\t var relPath = (relative.pathname || '').split('/');\r\n\t while (relPath.length && !(relative.host = relPath.shift()));\r\n\t if (!relative.host) relative.host = '';\r\n\t if (!relative.hostname) relative.hostname = '';\r\n\t if (relPath[0] !== '') relPath.unshift('');\r\n\t if (relPath.length < 2) relPath.unshift('');\r\n\t result.pathname = relPath.join('/');\r\n\t } else {\r\n\t result.pathname = relative.pathname;\r\n\t }\r\n\t result.search = relative.search;\r\n\t result.query = relative.query;\r\n\t result.host = relative.host || '';\r\n\t result.auth = relative.auth;\r\n\t result.hostname = relative.hostname || relative.host;\r\n\t result.port = relative.port;\r\n\t // to support http.request\r\n\t if (result.pathname || result.search) {\r\n\t var p = result.pathname || '';\r\n\t var s = result.search || '';\r\n\t result.path = p + s;\r\n\t }\r\n\t result.slashes = result.slashes || relative.slashes;\r\n\t result.href = result.format();\r\n\t return result;\r\n\t }\r\n\r\n\t var isSourceAbs = (result.pathname && result.pathname.charAt(0) === '/'),\r\n\t isRelAbs = (\r\n\t relative.host ||\r\n\t relative.pathname && relative.pathname.charAt(0) === '/'\r\n\t ),\r\n\t mustEndAbs = (isRelAbs || isSourceAbs ||\r\n\t (result.host && relative.pathname)),\r\n\t removeAllDots = mustEndAbs,\r\n\t srcPath = result.pathname && result.pathname.split('/') || [],\r\n\t relPath = relative.pathname && relative.pathname.split('/') || [],\r\n\t psychotic = result.protocol && !slashedProtocol[result.protocol];\r\n\r\n\t // if the url is a non-slashed url, then relative\r\n\t // links like ../.. should be able\r\n\t // to crawl up to the hostname, as well. This is strange.\r\n\t // result.protocol has already been set by now.\r\n\t // Later on, put the first path part into the host field.\r\n\t if (psychotic) {\r\n\t result.hostname = '';\r\n\t result.port = null;\r\n\t if (result.host) {\r\n\t if (srcPath[0] === '') srcPath[0] = result.host;\r\n\t else srcPath.unshift(result.host);\r\n\t }\r\n\t result.host = '';\r\n\t if (relative.protocol) {\r\n\t relative.hostname = null;\r\n\t relative.port = null;\r\n\t if (relative.host) {\r\n\t if (relPath[0] === '') relPath[0] = relative.host;\r\n\t else relPath.unshift(relative.host);\r\n\t }\r\n\t relative.host = null;\r\n\t }\r\n\t mustEndAbs = mustEndAbs && (relPath[0] === '' || srcPath[0] === '');\r\n\t }\r\n\r\n\t if (isRelAbs) {\r\n\t // it's absolute.\r\n\t result.host = (relative.host || relative.host === '') ?\r\n\t relative.host : result.host;\r\n\t result.hostname = (relative.hostname || relative.hostname === '') ?\r\n\t relative.hostname : result.hostname;\r\n\t result.search = relative.search;\r\n\t result.query = relative.query;\r\n\t srcPath = relPath;\r\n\t // fall through to the dot-handling below.\r\n\t } else if (relPath.length) {\r\n\t // it's relative\r\n\t // throw away the existing file, and take the new path instead.\r\n\t if (!srcPath) srcPath = [];\r\n\t srcPath.pop();\r\n\t srcPath = srcPath.concat(relPath);\r\n\t result.search = relative.search;\r\n\t result.query = relative.query;\r\n\t } else if (!isNullOrUndefined(relative.search)) {\r\n\t // just pull out the search.\r\n\t // like href='?foo'.\r\n\t // Put this after the other two cases because it simplifies the booleans\r\n\t if (psychotic) {\r\n\t result.hostname = result.host = srcPath.shift();\r\n\t //occationaly the auth can get stuck only in host\r\n\t //this especialy happens in cases like\r\n\t //url.resolveObject('mailto:local1@domain1', 'local2@domain2')\r\n\t var authInHost = result.host && result.host.indexOf('@') > 0 ?\r\n\t result.host.split('@') : false;\r\n\t if (authInHost) {\r\n\t result.auth = authInHost.shift();\r\n\t result.host = result.hostname = authInHost.shift();\r\n\t }\r\n\t }\r\n\t result.search = relative.search;\r\n\t result.query = relative.query;\r\n\t //to support http.request\r\n\t if (!isNull(result.pathname) || !isNull(result.search)) {\r\n\t result.path = (result.pathname ? result.pathname : '') +\r\n\t (result.search ? result.search : '');\r\n\t }\r\n\t result.href = result.format();\r\n\t return result;\r\n\t }\r\n\r\n\t if (!srcPath.length) {\r\n\t // no path at all. easy.\r\n\t // we've already handled the other stuff above.\r\n\t result.pathname = null;\r\n\t //to support http.request\r\n\t if (result.search) {\r\n\t result.path = '/' + result.search;\r\n\t } else {\r\n\t result.path = null;\r\n\t }\r\n\t result.href = result.format();\r\n\t return result;\r\n\t }\r\n\r\n\t // if a url ENDs in . or .., then it must get a trailing slash.\r\n\t // however, if it ends in anything else non-slashy,\r\n\t // then it must NOT get a trailing slash.\r\n\t var last = srcPath.slice(-1)[0];\r\n\t var hasTrailingSlash = (\r\n\t (result.host || relative.host) && (last === '.' || last === '..') ||\r\n\t last === '');\r\n\r\n\t // strip single dots, resolve double dots to parent dir\r\n\t // if the path tries to go above the root, `up` ends up > 0\r\n\t var up = 0;\r\n\t for (var i = srcPath.length; i >= 0; i--) {\r\n\t last = srcPath[i];\r\n\t if (last == '.') {\r\n\t srcPath.splice(i, 1);\r\n\t } else if (last === '..') {\r\n\t srcPath.splice(i, 1);\r\n\t up++;\r\n\t } else if (up) {\r\n\t srcPath.splice(i, 1);\r\n\t up--;\r\n\t }\r\n\t }\r\n\r\n\t // if the path is allowed to go above the root, restore leading ..s\r\n\t if (!mustEndAbs && !removeAllDots) {\r\n\t for (; up--; up) {\r\n\t srcPath.unshift('..');\r\n\t }\r\n\t }\r\n\r\n\t if (mustEndAbs && srcPath[0] !== '' &&\r\n\t (!srcPath[0] || srcPath[0].charAt(0) !== '/')) {\r\n\t srcPath.unshift('');\r\n\t }\r\n\r\n\t if (hasTrailingSlash && (srcPath.join('/').substr(-1) !== '/')) {\r\n\t srcPath.push('');\r\n\t }\r\n\r\n\t var isAbsolute = srcPath[0] === '' ||\r\n\t (srcPath[0] && srcPath[0].charAt(0) === '/');\r\n\r\n\t // put the host back\r\n\t if (psychotic) {\r\n\t result.hostname = result.host = isAbsolute ? '' :\r\n\t srcPath.length ? srcPath.shift() : '';\r\n\t //occationaly the auth can get stuck only in host\r\n\t //this especialy happens in cases like\r\n\t //url.resolveObject('mailto:local1@domain1', 'local2@domain2')\r\n\t var authInHost = result.host && result.host.indexOf('@') > 0 ?\r\n\t result.host.split('@') : false;\r\n\t if (authInHost) {\r\n\t result.auth = authInHost.shift();\r\n\t result.host = result.hostname = authInHost.shift();\r\n\t }\r\n\t }\r\n\r\n\t mustEndAbs = mustEndAbs || (result.host && srcPath.length);\r\n\r\n\t if (mustEndAbs && !isAbsolute) {\r\n\t srcPath.unshift('');\r\n\t }\r\n\r\n\t if (!srcPath.length) {\r\n\t result.pathname = null;\r\n\t result.path = null;\r\n\t } else {\r\n\t result.pathname = srcPath.join('/');\r\n\t }\r\n\r\n\t //to support request.http\r\n\t if (!isNull(result.pathname) || !isNull(result.search)) {\r\n\t result.path = (result.pathname ? result.pathname : '') +\r\n\t (result.search ? result.search : '');\r\n\t }\r\n\t result.auth = relative.auth || result.auth;\r\n\t result.slashes = result.slashes || relative.slashes;\r\n\t result.href = result.format();\r\n\t return result;\r\n\t};\r\n\r\n\tUrl.prototype.parseHost = function() {\r\n\t var host = this.host;\r\n\t var port = portPattern.exec(host);\r\n\t if (port) {\r\n\t port = port[0];\r\n\t if (port !== ':') {\r\n\t this.port = port.substr(1);\r\n\t }\r\n\t host = host.substr(0, host.length - port.length);\r\n\t }\r\n\t if (host) this.hostname = host;\r\n\t};\r\n\r\n\tfunction isString(arg) {\r\n\t return typeof arg === \"string\";\r\n\t}\r\n\r\n\tfunction isObject(arg) {\r\n\t return typeof arg === 'object' && arg !== null;\r\n\t}\r\n\r\n\tfunction isNull(arg) {\r\n\t return arg === null;\r\n\t}\r\n\tfunction isNullOrUndefined(arg) {\r\n\t return arg == null;\r\n\t}\r\n\r\n\r\n/***/ },\r\n/* 5 */\r\n/***/ function(module, exports, __webpack_require__) {\r\n\r\n\tvar __WEBPACK_AMD_DEFINE_RESULT__;/* WEBPACK VAR INJECTION */(function(module, global) {/*! https://mths.be/punycode v1.3.2 by @mathias */\r\n\t;(function(root) {\r\n\r\n\t\t/** Detect free variables */\r\n\t\tvar freeExports = typeof exports == 'object' && exports &&\r\n\t\t\t!exports.nodeType && exports;\r\n\t\tvar freeModule = typeof module == 'object' && module &&\r\n\t\t\t!module.nodeType && module;\r\n\t\tvar freeGlobal = typeof global == 'object' && global;\r\n\t\tif (\r\n\t\t\tfreeGlobal.global === freeGlobal ||\r\n\t\t\tfreeGlobal.window === freeGlobal ||\r\n\t\t\tfreeGlobal.self === freeGlobal\r\n\t\t) {\r\n\t\t\troot = freeGlobal;\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * The `punycode` object.\r\n\t\t * @name punycode\r\n\t\t * @type Object\r\n\t\t */\r\n\t\tvar punycode,\r\n\r\n\t\t/** Highest positive signed 32-bit float value */\r\n\t\tmaxInt = 2147483647, // aka. 0x7FFFFFFF or 2^31-1\r\n\r\n\t\t/** Bootstring parameters */\r\n\t\tbase = 36,\r\n\t\ttMin = 1,\r\n\t\ttMax = 26,\r\n\t\tskew = 38,\r\n\t\tdamp = 700,\r\n\t\tinitialBias = 72,\r\n\t\tinitialN = 128, // 0x80\r\n\t\tdelimiter = '-', // '\\x2D'\r\n\r\n\t\t/** Regular expressions */\r\n\t\tregexPunycode = /^xn--/,\r\n\t\tregexNonASCII = /[^\\x20-\\x7E]/, // unprintable ASCII chars + non-ASCII chars\r\n\t\tregexSeparators = /[\\x2E\\u3002\\uFF0E\\uFF61]/g, // RFC 3490 separators\r\n\r\n\t\t/** Error messages */\r\n\t\terrors = {\r\n\t\t\t'overflow': 'Overflow: input needs wider integers to process',\r\n\t\t\t'not-basic': 'Illegal input >= 0x80 (not a basic code point)',\r\n\t\t\t'invalid-input': 'Invalid input'\r\n\t\t},\r\n\r\n\t\t/** Convenience shortcuts */\r\n\t\tbaseMinusTMin = base - tMin,\r\n\t\tfloor = Math.floor,\r\n\t\tstringFromCharCode = String.fromCharCode,\r\n\r\n\t\t/** Temporary variable */\r\n\t\tkey;\r\n\r\n\t\t/*--------------------------------------------------------------------------*/\r\n\r\n\t\t/**\r\n\t\t * A generic error utility function.\r\n\t\t * @private\r\n\t\t * @param {String} type The error type.\r\n\t\t * @returns {Error} Throws a `RangeError` with the applicable error message.\r\n\t\t */\r\n\t\tfunction error(type) {\r\n\t\t\tthrow RangeError(errors[type]);\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * A generic `Array#map` utility function.\r\n\t\t * @private\r\n\t\t * @param {Array} array The array to iterate over.\r\n\t\t * @param {Function} callback The function that gets called for every array\r\n\t\t * item.\r\n\t\t * @returns {Array} A new array of values returned by the callback function.\r\n\t\t */\r\n\t\tfunction map(array, fn) {\r\n\t\t\tvar length = array.length;\r\n\t\t\tvar result = [];\r\n\t\t\twhile (length--) {\r\n\t\t\t\tresult[length] = fn(array[length]);\r\n\t\t\t}\r\n\t\t\treturn result;\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * A simple `Array#map`-like wrapper to work with domain name strings or email\r\n\t\t * addresses.\r\n\t\t * @private\r\n\t\t * @param {String} domain The domain name or email address.\r\n\t\t * @param {Function} callback The function that gets called for every\r\n\t\t * character.\r\n\t\t * @returns {Array} A new string of characters returned by the callback\r\n\t\t * function.\r\n\t\t */\r\n\t\tfunction mapDomain(string, fn) {\r\n\t\t\tvar parts = string.split('@');\r\n\t\t\tvar result = '';\r\n\t\t\tif (parts.length > 1) {\r\n\t\t\t\t// In email addresses, only the domain name should be punycoded. Leave\r\n\t\t\t\t// the local part (i.e. everything up to `@`) intact.\r\n\t\t\t\tresult = parts[0] + '@';\r\n\t\t\t\tstring = parts[1];\r\n\t\t\t}\r\n\t\t\t// Avoid `split(regex)` for IE8 compatibility. See #17.\r\n\t\t\tstring = string.replace(regexSeparators, '\\x2E');\r\n\t\t\tvar labels = string.split('.');\r\n\t\t\tvar encoded = map(labels, fn).join('.');\r\n\t\t\treturn result + encoded;\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * Creates an array containing the numeric code points of each Unicode\r\n\t\t * character in the string. While JavaScript uses UCS-2 internally,\r\n\t\t * this function will convert a pair of surrogate halves (each of which\r\n\t\t * UCS-2 exposes as separate characters) into a single code point,\r\n\t\t * matching UTF-16.\r\n\t\t * @see `punycode.ucs2.encode`\r\n\t\t * @see \r\n\t\t * @memberOf punycode.ucs2\r\n\t\t * @name decode\r\n\t\t * @param {String} string The Unicode input string (UCS-2).\r\n\t\t * @returns {Array} The new array of code points.\r\n\t\t */\r\n\t\tfunction ucs2decode(string) {\r\n\t\t\tvar output = [],\r\n\t\t\t counter = 0,\r\n\t\t\t length = string.length,\r\n\t\t\t value,\r\n\t\t\t extra;\r\n\t\t\twhile (counter < length) {\r\n\t\t\t\tvalue = string.charCodeAt(counter++);\r\n\t\t\t\tif (value >= 0xD800 && value <= 0xDBFF && counter < length) {\r\n\t\t\t\t\t// high surrogate, and there is a next character\r\n\t\t\t\t\textra = string.charCodeAt(counter++);\r\n\t\t\t\t\tif ((extra & 0xFC00) == 0xDC00) { // low surrogate\r\n\t\t\t\t\t\toutput.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\t// unmatched surrogate; only append this code unit, in case the next\r\n\t\t\t\t\t\t// code unit is the high surrogate of a surrogate pair\r\n\t\t\t\t\t\toutput.push(value);\r\n\t\t\t\t\t\tcounter--;\r\n\t\t\t\t\t}\r\n\t\t\t\t} else {\r\n\t\t\t\t\toutput.push(value);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn output;\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * Creates a string based on an array of numeric code points.\r\n\t\t * @see `punycode.ucs2.decode`\r\n\t\t * @memberOf punycode.ucs2\r\n\t\t * @name encode\r\n\t\t * @param {Array} codePoints The array of numeric code points.\r\n\t\t * @returns {String} The new Unicode string (UCS-2).\r\n\t\t */\r\n\t\tfunction ucs2encode(array) {\r\n\t\t\treturn map(array, function(value) {\r\n\t\t\t\tvar output = '';\r\n\t\t\t\tif (value > 0xFFFF) {\r\n\t\t\t\t\tvalue -= 0x10000;\r\n\t\t\t\t\toutput += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800);\r\n\t\t\t\t\tvalue = 0xDC00 | value & 0x3FF;\r\n\t\t\t\t}\r\n\t\t\t\toutput += stringFromCharCode(value);\r\n\t\t\t\treturn output;\r\n\t\t\t}).join('');\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * Converts a basic code point into a digit/integer.\r\n\t\t * @see `digitToBasic()`\r\n\t\t * @private\r\n\t\t * @param {Number} codePoint The basic numeric code point value.\r\n\t\t * @returns {Number} The numeric value of a basic code point (for use in\r\n\t\t * representing integers) in the range `0` to `base - 1`, or `base` if\r\n\t\t * the code point does not represent a value.\r\n\t\t */\r\n\t\tfunction basicToDigit(codePoint) {\r\n\t\t\tif (codePoint - 48 < 10) {\r\n\t\t\t\treturn codePoint - 22;\r\n\t\t\t}\r\n\t\t\tif (codePoint - 65 < 26) {\r\n\t\t\t\treturn codePoint - 65;\r\n\t\t\t}\r\n\t\t\tif (codePoint - 97 < 26) {\r\n\t\t\t\treturn codePoint - 97;\r\n\t\t\t}\r\n\t\t\treturn base;\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * Converts a digit/integer into a basic code point.\r\n\t\t * @see `basicToDigit()`\r\n\t\t * @private\r\n\t\t * @param {Number} digit The numeric value of a basic code point.\r\n\t\t * @returns {Number} The basic code point whose value (when used for\r\n\t\t * representing integers) is `digit`, which needs to be in the range\r\n\t\t * `0` to `base - 1`. If `flag` is non-zero, the uppercase form is\r\n\t\t * used; else, the lowercase form is used. The behavior is undefined\r\n\t\t * if `flag` is non-zero and `digit` has no uppercase form.\r\n\t\t */\r\n\t\tfunction digitToBasic(digit, flag) {\r\n\t\t\t// 0..25 map to ASCII a..z or A..Z\r\n\t\t\t// 26..35 map to ASCII 0..9\r\n\t\t\treturn digit + 22 + 75 * (digit < 26) - ((flag != 0) << 5);\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * Bias adaptation function as per section 3.4 of RFC 3492.\r\n\t\t * http://tools.ietf.org/html/rfc3492#section-3.4\r\n\t\t * @private\r\n\t\t */\r\n\t\tfunction adapt(delta, numPoints, firstTime) {\r\n\t\t\tvar k = 0;\r\n\t\t\tdelta = firstTime ? floor(delta / damp) : delta >> 1;\r\n\t\t\tdelta += floor(delta / numPoints);\r\n\t\t\tfor (/* no initialization */; delta > baseMinusTMin * tMax >> 1; k += base) {\r\n\t\t\t\tdelta = floor(delta / baseMinusTMin);\r\n\t\t\t}\r\n\t\t\treturn floor(k + (baseMinusTMin + 1) * delta / (delta + skew));\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * Converts a Punycode string of ASCII-only symbols to a string of Unicode\r\n\t\t * symbols.\r\n\t\t * @memberOf punycode\r\n\t\t * @param {String} input The Punycode string of ASCII-only symbols.\r\n\t\t * @returns {String} The resulting string of Unicode symbols.\r\n\t\t */\r\n\t\tfunction decode(input) {\r\n\t\t\t// Don't use UCS-2\r\n\t\t\tvar output = [],\r\n\t\t\t inputLength = input.length,\r\n\t\t\t out,\r\n\t\t\t i = 0,\r\n\t\t\t n = initialN,\r\n\t\t\t bias = initialBias,\r\n\t\t\t basic,\r\n\t\t\t j,\r\n\t\t\t index,\r\n\t\t\t oldi,\r\n\t\t\t w,\r\n\t\t\t k,\r\n\t\t\t digit,\r\n\t\t\t t,\r\n\t\t\t /** Cached calculation results */\r\n\t\t\t baseMinusT;\r\n\r\n\t\t\t// Handle the basic code points: let `basic` be the number of input code\r\n\t\t\t// points before the last delimiter, or `0` if there is none, then copy\r\n\t\t\t// the first basic code points to the output.\r\n\r\n\t\t\tbasic = input.lastIndexOf(delimiter);\r\n\t\t\tif (basic < 0) {\r\n\t\t\t\tbasic = 0;\r\n\t\t\t}\r\n\r\n\t\t\tfor (j = 0; j < basic; ++j) {\r\n\t\t\t\t// if it's not a basic code point\r\n\t\t\t\tif (input.charCodeAt(j) >= 0x80) {\r\n\t\t\t\t\terror('not-basic');\r\n\t\t\t\t}\r\n\t\t\t\toutput.push(input.charCodeAt(j));\r\n\t\t\t}\r\n\r\n\t\t\t// Main decoding loop: start just after the last delimiter if any basic code\r\n\t\t\t// points were copied; start at the beginning otherwise.\r\n\r\n\t\t\tfor (index = basic > 0 ? basic + 1 : 0; index < inputLength; /* no final expression */) {\r\n\r\n\t\t\t\t// `index` is the index of the next character to be consumed.\r\n\t\t\t\t// Decode a generalized variable-length integer into `delta`,\r\n\t\t\t\t// which gets added to `i`. The overflow checking is easier\r\n\t\t\t\t// if we increase `i` as we go, then subtract off its starting\r\n\t\t\t\t// value at the end to obtain `delta`.\r\n\t\t\t\tfor (oldi = i, w = 1, k = base; /* no condition */; k += base) {\r\n\r\n\t\t\t\t\tif (index >= inputLength) {\r\n\t\t\t\t\t\terror('invalid-input');\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tdigit = basicToDigit(input.charCodeAt(index++));\r\n\r\n\t\t\t\t\tif (digit >= base || digit > floor((maxInt - i) / w)) {\r\n\t\t\t\t\t\terror('overflow');\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\ti += digit * w;\r\n\t\t\t\t\tt = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);\r\n\r\n\t\t\t\t\tif (digit < t) {\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tbaseMinusT = base - t;\r\n\t\t\t\t\tif (w > floor(maxInt / baseMinusT)) {\r\n\t\t\t\t\t\terror('overflow');\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tw *= baseMinusT;\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t\tout = output.length + 1;\r\n\t\t\t\tbias = adapt(i - oldi, out, oldi == 0);\r\n\r\n\t\t\t\t// `i` was supposed to wrap around from `out` to `0`,\r\n\t\t\t\t// incrementing `n` each time, so we'll fix that now:\r\n\t\t\t\tif (floor(i / out) > maxInt - n) {\r\n\t\t\t\t\terror('overflow');\r\n\t\t\t\t}\r\n\r\n\t\t\t\tn += floor(i / out);\r\n\t\t\t\ti %= out;\r\n\r\n\t\t\t\t// Insert `n` at position `i` of the output\r\n\t\t\t\toutput.splice(i++, 0, n);\r\n\r\n\t\t\t}\r\n\r\n\t\t\treturn ucs2encode(output);\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * Converts a string of Unicode symbols (e.g. a domain name label) to a\r\n\t\t * Punycode string of ASCII-only symbols.\r\n\t\t * @memberOf punycode\r\n\t\t * @param {String} input The string of Unicode symbols.\r\n\t\t * @returns {String} The resulting Punycode string of ASCII-only symbols.\r\n\t\t */\r\n\t\tfunction encode(input) {\r\n\t\t\tvar n,\r\n\t\t\t delta,\r\n\t\t\t handledCPCount,\r\n\t\t\t basicLength,\r\n\t\t\t bias,\r\n\t\t\t j,\r\n\t\t\t m,\r\n\t\t\t q,\r\n\t\t\t k,\r\n\t\t\t t,\r\n\t\t\t currentValue,\r\n\t\t\t output = [],\r\n\t\t\t /** `inputLength` will hold the number of code points in `input`. */\r\n\t\t\t inputLength,\r\n\t\t\t /** Cached calculation results */\r\n\t\t\t handledCPCountPlusOne,\r\n\t\t\t baseMinusT,\r\n\t\t\t qMinusT;\r\n\r\n\t\t\t// Convert the input in UCS-2 to Unicode\r\n\t\t\tinput = ucs2decode(input);\r\n\r\n\t\t\t// Cache the length\r\n\t\t\tinputLength = input.length;\r\n\r\n\t\t\t// Initialize the state\r\n\t\t\tn = initialN;\r\n\t\t\tdelta = 0;\r\n\t\t\tbias = initialBias;\r\n\r\n\t\t\t// Handle the basic code points\r\n\t\t\tfor (j = 0; j < inputLength; ++j) {\r\n\t\t\t\tcurrentValue = input[j];\r\n\t\t\t\tif (currentValue < 0x80) {\r\n\t\t\t\t\toutput.push(stringFromCharCode(currentValue));\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\thandledCPCount = basicLength = output.length;\r\n\r\n\t\t\t// `handledCPCount` is the number of code points that have been handled;\r\n\t\t\t// `basicLength` is the number of basic code points.\r\n\r\n\t\t\t// Finish the basic string - if it is not empty - with a delimiter\r\n\t\t\tif (basicLength) {\r\n\t\t\t\toutput.push(delimiter);\r\n\t\t\t}\r\n\r\n\t\t\t// Main encoding loop:\r\n\t\t\twhile (handledCPCount < inputLength) {\r\n\r\n\t\t\t\t// All non-basic code points < n have been handled already. Find the next\r\n\t\t\t\t// larger one:\r\n\t\t\t\tfor (m = maxInt, j = 0; j < inputLength; ++j) {\r\n\t\t\t\t\tcurrentValue = input[j];\r\n\t\t\t\t\tif (currentValue >= n && currentValue < m) {\r\n\t\t\t\t\t\tm = currentValue;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// Increase `delta` enough to advance the decoder's state to ,\r\n\t\t\t\t// but guard against overflow\r\n\t\t\t\thandledCPCountPlusOne = handledCPCount + 1;\r\n\t\t\t\tif (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) {\r\n\t\t\t\t\terror('overflow');\r\n\t\t\t\t}\r\n\r\n\t\t\t\tdelta += (m - n) * handledCPCountPlusOne;\r\n\t\t\t\tn = m;\r\n\r\n\t\t\t\tfor (j = 0; j < inputLength; ++j) {\r\n\t\t\t\t\tcurrentValue = input[j];\r\n\r\n\t\t\t\t\tif (currentValue < n && ++delta > maxInt) {\r\n\t\t\t\t\t\terror('overflow');\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (currentValue == n) {\r\n\t\t\t\t\t\t// Represent delta as a generalized variable-length integer\r\n\t\t\t\t\t\tfor (q = delta, k = base; /* no condition */; k += base) {\r\n\t\t\t\t\t\t\tt = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);\r\n\t\t\t\t\t\t\tif (q < t) {\r\n\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tqMinusT = q - t;\r\n\t\t\t\t\t\t\tbaseMinusT = base - t;\r\n\t\t\t\t\t\t\toutput.push(\r\n\t\t\t\t\t\t\t\tstringFromCharCode(digitToBasic(t + qMinusT % baseMinusT, 0))\r\n\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\tq = floor(qMinusT / baseMinusT);\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\toutput.push(stringFromCharCode(digitToBasic(q, 0)));\r\n\t\t\t\t\t\tbias = adapt(delta, handledCPCountPlusOne, handledCPCount == basicLength);\r\n\t\t\t\t\t\tdelta = 0;\r\n\t\t\t\t\t\t++handledCPCount;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t++delta;\r\n\t\t\t\t++n;\r\n\r\n\t\t\t}\r\n\t\t\treturn output.join('');\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * Converts a Punycode string representing a domain name or an email address\r\n\t\t * to Unicode. Only the Punycoded parts of the input will be converted, i.e.\r\n\t\t * it doesn't matter if you call it on a string that has already been\r\n\t\t * converted to Unicode.\r\n\t\t * @memberOf punycode\r\n\t\t * @param {String} input The Punycoded domain name or email address to\r\n\t\t * convert to Unicode.\r\n\t\t * @returns {String} The Unicode representation of the given Punycode\r\n\t\t * string.\r\n\t\t */\r\n\t\tfunction toUnicode(input) {\r\n\t\t\treturn mapDomain(input, function(string) {\r\n\t\t\t\treturn regexPunycode.test(string)\r\n\t\t\t\t\t? decode(string.slice(4).toLowerCase())\r\n\t\t\t\t\t: string;\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * Converts a Unicode string representing a domain name or an email address to\r\n\t\t * Punycode. Only the non-ASCII parts of the domain name will be converted,\r\n\t\t * i.e. it doesn't matter if you call it with a domain that's already in\r\n\t\t * ASCII.\r\n\t\t * @memberOf punycode\r\n\t\t * @param {String} input The domain name or email address to convert, as a\r\n\t\t * Unicode string.\r\n\t\t * @returns {String} The Punycode representation of the given domain name or\r\n\t\t * email address.\r\n\t\t */\r\n\t\tfunction toASCII(input) {\r\n\t\t\treturn mapDomain(input, function(string) {\r\n\t\t\t\treturn regexNonASCII.test(string)\r\n\t\t\t\t\t? 'xn--' + encode(string)\r\n\t\t\t\t\t: string;\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\t/*--------------------------------------------------------------------------*/\r\n\r\n\t\t/** Define the public API */\r\n\t\tpunycode = {\r\n\t\t\t/**\r\n\t\t\t * A string representing the current Punycode.js version number.\r\n\t\t\t * @memberOf punycode\r\n\t\t\t * @type String\r\n\t\t\t */\r\n\t\t\t'version': '1.3.2',\r\n\t\t\t/**\r\n\t\t\t * An object of methods to convert from JavaScript's internal character\r\n\t\t\t * representation (UCS-2) to Unicode code points, and back.\r\n\t\t\t * @see \r\n\t\t\t * @memberOf punycode\r\n\t\t\t * @type Object\r\n\t\t\t */\r\n\t\t\t'ucs2': {\r\n\t\t\t\t'decode': ucs2decode,\r\n\t\t\t\t'encode': ucs2encode\r\n\t\t\t},\r\n\t\t\t'decode': decode,\r\n\t\t\t'encode': encode,\r\n\t\t\t'toASCII': toASCII,\r\n\t\t\t'toUnicode': toUnicode\r\n\t\t};\r\n\r\n\t\t/** Expose `punycode` */\r\n\t\t// Some AMD build optimizers, like r.js, check for specific condition patterns\r\n\t\t// like the following:\r\n\t\tif (\r\n\t\t\ttrue\r\n\t\t) {\r\n\t\t\t!(__WEBPACK_AMD_DEFINE_RESULT__ = function() {\r\n\t\t\t\treturn punycode;\r\n\t\t\t}.call(exports, __webpack_require__, exports, module), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\r\n\t\t} else if (freeExports && freeModule) {\r\n\t\t\tif (module.exports == freeExports) { // in Node.js or RingoJS v0.8.0+\r\n\t\t\t\tfreeModule.exports = punycode;\r\n\t\t\t} else { // in Narwhal or RingoJS v0.7.0-\r\n\t\t\t\tfor (key in punycode) {\r\n\t\t\t\t\tpunycode.hasOwnProperty(key) && (freeExports[key] = punycode[key]);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t} else { // in Rhino or a web browser\r\n\t\t\troot.punycode = punycode;\r\n\t\t}\r\n\r\n\t}(this));\r\n\r\n\t/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(6)(module), (function() { return this; }())))\r\n\r\n/***/ },\r\n/* 6 */\r\n/***/ function(module, exports) {\r\n\r\n\tmodule.exports = function(module) {\r\n\t\tif(!module.webpackPolyfill) {\r\n\t\t\tmodule.deprecate = function() {};\r\n\t\t\tmodule.paths = [];\r\n\t\t\t// module.parent = undefined by default\r\n\t\t\tmodule.children = [];\r\n\t\t\tmodule.webpackPolyfill = 1;\r\n\t\t}\r\n\t\treturn module;\r\n\t}\r\n\r\n\r\n/***/ },\r\n/* 7 */\r\n/***/ function(module, exports, __webpack_require__) {\r\n\r\n\t'use strict';\r\n\r\n\texports.decode = exports.parse = __webpack_require__(8);\r\n\texports.encode = exports.stringify = __webpack_require__(9);\r\n\r\n\r\n/***/ },\r\n/* 8 */\r\n/***/ function(module, exports) {\r\n\r\n\t// Copyright Joyent, Inc. and other Node contributors.\r\n\t//\r\n\t// Permission is hereby granted, free of charge, to any person obtaining a\r\n\t// copy of this software and associated documentation files (the\r\n\t// \"Software\"), to deal in the Software without restriction, including\r\n\t// without limitation the rights to use, copy, modify, merge, publish,\r\n\t// distribute, sublicense, and/or sell copies of the Software, and to permit\r\n\t// persons to whom the Software is furnished to do so, subject to the\r\n\t// following conditions:\r\n\t//\r\n\t// The above copyright notice and this permission notice shall be included\r\n\t// in all copies or substantial portions of the Software.\r\n\t//\r\n\t// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\r\n\t// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\r\n\t// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\r\n\t// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\r\n\t// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\r\n\t// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\r\n\t// USE OR OTHER DEALINGS IN THE SOFTWARE.\r\n\r\n\t'use strict';\r\n\r\n\t// If obj.hasOwnProperty has been overridden, then calling\r\n\t// obj.hasOwnProperty(prop) will break.\r\n\t// See: https://github.com/joyent/node/issues/1707\r\n\tfunction hasOwnProperty(obj, prop) {\r\n\t return Object.prototype.hasOwnProperty.call(obj, prop);\r\n\t}\r\n\r\n\tmodule.exports = function(qs, sep, eq, options) {\r\n\t sep = sep || '&';\r\n\t eq = eq || '=';\r\n\t var obj = {};\r\n\r\n\t if (typeof qs !== 'string' || qs.length === 0) {\r\n\t return obj;\r\n\t }\r\n\r\n\t var regexp = /\\+/g;\r\n\t qs = qs.split(sep);\r\n\r\n\t var maxKeys = 1000;\r\n\t if (options && typeof options.maxKeys === 'number') {\r\n\t maxKeys = options.maxKeys;\r\n\t }\r\n\r\n\t var len = qs.length;\r\n\t // maxKeys <= 0 means that we should not limit keys count\r\n\t if (maxKeys > 0 && len > maxKeys) {\r\n\t len = maxKeys;\r\n\t }\r\n\r\n\t for (var i = 0; i < len; ++i) {\r\n\t var x = qs[i].replace(regexp, '%20'),\r\n\t idx = x.indexOf(eq),\r\n\t kstr, vstr, k, v;\r\n\r\n\t if (idx >= 0) {\r\n\t kstr = x.substr(0, idx);\r\n\t vstr = x.substr(idx + 1);\r\n\t } else {\r\n\t kstr = x;\r\n\t vstr = '';\r\n\t }\r\n\r\n\t k = decodeURIComponent(kstr);\r\n\t v = decodeURIComponent(vstr);\r\n\r\n\t if (!hasOwnProperty(obj, k)) {\r\n\t obj[k] = v;\r\n\t } else if (Array.isArray(obj[k])) {\r\n\t obj[k].push(v);\r\n\t } else {\r\n\t obj[k] = [obj[k], v];\r\n\t }\r\n\t }\r\n\r\n\t return obj;\r\n\t};\r\n\r\n\r\n/***/ },\r\n/* 9 */\r\n/***/ function(module, exports) {\r\n\r\n\t// Copyright Joyent, Inc. and other Node contributors.\r\n\t//\r\n\t// Permission is hereby granted, free of charge, to any person obtaining a\r\n\t// copy of this software and associated documentation files (the\r\n\t// \"Software\"), to deal in the Software without restriction, including\r\n\t// without limitation the rights to use, copy, modify, merge, publish,\r\n\t// distribute, sublicense, and/or sell copies of the Software, and to permit\r\n\t// persons to whom the Software is furnished to do so, subject to the\r\n\t// following conditions:\r\n\t//\r\n\t// The above copyright notice and this permission notice shall be included\r\n\t// in all copies or substantial portions of the Software.\r\n\t//\r\n\t// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\r\n\t// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\r\n\t// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\r\n\t// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\r\n\t// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\r\n\t// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\r\n\t// USE OR OTHER DEALINGS IN THE SOFTWARE.\r\n\r\n\t'use strict';\r\n\r\n\tvar stringifyPrimitive = function(v) {\r\n\t switch (typeof v) {\r\n\t case 'string':\r\n\t return v;\r\n\r\n\t case 'boolean':\r\n\t return v ? 'true' : 'false';\r\n\r\n\t case 'number':\r\n\t return isFinite(v) ? v : '';\r\n\r\n\t default:\r\n\t return '';\r\n\t }\r\n\t};\r\n\r\n\tmodule.exports = function(obj, sep, eq, name) {\r\n\t sep = sep || '&';\r\n\t eq = eq || '=';\r\n\t if (obj === null) {\r\n\t obj = undefined;\r\n\t }\r\n\r\n\t if (typeof obj === 'object') {\r\n\t return Object.keys(obj).map(function(k) {\r\n\t var ks = encodeURIComponent(stringifyPrimitive(k)) + eq;\r\n\t if (Array.isArray(obj[k])) {\r\n\t return obj[k].map(function(v) {\r\n\t return ks + encodeURIComponent(stringifyPrimitive(v));\r\n\t }).join(sep);\r\n\t } else {\r\n\t return ks + encodeURIComponent(stringifyPrimitive(obj[k]));\r\n\t }\r\n\t }).join(sep);\r\n\r\n\t }\r\n\r\n\t if (!name) return '';\r\n\t return encodeURIComponent(stringifyPrimitive(name)) + eq +\r\n\t encodeURIComponent(stringifyPrimitive(obj));\r\n\t};\r\n\r\n\r\n/***/ },\r\n/* 10 */\r\n/***/ function(module, exports) {\r\n\r\n\t'use strict';\r\n\r\n\tmodule.exports = function equal(a, b) {\r\n\t if (a === b) return true;\r\n\r\n\t var arrA = Array.isArray(a)\r\n\t , arrB = Array.isArray(b)\r\n\t , i;\r\n\r\n\t if (arrA && arrB) {\r\n\t if (a.length != b.length) return false;\r\n\t for (i = 0; i < a.length; i++)\r\n\t if (!equal(a[i], b[i])) return false;\r\n\t return true;\r\n\t }\r\n\r\n\t if (arrA != arrB) return false;\r\n\r\n\t if (a && b && typeof a === 'object' && typeof b === 'object') {\r\n\t var keys = Object.keys(a);\r\n\r\n\t if (keys.length !== Object.keys(b).length) return false;\r\n\r\n\t for (i = 0; i < keys.length; i++)\r\n\t if (b[keys[i]] === undefined) return false;\r\n\r\n\t for (i = 0; i < keys.length; i++)\r\n\t if(!equal(a[keys[i]], b[keys[i]])) return false;\r\n\r\n\t return true;\r\n\t }\r\n\r\n\t return false;\r\n\t};\r\n\r\n\r\n/***/ },\r\n/* 11 */\r\n/***/ function(module, exports, __webpack_require__) {\r\n\r\n\t'use strict';\r\n\r\n\r\n\tmodule.exports = {\r\n\t copy: copy,\r\n\t checkDataType: checkDataType,\r\n\t checkDataTypes: checkDataTypes,\r\n\t coerceToTypes: coerceToTypes,\r\n\t toHash: toHash,\r\n\t getProperty: getProperty,\r\n\t escapeQuotes: escapeQuotes,\r\n\t ucs2length: ucs2length,\r\n\t varOccurences: varOccurences,\r\n\t varReplace: varReplace,\r\n\t cleanUpCode: cleanUpCode,\r\n\t cleanUpVarErrors: cleanUpVarErrors,\r\n\t schemaHasRules: schemaHasRules,\r\n\t stableStringify: __webpack_require__(12),\r\n\t toQuotedString: toQuotedString,\r\n\t getPathExpr: getPathExpr,\r\n\t getPath: getPath,\r\n\t getData: getData,\r\n\t unescapeFragment: unescapeFragment,\r\n\t escapeFragment: escapeFragment,\r\n\t escapeJsonPointer: escapeJsonPointer\r\n\t};\r\n\r\n\r\n\tfunction copy(o, to) {\r\n\t to = to || {};\r\n\t for (var key in o) to[key] = o[key];\r\n\t return to;\r\n\t}\r\n\r\n\r\n\tfunction checkDataType(dataType, data, negate) {\r\n\t var EQUAL = negate ? ' !== ' : ' === '\r\n\t , AND = negate ? ' || ' : ' && '\r\n\t , OK = negate ? '!' : ''\r\n\t , NOT = negate ? '' : '!';\r\n\t switch (dataType) {\r\n\t case 'null': return data + EQUAL + 'null';\r\n\t case 'array': return OK + 'Array.isArray(' + data + ')';\r\n\t case 'object': return '(' + OK + data + AND +\r\n\t 'typeof ' + data + EQUAL + '\"object\"' + AND +\r\n\t NOT + 'Array.isArray(' + data + '))';\r\n\t case 'integer': return '(typeof ' + data + EQUAL + '\"number\"' + AND +\r\n\t NOT + '(' + data + ' % 1))';\r\n\t default: return 'typeof ' + data + EQUAL + '\"' + dataType + '\"';\r\n\t }\r\n\t}\r\n\r\n\r\n\tfunction checkDataTypes(dataTypes, data) {\r\n\t switch (dataTypes.length) {\r\n\t case 1: return checkDataType(dataTypes[0], data, true);\r\n\t default:\r\n\t var code = '';\r\n\t var types = toHash(dataTypes);\r\n\t if (types.array && types.object) {\r\n\t code = types.null ? '(': '(!' + data + ' || ';\r\n\t code += 'typeof ' + data + ' !== \"object\")';\r\n\t delete types.null;\r\n\t delete types.array;\r\n\t delete types.object;\r\n\t }\r\n\t if (types.number) delete types.integer;\r\n\t for (var t in types)\r\n\t code += (code ? ' && ' : '' ) + checkDataType(t, data, true);\r\n\r\n\t return code;\r\n\t }\r\n\t}\r\n\r\n\r\n\tvar COERCE_TO_TYPES = toHash([ 'string', 'number', 'integer', 'boolean', 'null' ]);\r\n\tfunction coerceToTypes(dataTypes) {\r\n\t if (Array.isArray(dataTypes)) {\r\n\t var types = [];\r\n\t for (var i=0; i= 0xD800 && value <= 0xDBFF && pos < len) {\r\n\t // high surrogate, and there is a next character\r\n\t value = str.charCodeAt(pos);\r\n\t if ((value & 0xFC00) == 0xDC00) pos++; // low surrogate\r\n\t }\r\n\t }\r\n\t return length;\r\n\t}\r\n\r\n\r\n\tfunction varOccurences(str, dataVar) {\r\n\t dataVar += '[^0-9]';\r\n\t var matches = str.match(new RegExp(dataVar, 'g'));\r\n\t return matches ? matches.length : 0;\r\n\t}\r\n\r\n\r\n\tfunction varReplace(str, dataVar, expr) {\r\n\t dataVar += '([^0-9])';\r\n\t expr = expr.replace(/\\$/g, '$$$$');\r\n\t return str.replace(new RegExp(dataVar, 'g'), expr + '$1');\r\n\t}\r\n\r\n\r\n\tvar EMPTY_ELSE = /else\\s*{\\s*}/g\r\n\t , EMPTY_IF_NO_ELSE = /if\\s*\\([^)]+\\)\\s*\\{\\s*\\}(?!\\s*else)/g\r\n\t , EMPTY_IF_WITH_ELSE = /if\\s*\\(([^)]+)\\)\\s*\\{\\s*\\}\\s*else(?!\\s*if)/g;\r\n\tfunction cleanUpCode(out) {\r\n\t return out.replace(EMPTY_ELSE, '')\r\n\t .replace(EMPTY_IF_NO_ELSE, '')\r\n\t .replace(EMPTY_IF_WITH_ELSE, 'if (!($1))');\r\n\t}\r\n\r\n\r\n\tvar ERRORS_REGEXP = /[^v\\.]errors/g\r\n\t , REMOVE_ERRORS = /var errors = 0;|var vErrors = null;|validate.errors = vErrors;/g\r\n\t , REMOVE_ERRORS_ASYNC = /var errors = 0;|var vErrors = null;/g\r\n\t , RETURN_VALID = 'return errors === 0;'\r\n\t , RETURN_TRUE = 'validate.errors = null; return true;'\r\n\t , RETURN_ASYNC = /if \\(errors === 0\\) return true;\\s*else throw new ValidationError\\(vErrors\\);/\r\n\t , RETURN_TRUE_ASYNC = 'return true;';\r\n\r\n\tfunction cleanUpVarErrors(out, async) {\r\n\t var matches = out.match(ERRORS_REGEXP);\r\n\t if (!matches || matches.length !== 2) return out;\r\n\t return async\r\n\t ? out.replace(REMOVE_ERRORS_ASYNC, '')\r\n\t .replace(RETURN_ASYNC, RETURN_TRUE_ASYNC)\r\n\t : out.replace(REMOVE_ERRORS, '')\r\n\t .replace(RETURN_VALID, RETURN_TRUE);\r\n\t}\r\n\r\n\r\n\tfunction schemaHasRules(schema, rules) {\r\n\t for (var key in schema) if (rules[key]) return true;\r\n\t}\r\n\r\n\r\n\tfunction toQuotedString(str) {\r\n\t return '\\'' + escapeQuotes(str) + '\\'';\r\n\t}\r\n\r\n\r\n\tfunction getPathExpr(currentPath, expr, jsonPointers, isNumber) {\r\n\t var path = jsonPointers // false by default\r\n\t ? '\\'/\\' + ' + expr + (isNumber ? '' : '.replace(/~/g, \\'~0\\').replace(/\\\\//g, \\'~1\\')')\r\n\t : (isNumber ? '\\'[\\' + ' + expr + ' + \\']\\'' : '\\'[\\\\\\'\\' + ' + expr + ' + \\'\\\\\\']\\'');\r\n\t return joinPaths(currentPath, path);\r\n\t}\r\n\r\n\r\n\tfunction getPath(currentPath, prop, jsonPointers) {\r\n\t var path = jsonPointers // false by default\r\n\t ? toQuotedString('/' + escapeJsonPointer(prop))\r\n\t : toQuotedString(getProperty(prop));\r\n\t return joinPaths(currentPath, path);\r\n\t}\r\n\r\n\r\n\tvar RELATIVE_JSON_POINTER = /^([0-9]+)(#|\\/(?:[^~]|~0|~1)*)?$/;\r\n\tfunction getData($data, lvl, paths) {\r\n\t var matches = $data.match(RELATIVE_JSON_POINTER);\r\n\t if (!matches) throw new Error('Invalid relative JSON-pointer: ' + $data);\r\n\t var up = +matches[1];\r\n\t var jsonPointer = matches[2];\r\n\t if (jsonPointer == '#') {\r\n\t if (up >= lvl) throw new Error('Cannot access property/index ' + up + ' levels up, current level is ' + lvl);\r\n\t return paths[lvl - up];\r\n\t }\r\n\r\n\t if (up > lvl) throw new Error('Cannot access data ' + up + ' levels up, current level is ' + lvl);\r\n\t var data = 'data' + ((lvl - up) || '');\r\n\t if (!jsonPointer) return data;\r\n\r\n\t var expr = data;\r\n\t var segments = jsonPointer.split('/');\r\n\t for (var i=0; i= '0' && ch <= '9') {\r\n\t string += ch;\r\n\t next();\r\n\t }\r\n\t if (ch === '.') {\r\n\t string += '.';\r\n\t while (next() && ch >= '0' && ch <= '9') {\r\n\t string += ch;\r\n\t }\r\n\t }\r\n\t if (ch === 'e' || ch === 'E') {\r\n\t string += ch;\r\n\t next();\r\n\t if (ch === '-' || ch === '+') {\r\n\t string += ch;\r\n\t next();\r\n\t }\r\n\t while (ch >= '0' && ch <= '9') {\r\n\t string += ch;\r\n\t next();\r\n\t }\r\n\t }\r\n\t number = +string;\r\n\t if (!isFinite(number)) {\r\n\t error(\"Bad number\");\r\n\t } else {\r\n\t return number;\r\n\t }\r\n\t },\r\n\t \r\n\t string = function () {\r\n\t // Parse a string value.\r\n\t var hex,\r\n\t i,\r\n\t string = '',\r\n\t uffff;\r\n\t \r\n\t // When parsing for string values, we must look for \" and \\ characters.\r\n\t if (ch === '\"') {\r\n\t while (next()) {\r\n\t if (ch === '\"') {\r\n\t next();\r\n\t return string;\r\n\t } else if (ch === '\\\\') {\r\n\t next();\r\n\t if (ch === 'u') {\r\n\t uffff = 0;\r\n\t for (i = 0; i < 4; i += 1) {\r\n\t hex = parseInt(next(), 16);\r\n\t if (!isFinite(hex)) {\r\n\t break;\r\n\t }\r\n\t uffff = uffff * 16 + hex;\r\n\t }\r\n\t string += String.fromCharCode(uffff);\r\n\t } else if (typeof escapee[ch] === 'string') {\r\n\t string += escapee[ch];\r\n\t } else {\r\n\t break;\r\n\t }\r\n\t } else {\r\n\t string += ch;\r\n\t }\r\n\t }\r\n\t }\r\n\t error(\"Bad string\");\r\n\t },\r\n\r\n\t white = function () {\r\n\r\n\t// Skip whitespace.\r\n\r\n\t while (ch && ch <= ' ') {\r\n\t next();\r\n\t }\r\n\t },\r\n\r\n\t word = function () {\r\n\r\n\t// true, false, or null.\r\n\r\n\t switch (ch) {\r\n\t case 't':\r\n\t next('t');\r\n\t next('r');\r\n\t next('u');\r\n\t next('e');\r\n\t return true;\r\n\t case 'f':\r\n\t next('f');\r\n\t next('a');\r\n\t next('l');\r\n\t next('s');\r\n\t next('e');\r\n\t return false;\r\n\t case 'n':\r\n\t next('n');\r\n\t next('u');\r\n\t next('l');\r\n\t next('l');\r\n\t return null;\r\n\t }\r\n\t error(\"Unexpected '\" + ch + \"'\");\r\n\t },\r\n\r\n\t value, // Place holder for the value function.\r\n\r\n\t array = function () {\r\n\r\n\t// Parse an array value.\r\n\r\n\t var array = [];\r\n\r\n\t if (ch === '[') {\r\n\t next('[');\r\n\t white();\r\n\t if (ch === ']') {\r\n\t next(']');\r\n\t return array; // empty array\r\n\t }\r\n\t while (ch) {\r\n\t array.push(value());\r\n\t white();\r\n\t if (ch === ']') {\r\n\t next(']');\r\n\t return array;\r\n\t }\r\n\t next(',');\r\n\t white();\r\n\t }\r\n\t }\r\n\t error(\"Bad array\");\r\n\t },\r\n\r\n\t object = function () {\r\n\r\n\t// Parse an object value.\r\n\r\n\t var key,\r\n\t object = {};\r\n\r\n\t if (ch === '{') {\r\n\t next('{');\r\n\t white();\r\n\t if (ch === '}') {\r\n\t next('}');\r\n\t return object; // empty object\r\n\t }\r\n\t while (ch) {\r\n\t key = string();\r\n\t white();\r\n\t next(':');\r\n\t if (Object.hasOwnProperty.call(object, key)) {\r\n\t error('Duplicate key \"' + key + '\"');\r\n\t }\r\n\t object[key] = value();\r\n\t white();\r\n\t if (ch === '}') {\r\n\t next('}');\r\n\t return object;\r\n\t }\r\n\t next(',');\r\n\t white();\r\n\t }\r\n\t }\r\n\t error(\"Bad object\");\r\n\t };\r\n\r\n\tvalue = function () {\r\n\r\n\t// Parse a JSON value. It could be an object, an array, a string, a number,\r\n\t// or a word.\r\n\r\n\t white();\r\n\t switch (ch) {\r\n\t case '{':\r\n\t return object();\r\n\t case '[':\r\n\t return array();\r\n\t case '\"':\r\n\t return string();\r\n\t case '-':\r\n\t return number();\r\n\t default:\r\n\t return ch >= '0' && ch <= '9' ? number() : word();\r\n\t }\r\n\t};\r\n\r\n\t// Return the json_parse function. It will have access to all of the above\r\n\t// functions and variables.\r\n\r\n\tmodule.exports = function (source, reviver) {\r\n\t var result;\r\n\t \r\n\t text = source;\r\n\t at = 0;\r\n\t ch = ' ';\r\n\t result = value();\r\n\t white();\r\n\t if (ch) {\r\n\t error(\"Syntax error\");\r\n\t }\r\n\r\n\t // If there is a reviver function, we recursively walk the new structure,\r\n\t // passing each name/value pair to the reviver function for possible\r\n\t // transformation, starting with a temporary root object that holds the result\r\n\t // in an empty key. If there is not a reviver function, we simply return the\r\n\t // result.\r\n\r\n\t return typeof reviver === 'function' ? (function walk(holder, key) {\r\n\t var k, v, value = holder[key];\r\n\t if (value && typeof value === 'object') {\r\n\t for (k in value) {\r\n\t if (Object.prototype.hasOwnProperty.call(value, k)) {\r\n\t v = walk(value, k);\r\n\t if (v !== undefined) {\r\n\t value[k] = v;\r\n\t } else {\r\n\t delete value[k];\r\n\t }\r\n\t }\r\n\t }\r\n\t }\r\n\t return reviver.call(holder, key, value);\r\n\t }({'': result}, '')) : result;\r\n\t};\r\n\r\n\r\n/***/ },\r\n/* 15 */\r\n/***/ function(module, exports) {\r\n\r\n\tvar cx = /[\\u0000\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]/g,\r\n\t escapable = /[\\\\\\\"\\x00-\\x1f\\x7f-\\x9f\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]/g,\r\n\t gap,\r\n\t indent,\r\n\t meta = { // table of character substitutions\r\n\t '\\b': '\\\\b',\r\n\t '\\t': '\\\\t',\r\n\t '\\n': '\\\\n',\r\n\t '\\f': '\\\\f',\r\n\t '\\r': '\\\\r',\r\n\t '\"' : '\\\\\"',\r\n\t '\\\\': '\\\\\\\\'\r\n\t },\r\n\t rep;\r\n\r\n\tfunction quote(string) {\r\n\t // If the string contains no control characters, no quote characters, and no\r\n\t // backslash characters, then we can safely slap some quotes around it.\r\n\t // Otherwise we must also replace the offending characters with safe escape\r\n\t // sequences.\r\n\t \r\n\t escapable.lastIndex = 0;\r\n\t return escapable.test(string) ? '\"' + string.replace(escapable, function (a) {\r\n\t var c = meta[a];\r\n\t return typeof c === 'string' ? c :\r\n\t '\\\\u' + ('0000' + a.charCodeAt(0).toString(16)).slice(-4);\r\n\t }) + '\"' : '\"' + string + '\"';\r\n\t}\r\n\r\n\tfunction str(key, holder) {\r\n\t // Produce a string from holder[key].\r\n\t var i, // The loop counter.\r\n\t k, // The member key.\r\n\t v, // The member value.\r\n\t length,\r\n\t mind = gap,\r\n\t partial,\r\n\t value = holder[key];\r\n\t \r\n\t // If the value has a toJSON method, call it to obtain a replacement value.\r\n\t if (value && typeof value === 'object' &&\r\n\t typeof value.toJSON === 'function') {\r\n\t value = value.toJSON(key);\r\n\t }\r\n\t \r\n\t // If we were called with a replacer function, then call the replacer to\r\n\t // obtain a replacement value.\r\n\t if (typeof rep === 'function') {\r\n\t value = rep.call(holder, key, value);\r\n\t }\r\n\t \r\n\t // What happens next depends on the value's type.\r\n\t switch (typeof value) {\r\n\t case 'string':\r\n\t return quote(value);\r\n\t \r\n\t case 'number':\r\n\t // JSON numbers must be finite. Encode non-finite numbers as null.\r\n\t return isFinite(value) ? String(value) : 'null';\r\n\t \r\n\t case 'boolean':\r\n\t case 'null':\r\n\t // If the value is a boolean or null, convert it to a string. Note:\r\n\t // typeof null does not produce 'null'. The case is included here in\r\n\t // the remote chance that this gets fixed someday.\r\n\t return String(value);\r\n\t \r\n\t case 'object':\r\n\t if (!value) return 'null';\r\n\t gap += indent;\r\n\t partial = [];\r\n\t \r\n\t // Array.isArray\r\n\t if (Object.prototype.toString.apply(value) === '[object Array]') {\r\n\t length = value.length;\r\n\t for (i = 0; i < length; i += 1) {\r\n\t partial[i] = str(i, value) || 'null';\r\n\t }\r\n\t \r\n\t // Join all of the elements together, separated with commas, and\r\n\t // wrap them in brackets.\r\n\t v = partial.length === 0 ? '[]' : gap ?\r\n\t '[\\n' + gap + partial.join(',\\n' + gap) + '\\n' + mind + ']' :\r\n\t '[' + partial.join(',') + ']';\r\n\t gap = mind;\r\n\t return v;\r\n\t }\r\n\t \r\n\t // If the replacer is an array, use it to select the members to be\r\n\t // stringified.\r\n\t if (rep && typeof rep === 'object') {\r\n\t length = rep.length;\r\n\t for (i = 0; i < length; i += 1) {\r\n\t k = rep[i];\r\n\t if (typeof k === 'string') {\r\n\t v = str(k, value);\r\n\t if (v) {\r\n\t partial.push(quote(k) + (gap ? ': ' : ':') + v);\r\n\t }\r\n\t }\r\n\t }\r\n\t }\r\n\t else {\r\n\t // Otherwise, iterate through all of the keys in the object.\r\n\t for (k in value) {\r\n\t if (Object.prototype.hasOwnProperty.call(value, k)) {\r\n\t v = str(k, value);\r\n\t if (v) {\r\n\t partial.push(quote(k) + (gap ? ': ' : ':') + v);\r\n\t }\r\n\t }\r\n\t }\r\n\t }\r\n\t \r\n\t // Join all of the member texts together, separated with commas,\r\n\t // and wrap them in braces.\r\n\r\n\t v = partial.length === 0 ? '{}' : gap ?\r\n\t '{\\n' + gap + partial.join(',\\n' + gap) + '\\n' + mind + '}' :\r\n\t '{' + partial.join(',') + '}';\r\n\t gap = mind;\r\n\t return v;\r\n\t }\r\n\t}\r\n\r\n\tmodule.exports = function (value, replacer, space) {\r\n\t var i;\r\n\t gap = '';\r\n\t indent = '';\r\n\t \r\n\t // If the space parameter is a number, make an indent string containing that\r\n\t // many spaces.\r\n\t if (typeof space === 'number') {\r\n\t for (i = 0; i < space; i += 1) {\r\n\t indent += ' ';\r\n\t }\r\n\t }\r\n\t // If the space parameter is a string, it will be used as the indent string.\r\n\t else if (typeof space === 'string') {\r\n\t indent = space;\r\n\t }\r\n\r\n\t // If there is a replacer, it must be a function or an array.\r\n\t // Otherwise, throw an error.\r\n\t rep = replacer;\r\n\t if (replacer && typeof replacer !== 'function'\r\n\t && (typeof replacer !== 'object' || typeof replacer.length !== 'number')) {\r\n\t throw new Error('JSON.stringify');\r\n\t }\r\n\t \r\n\t // Make a fake root object containing our value under the key of ''.\r\n\t // Return the result of stringifying the value.\r\n\t return str('', {'': value});\r\n\t};\r\n\r\n\r\n/***/ },\r\n/* 16 */\r\n/***/ function(module, exports, __webpack_require__) {\r\n\r\n\t'use strict';\r\n\r\n\tvar util = __webpack_require__(11);\r\n\r\n\tmodule.exports = SchemaObject;\r\n\r\n\tfunction SchemaObject(obj) {\r\n\t util.copy(obj, this);\r\n\t}\r\n\r\n\r\n/***/ },\r\n/* 17 */\r\n/***/ function(module, exports, __webpack_require__) {\r\n\r\n\t'use strict';\r\n\r\n\tmodule.exports = {\r\n\t setup: setupAsync,\r\n\t compile: compileAsync\r\n\t};\r\n\r\n\r\n\tvar util = __webpack_require__(11);\r\n\r\n\tvar ASYNC = {\r\n\t '*': checkGenerators,\r\n\t 'co*': checkGenerators,\r\n\t 'es7': checkAsyncFunction\r\n\t};\r\n\r\n\tvar TRANSPILE = {\r\n\t 'nodent': getNodent,\r\n\t 'regenerator': getRegenerator\r\n\t};\r\n\r\n\tvar MODES = [\r\n\t { async: 'co*' },\r\n\t { async: 'es7', transpile: 'nodent' },\r\n\t { async: 'co*', transpile: 'regenerator' }\r\n\t];\r\n\r\n\r\n\tvar regenerator, nodent;\r\n\r\n\r\n\tfunction setupAsync(opts, required) {\r\n\t if (required !== false) required = true;\r\n\t var async = opts.async\r\n\t , transpile = opts.transpile\r\n\t , check;\r\n\r\n\t switch (typeof transpile) {\r\n\t case 'string':\r\n\t var get = TRANSPILE[transpile];\r\n\t if (!get) throw new Error('bad transpiler: ' + transpile);\r\n\t return (opts._transpileFunc = get(opts, required));\r\n\t case 'undefined':\r\n\t case 'boolean':\r\n\t if (typeof async == 'string') {\r\n\t check = ASYNC[async];\r\n\t if (!check) throw new Error('bad async mode: ' + async);\r\n\t return (opts.transpile = check(opts, required));\r\n\t }\r\n\r\n\t for (var i=0; i 2) res = slice.call(arguments, 1);\r\n\t resolve(res);\r\n\t });\r\n\t });\r\n\t}\r\n\r\n\t/**\r\n\t * Convert an array of \"yieldables\" to a promise.\r\n\t * Uses `Promise.all()` internally.\r\n\t *\r\n\t * @param {Array} obj\r\n\t * @return {Promise}\r\n\t * @api private\r\n\t */\r\n\r\n\tfunction arrayToPromise(obj) {\r\n\t return Promise.all(obj.map(toPromise, this));\r\n\t}\r\n\r\n\t/**\r\n\t * Convert an object of \"yieldables\" to a promise.\r\n\t * Uses `Promise.all()` internally.\r\n\t *\r\n\t * @param {Object} obj\r\n\t * @return {Promise}\r\n\t * @api private\r\n\t */\r\n\r\n\tfunction objectToPromise(obj){\r\n\t var results = new obj.constructor();\r\n\t var keys = Object.keys(obj);\r\n\t var promises = [];\r\n\t for (var i = 0; i < keys.length; i++) {\r\n\t var key = keys[i];\r\n\t var promise = toPromise.call(this, obj[key]);\r\n\t if (promise && isPromise(promise)) defer(promise, key);\r\n\t else results[key] = obj[key];\r\n\t }\r\n\t return Promise.all(promises).then(function () {\r\n\t return results;\r\n\t });\r\n\r\n\t function defer(promise, key) {\r\n\t // predefine the key in the result\r\n\t results[key] = undefined;\r\n\t promises.push(promise.then(function (res) {\r\n\t results[key] = res;\r\n\t }));\r\n\t }\r\n\t}\r\n\r\n\t/**\r\n\t * Check if `obj` is a promise.\r\n\t *\r\n\t * @param {Object} obj\r\n\t * @return {Boolean}\r\n\t * @api private\r\n\t */\r\n\r\n\tfunction isPromise(obj) {\r\n\t return 'function' == typeof obj.then;\r\n\t}\r\n\r\n\t/**\r\n\t * Check if `obj` is a generator.\r\n\t *\r\n\t * @param {Mixed} obj\r\n\t * @return {Boolean}\r\n\t * @api private\r\n\t */\r\n\r\n\tfunction isGenerator(obj) {\r\n\t return 'function' == typeof obj.next && 'function' == typeof obj.throw;\r\n\t}\r\n\r\n\t/**\r\n\t * Check if `obj` is a generator function.\r\n\t *\r\n\t * @param {Mixed} obj\r\n\t * @return {Boolean}\r\n\t * @api private\r\n\t */\r\n\tfunction isGeneratorFunction(obj) {\r\n\t var constructor = obj.constructor;\r\n\t if (!constructor) return false;\r\n\t if ('GeneratorFunction' === constructor.name || 'GeneratorFunction' === constructor.displayName) return true;\r\n\t return isGenerator(constructor.prototype);\r\n\t}\r\n\r\n\t/**\r\n\t * Check for plain object.\r\n\t *\r\n\t * @param {Mixed} val\r\n\t * @return {Boolean}\r\n\t * @api private\r\n\t */\r\n\r\n\tfunction isObject(val) {\r\n\t return Object == val.constructor;\r\n\t}\r\n\r\n\r\n/***/ },\r\n/* 20 */\r\n/***/ function(module, exports) {\r\n\r\n\t'use strict';\r\n\r\n\tmodule.exports = ValidationError;\r\n\r\n\r\n\tfunction ValidationError(errors) {\r\n\t this.message = 'validation failed';\r\n\t this.errors = errors;\r\n\t this.ajv = this.validation = true;\r\n\t}\r\n\r\n\r\n\tValidationError.prototype = Object.create(Error.prototype);\r\n\tValidationError.prototype.constructor = ValidationError;\r\n\r\n\r\n/***/ },\r\n/* 21 */\r\n/***/ function(module, exports) {\r\n\r\n\t'use strict';\r\n\r\n\r\n\tvar Cache = module.exports = function Cache() {\r\n\t this._cache = {};\r\n\t};\r\n\r\n\r\n\tCache.prototype.put = function Cache_put(key, value) {\r\n\t this._cache[key] = value;\r\n\t};\r\n\r\n\r\n\tCache.prototype.get = function Cache_get(key) {\r\n\t return this._cache[key];\r\n\t};\r\n\r\n\r\n\tCache.prototype.del = function Cache_del(key) {\r\n\t delete this._cache[key];\r\n\t};\r\n\r\n\r\n\tCache.prototype.clear = function Cache_clear() {\r\n\t this._cache = {};\r\n\t};\r\n\r\n\r\n/***/ },\r\n/* 22 */\r\n/***/ function(module, exports, __webpack_require__) {\r\n\r\n\t'use strict';\r\n\r\n\tvar util = __webpack_require__(11);\r\n\r\n\tvar DATE = /^\\d\\d\\d\\d-(\\d\\d)-(\\d\\d)$/;\r\n\tvar DAYS = [0,31,29,31,30,31,30,31,31,30,31,30,31];\r\n\tvar TIME = /^(\\d\\d):(\\d\\d):(\\d\\d)(\\.\\d+)?(z|[+-]\\d\\d:\\d\\d)?$/i;\r\n\tvar HOSTNAME = /^[a-z](?:(?:[-0-9a-z]{0,61})?[0-9a-z])?(\\.[a-z](?:(?:[-0-9a-z]{0,61})?[0-9a-z])?)*$/i;\r\n\tvar URI = /^(?:[a-z][a-z0-9+\\-.]*:)?(?:\\/?\\/(?:(?:[a-z0-9\\-._~!$&'()*+,;=:]|%[0-9a-f]{2})*@)?(?:\\[(?:(?:(?:(?:[0-9a-f]{1,4}:){6}|::(?:[0-9a-f]{1,4}:){5}|(?:[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){4}|(?:(?:[0-9a-f]{1,4}:){0,1}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){3}|(?:(?:[0-9a-f]{1,4}:){0,2}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){2}|(?:(?:[0-9a-f]{1,4}:){0,3}[0-9a-f]{1,4})?::[0-9a-f]{1,4}:|(?:(?:[0-9a-f]{1,4}:){0,4}[0-9a-f]{1,4})?::)(?:[0-9a-f]{1,4}:[0-9a-f]{1,4}|(?:(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?)\\.){3}(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?))|(?:(?:[0-9a-f]{1,4}:){0,5}[0-9a-f]{1,4})?::[0-9a-f]{1,4}|(?:(?:[0-9a-f]{1,4}:){0,6}[0-9a-f]{1,4})?::)|[Vv][0-9a-f]+\\.[a-z0-9\\-._~!$&'()*+,;=:]+)\\]|(?:(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?)\\.){3}(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?)|(?:[a-z0-9\\-._~!$&'()*+,;=]|%[0-9a-f]{2})*)(?::\\d*)?(?:\\/(?:[a-z0-9\\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*|\\/(?:(?:[a-z0-9\\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})+(?:\\/(?:[a-z0-9\\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*)?|(?:[a-z0-9\\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})+(?:\\/(?:[a-z0-9\\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*)(?:\\?(?:[a-z0-9\\-._~!$&'()*+,;=:@\\/?]|%[0-9a-f]{2})*)?(?:\\#(?:[a-z0-9\\-._~!$&'()*+,;=:@\\/?]|%[0-9a-f]{2})*)?$/i;\r\n\tvar UUID = /^(?:urn\\:uuid\\:)?[0-9a-f]{8}-(?:[0-9a-f]{4}-){3}[0-9a-f]{12}$/i;\r\n\tvar JSON_POINTER = /^(?:\\/(?:[^~\\/]|~0|~1)+)*(?:\\/)?$|^\\#(?:\\/(?:[a-z0-9_\\-\\.!$&'()*+,;:=@]|%[0-9a-f]{2}|~0|~1)+)*(?:\\/)?$/i;\r\n\tvar RELATIVE_JSON_POINTER = /^(?:0|[1-9][0-9]*)(?:\\#|(?:\\/(?:[^~\\/]|~0|~1)+)*(?:\\/)?)$/;\r\n\r\n\r\n\tmodule.exports = formats;\r\n\r\n\tfunction formats(mode) {\r\n\t mode = mode == 'full' ? 'full' : 'fast';\r\n\t var formatDefs = util.copy(formats[mode]);\r\n\t for (var fName in formats.compare) {\r\n\t formatDefs[fName] = {\r\n\t validate: formatDefs[fName],\r\n\t compare: formats.compare[fName]\r\n\t };\r\n\t }\r\n\t return formatDefs;\r\n\t}\r\n\r\n\r\n\tformats.fast = {\r\n\t // date: http://tools.ietf.org/html/rfc3339#section-5.6\r\n\t date: /^\\d\\d\\d\\d-[0-1]\\d-[0-3]\\d$/,\r\n\t // date-time: http://tools.ietf.org/html/rfc3339#section-5.6\r\n\t time: /^[0-2]\\d:[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:z|[+-]\\d\\d:\\d\\d)?$/i,\r\n\t 'date-time': /^\\d\\d\\d\\d-[0-1]\\d-[0-3]\\d[t\\s][0-2]\\d:[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:z|[+-]\\d\\d:\\d\\d)$/i,\r\n\t // uri: https://github.com/mafintosh/is-my-json-valid/blob/master/formats.js\r\n\t uri: /^(?:[a-z][a-z0-9+-.]*)?(?:\\:|\\/)\\/?[^\\s]*$/i,\r\n\t // email (sources from jsen validator):\r\n\t // http://stackoverflow.com/questions/201323/using-a-regular-expression-to-validate-an-email-address#answer-8829363\r\n\t // http://www.w3.org/TR/html5/forms.html#valid-e-mail-address (search for 'willful violation')\r\n\t email: /^[a-z0-9.!#$%&'*+\\/=?^_`{|}~-]+@[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\\.[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?)*$/i,\r\n\t hostname: HOSTNAME,\r\n\t // optimized https://www.safaribooksonline.com/library/view/regular-expressions-cookbook/9780596802837/ch07s16.html\r\n\t ipv4: /^(?:(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?)\\.){3}(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?)$/,\r\n\t // optimized http://stackoverflow.com/questions/53497/regular-expression-that-matches-valid-ipv6-addresses\r\n\t ipv6: /^\\s*(?:(?:(?:[0-9a-f]{1,4}:){7}(?:[0-9a-f]{1,4}|:))|(?:(?:[0-9a-f]{1,4}:){6}(?::[0-9a-f]{1,4}|(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3})|:))|(?:(?:[0-9a-f]{1,4}:){5}(?:(?:(?::[0-9a-f]{1,4}){1,2})|:(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3})|:))|(?:(?:[0-9a-f]{1,4}:){4}(?:(?:(?::[0-9a-f]{1,4}){1,3})|(?:(?::[0-9a-f]{1,4})?:(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){3}(?:(?:(?::[0-9a-f]{1,4}){1,4})|(?:(?::[0-9a-f]{1,4}){0,2}:(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){2}(?:(?:(?::[0-9a-f]{1,4}){1,5})|(?:(?::[0-9a-f]{1,4}){0,3}:(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){1}(?:(?:(?::[0-9a-f]{1,4}){1,6})|(?:(?::[0-9a-f]{1,4}){0,4}:(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(?::(?:(?:(?::[0-9a-f]{1,4}){1,7})|(?:(?::[0-9a-f]{1,4}){0,5}:(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:)))(?:%.+)?\\s*$/i,\r\n\t regex: regex,\r\n\t // uuid: http://tools.ietf.org/html/rfc4122\r\n\t uuid: UUID,\r\n\t // JSON-pointer: https://tools.ietf.org/html/rfc6901\r\n\t // uri fragment: https://tools.ietf.org/html/rfc3986#appendix-A\r\n\t 'json-pointer': JSON_POINTER,\r\n\t // relative JSON-pointer: http://tools.ietf.org/html/draft-luff-relative-json-pointer-00\r\n\t 'relative-json-pointer': RELATIVE_JSON_POINTER\r\n\t};\r\n\r\n\r\n\tformats.full = {\r\n\t date: date,\r\n\t time: time,\r\n\t 'date-time': date_time,\r\n\t uri: uri,\r\n\t email: /^[a-z0-9!#$%&'*+\\/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&''*+\\/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$/i,\r\n\t hostname: hostname,\r\n\t ipv4: /^(?:(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?)\\.){3}(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?)$/,\r\n\t ipv6: /^\\s*(?:(?:(?:[0-9a-f]{1,4}:){7}(?:[0-9a-f]{1,4}|:))|(?:(?:[0-9a-f]{1,4}:){6}(?::[0-9a-f]{1,4}|(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3})|:))|(?:(?:[0-9a-f]{1,4}:){5}(?:(?:(?::[0-9a-f]{1,4}){1,2})|:(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3})|:))|(?:(?:[0-9a-f]{1,4}:){4}(?:(?:(?::[0-9a-f]{1,4}){1,3})|(?:(?::[0-9a-f]{1,4})?:(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){3}(?:(?:(?::[0-9a-f]{1,4}){1,4})|(?:(?::[0-9a-f]{1,4}){0,2}:(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){2}(?:(?:(?::[0-9a-f]{1,4}){1,5})|(?:(?::[0-9a-f]{1,4}){0,3}:(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){1}(?:(?:(?::[0-9a-f]{1,4}){1,6})|(?:(?::[0-9a-f]{1,4}){0,4}:(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(?::(?:(?:(?::[0-9a-f]{1,4}){1,7})|(?:(?::[0-9a-f]{1,4}){0,5}:(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:)))(?:%.+)?\\s*$/i,\r\n\t regex: regex,\r\n\t uuid: UUID,\r\n\t 'json-pointer': JSON_POINTER,\r\n\t 'relative-json-pointer': RELATIVE_JSON_POINTER\r\n\t};\r\n\r\n\r\n\tformats.compare = {\r\n\t date: compareDate,\r\n\t time: compareTime,\r\n\t 'date-time': compareDateTime\r\n\t};\r\n\r\n\r\n\tfunction date(str) {\r\n\t // full-date from http://tools.ietf.org/html/rfc3339#section-5.6\r\n\t var matches = str.match(DATE);\r\n\t if (!matches) return false;\r\n\r\n\t var month = +matches[1];\r\n\t var day = +matches[2];\r\n\t return month >= 1 && month <= 12 && day >= 1 && day <= DAYS[month];\r\n\t}\r\n\r\n\r\n\tfunction time(str, full) {\r\n\t var matches = str.match(TIME);\r\n\t if (!matches) return false;\r\n\r\n\t var hour = matches[1];\r\n\t var minute = matches[2];\r\n\t var second = matches[3];\r\n\t var timeZone = matches[5];\r\n\t return hour <= 23 && minute <= 59 && second <= 59 && (!full || timeZone);\r\n\t}\r\n\r\n\r\n\tvar DATE_TIME_SEPARATOR = /t|\\s/i;\r\n\tfunction date_time(str) {\r\n\t // http://tools.ietf.org/html/rfc3339#section-5.6\r\n\t var dateTime = str.split(DATE_TIME_SEPARATOR);\r\n\t return date(dateTime[0]) && time(dateTime[1], true);\r\n\t}\r\n\r\n\r\n\tfunction hostname(str) {\r\n\t // http://tools.ietf.org/html/rfc1034#section-3.5\r\n\t return str.length <= 255 && HOSTNAME.test(str);\r\n\t}\r\n\r\n\r\n\tvar NOT_URI_FRAGMENT = /\\/|\\:/;\r\n\tfunction uri(str) {\r\n\t // http://jmrware.com/articles/2009/uri_regexp/URI_regex.html + optional protocol + required \".\"\r\n\t return NOT_URI_FRAGMENT.test(str) && URI.test(str);\r\n\t}\r\n\r\n\r\n\tfunction regex(str) {\r\n\t try {\r\n\t new RegExp(str);\r\n\t return true;\r\n\t } catch(e) {\r\n\t return false;\r\n\t }\r\n\t}\r\n\r\n\r\n\tfunction compareDate(d1, d2) {\r\n\t if (!(d1 && d2)) return;\r\n\t if (d1 > d2) return 1;\r\n\t if (d1 < d2) return -1;\r\n\t if (d1 === d2) return 0;\r\n\t}\r\n\r\n\r\n\tfunction compareTime(t1, t2) {\r\n\t if (!(t1 && t2)) return;\r\n\t t1 = t1.match(TIME);\r\n\t t2 = t2.match(TIME);\r\n\t if (!(t1 && t2)) return;\r\n\t t1 = t1[1] + t1[2] + t1[3] + (t1[4]||'');\r\n\t t2 = t2[1] + t2[2] + t2[3] + (t2[4]||'');\r\n\t if (t1 > t2) return 1;\r\n\t if (t1 < t2) return -1;\r\n\t if (t1 === t2) return 0;\r\n\t}\r\n\r\n\r\n\tfunction compareDateTime(dt1, dt2) {\r\n\t if (!(dt1 && dt2)) return;\r\n\t dt1 = dt1.split(DATE_TIME_SEPARATOR);\r\n\t dt2 = dt2.split(DATE_TIME_SEPARATOR);\r\n\t var res = compareDate(dt1[0], dt2[0]);\r\n\t if (res === undefined) return;\r\n\t return res || compareTime(dt1[1], dt2[1]);\r\n\t}\r\n\r\n\r\n/***/ },\r\n/* 23 */\r\n/***/ function(module, exports, __webpack_require__) {\r\n\r\n\t'use strict';\r\n\r\n\tvar ruleModules = __webpack_require__(24)\r\n\t , util = __webpack_require__(11);\r\n\r\n\tmodule.exports = function rules() {\r\n\t var RULES = [\r\n\t { type: 'number',\r\n\t rules: [ 'maximum', 'minimum', 'multipleOf'] },\r\n\t { type: 'string',\r\n\t rules: [ 'maxLength', 'minLength', 'pattern', 'format' ] },\r\n\t { type: 'array',\r\n\t rules: [ 'maxItems', 'minItems', 'uniqueItems', 'items' ] },\r\n\t { type: 'object',\r\n\t rules: [ 'maxProperties', 'minProperties', 'required', 'dependencies', 'properties' ] },\r\n\t { rules: [ '$ref', 'enum', 'not', 'anyOf', 'oneOf', 'allOf' ] }\r\n\t ];\r\n\r\n\t RULES.all = [ 'type', 'additionalProperties', 'patternProperties' ];\r\n\t RULES.keywords = [ 'additionalItems', '$schema', 'id', 'title', 'description', 'default' ];\r\n\t RULES.types = [ 'number', 'integer', 'string', 'array', 'object', 'boolean', 'null' ];\r\n\r\n\t RULES.forEach(function (group) {\r\n\t group.rules = group.rules.map(function (keyword) {\r\n\t RULES.all.push(keyword);\r\n\t return {\r\n\t keyword: keyword,\r\n\t code: ruleModules[keyword]\r\n\t };\r\n\t });\r\n\t });\r\n\r\n\t RULES.keywords = util.toHash(RULES.all.concat(RULES.keywords));\r\n\t RULES.all = util.toHash(RULES.all);\r\n\t RULES.types = util.toHash(RULES.types);\r\n\r\n\t return RULES;\r\n\t};\r\n\r\n\r\n/***/ },\r\n/* 24 */\r\n/***/ function(module, exports, __webpack_require__) {\r\n\r\n\t'use strict';\r\n\r\n\t//all requires must be explicit because browserify won't work with dynamic requires\r\n\tmodule.exports = {\r\n\t '$ref': __webpack_require__(25),\r\n\t allOf: __webpack_require__(26),\r\n\t anyOf: __webpack_require__(27),\r\n\t dependencies: __webpack_require__(28),\r\n\t enum: __webpack_require__(29),\r\n\t format: __webpack_require__(30),\r\n\t items: __webpack_require__(31),\r\n\t maximum: __webpack_require__(32),\r\n\t minimum: __webpack_require__(32),\r\n\t maxItems: __webpack_require__(33),\r\n\t minItems: __webpack_require__(33),\r\n\t maxLength: __webpack_require__(34),\r\n\t minLength: __webpack_require__(34),\r\n\t maxProperties: __webpack_require__(35),\r\n\t minProperties: __webpack_require__(35),\r\n\t multipleOf: __webpack_require__(36),\r\n\t not: __webpack_require__(37),\r\n\t oneOf: __webpack_require__(38),\r\n\t pattern: __webpack_require__(39),\r\n\t properties: __webpack_require__(40),\r\n\t required: __webpack_require__(41),\r\n\t uniqueItems: __webpack_require__(42),\r\n\t validate: __webpack_require__(18)\r\n\t};\r\n\r\n\r\n/***/ },\r\n/* 25 */\r\n/***/ function(module, exports) {\r\n\r\n\t'use strict';\r\n\tmodule.exports = function generate_ref(it, $keyword) {\r\n\t var out = ' ';\r\n\t var $lvl = it.level;\r\n\t var $dataLvl = it.dataLevel;\r\n\t var $schema = it.schema[$keyword];\r\n\t var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\r\n\t var $breakOnError = !it.opts.allErrors;\r\n\t var $errorKeyword;\r\n\t var $data = 'data' + ($dataLvl || '');\r\n\t var $valid = 'valid' + $lvl;\r\n\t var $async, $refCode;\r\n\t if ($schema == '#' || $schema == '#/') {\r\n\t if (it.isRoot) {\r\n\t $async = it.async;\r\n\t $refCode = 'validate';\r\n\t } else {\r\n\t $async = it.root.schema.$async === true;\r\n\t $refCode = 'root.refVal[0]';\r\n\t }\r\n\t } else {\r\n\t var $refVal = it.resolveRef(it.baseId, $schema, it.isRoot);\r\n\t if ($refVal === undefined) {\r\n\t var $message = 'can\\'t resolve reference ' + $schema + ' from id ' + it.baseId;\r\n\t if (it.opts.missingRefs == 'fail') {\r\n\t console.log($message);\r\n\t var $$outStack = $$outStack || [];\r\n\t $$outStack.push(out);\r\n\t out = ''; /* istanbul ignore else */\r\n\t if (it.createErrors !== false) {\r\n\t out += ' { keyword: \\'' + ($errorKeyword || '$ref') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: \"' + ($errSchemaPath) + '\" , params: { ref: \\'' + (it.util.escapeQuotes($schema)) + '\\' } ';\r\n\t if (it.opts.messages !== false) {\r\n\t out += ' , message: \\'can\\\\\\'t resolve reference ' + (it.util.escapeQuotes($schema)) + '\\' ';\r\n\t }\r\n\t if (it.opts.verbose) {\r\n\t out += ' , schema: ' + (it.util.toQuotedString($schema)) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\r\n\t }\r\n\t out += ' } ';\r\n\t } else {\r\n\t out += ' {} ';\r\n\t }\r\n\t var __err = out;\r\n\t out = $$outStack.pop();\r\n\t if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */\r\n\t if (it.async) {\r\n\t out += ' throw new ValidationError([' + (__err) + ']); ';\r\n\t } else {\r\n\t out += ' validate.errors = [' + (__err) + ']; return false; ';\r\n\t }\r\n\t } else {\r\n\t out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\r\n\t }\r\n\t if ($breakOnError) {\r\n\t out += ' if (false) { ';\r\n\t }\r\n\t } else if (it.opts.missingRefs == 'ignore') {\r\n\t console.log($message);\r\n\t if ($breakOnError) {\r\n\t out += ' if (true) { ';\r\n\t }\r\n\t } else {\r\n\t var $error = new Error($message);\r\n\t $error.missingRef = it.resolve.url(it.baseId, $schema);\r\n\t $error.missingSchema = it.resolve.normalizeId(it.resolve.fullPath($error.missingRef));\r\n\t throw $error;\r\n\t }\r\n\t } else if ($refVal.inline) {\r\n\t var $it = it.util.copy(it);\r\n\t $it.level++;\r\n\t $it.schema = $refVal.schema;\r\n\t $it.schemaPath = '';\r\n\t $it.errSchemaPath = $schema;\r\n\t var $code = it.validate($it).replace(/validate\\.schema/g, $refVal.code);\r\n\t out += ' ' + ($code) + ' ';\r\n\t if ($breakOnError) {\r\n\t out += ' if (valid' + ($it.level) + ') { ';\r\n\t }\r\n\t } else {\r\n\t $async = $refVal.async;\r\n\t $refCode = $refVal.code;\r\n\t }\r\n\t }\r\n\t if ($refCode) {\r\n\t var $$outStack = $$outStack || [];\r\n\t $$outStack.push(out);\r\n\t out = '';\r\n\t if (it.opts.passContext) {\r\n\t out += ' ' + ($refCode) + '.call(this, ';\r\n\t } else {\r\n\t out += ' ' + ($refCode) + '( ';\r\n\t }\r\n\t out += ' ' + ($data) + ', (dataPath || \\'\\')';\r\n\t if (it.errorPath != '\"\"') {\r\n\t out += ' + ' + (it.errorPath);\r\n\t }\r\n\t if ($dataLvl) {\r\n\t out += ' , data' + (($dataLvl - 1) || '') + ' , ' + (it.dataPathArr[$dataLvl]) + ' ';\r\n\t } else {\r\n\t out += ' , parentData , parentDataProperty ';\r\n\t }\r\n\t out += ') ';\r\n\t var __callValidate = out;\r\n\t out = $$outStack.pop();\r\n\t if ($async) {\r\n\t if (!it.async) throw new Error('async schema referenced by sync schema');\r\n\t out += ' try { ';\r\n\t if ($breakOnError) {\r\n\t out += 'var ' + ($valid) + ' =';\r\n\t }\r\n\t out += ' ' + (it.yieldAwait) + ' ' + (__callValidate) + '; } catch (e) { if (!(e instanceof ValidationError)) throw e; if (vErrors === null) vErrors = e.errors; else vErrors = vErrors.concat(e.errors); errors = vErrors.length; } ';\r\n\t if ($breakOnError) {\r\n\t out += ' if (' + ($valid) + ') { ';\r\n\t }\r\n\t } else {\r\n\t out += ' if (!' + (__callValidate) + ') { if (vErrors === null) vErrors = ' + ($refCode) + '.errors; else vErrors = vErrors.concat(' + ($refCode) + '.errors); errors = vErrors.length; } ';\r\n\t if ($breakOnError) {\r\n\t out += ' else { ';\r\n\t }\r\n\t }\r\n\t }\r\n\t return out;\r\n\t}\r\n\r\n\r\n/***/ },\r\n/* 26 */\r\n/***/ function(module, exports) {\r\n\r\n\t'use strict';\r\n\tmodule.exports = function generate_allOf(it, $keyword) {\r\n\t var out = ' ';\r\n\t var $schema = it.schema[$keyword];\r\n\t var $schemaPath = it.schemaPath + '.' + $keyword;\r\n\t var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\r\n\t var $breakOnError = !it.opts.allErrors;\r\n\t var $it = it.util.copy(it);\r\n\t var $closingBraces = '';\r\n\t $it.level++;\r\n\t var arr1 = $schema;\r\n\t if (arr1) {\r\n\t var $sch, $i = -1,\r\n\t l1 = arr1.length - 1;\r\n\t while ($i < l1) {\r\n\t $sch = arr1[$i += 1];\r\n\t if (it.util.schemaHasRules($sch, it.RULES.all)) {\r\n\t $it.schema = $sch;\r\n\t $it.schemaPath = $schemaPath + '[' + $i + ']';\r\n\t $it.errSchemaPath = $errSchemaPath + '/' + $i;\r\n\t out += ' ' + (it.validate($it)) + ' ';\r\n\t if ($breakOnError) {\r\n\t out += ' if (valid' + ($it.level) + ') { ';\r\n\t $closingBraces += '}';\r\n\t }\r\n\t }\r\n\t }\r\n\t }\r\n\t if ($breakOnError) {\r\n\t out += ' ' + ($closingBraces.slice(0, -1));\r\n\t }\r\n\t out = it.util.cleanUpCode(out);\r\n\t return out;\r\n\t}\r\n\r\n\r\n/***/ },\r\n/* 27 */\r\n/***/ function(module, exports) {\r\n\r\n\t'use strict';\r\n\tmodule.exports = function generate_anyOf(it, $keyword) {\r\n\t var out = ' ';\r\n\t var $lvl = it.level;\r\n\t var $dataLvl = it.dataLevel;\r\n\t var $schema = it.schema[$keyword];\r\n\t var $schemaPath = it.schemaPath + '.' + $keyword;\r\n\t var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\r\n\t var $breakOnError = !it.opts.allErrors;\r\n\t var $errorKeyword;\r\n\t var $data = 'data' + ($dataLvl || '');\r\n\t var $valid = 'valid' + $lvl;\r\n\t var $errs = 'errs__' + $lvl;\r\n\t var $it = it.util.copy(it);\r\n\t var $closingBraces = '';\r\n\t $it.level++;\r\n\t var $noEmptySchema = $schema.every(function($sch) {\r\n\t return it.util.schemaHasRules($sch, it.RULES.all);\r\n\t });\r\n\t if ($noEmptySchema) {\r\n\t out += ' var ' + ($errs) + ' = errors; var ' + ($valid) + ' = false; ';\r\n\t var $wasComposite = it.compositeRule;\r\n\t it.compositeRule = $it.compositeRule = true;\r\n\t var arr1 = $schema;\r\n\t if (arr1) {\r\n\t var $sch, $i = -1,\r\n\t l1 = arr1.length - 1;\r\n\t while ($i < l1) {\r\n\t $sch = arr1[$i += 1];\r\n\t $it.schema = $sch;\r\n\t $it.schemaPath = $schemaPath + '[' + $i + ']';\r\n\t $it.errSchemaPath = $errSchemaPath + '/' + $i;\r\n\t out += ' ' + (it.validate($it)) + ' ' + ($valid) + ' = ' + ($valid) + ' || valid' + ($it.level) + '; if (!' + ($valid) + ') { ';\r\n\t $closingBraces += '}';\r\n\t }\r\n\t }\r\n\t it.compositeRule = $it.compositeRule = $wasComposite;\r\n\t out += ' ' + ($closingBraces) + ' if (!' + ($valid) + ') { var err = '; /* istanbul ignore else */\r\n\t if (it.createErrors !== false) {\r\n\t out += ' { keyword: \\'' + ($errorKeyword || 'anyOf') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: \"' + ($errSchemaPath) + '\" , params: {} ';\r\n\t if (it.opts.messages !== false) {\r\n\t out += ' , message: \\'should match some schema in anyOf\\' ';\r\n\t }\r\n\t if (it.opts.verbose) {\r\n\t out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\r\n\t }\r\n\t out += ' } ';\r\n\t } else {\r\n\t out += ' {} ';\r\n\t }\r\n\t out += '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; } else { errors = ' + ($errs) + '; if (vErrors !== null) { if (' + ($errs) + ') vErrors.length = ' + ($errs) + '; else vErrors = null; } ';\r\n\t if (it.opts.allErrors) {\r\n\t out += ' } ';\r\n\t }\r\n\t out = it.util.cleanUpCode(out);\r\n\t } else {\r\n\t if ($breakOnError) {\r\n\t out += ' if (true) { ';\r\n\t }\r\n\t }\r\n\t return out;\r\n\t}\r\n\r\n\r\n/***/ },\r\n/* 28 */\r\n/***/ function(module, exports) {\r\n\r\n\t'use strict';\r\n\tmodule.exports = function generate_dependencies(it, $keyword) {\r\n\t var out = ' ';\r\n\t var $lvl = it.level;\r\n\t var $dataLvl = it.dataLevel;\r\n\t var $schema = it.schema[$keyword];\r\n\t var $schemaPath = it.schemaPath + '.' + $keyword;\r\n\t var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\r\n\t var $breakOnError = !it.opts.allErrors;\r\n\t var $errorKeyword;\r\n\t var $data = 'data' + ($dataLvl || '');\r\n\t var $errs = 'errs__' + $lvl;\r\n\t var $it = it.util.copy(it);\r\n\t var $closingBraces = '';\r\n\t $it.level++;\r\n\t var $schemaDeps = {},\r\n\t $propertyDeps = {};\r\n\t for ($property in $schema) {\r\n\t var $sch = $schema[$property];\r\n\t var $deps = Array.isArray($sch) ? $propertyDeps : $schemaDeps;\r\n\t $deps[$property] = $sch;\r\n\t }\r\n\t out += 'var ' + ($errs) + ' = errors;';\r\n\t var $currentErrorPath = it.errorPath;\r\n\t out += 'var missing' + ($lvl) + ';';\r\n\t for (var $property in $propertyDeps) {\r\n\t $deps = $propertyDeps[$property];\r\n\t out += ' if (' + ($data) + (it.util.getProperty($property)) + ' !== undefined && ( ';\r\n\t var arr1 = $deps;\r\n\t if (arr1) {\r\n\t var _$property, $i = -1,\r\n\t l1 = arr1.length - 1;\r\n\t while ($i < l1) {\r\n\t _$property = arr1[$i += 1];\r\n\t if ($i) {\r\n\t out += ' || ';\r\n\t }\r\n\t var $prop = it.util.getProperty(_$property);\r\n\t out += ' ( ' + ($data) + ($prop) + ' === undefined && (missing' + ($lvl) + ' = ' + (it.util.toQuotedString(it.opts.jsonPointers ? _$property : $prop)) + ') ) ';\r\n\t }\r\n\t }\r\n\t out += ')) { ';\r\n\t var $propertyPath = 'missing' + $lvl,\r\n\t $missingProperty = '\\' + ' + $propertyPath + ' + \\'';\r\n\t if (it.opts._errorDataPathProperty) {\r\n\t it.errorPath = it.opts.jsonPointers ? it.util.getPathExpr($currentErrorPath, $propertyPath, true) : $currentErrorPath + ' + ' + $propertyPath;\r\n\t }\r\n\t var $$outStack = $$outStack || [];\r\n\t $$outStack.push(out);\r\n\t out = ''; /* istanbul ignore else */\r\n\t if (it.createErrors !== false) {\r\n\t out += ' { keyword: \\'' + ($errorKeyword || 'dependencies') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: \"' + ($errSchemaPath) + '\" , params: { property: \\'' + (it.util.escapeQuotes($property)) + '\\', missingProperty: \\'' + ($missingProperty) + '\\', depsCount: ' + ($deps.length) + ', deps: \\'' + (it.util.escapeQuotes($deps.length == 1 ? $deps[0] : $deps.join(\", \"))) + '\\' } ';\r\n\t if (it.opts.messages !== false) {\r\n\t out += ' , message: \\'should have ';\r\n\t if ($deps.length == 1) {\r\n\t out += 'property ' + (it.util.escapeQuotes($deps[0]));\r\n\t } else {\r\n\t out += 'properties ' + (it.util.escapeQuotes($deps.join(\", \")));\r\n\t }\r\n\t out += ' when property ' + (it.util.escapeQuotes($property)) + ' is present\\' ';\r\n\t }\r\n\t if (it.opts.verbose) {\r\n\t out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\r\n\t }\r\n\t out += ' } ';\r\n\t } else {\r\n\t out += ' {} ';\r\n\t }\r\n\t var __err = out;\r\n\t out = $$outStack.pop();\r\n\t if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */\r\n\t if (it.async) {\r\n\t out += ' throw new ValidationError([' + (__err) + ']); ';\r\n\t } else {\r\n\t out += ' validate.errors = [' + (__err) + ']; return false; ';\r\n\t }\r\n\t } else {\r\n\t out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\r\n\t }\r\n\t out += ' } ';\r\n\t if ($breakOnError) {\r\n\t $closingBraces += '}';\r\n\t out += ' else { ';\r\n\t }\r\n\t }\r\n\t it.errorPath = $currentErrorPath;\r\n\t for (var $property in $schemaDeps) {\r\n\t var $sch = $schemaDeps[$property];\r\n\t if (it.util.schemaHasRules($sch, it.RULES.all)) {\r\n\t out += ' valid' + ($it.level) + ' = true; if (' + ($data) + '[\\'' + ($property) + '\\'] !== undefined) { ';\r\n\t $it.schema = $sch;\r\n\t $it.schemaPath = $schemaPath + it.util.getProperty($property);\r\n\t $it.errSchemaPath = $errSchemaPath + '/' + it.util.escapeFragment($property);\r\n\t out += ' ' + (it.validate($it)) + ' } ';\r\n\t if ($breakOnError) {\r\n\t out += ' if (valid' + ($it.level) + ') { ';\r\n\t $closingBraces += '}';\r\n\t }\r\n\t }\r\n\t }\r\n\t if ($breakOnError) {\r\n\t out += ' ' + ($closingBraces) + ' if (' + ($errs) + ' == errors) {';\r\n\t }\r\n\t out = it.util.cleanUpCode(out);\r\n\t return out;\r\n\t}\r\n\r\n\r\n/***/ },\r\n/* 29 */\r\n/***/ function(module, exports) {\r\n\r\n\t'use strict';\r\n\tmodule.exports = function generate_enum(it, $keyword) {\r\n\t var out = ' ';\r\n\t var $lvl = it.level;\r\n\t var $dataLvl = it.dataLevel;\r\n\t var $schema = it.schema[$keyword];\r\n\t var $schemaPath = it.schemaPath + '.' + $keyword;\r\n\t var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\r\n\t var $breakOnError = !it.opts.allErrors;\r\n\t var $errorKeyword;\r\n\t var $data = 'data' + ($dataLvl || '');\r\n\t var $valid = 'valid' + $lvl;\r\n\t var $isData = it.opts.v5 && $schema.$data;\r\n\t var $schemaValue = $isData ? it.util.getData($schema.$data, $dataLvl, it.dataPathArr) : $schema;\r\n\t if ($isData) {\r\n\t out += ' var schema' + ($lvl) + ' = ' + ($schemaValue) + '; ';\r\n\t $schemaValue = 'schema' + $lvl;\r\n\t }\r\n\t var $i = 'i' + $lvl;\r\n\t if (!$isData) {\r\n\t out += ' var schema' + ($lvl) + ' = validate.schema' + ($schemaPath) + ';';\r\n\t }\r\n\t out += 'var ' + ($valid) + ';';\r\n\t if ($isData) {\r\n\t out += ' if (schema' + ($lvl) + ' === undefined) ' + ($valid) + ' = true; else if (!Array.isArray(schema' + ($lvl) + ')) ' + ($valid) + ' = false; else {';\r\n\t }\r\n\t out += '' + ($valid) + ' = false;for (var ' + ($i) + '=0; ' + ($i) + ' ' + ($i) + ') { ';\r\n\t var $passData = $data + '[' + $i + ']';\r\n\t $it.schema = $sch;\r\n\t $it.schemaPath = $schemaPath + '[' + $i + ']';\r\n\t $it.errSchemaPath = $errSchemaPath + '/' + $i;\r\n\t $it.errorPath = it.util.getPathExpr(it.errorPath, $i, it.opts.jsonPointers, true);\r\n\t $it.dataPathArr[$dataNxt] = $i;\r\n\t var $code = it.validate($it);\r\n\t if (it.util.varOccurences($code, $nextData) < 2) {\r\n\t out += ' ' + (it.util.varReplace($code, $nextData, $passData)) + ' ';\r\n\t } else {\r\n\t out += ' var ' + ($nextData) + ' = ' + ($passData) + '; ' + ($code) + ' ';\r\n\t }\r\n\t out += ' } ';\r\n\t if ($breakOnError) {\r\n\t out += ' if (valid' + ($it.level) + ') { ';\r\n\t $closingBraces += '}';\r\n\t }\r\n\t }\r\n\t }\r\n\t }\r\n\t if (typeof $additionalItems == 'object' && it.util.schemaHasRules($additionalItems, it.RULES.all)) {\r\n\t $it.schema = $additionalItems;\r\n\t $it.schemaPath = it.schemaPath + '.additionalItems';\r\n\t $it.errSchemaPath = it.errSchemaPath + '/additionalItems';\r\n\t out += ' valid' + ($it.level) + ' = true; if (' + ($data) + '.length > ' + ($schema.length) + ') { for (var i' + ($lvl) + ' = ' + ($schema.length) + '; i' + ($lvl) + ' < ' + ($data) + '.length; i' + ($lvl) + '++) { ';\r\n\t $it.errorPath = it.util.getPathExpr(it.errorPath, 'i' + $lvl, it.opts.jsonPointers, true);\r\n\t var $passData = $data + '[i' + $lvl + ']';\r\n\t $it.dataPathArr[$dataNxt] = 'i' + $lvl;\r\n\t var $code = it.validate($it);\r\n\t if (it.util.varOccurences($code, $nextData) < 2) {\r\n\t out += ' ' + (it.util.varReplace($code, $nextData, $passData)) + ' ';\r\n\t } else {\r\n\t out += ' var ' + ($nextData) + ' = ' + ($passData) + '; ' + ($code) + ' ';\r\n\t }\r\n\t if ($breakOnError) {\r\n\t out += ' if (!valid' + ($it.level) + ') break; ';\r\n\t }\r\n\t out += ' } } ';\r\n\t if ($breakOnError) {\r\n\t out += ' if (valid' + ($it.level) + ') { ';\r\n\t $closingBraces += '}';\r\n\t }\r\n\t }\r\n\t } else if (it.util.schemaHasRules($schema, it.RULES.all)) {\r\n\t $it.schema = $schema;\r\n\t $it.schemaPath = $schemaPath;\r\n\t $it.errSchemaPath = $errSchemaPath;\r\n\t out += ' for (var i' + ($lvl) + ' = ' + (0) + '; i' + ($lvl) + ' < ' + ($data) + '.length; i' + ($lvl) + '++) { ';\r\n\t $it.errorPath = it.util.getPathExpr(it.errorPath, 'i' + $lvl, it.opts.jsonPointers, true);\r\n\t var $passData = $data + '[i' + $lvl + ']';\r\n\t $it.dataPathArr[$dataNxt] = 'i' + $lvl;\r\n\t var $code = it.validate($it);\r\n\t if (it.util.varOccurences($code, $nextData) < 2) {\r\n\t out += ' ' + (it.util.varReplace($code, $nextData, $passData)) + ' ';\r\n\t } else {\r\n\t out += ' var ' + ($nextData) + ' = ' + ($passData) + '; ' + ($code) + ' ';\r\n\t }\r\n\t if ($breakOnError) {\r\n\t out += ' if (!valid' + ($it.level) + ') break; ';\r\n\t }\r\n\t out += ' } ';\r\n\t if ($breakOnError) {\r\n\t out += ' if (valid' + ($it.level) + ') { ';\r\n\t $closingBraces += '}';\r\n\t }\r\n\t }\r\n\t if ($breakOnError) {\r\n\t out += ' ' + ($closingBraces) + ' if (' + ($errs) + ' == errors) {';\r\n\t }\r\n\t out = it.util.cleanUpCode(out);\r\n\t return out;\r\n\t}\r\n\r\n\r\n/***/ },\r\n/* 32 */\r\n/***/ function(module, exports) {\r\n\r\n\t'use strict';\r\n\tmodule.exports = function generate__limit(it, $keyword) {\r\n\t var out = ' ';\r\n\t var $lvl = it.level;\r\n\t var $dataLvl = it.dataLevel;\r\n\t var $schema = it.schema[$keyword];\r\n\t var $schemaPath = it.schemaPath + '.' + $keyword;\r\n\t var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\r\n\t var $breakOnError = !it.opts.allErrors;\r\n\t var $errorKeyword;\r\n\t var $data = 'data' + ($dataLvl || '');\r\n\t var $isData = it.opts.v5 && $schema.$data;\r\n\t var $schemaValue = $isData ? it.util.getData($schema.$data, $dataLvl, it.dataPathArr) : $schema;\r\n\t if ($isData) {\r\n\t out += ' var schema' + ($lvl) + ' = ' + ($schemaValue) + '; ';\r\n\t $schemaValue = 'schema' + $lvl;\r\n\t }\r\n\t var $isMax = $keyword == 'maximum',\r\n\t $exclusiveKeyword = $isMax ? 'exclusiveMaximum' : 'exclusiveMinimum',\r\n\t $schemaExcl = it.schema[$exclusiveKeyword],\r\n\t $isDataExcl = it.opts.v5 && $schemaExcl && $schemaExcl.$data,\r\n\t $op = $isMax ? '<' : '>',\r\n\t $notOp = $isMax ? '>' : '<';\r\n\t if ($isDataExcl) {\r\n\t var $schemaValueExcl = it.util.getData($schemaExcl.$data, $dataLvl, it.dataPathArr),\r\n\t $exclusive = 'exclusive' + $lvl,\r\n\t $opExpr = 'op' + $lvl,\r\n\t $opStr = '\\' + ' + $opExpr + ' + \\'';\r\n\t out += ' var schemaExcl' + ($lvl) + ' = ' + ($schemaValueExcl) + '; ';\r\n\t $schemaValueExcl = 'schemaExcl' + $lvl;\r\n\t out += ' var exclusive' + ($lvl) + '; if (typeof ' + ($schemaValueExcl) + ' != \\'boolean\\' && typeof ' + ($schemaValueExcl) + ' != \\'undefined\\') { ';\r\n\t var $errorKeyword = $exclusiveKeyword;\r\n\t var $$outStack = $$outStack || [];\r\n\t $$outStack.push(out);\r\n\t out = ''; /* istanbul ignore else */\r\n\t if (it.createErrors !== false) {\r\n\t out += ' { keyword: \\'' + ($errorKeyword || '_exclusiveLimit') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: \"' + ($errSchemaPath) + '\" , params: {} ';\r\n\t if (it.opts.messages !== false) {\r\n\t out += ' , message: \\'' + ($exclusiveKeyword) + ' should be boolean\\' ';\r\n\t }\r\n\t if (it.opts.verbose) {\r\n\t out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\r\n\t }\r\n\t out += ' } ';\r\n\t } else {\r\n\t out += ' {} ';\r\n\t }\r\n\t var __err = out;\r\n\t out = $$outStack.pop();\r\n\t if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */\r\n\t if (it.async) {\r\n\t out += ' throw new ValidationError([' + (__err) + ']); ';\r\n\t } else {\r\n\t out += ' validate.errors = [' + (__err) + ']; return false; ';\r\n\t }\r\n\t } else {\r\n\t out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\r\n\t }\r\n\t out += ' } else if( ';\r\n\t if ($isData) {\r\n\t out += ' (' + ($schemaValue) + ' !== undefined && typeof ' + ($schemaValue) + ' != \\'number\\') || ';\r\n\t }\r\n\t out += ' ((exclusive' + ($lvl) + ' = ' + ($schemaValueExcl) + ' === true) ? ' + ($data) + ' ' + ($notOp) + '= ' + ($schemaValue) + ' : ' + ($data) + ' ' + ($notOp) + ' ' + ($schemaValue) + ')) { var op' + ($lvl) + ' = exclusive' + ($lvl) + ' ? \\'' + ($op) + '\\' : \\'' + ($op) + '=\\';';\r\n\t } else {\r\n\t var $exclusive = $schemaExcl === true,\r\n\t $opStr = $op;\r\n\t if (!$exclusive) $opStr += '=';\r\n\t var $opExpr = '\\'' + $opStr + '\\'';\r\n\t out += ' if ( ';\r\n\t if ($isData) {\r\n\t out += ' (' + ($schemaValue) + ' !== undefined && typeof ' + ($schemaValue) + ' != \\'number\\') || ';\r\n\t }\r\n\t out += ' ' + ($data) + ' ' + ($notOp);\r\n\t if ($exclusive) {\r\n\t out += '=';\r\n\t }\r\n\t out += ' ' + ($schemaValue) + ') {';\r\n\t }\r\n\t var $errorKeyword = $keyword;\r\n\t var $$outStack = $$outStack || [];\r\n\t $$outStack.push(out);\r\n\t out = ''; /* istanbul ignore else */\r\n\t if (it.createErrors !== false) {\r\n\t out += ' { keyword: \\'' + ($errorKeyword || '_limit') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: \"' + ($errSchemaPath) + '\" , params: { comparison: ' + ($opExpr) + ', limit: ' + ($schemaValue) + ', exclusive: ' + ($exclusive) + ' } ';\r\n\t if (it.opts.messages !== false) {\r\n\t out += ' , message: \\'should be ' + ($opStr) + ' ';\r\n\t if ($isData) {\r\n\t out += '\\' + ' + ($schemaValue);\r\n\t } else {\r\n\t out += '' + ($schema) + '\\'';\r\n\t }\r\n\t }\r\n\t if (it.opts.verbose) {\r\n\t out += ' , schema: ';\r\n\t if ($isData) {\r\n\t out += 'validate.schema' + ($schemaPath);\r\n\t } else {\r\n\t out += '' + ($schema);\r\n\t }\r\n\t out += ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\r\n\t }\r\n\t out += ' } ';\r\n\t } else {\r\n\t out += ' {} ';\r\n\t }\r\n\t var __err = out;\r\n\t out = $$outStack.pop();\r\n\t if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */\r\n\t if (it.async) {\r\n\t out += ' throw new ValidationError([' + (__err) + ']); ';\r\n\t } else {\r\n\t out += ' validate.errors = [' + (__err) + ']; return false; ';\r\n\t }\r\n\t } else {\r\n\t out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\r\n\t }\r\n\t out += ' } ';\r\n\t if ($breakOnError) {\r\n\t out += ' else { ';\r\n\t }\r\n\t return out;\r\n\t}\r\n\r\n\r\n/***/ },\r\n/* 33 */\r\n/***/ function(module, exports) {\r\n\r\n\t'use strict';\r\n\tmodule.exports = function generate__limitItems(it, $keyword) {\r\n\t var out = ' ';\r\n\t var $lvl = it.level;\r\n\t var $dataLvl = it.dataLevel;\r\n\t var $schema = it.schema[$keyword];\r\n\t var $schemaPath = it.schemaPath + '.' + $keyword;\r\n\t var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\r\n\t var $breakOnError = !it.opts.allErrors;\r\n\t var $errorKeyword;\r\n\t var $data = 'data' + ($dataLvl || '');\r\n\t var $isData = it.opts.v5 && $schema.$data;\r\n\t var $schemaValue = $isData ? it.util.getData($schema.$data, $dataLvl, it.dataPathArr) : $schema;\r\n\t if ($isData) {\r\n\t out += ' var schema' + ($lvl) + ' = ' + ($schemaValue) + '; ';\r\n\t $schemaValue = 'schema' + $lvl;\r\n\t }\r\n\t var $op = $keyword == 'maxItems' ? '>' : '<';\r\n\t out += 'if ( ';\r\n\t if ($isData) {\r\n\t out += ' (' + ($schemaValue) + ' !== undefined && typeof ' + ($schemaValue) + ' != \\'number\\') || ';\r\n\t }\r\n\t out += ' ' + ($data) + '.length ' + ($op) + ' ' + ($schemaValue) + ') { ';\r\n\t var $errorKeyword = $keyword;\r\n\t var $$outStack = $$outStack || [];\r\n\t $$outStack.push(out);\r\n\t out = ''; /* istanbul ignore else */\r\n\t if (it.createErrors !== false) {\r\n\t out += ' { keyword: \\'' + ($errorKeyword || '_limitItems') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: \"' + ($errSchemaPath) + '\" , params: { limit: ' + ($schemaValue) + ' } ';\r\n\t if (it.opts.messages !== false) {\r\n\t out += ' , message: \\'should NOT have ';\r\n\t if ($keyword == 'maxItems') {\r\n\t out += 'more';\r\n\t } else {\r\n\t out += 'less';\r\n\t }\r\n\t out += ' than ';\r\n\t if ($isData) {\r\n\t out += '\\' + ' + ($schemaValue) + ' + \\'';\r\n\t } else {\r\n\t out += '' + ($schema);\r\n\t }\r\n\t out += ' items\\' ';\r\n\t }\r\n\t if (it.opts.verbose) {\r\n\t out += ' , schema: ';\r\n\t if ($isData) {\r\n\t out += 'validate.schema' + ($schemaPath);\r\n\t } else {\r\n\t out += '' + ($schema);\r\n\t }\r\n\t out += ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\r\n\t }\r\n\t out += ' } ';\r\n\t } else {\r\n\t out += ' {} ';\r\n\t }\r\n\t var __err = out;\r\n\t out = $$outStack.pop();\r\n\t if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */\r\n\t if (it.async) {\r\n\t out += ' throw new ValidationError([' + (__err) + ']); ';\r\n\t } else {\r\n\t out += ' validate.errors = [' + (__err) + ']; return false; ';\r\n\t }\r\n\t } else {\r\n\t out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\r\n\t }\r\n\t out += '} ';\r\n\t if ($breakOnError) {\r\n\t out += ' else { ';\r\n\t }\r\n\t return out;\r\n\t}\r\n\r\n\r\n/***/ },\r\n/* 34 */\r\n/***/ function(module, exports) {\r\n\r\n\t'use strict';\r\n\tmodule.exports = function generate__limitLength(it, $keyword) {\r\n\t var out = ' ';\r\n\t var $lvl = it.level;\r\n\t var $dataLvl = it.dataLevel;\r\n\t var $schema = it.schema[$keyword];\r\n\t var $schemaPath = it.schemaPath + '.' + $keyword;\r\n\t var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\r\n\t var $breakOnError = !it.opts.allErrors;\r\n\t var $errorKeyword;\r\n\t var $data = 'data' + ($dataLvl || '');\r\n\t var $isData = it.opts.v5 && $schema.$data;\r\n\t var $schemaValue = $isData ? it.util.getData($schema.$data, $dataLvl, it.dataPathArr) : $schema;\r\n\t if ($isData) {\r\n\t out += ' var schema' + ($lvl) + ' = ' + ($schemaValue) + '; ';\r\n\t $schemaValue = 'schema' + $lvl;\r\n\t }\r\n\t var $op = $keyword == 'maxLength' ? '>' : '<';\r\n\t out += 'if ( ';\r\n\t if ($isData) {\r\n\t out += ' (' + ($schemaValue) + ' !== undefined && typeof ' + ($schemaValue) + ' != \\'number\\') || ';\r\n\t }\r\n\t if (it.opts.unicode === false) {\r\n\t out += ' ' + ($data) + '.length ';\r\n\t } else {\r\n\t out += ' ucs2length(' + ($data) + ') ';\r\n\t }\r\n\t out += ' ' + ($op) + ' ' + ($schemaValue) + ') { ';\r\n\t var $errorKeyword = $keyword;\r\n\t var $$outStack = $$outStack || [];\r\n\t $$outStack.push(out);\r\n\t out = ''; /* istanbul ignore else */\r\n\t if (it.createErrors !== false) {\r\n\t out += ' { keyword: \\'' + ($errorKeyword || '_limitLength') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: \"' + ($errSchemaPath) + '\" , params: { limit: ' + ($schemaValue) + ' } ';\r\n\t if (it.opts.messages !== false) {\r\n\t out += ' , message: \\'should NOT be ';\r\n\t if ($keyword == 'maxLength') {\r\n\t out += 'longer';\r\n\t } else {\r\n\t out += 'shorter';\r\n\t }\r\n\t out += ' than ';\r\n\t if ($isData) {\r\n\t out += '\\' + ' + ($schemaValue) + ' + \\'';\r\n\t } else {\r\n\t out += '' + ($schema);\r\n\t }\r\n\t out += ' characters\\' ';\r\n\t }\r\n\t if (it.opts.verbose) {\r\n\t out += ' , schema: ';\r\n\t if ($isData) {\r\n\t out += 'validate.schema' + ($schemaPath);\r\n\t } else {\r\n\t out += '' + ($schema);\r\n\t }\r\n\t out += ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\r\n\t }\r\n\t out += ' } ';\r\n\t } else {\r\n\t out += ' {} ';\r\n\t }\r\n\t var __err = out;\r\n\t out = $$outStack.pop();\r\n\t if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */\r\n\t if (it.async) {\r\n\t out += ' throw new ValidationError([' + (__err) + ']); ';\r\n\t } else {\r\n\t out += ' validate.errors = [' + (__err) + ']; return false; ';\r\n\t }\r\n\t } else {\r\n\t out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\r\n\t }\r\n\t out += '} ';\r\n\t if ($breakOnError) {\r\n\t out += ' else { ';\r\n\t }\r\n\t return out;\r\n\t}\r\n\r\n\r\n/***/ },\r\n/* 35 */\r\n/***/ function(module, exports) {\r\n\r\n\t'use strict';\r\n\tmodule.exports = function generate__limitProperties(it, $keyword) {\r\n\t var out = ' ';\r\n\t var $lvl = it.level;\r\n\t var $dataLvl = it.dataLevel;\r\n\t var $schema = it.schema[$keyword];\r\n\t var $schemaPath = it.schemaPath + '.' + $keyword;\r\n\t var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\r\n\t var $breakOnError = !it.opts.allErrors;\r\n\t var $errorKeyword;\r\n\t var $data = 'data' + ($dataLvl || '');\r\n\t var $isData = it.opts.v5 && $schema.$data;\r\n\t var $schemaValue = $isData ? it.util.getData($schema.$data, $dataLvl, it.dataPathArr) : $schema;\r\n\t if ($isData) {\r\n\t out += ' var schema' + ($lvl) + ' = ' + ($schemaValue) + '; ';\r\n\t $schemaValue = 'schema' + $lvl;\r\n\t }\r\n\t var $op = $keyword == 'maxProperties' ? '>' : '<';\r\n\t out += 'if ( ';\r\n\t if ($isData) {\r\n\t out += ' (' + ($schemaValue) + ' !== undefined && typeof ' + ($schemaValue) + ' != \\'number\\') || ';\r\n\t }\r\n\t out += ' Object.keys(' + ($data) + ').length ' + ($op) + ' ' + ($schemaValue) + ') { ';\r\n\t var $errorKeyword = $keyword;\r\n\t var $$outStack = $$outStack || [];\r\n\t $$outStack.push(out);\r\n\t out = ''; /* istanbul ignore else */\r\n\t if (it.createErrors !== false) {\r\n\t out += ' { keyword: \\'' + ($errorKeyword || '_limitProperties') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: \"' + ($errSchemaPath) + '\" , params: { limit: ' + ($schemaValue) + ' } ';\r\n\t if (it.opts.messages !== false) {\r\n\t out += ' , message: \\'should NOT have ';\r\n\t if ($keyword == 'maxProperties') {\r\n\t out += 'more';\r\n\t } else {\r\n\t out += 'less';\r\n\t }\r\n\t out += ' than ';\r\n\t if ($isData) {\r\n\t out += '\\' + ' + ($schemaValue) + ' + \\'';\r\n\t } else {\r\n\t out += '' + ($schema);\r\n\t }\r\n\t out += ' properties\\' ';\r\n\t }\r\n\t if (it.opts.verbose) {\r\n\t out += ' , schema: ';\r\n\t if ($isData) {\r\n\t out += 'validate.schema' + ($schemaPath);\r\n\t } else {\r\n\t out += '' + ($schema);\r\n\t }\r\n\t out += ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\r\n\t }\r\n\t out += ' } ';\r\n\t } else {\r\n\t out += ' {} ';\r\n\t }\r\n\t var __err = out;\r\n\t out = $$outStack.pop();\r\n\t if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */\r\n\t if (it.async) {\r\n\t out += ' throw new ValidationError([' + (__err) + ']); ';\r\n\t } else {\r\n\t out += ' validate.errors = [' + (__err) + ']; return false; ';\r\n\t }\r\n\t } else {\r\n\t out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\r\n\t }\r\n\t out += '} ';\r\n\t if ($breakOnError) {\r\n\t out += ' else { ';\r\n\t }\r\n\t return out;\r\n\t}\r\n\r\n\r\n/***/ },\r\n/* 36 */\r\n/***/ function(module, exports) {\r\n\r\n\t'use strict';\r\n\tmodule.exports = function generate_multipleOf(it, $keyword) {\r\n\t var out = ' ';\r\n\t var $lvl = it.level;\r\n\t var $dataLvl = it.dataLevel;\r\n\t var $schema = it.schema[$keyword];\r\n\t var $schemaPath = it.schemaPath + '.' + $keyword;\r\n\t var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\r\n\t var $breakOnError = !it.opts.allErrors;\r\n\t var $errorKeyword;\r\n\t var $data = 'data' + ($dataLvl || '');\r\n\t var $isData = it.opts.v5 && $schema.$data;\r\n\t var $schemaValue = $isData ? it.util.getData($schema.$data, $dataLvl, it.dataPathArr) : $schema;\r\n\t if ($isData) {\r\n\t out += ' var schema' + ($lvl) + ' = ' + ($schemaValue) + '; ';\r\n\t $schemaValue = 'schema' + $lvl;\r\n\t }\r\n\t out += 'var division' + ($lvl) + ';if (';\r\n\t if ($isData) {\r\n\t out += ' ' + ($schemaValue) + ' !== undefined && ( typeof ' + ($schemaValue) + ' != \\'number\\' || ';\r\n\t }\r\n\t out += ' (division' + ($lvl) + ' = ' + ($data) + ' / ' + ($schemaValue) + ', ';\r\n\t if (it.opts.multipleOfPrecision) {\r\n\t out += ' Math.abs(Math.round(division' + ($lvl) + ') - division' + ($lvl) + ') > 1e-' + (it.opts.multipleOfPrecision) + ' ';\r\n\t } else {\r\n\t out += ' division' + ($lvl) + ' !== parseInt(division' + ($lvl) + ') ';\r\n\t }\r\n\t out += ' ) ';\r\n\t if ($isData) {\r\n\t out += ' ) ';\r\n\t }\r\n\t out += ' ) { ';\r\n\t var $$outStack = $$outStack || [];\r\n\t $$outStack.push(out);\r\n\t out = ''; /* istanbul ignore else */\r\n\t if (it.createErrors !== false) {\r\n\t out += ' { keyword: \\'' + ($errorKeyword || 'multipleOf') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: \"' + ($errSchemaPath) + '\" , params: { multipleOf: ' + ($schemaValue) + ' } ';\r\n\t if (it.opts.messages !== false) {\r\n\t out += ' , message: \\'should be multiple of ';\r\n\t if ($isData) {\r\n\t out += '\\' + ' + ($schemaValue);\r\n\t } else {\r\n\t out += '' + ($schema) + '\\'';\r\n\t }\r\n\t }\r\n\t if (it.opts.verbose) {\r\n\t out += ' , schema: ';\r\n\t if ($isData) {\r\n\t out += 'validate.schema' + ($schemaPath);\r\n\t } else {\r\n\t out += '' + ($schema);\r\n\t }\r\n\t out += ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\r\n\t }\r\n\t out += ' } ';\r\n\t } else {\r\n\t out += ' {} ';\r\n\t }\r\n\t var __err = out;\r\n\t out = $$outStack.pop();\r\n\t if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */\r\n\t if (it.async) {\r\n\t out += ' throw new ValidationError([' + (__err) + ']); ';\r\n\t } else {\r\n\t out += ' validate.errors = [' + (__err) + ']; return false; ';\r\n\t }\r\n\t } else {\r\n\t out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\r\n\t }\r\n\t out += '} ';\r\n\t if ($breakOnError) {\r\n\t out += ' else { ';\r\n\t }\r\n\t return out;\r\n\t}\r\n\r\n\r\n/***/ },\r\n/* 37 */\r\n/***/ function(module, exports) {\r\n\r\n\t'use strict';\r\n\tmodule.exports = function generate_not(it, $keyword) {\r\n\t var out = ' ';\r\n\t var $lvl = it.level;\r\n\t var $dataLvl = it.dataLevel;\r\n\t var $schema = it.schema[$keyword];\r\n\t var $schemaPath = it.schemaPath + '.' + $keyword;\r\n\t var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\r\n\t var $breakOnError = !it.opts.allErrors;\r\n\t var $errorKeyword;\r\n\t var $data = 'data' + ($dataLvl || '');\r\n\t var $errs = 'errs__' + $lvl;\r\n\t var $it = it.util.copy(it);\r\n\t $it.level++;\r\n\t if (it.util.schemaHasRules($schema, it.RULES.all)) {\r\n\t $it.schema = $schema;\r\n\t $it.schemaPath = $schemaPath;\r\n\t $it.errSchemaPath = $errSchemaPath;\r\n\t out += ' var ' + ($errs) + ' = errors; ';\r\n\t var $wasComposite = it.compositeRule;\r\n\t it.compositeRule = $it.compositeRule = true;\r\n\t $it.createErrors = false;\r\n\t var $allErrorsOption;\r\n\t if ($it.opts.allErrors) {\r\n\t $allErrorsOption = $it.opts.allErrors;\r\n\t $it.opts.allErrors = false;\r\n\t }\r\n\t out += ' ' + (it.validate($it)) + ' ';\r\n\t $it.createErrors = true;\r\n\t if ($allErrorsOption) $it.opts.allErrors = $allErrorsOption;\r\n\t it.compositeRule = $it.compositeRule = $wasComposite;\r\n\t out += ' if (valid' + ($it.level) + ') { ';\r\n\t var $$outStack = $$outStack || [];\r\n\t $$outStack.push(out);\r\n\t out = ''; /* istanbul ignore else */\r\n\t if (it.createErrors !== false) {\r\n\t out += ' { keyword: \\'' + ($errorKeyword || 'not') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: \"' + ($errSchemaPath) + '\" , params: {} ';\r\n\t if (it.opts.messages !== false) {\r\n\t out += ' , message: \\'should NOT be valid\\' ';\r\n\t }\r\n\t if (it.opts.verbose) {\r\n\t out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\r\n\t }\r\n\t out += ' } ';\r\n\t } else {\r\n\t out += ' {} ';\r\n\t }\r\n\t var __err = out;\r\n\t out = $$outStack.pop();\r\n\t if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */\r\n\t if (it.async) {\r\n\t out += ' throw new ValidationError([' + (__err) + ']); ';\r\n\t } else {\r\n\t out += ' validate.errors = [' + (__err) + ']; return false; ';\r\n\t }\r\n\t } else {\r\n\t out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\r\n\t }\r\n\t out += ' } else { errors = ' + ($errs) + '; if (vErrors !== null) { if (' + ($errs) + ') vErrors.length = ' + ($errs) + '; else vErrors = null; } ';\r\n\t if (it.opts.allErrors) {\r\n\t out += ' } ';\r\n\t }\r\n\t } else {\r\n\t out += ' var err = '; /* istanbul ignore else */\r\n\t if (it.createErrors !== false) {\r\n\t out += ' { keyword: \\'' + ($errorKeyword || 'not') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: \"' + ($errSchemaPath) + '\" , params: {} ';\r\n\t if (it.opts.messages !== false) {\r\n\t out += ' , message: \\'should NOT be valid\\' ';\r\n\t }\r\n\t if (it.opts.verbose) {\r\n\t out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\r\n\t }\r\n\t out += ' } ';\r\n\t } else {\r\n\t out += ' {} ';\r\n\t }\r\n\t out += '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\r\n\t if ($breakOnError) {\r\n\t out += ' if (false) { ';\r\n\t }\r\n\t }\r\n\t return out;\r\n\t}\r\n\r\n\r\n/***/ },\r\n/* 38 */\r\n/***/ function(module, exports) {\r\n\r\n\t'use strict';\r\n\tmodule.exports = function generate_oneOf(it, $keyword) {\r\n\t var out = ' ';\r\n\t var $lvl = it.level;\r\n\t var $dataLvl = it.dataLevel;\r\n\t var $schema = it.schema[$keyword];\r\n\t var $schemaPath = it.schemaPath + '.' + $keyword;\r\n\t var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\r\n\t var $breakOnError = !it.opts.allErrors;\r\n\t var $errorKeyword;\r\n\t var $data = 'data' + ($dataLvl || '');\r\n\t var $valid = 'valid' + $lvl;\r\n\t var $errs = 'errs__' + $lvl;\r\n\t var $it = it.util.copy(it);\r\n\t var $closingBraces = '';\r\n\t $it.level++;\r\n\t out += 'var ' + ($errs) + ' = errors;var prevValid' + ($lvl) + ' = false;var ' + ($valid) + ' = false; ';\r\n\t var $wasComposite = it.compositeRule;\r\n\t it.compositeRule = $it.compositeRule = true;\r\n\t var arr1 = $schema;\r\n\t if (arr1) {\r\n\t var $sch, $i = -1,\r\n\t l1 = arr1.length - 1;\r\n\t while ($i < l1) {\r\n\t $sch = arr1[$i += 1];\r\n\t if (it.util.schemaHasRules($sch, it.RULES.all)) {\r\n\t $it.schema = $sch;\r\n\t $it.schemaPath = $schemaPath + '[' + $i + ']';\r\n\t $it.errSchemaPath = $errSchemaPath + '/' + $i;\r\n\t out += ' ' + (it.validate($it)) + ' ';\r\n\t } else {\r\n\t out += ' var valid' + ($it.level) + ' = true; ';\r\n\t }\r\n\t if ($i) {\r\n\t out += ' if (valid' + ($it.level) + ' && prevValid' + ($lvl) + ') ' + ($valid) + ' = false; else { ';\r\n\t $closingBraces += '}';\r\n\t }\r\n\t out += ' if (valid' + ($it.level) + ') ' + ($valid) + ' = prevValid' + ($lvl) + ' = true;';\r\n\t }\r\n\t }\r\n\t it.compositeRule = $it.compositeRule = $wasComposite;\r\n\t out += '' + ($closingBraces) + 'if (!' + ($valid) + ') { ';\r\n\t var $$outStack = $$outStack || [];\r\n\t $$outStack.push(out);\r\n\t out = ''; /* istanbul ignore else */\r\n\t if (it.createErrors !== false) {\r\n\t out += ' { keyword: \\'' + ($errorKeyword || 'oneOf') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: \"' + ($errSchemaPath) + '\" , params: {} ';\r\n\t if (it.opts.messages !== false) {\r\n\t out += ' , message: \\'should match exactly one schema in oneOf\\' ';\r\n\t }\r\n\t if (it.opts.verbose) {\r\n\t out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\r\n\t }\r\n\t out += ' } ';\r\n\t } else {\r\n\t out += ' {} ';\r\n\t }\r\n\t var __err = out;\r\n\t out = $$outStack.pop();\r\n\t if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */\r\n\t if (it.async) {\r\n\t out += ' throw new ValidationError([' + (__err) + ']); ';\r\n\t } else {\r\n\t out += ' validate.errors = [' + (__err) + ']; return false; ';\r\n\t }\r\n\t } else {\r\n\t out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\r\n\t }\r\n\t out += '} else { errors = ' + ($errs) + '; if (vErrors !== null) { if (' + ($errs) + ') vErrors.length = ' + ($errs) + '; else vErrors = null; }';\r\n\t if (it.opts.allErrors) {\r\n\t out += ' } ';\r\n\t }\r\n\t return out;\r\n\t}\r\n\r\n\r\n/***/ },\r\n/* 39 */\r\n/***/ function(module, exports) {\r\n\r\n\t'use strict';\r\n\tmodule.exports = function generate_pattern(it, $keyword) {\r\n\t var out = ' ';\r\n\t var $lvl = it.level;\r\n\t var $dataLvl = it.dataLevel;\r\n\t var $schema = it.schema[$keyword];\r\n\t var $schemaPath = it.schemaPath + '.' + $keyword;\r\n\t var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\r\n\t var $breakOnError = !it.opts.allErrors;\r\n\t var $errorKeyword;\r\n\t var $data = 'data' + ($dataLvl || '');\r\n\t var $isData = it.opts.v5 && $schema.$data;\r\n\t var $schemaValue = $isData ? it.util.getData($schema.$data, $dataLvl, it.dataPathArr) : $schema;\r\n\t if ($isData) {\r\n\t out += ' var schema' + ($lvl) + ' = ' + ($schemaValue) + '; ';\r\n\t $schemaValue = 'schema' + $lvl;\r\n\t }\r\n\t var $regexp = $isData ? '(new RegExp(' + $schemaValue + '))' : it.usePattern($schema);\r\n\t out += 'if ( ';\r\n\t if ($isData) {\r\n\t out += ' (' + ($schemaValue) + ' !== undefined && typeof ' + ($schemaValue) + ' != \\'string\\') || ';\r\n\t }\r\n\t out += ' !' + ($regexp) + '.test(' + ($data) + ') ) { ';\r\n\t var $$outStack = $$outStack || [];\r\n\t $$outStack.push(out);\r\n\t out = ''; /* istanbul ignore else */\r\n\t if (it.createErrors !== false) {\r\n\t out += ' { keyword: \\'' + ($errorKeyword || 'pattern') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: \"' + ($errSchemaPath) + '\" , params: { pattern: ';\r\n\t if ($isData) {\r\n\t out += '' + ($schemaValue);\r\n\t } else {\r\n\t out += '' + (it.util.toQuotedString($schema));\r\n\t }\r\n\t out += ' } ';\r\n\t if (it.opts.messages !== false) {\r\n\t out += ' , message: \\'should match pattern \"';\r\n\t if ($isData) {\r\n\t out += '\\' + ' + ($schemaValue) + ' + \\'';\r\n\t } else {\r\n\t out += '' + (it.util.escapeQuotes($schema));\r\n\t }\r\n\t out += '\"\\' ';\r\n\t }\r\n\t if (it.opts.verbose) {\r\n\t out += ' , schema: ';\r\n\t if ($isData) {\r\n\t out += 'validate.schema' + ($schemaPath);\r\n\t } else {\r\n\t out += '' + (it.util.toQuotedString($schema));\r\n\t }\r\n\t out += ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\r\n\t }\r\n\t out += ' } ';\r\n\t } else {\r\n\t out += ' {} ';\r\n\t }\r\n\t var __err = out;\r\n\t out = $$outStack.pop();\r\n\t if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */\r\n\t if (it.async) {\r\n\t out += ' throw new ValidationError([' + (__err) + ']); ';\r\n\t } else {\r\n\t out += ' validate.errors = [' + (__err) + ']; return false; ';\r\n\t }\r\n\t } else {\r\n\t out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\r\n\t }\r\n\t out += '} ';\r\n\t if ($breakOnError) {\r\n\t out += ' else { ';\r\n\t }\r\n\t return out;\r\n\t}\r\n\r\n\r\n/***/ },\r\n/* 40 */\r\n/***/ function(module, exports) {\r\n\r\n\t'use strict';\r\n\tmodule.exports = function generate_properties(it, $keyword) {\r\n\t var out = ' ';\r\n\t var $lvl = it.level;\r\n\t var $dataLvl = it.dataLevel;\r\n\t var $schema = it.schema[$keyword];\r\n\t var $schemaPath = it.schemaPath + '.' + $keyword;\r\n\t var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\r\n\t var $breakOnError = !it.opts.allErrors;\r\n\t var $errorKeyword;\r\n\t var $data = 'data' + ($dataLvl || '');\r\n\t var $valid = 'valid' + $lvl;\r\n\t var $errs = 'errs__' + $lvl;\r\n\t var $it = it.util.copy(it);\r\n\t var $closingBraces = '';\r\n\t $it.level++;\r\n\t var $dataNxt = $it.dataLevel = it.dataLevel + 1,\r\n\t $nextData = 'data' + $dataNxt;\r\n\t var $schemaKeys = Object.keys($schema || {}),\r\n\t $pProperties = it.schema.patternProperties || {},\r\n\t $pPropertyKeys = Object.keys($pProperties),\r\n\t $aProperties = it.schema.additionalProperties,\r\n\t $someProperties = $schemaKeys.length || $pPropertyKeys.length,\r\n\t $noAdditional = $aProperties === false,\r\n\t $additionalIsSchema = typeof $aProperties == 'object' && Object.keys($aProperties).length,\r\n\t $removeAdditional = it.opts.removeAdditional,\r\n\t $checkAdditional = $noAdditional || $additionalIsSchema || $removeAdditional;\r\n\t var $required = it.schema.required;\r\n\t if ($required && !(it.opts.v5 && $required.$data) && $required.length < it.opts.loopRequired) var $requiredHash = it.util.toHash($required);\r\n\t if (it.opts.v5) {\r\n\t var $pgProperties = it.schema.patternGroups || {},\r\n\t $pgPropertyKeys = Object.keys($pgProperties);\r\n\t }\r\n\t out += 'var ' + ($errs) + ' = errors;var valid' + ($it.level) + ' = true;';\r\n\t if ($checkAdditional) {\r\n\t out += ' for (var key' + ($lvl) + ' in ' + ($data) + ') { ';\r\n\t if ($someProperties) {\r\n\t out += ' var isAdditional' + ($lvl) + ' = !(false ';\r\n\t if ($schemaKeys.length) {\r\n\t if ($schemaKeys.length > 5) {\r\n\t out += ' || validate.schema' + ($schemaPath) + '[key' + ($lvl) + '] ';\r\n\t } else {\r\n\t var arr1 = $schemaKeys;\r\n\t if (arr1) {\r\n\t var $propertyKey, i1 = -1,\r\n\t l1 = arr1.length - 1;\r\n\t while (i1 < l1) {\r\n\t $propertyKey = arr1[i1 += 1];\r\n\t out += ' || key' + ($lvl) + ' == ' + (it.util.toQuotedString($propertyKey)) + ' ';\r\n\t }\r\n\t }\r\n\t }\r\n\t }\r\n\t if ($pPropertyKeys.length) {\r\n\t var arr2 = $pPropertyKeys;\r\n\t if (arr2) {\r\n\t var $pProperty, $i = -1,\r\n\t l2 = arr2.length - 1;\r\n\t while ($i < l2) {\r\n\t $pProperty = arr2[$i += 1];\r\n\t out += ' || ' + (it.usePattern($pProperty)) + '.test(key' + ($lvl) + ') ';\r\n\t }\r\n\t }\r\n\t }\r\n\t if (it.opts.v5 && $pgPropertyKeys && $pgPropertyKeys.length) {\r\n\t var arr3 = $pgPropertyKeys;\r\n\t if (arr3) {\r\n\t var $pgProperty, $i = -1,\r\n\t l3 = arr3.length - 1;\r\n\t while ($i < l3) {\r\n\t $pgProperty = arr3[$i += 1];\r\n\t out += ' || ' + (it.usePattern($pgProperty)) + '.test(key' + ($lvl) + ') ';\r\n\t }\r\n\t }\r\n\t }\r\n\t out += ' ); if (isAdditional' + ($lvl) + ') { ';\r\n\t }\r\n\t if ($removeAdditional == 'all') {\r\n\t out += ' delete ' + ($data) + '[key' + ($lvl) + ']; ';\r\n\t } else {\r\n\t var $currentErrorPath = it.errorPath;\r\n\t var $additionalProperty = '\\' + key' + $lvl + ' + \\'';\r\n\t if (it.opts._errorDataPathProperty) {\r\n\t it.errorPath = it.util.getPathExpr(it.errorPath, 'key' + $lvl, it.opts.jsonPointers);\r\n\t }\r\n\t if ($noAdditional) {\r\n\t if ($removeAdditional) {\r\n\t out += ' delete ' + ($data) + '[key' + ($lvl) + ']; ';\r\n\t } else {\r\n\t out += ' valid' + ($it.level) + ' = false; ';\r\n\t var $currErrSchemaPath = $errSchemaPath;\r\n\t $errSchemaPath = it.errSchemaPath + '/additionalProperties';\r\n\t var $$outStack = $$outStack || [];\r\n\t $$outStack.push(out);\r\n\t out = ''; /* istanbul ignore else */\r\n\t if (it.createErrors !== false) {\r\n\t out += ' { keyword: \\'' + ($errorKeyword || 'additionalProperties') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: \"' + ($errSchemaPath) + '\" , params: { additionalProperty: \\'' + ($additionalProperty) + '\\' } ';\r\n\t if (it.opts.messages !== false) {\r\n\t out += ' , message: \\'should NOT have additional properties\\' ';\r\n\t }\r\n\t if (it.opts.verbose) {\r\n\t out += ' , schema: false , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\r\n\t }\r\n\t out += ' } ';\r\n\t } else {\r\n\t out += ' {} ';\r\n\t }\r\n\t var __err = out;\r\n\t out = $$outStack.pop();\r\n\t if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */\r\n\t if (it.async) {\r\n\t out += ' throw new ValidationError([' + (__err) + ']); ';\r\n\t } else {\r\n\t out += ' validate.errors = [' + (__err) + ']; return false; ';\r\n\t }\r\n\t } else {\r\n\t out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\r\n\t }\r\n\t $errSchemaPath = $currErrSchemaPath;\r\n\t if ($breakOnError) {\r\n\t out += ' break; ';\r\n\t }\r\n\t }\r\n\t } else if ($additionalIsSchema) {\r\n\t if ($removeAdditional == 'failing') {\r\n\t out += ' var ' + ($errs) + ' = errors; ';\r\n\t var $wasComposite = it.compositeRule;\r\n\t it.compositeRule = $it.compositeRule = true;\r\n\t $it.schema = $aProperties;\r\n\t $it.schemaPath = it.schemaPath + '.additionalProperties';\r\n\t $it.errSchemaPath = it.errSchemaPath + '/additionalProperties';\r\n\t $it.errorPath = it.opts._errorDataPathProperty ? it.errorPath : it.util.getPathExpr(it.errorPath, 'key' + $lvl, it.opts.jsonPointers);\r\n\t var $passData = $data + '[key' + $lvl + ']';\r\n\t $it.dataPathArr[$dataNxt] = 'key' + $lvl;\r\n\t var $code = it.validate($it);\r\n\t if (it.util.varOccurences($code, $nextData) < 2) {\r\n\t out += ' ' + (it.util.varReplace($code, $nextData, $passData)) + ' ';\r\n\t } else {\r\n\t out += ' var ' + ($nextData) + ' = ' + ($passData) + '; ' + ($code) + ' ';\r\n\t }\r\n\t out += ' if (!valid' + ($it.level) + ') { errors = ' + ($errs) + '; if (validate.errors !== null) { if (errors) validate.errors.length = errors; else validate.errors = null; } delete ' + ($data) + '[key' + ($lvl) + ']; } ';\r\n\t it.compositeRule = $it.compositeRule = $wasComposite;\r\n\t } else {\r\n\t $it.schema = $aProperties;\r\n\t $it.schemaPath = it.schemaPath + '.additionalProperties';\r\n\t $it.errSchemaPath = it.errSchemaPath + '/additionalProperties';\r\n\t $it.errorPath = it.opts._errorDataPathProperty ? it.errorPath : it.util.getPathExpr(it.errorPath, 'key' + $lvl, it.opts.jsonPointers);\r\n\t var $passData = $data + '[key' + $lvl + ']';\r\n\t $it.dataPathArr[$dataNxt] = 'key' + $lvl;\r\n\t var $code = it.validate($it);\r\n\t if (it.util.varOccurences($code, $nextData) < 2) {\r\n\t out += ' ' + (it.util.varReplace($code, $nextData, $passData)) + ' ';\r\n\t } else {\r\n\t out += ' var ' + ($nextData) + ' = ' + ($passData) + '; ' + ($code) + ' ';\r\n\t }\r\n\t if ($breakOnError) {\r\n\t out += ' if (!valid' + ($it.level) + ') break; ';\r\n\t }\r\n\t }\r\n\t }\r\n\t it.errorPath = $currentErrorPath;\r\n\t }\r\n\t if ($someProperties) {\r\n\t out += ' } ';\r\n\t }\r\n\t out += ' } ';\r\n\t if ($breakOnError) {\r\n\t out += ' if (valid' + ($it.level) + ') { ';\r\n\t $closingBraces += '}';\r\n\t }\r\n\t }\r\n\t var $useDefaults = it.opts.useDefaults && !it.compositeRule;\r\n\t if ($schemaKeys.length) {\r\n\t var arr4 = $schemaKeys;\r\n\t if (arr4) {\r\n\t var $propertyKey, i4 = -1,\r\n\t l4 = arr4.length - 1;\r\n\t while (i4 < l4) {\r\n\t $propertyKey = arr4[i4 += 1];\r\n\t var $sch = $schema[$propertyKey];\r\n\t if (it.util.schemaHasRules($sch, it.RULES.all)) {\r\n\t var $prop = it.util.getProperty($propertyKey),\r\n\t $passData = $data + $prop,\r\n\t $hasDefault = $useDefaults && $sch.default !== undefined;\r\n\t $it.schema = $sch;\r\n\t $it.schemaPath = $schemaPath + $prop;\r\n\t $it.errSchemaPath = $errSchemaPath + '/' + it.util.escapeFragment($propertyKey);\r\n\t $it.errorPath = it.util.getPath(it.errorPath, $propertyKey, it.opts.jsonPointers);\r\n\t $it.dataPathArr[$dataNxt] = it.util.toQuotedString($propertyKey);\r\n\t var $code = it.validate($it);\r\n\t if (it.util.varOccurences($code, $nextData) < 2) {\r\n\t $code = it.util.varReplace($code, $nextData, $passData);\r\n\t var $useData = $passData;\r\n\t } else {\r\n\t var $useData = $nextData;\r\n\t out += ' var ' + ($nextData) + ' = ' + ($passData) + '; ';\r\n\t }\r\n\t if ($hasDefault) {\r\n\t out += ' ' + ($code) + ' ';\r\n\t } else {\r\n\t if ($requiredHash && $requiredHash[$propertyKey]) {\r\n\t out += ' if (' + ($useData) + ' === undefined) { valid' + ($it.level) + ' = false; ';\r\n\t var $currentErrorPath = it.errorPath,\r\n\t $currErrSchemaPath = $errSchemaPath,\r\n\t $missingProperty = it.util.escapeQuotes($propertyKey);\r\n\t if (it.opts._errorDataPathProperty) {\r\n\t it.errorPath = it.util.getPath($currentErrorPath, $propertyKey, it.opts.jsonPointers);\r\n\t }\r\n\t $errSchemaPath = it.errSchemaPath + '/required';\r\n\t var $$outStack = $$outStack || [];\r\n\t $$outStack.push(out);\r\n\t out = ''; /* istanbul ignore else */\r\n\t if (it.createErrors !== false) {\r\n\t out += ' { keyword: \\'' + ($errorKeyword || 'required') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: \"' + ($errSchemaPath) + '\" , params: { missingProperty: \\'' + ($missingProperty) + '\\' } ';\r\n\t if (it.opts.messages !== false) {\r\n\t out += ' , message: \\'';\r\n\t if (it.opts._errorDataPathProperty) {\r\n\t out += 'is a required property';\r\n\t } else {\r\n\t out += 'should have required property \\\\\\'' + ($missingProperty) + '\\\\\\'';\r\n\t }\r\n\t out += '\\' ';\r\n\t }\r\n\t if (it.opts.verbose) {\r\n\t out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\r\n\t }\r\n\t out += ' } ';\r\n\t } else {\r\n\t out += ' {} ';\r\n\t }\r\n\t var __err = out;\r\n\t out = $$outStack.pop();\r\n\t if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */\r\n\t if (it.async) {\r\n\t out += ' throw new ValidationError([' + (__err) + ']); ';\r\n\t } else {\r\n\t out += ' validate.errors = [' + (__err) + ']; return false; ';\r\n\t }\r\n\t } else {\r\n\t out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\r\n\t }\r\n\t $errSchemaPath = $currErrSchemaPath;\r\n\t it.errorPath = $currentErrorPath;\r\n\t out += ' } else { ';\r\n\t } else {\r\n\t if ($breakOnError) {\r\n\t out += ' if (' + ($useData) + ' === undefined) { valid' + ($it.level) + ' = true; } else { ';\r\n\t } else {\r\n\t out += ' if (' + ($useData) + ' !== undefined) { ';\r\n\t }\r\n\t }\r\n\t out += ' ' + ($code) + ' } ';\r\n\t }\r\n\t }\r\n\t if ($breakOnError) {\r\n\t out += ' if (valid' + ($it.level) + ') { ';\r\n\t $closingBraces += '}';\r\n\t }\r\n\t }\r\n\t }\r\n\t }\r\n\t var arr5 = $pPropertyKeys;\r\n\t if (arr5) {\r\n\t var $pProperty, i5 = -1,\r\n\t l5 = arr5.length - 1;\r\n\t while (i5 < l5) {\r\n\t $pProperty = arr5[i5 += 1];\r\n\t var $sch = $pProperties[$pProperty];\r\n\t if (it.util.schemaHasRules($sch, it.RULES.all)) {\r\n\t $it.schema = $sch;\r\n\t $it.schemaPath = it.schemaPath + '.patternProperties' + it.util.getProperty($pProperty);\r\n\t $it.errSchemaPath = it.errSchemaPath + '/patternProperties/' + it.util.escapeFragment($pProperty);\r\n\t out += ' for (var key' + ($lvl) + ' in ' + ($data) + ') { if (' + (it.usePattern($pProperty)) + '.test(key' + ($lvl) + ')) { ';\r\n\t $it.errorPath = it.util.getPathExpr(it.errorPath, 'key' + $lvl, it.opts.jsonPointers);\r\n\t var $passData = $data + '[key' + $lvl + ']';\r\n\t $it.dataPathArr[$dataNxt] = 'key' + $lvl;\r\n\t var $code = it.validate($it);\r\n\t if (it.util.varOccurences($code, $nextData) < 2) {\r\n\t out += ' ' + (it.util.varReplace($code, $nextData, $passData)) + ' ';\r\n\t } else {\r\n\t out += ' var ' + ($nextData) + ' = ' + ($passData) + '; ' + ($code) + ' ';\r\n\t }\r\n\t if ($breakOnError) {\r\n\t out += ' if (!valid' + ($it.level) + ') break; ';\r\n\t }\r\n\t out += ' } ';\r\n\t if ($breakOnError) {\r\n\t out += ' else valid' + ($it.level) + ' = true; ';\r\n\t }\r\n\t out += ' } ';\r\n\t if ($breakOnError) {\r\n\t out += ' if (valid' + ($it.level) + ') { ';\r\n\t $closingBraces += '}';\r\n\t }\r\n\t }\r\n\t }\r\n\t }\r\n\t if (it.opts.v5) {\r\n\t var arr6 = $pgPropertyKeys;\r\n\t if (arr6) {\r\n\t var $pgProperty, i6 = -1,\r\n\t l6 = arr6.length - 1;\r\n\t while (i6 < l6) {\r\n\t $pgProperty = arr6[i6 += 1];\r\n\t var $pgSchema = $pgProperties[$pgProperty],\r\n\t $sch = $pgSchema.schema;\r\n\t if (it.util.schemaHasRules($sch, it.RULES.all)) {\r\n\t $it.schema = $sch;\r\n\t $it.schemaPath = it.schemaPath + '.patternGroups' + it.util.getProperty($pgProperty) + '.schema';\r\n\t $it.errSchemaPath = it.errSchemaPath + '/patternGroups/' + it.util.escapeFragment($pgProperty) + '/schema';\r\n\t out += ' var pgPropCount' + ($lvl) + ' = 0; for (var key' + ($lvl) + ' in ' + ($data) + ') { if (' + (it.usePattern($pgProperty)) + '.test(key' + ($lvl) + ')) { pgPropCount' + ($lvl) + '++; ';\r\n\t $it.errorPath = it.util.getPathExpr(it.errorPath, 'key' + $lvl, it.opts.jsonPointers);\r\n\t var $passData = $data + '[key' + $lvl + ']';\r\n\t $it.dataPathArr[$dataNxt] = 'key' + $lvl;\r\n\t var $code = it.validate($it);\r\n\t if (it.util.varOccurences($code, $nextData) < 2) {\r\n\t out += ' ' + (it.util.varReplace($code, $nextData, $passData)) + ' ';\r\n\t } else {\r\n\t out += ' var ' + ($nextData) + ' = ' + ($passData) + '; ' + ($code) + ' ';\r\n\t }\r\n\t if ($breakOnError) {\r\n\t out += ' if (!valid' + ($it.level) + ') break; ';\r\n\t }\r\n\t out += ' } ';\r\n\t if ($breakOnError) {\r\n\t out += ' else valid' + ($it.level) + ' = true; ';\r\n\t }\r\n\t out += ' } ';\r\n\t if ($breakOnError) {\r\n\t out += ' if (valid' + ($it.level) + ') { ';\r\n\t $closingBraces += '}';\r\n\t }\r\n\t var $pgMin = $pgSchema.minimum,\r\n\t $pgMax = $pgSchema.maximum;\r\n\t if ($pgMin !== undefined || $pgMax !== undefined) {\r\n\t out += ' var ' + ($valid) + ' = true; ';\r\n\t var $currErrSchemaPath = $errSchemaPath;\r\n\t if ($pgMin !== undefined) {\r\n\t var $limit = $pgMin,\r\n\t $reason = 'minimum',\r\n\t $moreOrLess = 'less';\r\n\t out += ' ' + ($valid) + ' = pgPropCount' + ($lvl) + ' >= ' + ($pgMin) + '; ';\r\n\t $errSchemaPath = it.errSchemaPath + '/patternGroups/minimum';\r\n\t out += ' if (!' + ($valid) + ') { ';\r\n\t var $$outStack = $$outStack || [];\r\n\t $$outStack.push(out);\r\n\t out = ''; /* istanbul ignore else */\r\n\t if (it.createErrors !== false) {\r\n\t out += ' { keyword: \\'' + ($errorKeyword || 'patternGroups') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: \"' + ($errSchemaPath) + '\" , params: { reason: \\'' + ($reason) + '\\', limit: ' + ($limit) + ', pattern: \\'' + (it.util.escapeQuotes($pgProperty)) + '\\' } ';\r\n\t if (it.opts.messages !== false) {\r\n\t out += ' , message: \\'should NOT have ' + ($moreOrLess) + ' than ' + ($limit) + ' properties matching pattern \"' + (it.util.escapeQuotes($pgProperty)) + '\"\\' ';\r\n\t }\r\n\t if (it.opts.verbose) {\r\n\t out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\r\n\t }\r\n\t out += ' } ';\r\n\t } else {\r\n\t out += ' {} ';\r\n\t }\r\n\t var __err = out;\r\n\t out = $$outStack.pop();\r\n\t if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */\r\n\t if (it.async) {\r\n\t out += ' throw new ValidationError([' + (__err) + ']); ';\r\n\t } else {\r\n\t out += ' validate.errors = [' + (__err) + ']; return false; ';\r\n\t }\r\n\t } else {\r\n\t out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\r\n\t }\r\n\t out += ' } ';\r\n\t if ($pgMax !== undefined) {\r\n\t out += ' else ';\r\n\t }\r\n\t }\r\n\t if ($pgMax !== undefined) {\r\n\t var $limit = $pgMax,\r\n\t $reason = 'maximum',\r\n\t $moreOrLess = 'more';\r\n\t out += ' ' + ($valid) + ' = pgPropCount' + ($lvl) + ' <= ' + ($pgMax) + '; ';\r\n\t $errSchemaPath = it.errSchemaPath + '/patternGroups/maximum';\r\n\t out += ' if (!' + ($valid) + ') { ';\r\n\t var $$outStack = $$outStack || [];\r\n\t $$outStack.push(out);\r\n\t out = ''; /* istanbul ignore else */\r\n\t if (it.createErrors !== false) {\r\n\t out += ' { keyword: \\'' + ($errorKeyword || 'patternGroups') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: \"' + ($errSchemaPath) + '\" , params: { reason: \\'' + ($reason) + '\\', limit: ' + ($limit) + ', pattern: \\'' + (it.util.escapeQuotes($pgProperty)) + '\\' } ';\r\n\t if (it.opts.messages !== false) {\r\n\t out += ' , message: \\'should NOT have ' + ($moreOrLess) + ' than ' + ($limit) + ' properties matching pattern \"' + (it.util.escapeQuotes($pgProperty)) + '\"\\' ';\r\n\t }\r\n\t if (it.opts.verbose) {\r\n\t out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\r\n\t }\r\n\t out += ' } ';\r\n\t } else {\r\n\t out += ' {} ';\r\n\t }\r\n\t var __err = out;\r\n\t out = $$outStack.pop();\r\n\t if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */\r\n\t if (it.async) {\r\n\t out += ' throw new ValidationError([' + (__err) + ']); ';\r\n\t } else {\r\n\t out += ' validate.errors = [' + (__err) + ']; return false; ';\r\n\t }\r\n\t } else {\r\n\t out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\r\n\t }\r\n\t out += ' } ';\r\n\t }\r\n\t $errSchemaPath = $currErrSchemaPath;\r\n\t if ($breakOnError) {\r\n\t out += ' if (' + ($valid) + ') { ';\r\n\t $closingBraces += '}';\r\n\t }\r\n\t }\r\n\t }\r\n\t }\r\n\t }\r\n\t }\r\n\t if ($breakOnError) {\r\n\t out += ' ' + ($closingBraces) + ' if (' + ($errs) + ' == errors) {';\r\n\t }\r\n\t out = it.util.cleanUpCode(out);\r\n\t return out;\r\n\t}\r\n\r\n\r\n/***/ },\r\n/* 41 */\r\n/***/ function(module, exports) {\r\n\r\n\t'use strict';\r\n\tmodule.exports = function generate_required(it, $keyword) {\r\n\t var out = ' ';\r\n\t var $lvl = it.level;\r\n\t var $dataLvl = it.dataLevel;\r\n\t var $schema = it.schema[$keyword];\r\n\t var $schemaPath = it.schemaPath + '.' + $keyword;\r\n\t var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\r\n\t var $breakOnError = !it.opts.allErrors;\r\n\t var $errorKeyword;\r\n\t var $data = 'data' + ($dataLvl || '');\r\n\t var $valid = 'valid' + $lvl;\r\n\t var $isData = it.opts.v5 && $schema.$data;\r\n\t var $schemaValue = $isData ? it.util.getData($schema.$data, $dataLvl, it.dataPathArr) : $schema;\r\n\t if ($isData) {\r\n\t out += ' var schema' + ($lvl) + ' = ' + ($schemaValue) + '; ';\r\n\t $schemaValue = 'schema' + $lvl;\r\n\t }\r\n\t if (!$isData) {\r\n\t if ($schema.length < it.opts.loopRequired && it.schema.properties && Object.keys(it.schema.properties).length) {\r\n\t var $required = [];\r\n\t var arr1 = $schema;\r\n\t if (arr1) {\r\n\t var $property, i1 = -1,\r\n\t l1 = arr1.length - 1;\r\n\t while (i1 < l1) {\r\n\t $property = arr1[i1 += 1];\r\n\t var $propertySch = it.schema.properties[$property];\r\n\t if (!($propertySch && it.util.schemaHasRules($propertySch, it.RULES.all))) {\r\n\t $required[$required.length] = $property;\r\n\t }\r\n\t }\r\n\t }\r\n\t } else {\r\n\t var $required = $schema;\r\n\t }\r\n\t }\r\n\t if ($isData || $required.length) {\r\n\t var $currentErrorPath = it.errorPath,\r\n\t $loopRequired = $isData || $required.length >= it.opts.loopRequired;\r\n\t if ($breakOnError) {\r\n\t out += ' var missing' + ($lvl) + '; ';\r\n\t if ($loopRequired) {\r\n\t if (!$isData) {\r\n\t out += ' var schema' + ($lvl) + ' = validate.schema' + ($schemaPath) + '; ';\r\n\t }\r\n\t var $i = 'i' + $lvl,\r\n\t $propertyPath = 'schema' + $lvl + '[' + $i + ']',\r\n\t $missingProperty = '\\' + ' + $propertyPath + ' + \\'';\r\n\t if (it.opts._errorDataPathProperty) {\r\n\t it.errorPath = it.util.getPathExpr($currentErrorPath, $propertyPath, it.opts.jsonPointers);\r\n\t }\r\n\t out += ' var ' + ($valid) + ' = true; ';\r\n\t if ($isData) {\r\n\t out += ' if (schema' + ($lvl) + ' === undefined) ' + ($valid) + ' = true; else if (!Array.isArray(schema' + ($lvl) + ')) ' + ($valid) + ' = false; else {';\r\n\t }\r\n\t out += ' for (var ' + ($i) + ' = 0; ' + ($i) + ' < schema' + ($lvl) + '.length; ' + ($i) + '++) { ' + ($valid) + ' = ' + ($data) + '[schema' + ($lvl) + '[' + ($i) + ']] !== undefined; if (!' + ($valid) + ') break; } ';\r\n\t if ($isData) {\r\n\t out += ' } ';\r\n\t }\r\n\t out += ' if (!' + ($valid) + ') { ';\r\n\t var $$outStack = $$outStack || [];\r\n\t $$outStack.push(out);\r\n\t out = ''; /* istanbul ignore else */\r\n\t if (it.createErrors !== false) {\r\n\t out += ' { keyword: \\'' + ($errorKeyword || 'required') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: \"' + ($errSchemaPath) + '\" , params: { missingProperty: \\'' + ($missingProperty) + '\\' } ';\r\n\t if (it.opts.messages !== false) {\r\n\t out += ' , message: \\'';\r\n\t if (it.opts._errorDataPathProperty) {\r\n\t out += 'is a required property';\r\n\t } else {\r\n\t out += 'should have required property \\\\\\'' + ($missingProperty) + '\\\\\\'';\r\n\t }\r\n\t out += '\\' ';\r\n\t }\r\n\t if (it.opts.verbose) {\r\n\t out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\r\n\t }\r\n\t out += ' } ';\r\n\t } else {\r\n\t out += ' {} ';\r\n\t }\r\n\t var __err = out;\r\n\t out = $$outStack.pop();\r\n\t if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */\r\n\t if (it.async) {\r\n\t out += ' throw new ValidationError([' + (__err) + ']); ';\r\n\t } else {\r\n\t out += ' validate.errors = [' + (__err) + ']; return false; ';\r\n\t }\r\n\t } else {\r\n\t out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\r\n\t }\r\n\t out += ' } else { ';\r\n\t } else {\r\n\t out += ' if ( ';\r\n\t var arr2 = $required;\r\n\t if (arr2) {\r\n\t var _$property, $i = -1,\r\n\t l2 = arr2.length - 1;\r\n\t while ($i < l2) {\r\n\t _$property = arr2[$i += 1];\r\n\t if ($i) {\r\n\t out += ' || ';\r\n\t }\r\n\t var $prop = it.util.getProperty(_$property);\r\n\t out += ' ( ' + ($data) + ($prop) + ' === undefined && (missing' + ($lvl) + ' = ' + (it.util.toQuotedString(it.opts.jsonPointers ? _$property : $prop)) + ') ) ';\r\n\t }\r\n\t }\r\n\t out += ') { ';\r\n\t var $propertyPath = 'missing' + $lvl,\r\n\t $missingProperty = '\\' + ' + $propertyPath + ' + \\'';\r\n\t if (it.opts._errorDataPathProperty) {\r\n\t it.errorPath = it.opts.jsonPointers ? it.util.getPathExpr($currentErrorPath, $propertyPath, true) : $currentErrorPath + ' + ' + $propertyPath;\r\n\t }\r\n\t var $$outStack = $$outStack || [];\r\n\t $$outStack.push(out);\r\n\t out = ''; /* istanbul ignore else */\r\n\t if (it.createErrors !== false) {\r\n\t out += ' { keyword: \\'' + ($errorKeyword || 'required') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: \"' + ($errSchemaPath) + '\" , params: { missingProperty: \\'' + ($missingProperty) + '\\' } ';\r\n\t if (it.opts.messages !== false) {\r\n\t out += ' , message: \\'';\r\n\t if (it.opts._errorDataPathProperty) {\r\n\t out += 'is a required property';\r\n\t } else {\r\n\t out += 'should have required property \\\\\\'' + ($missingProperty) + '\\\\\\'';\r\n\t }\r\n\t out += '\\' ';\r\n\t }\r\n\t if (it.opts.verbose) {\r\n\t out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\r\n\t }\r\n\t out += ' } ';\r\n\t } else {\r\n\t out += ' {} ';\r\n\t }\r\n\t var __err = out;\r\n\t out = $$outStack.pop();\r\n\t if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */\r\n\t if (it.async) {\r\n\t out += ' throw new ValidationError([' + (__err) + ']); ';\r\n\t } else {\r\n\t out += ' validate.errors = [' + (__err) + ']; return false; ';\r\n\t }\r\n\t } else {\r\n\t out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\r\n\t }\r\n\t out += ' } else { ';\r\n\t }\r\n\t } else {\r\n\t if ($loopRequired) {\r\n\t if (!$isData) {\r\n\t out += ' var schema' + ($lvl) + ' = validate.schema' + ($schemaPath) + '; ';\r\n\t }\r\n\t var $i = 'i' + $lvl,\r\n\t $propertyPath = 'schema' + $lvl + '[' + $i + ']',\r\n\t $missingProperty = '\\' + ' + $propertyPath + ' + \\'';\r\n\t if (it.opts._errorDataPathProperty) {\r\n\t it.errorPath = it.util.getPathExpr($currentErrorPath, $propertyPath, it.opts.jsonPointers);\r\n\t }\r\n\t if ($isData) {\r\n\t out += ' if (schema' + ($lvl) + ' && !Array.isArray(schema' + ($lvl) + ')) { var err = '; /* istanbul ignore else */\r\n\t if (it.createErrors !== false) {\r\n\t out += ' { keyword: \\'' + ($errorKeyword || 'required') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: \"' + ($errSchemaPath) + '\" , params: { missingProperty: \\'' + ($missingProperty) + '\\' } ';\r\n\t if (it.opts.messages !== false) {\r\n\t out += ' , message: \\'';\r\n\t if (it.opts._errorDataPathProperty) {\r\n\t out += 'is a required property';\r\n\t } else {\r\n\t out += 'should have required property \\\\\\'' + ($missingProperty) + '\\\\\\'';\r\n\t }\r\n\t out += '\\' ';\r\n\t }\r\n\t if (it.opts.verbose) {\r\n\t out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\r\n\t }\r\n\t out += ' } ';\r\n\t } else {\r\n\t out += ' {} ';\r\n\t }\r\n\t out += '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; } else if (schema' + ($lvl) + ' !== undefined) { ';\r\n\t }\r\n\t out += ' for (var ' + ($i) + ' = 0; ' + ($i) + ' < schema' + ($lvl) + '.length; ' + ($i) + '++) { if (' + ($data) + '[schema' + ($lvl) + '[' + ($i) + ']] === undefined) { var err = '; /* istanbul ignore else */\r\n\t if (it.createErrors !== false) {\r\n\t out += ' { keyword: \\'' + ($errorKeyword || 'required') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: \"' + ($errSchemaPath) + '\" , params: { missingProperty: \\'' + ($missingProperty) + '\\' } ';\r\n\t if (it.opts.messages !== false) {\r\n\t out += ' , message: \\'';\r\n\t if (it.opts._errorDataPathProperty) {\r\n\t out += 'is a required property';\r\n\t } else {\r\n\t out += 'should have required property \\\\\\'' + ($missingProperty) + '\\\\\\'';\r\n\t }\r\n\t out += '\\' ';\r\n\t }\r\n\t if (it.opts.verbose) {\r\n\t out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\r\n\t }\r\n\t out += ' } ';\r\n\t } else {\r\n\t out += ' {} ';\r\n\t }\r\n\t out += '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; } } ';\r\n\t if ($isData) {\r\n\t out += ' } ';\r\n\t }\r\n\t } else {\r\n\t var arr3 = $required;\r\n\t if (arr3) {\r\n\t var $property, $i = -1,\r\n\t l3 = arr3.length - 1;\r\n\t while ($i < l3) {\r\n\t $property = arr3[$i += 1];\r\n\t var $prop = it.util.getProperty($property),\r\n\t $missingProperty = it.util.escapeQuotes($property);\r\n\t if (it.opts._errorDataPathProperty) {\r\n\t it.errorPath = it.util.getPath($currentErrorPath, $property, it.opts.jsonPointers);\r\n\t }\r\n\t out += ' if (' + ($data) + ($prop) + ' === undefined) { var err = '; /* istanbul ignore else */\r\n\t if (it.createErrors !== false) {\r\n\t out += ' { keyword: \\'' + ($errorKeyword || 'required') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: \"' + ($errSchemaPath) + '\" , params: { missingProperty: \\'' + ($missingProperty) + '\\' } ';\r\n\t if (it.opts.messages !== false) {\r\n\t out += ' , message: \\'';\r\n\t if (it.opts._errorDataPathProperty) {\r\n\t out += 'is a required property';\r\n\t } else {\r\n\t out += 'should have required property \\\\\\'' + ($missingProperty) + '\\\\\\'';\r\n\t }\r\n\t out += '\\' ';\r\n\t }\r\n\t if (it.opts.verbose) {\r\n\t out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\r\n\t }\r\n\t out += ' } ';\r\n\t } else {\r\n\t out += ' {} ';\r\n\t }\r\n\t out += '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; } ';\r\n\t }\r\n\t }\r\n\t }\r\n\t }\r\n\t it.errorPath = $currentErrorPath;\r\n\t } else if ($breakOnError) {\r\n\t out += ' if (true) {';\r\n\t }\r\n\t return out;\r\n\t}\r\n\r\n\r\n/***/ },\r\n/* 42 */\r\n/***/ function(module, exports) {\r\n\r\n\t'use strict';\r\n\tmodule.exports = function generate_uniqueItems(it, $keyword) {\r\n\t var out = ' ';\r\n\t var $lvl = it.level;\r\n\t var $dataLvl = it.dataLevel;\r\n\t var $schema = it.schema[$keyword];\r\n\t var $schemaPath = it.schemaPath + '.' + $keyword;\r\n\t var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\r\n\t var $breakOnError = !it.opts.allErrors;\r\n\t var $errorKeyword;\r\n\t var $data = 'data' + ($dataLvl || '');\r\n\t var $valid = 'valid' + $lvl;\r\n\t var $isData = it.opts.v5 && $schema.$data;\r\n\t var $schemaValue = $isData ? it.util.getData($schema.$data, $dataLvl, it.dataPathArr) : $schema;\r\n\t if ($isData) {\r\n\t out += ' var schema' + ($lvl) + ' = ' + ($schemaValue) + '; ';\r\n\t $schemaValue = 'schema' + $lvl;\r\n\t }\r\n\t if (($schema || $isData) && it.opts.uniqueItems !== false) {\r\n\t if ($isData) {\r\n\t out += ' var ' + ($valid) + '; if (' + ($schemaValue) + ' === false || ' + ($schemaValue) + ' === undefined) ' + ($valid) + ' = true; else if (typeof ' + ($schemaValue) + ' != \\'boolean\\') ' + ($valid) + ' = false; else { ';\r\n\t }\r\n\t out += ' var ' + ($valid) + ' = true; if (' + ($data) + '.length > 1) { var i = ' + ($data) + '.length, j; outer: for (;i--;) { for (j = i; j--;) { if (equal(' + ($data) + '[i], ' + ($data) + '[j])) { ' + ($valid) + ' = false; break outer; } } } } ';\r\n\t if ($isData) {\r\n\t out += ' } ';\r\n\t }\r\n\t out += ' if (!' + ($valid) + ') { ';\r\n\t var $$outStack = $$outStack || [];\r\n\t $$outStack.push(out);\r\n\t out = ''; /* istanbul ignore else */\r\n\t if (it.createErrors !== false) {\r\n\t out += ' { keyword: \\'' + ($errorKeyword || 'uniqueItems') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: \"' + ($errSchemaPath) + '\" , params: { i: i, j: j } ';\r\n\t if (it.opts.messages !== false) {\r\n\t out += ' , message: \\'should NOT have duplicate items (items ## \\' + j + \\' and \\' + i + \\' are identical)\\' ';\r\n\t }\r\n\t if (it.opts.verbose) {\r\n\t out += ' , schema: ';\r\n\t if ($isData) {\r\n\t out += 'validate.schema' + ($schemaPath);\r\n\t } else {\r\n\t out += '' + ($schema);\r\n\t }\r\n\t out += ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\r\n\t }\r\n\t out += ' } ';\r\n\t } else {\r\n\t out += ' {} ';\r\n\t }\r\n\t var __err = out;\r\n\t out = $$outStack.pop();\r\n\t if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */\r\n\t if (it.async) {\r\n\t out += ' throw new ValidationError([' + (__err) + ']); ';\r\n\t } else {\r\n\t out += ' validate.errors = [' + (__err) + ']; return false; ';\r\n\t }\r\n\t } else {\r\n\t out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\r\n\t }\r\n\t out += ' } ';\r\n\t if ($breakOnError) {\r\n\t out += ' else { ';\r\n\t }\r\n\t } else {\r\n\t if ($breakOnError) {\r\n\t out += ' if (true) { ';\r\n\t }\r\n\t }\r\n\t return out;\r\n\t}\r\n\r\n\r\n/***/ },\r\n/* 43 */\r\n/***/ function(module, exports, __webpack_require__) {\r\n\r\n\t'use strict';\r\n\r\n\tvar META_SCHEMA_ID = 'https://raw.githubusercontent.com/epoberezkin/ajv/master/lib/refs/json-schema-v5.json';\r\n\r\n\tmodule.exports = {\r\n\t enable: enableV5,\r\n\t META_SCHEMA_ID: META_SCHEMA_ID\r\n\t};\r\n\r\n\r\n\tfunction enableV5(ajv) {\r\n\t var inlineFunctions = {\r\n\t 'switch': __webpack_require__(44),\r\n\t 'constant': __webpack_require__(45),\r\n\t '_formatLimit': __webpack_require__(46),\r\n\t 'patternRequired': __webpack_require__(47)\r\n\t };\r\n\r\n\t if (ajv._opts.meta !== false) {\r\n\t var metaSchema = __webpack_require__(48);\r\n\t ajv.addMetaSchema(metaSchema, META_SCHEMA_ID);\r\n\t }\r\n\t _addKeyword('constant');\r\n\t ajv.addKeyword('contains', { type: 'array', macro: containsMacro });\r\n\r\n\t _addKeyword('formatMaximum', 'string', inlineFunctions._formatLimit);\r\n\t _addKeyword('formatMinimum', 'string', inlineFunctions._formatLimit);\r\n\t ajv.addKeyword('exclusiveFormatMaximum');\r\n\t ajv.addKeyword('exclusiveFormatMinimum');\r\n\r\n\t ajv.addKeyword('patternGroups'); // implemented in properties.jst\r\n\t _addKeyword('patternRequired', 'object');\r\n\t _addKeyword('switch');\r\n\r\n\r\n\t function _addKeyword(keyword, types, inlineFunc) {\r\n\t var definition = {\r\n\t inline: inlineFunc || inlineFunctions[keyword],\r\n\t statements: true,\r\n\t errors: 'full'\r\n\t };\r\n\t if (types) definition.type = types;\r\n\t ajv.addKeyword(keyword, definition);\r\n\t }\r\n\t}\r\n\r\n\r\n\tfunction containsMacro(schema) {\r\n\t return {\r\n\t not: { items: { not: schema } }\r\n\t };\r\n\t}\r\n\r\n\r\n/***/ },\r\n/* 44 */\r\n/***/ function(module, exports) {\r\n\r\n\t'use strict';\r\n\tmodule.exports = function generate_switch(it, $keyword) {\r\n\t var out = ' ';\r\n\t var $lvl = it.level;\r\n\t var $dataLvl = it.dataLevel;\r\n\t var $schema = it.schema[$keyword];\r\n\t var $schemaPath = it.schemaPath + '.' + $keyword;\r\n\t var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\r\n\t var $breakOnError = !it.opts.allErrors;\r\n\t var $errorKeyword;\r\n\t var $data = 'data' + ($dataLvl || '');\r\n\t var $valid = 'valid' + $lvl;\r\n\t var $errs = 'errs__' + $lvl;\r\n\t var $it = it.util.copy(it);\r\n\t var $closingBraces = '';\r\n\t $it.level++;\r\n\t var $ifPassed = 'ifPassed' + it.level,\r\n\t $shouldContinue;\r\n\t out += 'var ' + ($ifPassed) + ';';\r\n\t var arr1 = $schema;\r\n\t if (arr1) {\r\n\t var $sch, $caseIndex = -1,\r\n\t l1 = arr1.length - 1;\r\n\t while ($caseIndex < l1) {\r\n\t $sch = arr1[$caseIndex += 1];\r\n\t if ($caseIndex && !$shouldContinue) {\r\n\t out += ' if (!' + ($ifPassed) + ') { ';\r\n\t $closingBraces += '}';\r\n\t }\r\n\t if ($sch.if && it.util.schemaHasRules($sch.if, it.RULES.all)) {\r\n\t out += ' var ' + ($errs) + ' = errors; ';\r\n\t var $wasComposite = it.compositeRule;\r\n\t it.compositeRule = $it.compositeRule = true;\r\n\t $it.createErrors = false;\r\n\t $it.schema = $sch.if;\r\n\t $it.schemaPath = $schemaPath + '[' + $caseIndex + '].if';\r\n\t $it.errSchemaPath = $errSchemaPath + '/' + $caseIndex + '/if';\r\n\t out += ' ' + (it.validate($it)) + ' ';\r\n\t $it.createErrors = true;\r\n\t it.compositeRule = $it.compositeRule = $wasComposite;\r\n\t out += ' ' + ($ifPassed) + ' = valid' + ($it.level) + '; if (' + ($ifPassed) + ') { ';\r\n\t if (typeof $sch.then == 'boolean') {\r\n\t if ($sch.then === false) {\r\n\t var $$outStack = $$outStack || [];\r\n\t $$outStack.push(out);\r\n\t out = ''; /* istanbul ignore else */\r\n\t if (it.createErrors !== false) {\r\n\t out += ' { keyword: \\'' + ($errorKeyword || 'switch') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: \"' + ($errSchemaPath) + '\" , params: { caseIndex: ' + ($caseIndex) + ' } ';\r\n\t if (it.opts.messages !== false) {\r\n\t out += ' , message: \\'should pass \"switch\" keyword validation\\' ';\r\n\t }\r\n\t if (it.opts.verbose) {\r\n\t out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\r\n\t }\r\n\t out += ' } ';\r\n\t } else {\r\n\t out += ' {} ';\r\n\t }\r\n\t var __err = out;\r\n\t out = $$outStack.pop();\r\n\t if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */\r\n\t if (it.async) {\r\n\t out += ' throw new ValidationError([' + (__err) + ']); ';\r\n\t } else {\r\n\t out += ' validate.errors = [' + (__err) + ']; return false; ';\r\n\t }\r\n\t } else {\r\n\t out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\r\n\t }\r\n\t }\r\n\t out += ' var valid' + ($it.level) + ' = ' + ($sch.then) + '; ';\r\n\t } else {\r\n\t $it.schema = $sch.then;\r\n\t $it.schemaPath = $schemaPath + '[' + $caseIndex + '].then';\r\n\t $it.errSchemaPath = $errSchemaPath + '/' + $caseIndex + '/then';\r\n\t out += ' ' + (it.validate($it)) + ' ';\r\n\t }\r\n\t out += ' } else { errors = ' + ($errs) + '; if (vErrors !== null) { if (' + ($errs) + ') vErrors.length = ' + ($errs) + '; else vErrors = null; } } ';\r\n\t } else {\r\n\t out += ' ' + ($ifPassed) + ' = true; ';\r\n\t if (typeof $sch.then == 'boolean') {\r\n\t if ($sch.then === false) {\r\n\t var $$outStack = $$outStack || [];\r\n\t $$outStack.push(out);\r\n\t out = ''; /* istanbul ignore else */\r\n\t if (it.createErrors !== false) {\r\n\t out += ' { keyword: \\'' + ($errorKeyword || 'switch') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: \"' + ($errSchemaPath) + '\" , params: { caseIndex: ' + ($caseIndex) + ' } ';\r\n\t if (it.opts.messages !== false) {\r\n\t out += ' , message: \\'should pass \"switch\" keyword validation\\' ';\r\n\t }\r\n\t if (it.opts.verbose) {\r\n\t out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\r\n\t }\r\n\t out += ' } ';\r\n\t } else {\r\n\t out += ' {} ';\r\n\t }\r\n\t var __err = out;\r\n\t out = $$outStack.pop();\r\n\t if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */\r\n\t if (it.async) {\r\n\t out += ' throw new ValidationError([' + (__err) + ']); ';\r\n\t } else {\r\n\t out += ' validate.errors = [' + (__err) + ']; return false; ';\r\n\t }\r\n\t } else {\r\n\t out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\r\n\t }\r\n\t }\r\n\t out += ' var valid' + ($it.level) + ' = ' + ($sch.then) + '; ';\r\n\t } else {\r\n\t $it.schema = $sch.then;\r\n\t $it.schemaPath = $schemaPath + '[' + $caseIndex + '].then';\r\n\t $it.errSchemaPath = $errSchemaPath + '/' + $caseIndex + '/then';\r\n\t out += ' ' + (it.validate($it)) + ' ';\r\n\t }\r\n\t }\r\n\t $shouldContinue = $sch.continue\r\n\t }\r\n\t }\r\n\t out += '' + ($closingBraces) + 'var ' + ($valid) + ' = valid' + ($it.level) + '; ';\r\n\t out = it.util.cleanUpCode(out);\r\n\t return out;\r\n\t}\r\n\r\n\r\n/***/ },\r\n/* 45 */\r\n/***/ function(module, exports) {\r\n\r\n\t'use strict';\r\n\tmodule.exports = function generate_constant(it, $keyword) {\r\n\t var out = ' ';\r\n\t var $lvl = it.level;\r\n\t var $dataLvl = it.dataLevel;\r\n\t var $schema = it.schema[$keyword];\r\n\t var $schemaPath = it.schemaPath + '.' + $keyword;\r\n\t var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\r\n\t var $breakOnError = !it.opts.allErrors;\r\n\t var $errorKeyword;\r\n\t var $data = 'data' + ($dataLvl || '');\r\n\t var $valid = 'valid' + $lvl;\r\n\t var $isData = it.opts.v5 && $schema.$data;\r\n\t var $schemaValue = $isData ? it.util.getData($schema.$data, $dataLvl, it.dataPathArr) : $schema;\r\n\t if ($isData) {\r\n\t out += ' var schema' + ($lvl) + ' = ' + ($schemaValue) + '; ';\r\n\t $schemaValue = 'schema' + $lvl;\r\n\t }\r\n\t if (!$isData) {\r\n\t out += ' var schema' + ($lvl) + ' = validate.schema' + ($schemaPath) + ';';\r\n\t }\r\n\t out += 'var ' + ($valid) + ' = equal(' + ($data) + ', schema' + ($lvl) + '); if (!' + ($valid) + ') { ';\r\n\t var $$outStack = $$outStack || [];\r\n\t $$outStack.push(out);\r\n\t out = ''; /* istanbul ignore else */\r\n\t if (it.createErrors !== false) {\r\n\t out += ' { keyword: \\'' + ($errorKeyword || 'constant') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: \"' + ($errSchemaPath) + '\" , params: {} ';\r\n\t if (it.opts.messages !== false) {\r\n\t out += ' , message: \\'should be equal to constant\\' ';\r\n\t }\r\n\t if (it.opts.verbose) {\r\n\t out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\r\n\t }\r\n\t out += ' } ';\r\n\t } else {\r\n\t out += ' {} ';\r\n\t }\r\n\t var __err = out;\r\n\t out = $$outStack.pop();\r\n\t if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */\r\n\t if (it.async) {\r\n\t out += ' throw new ValidationError([' + (__err) + ']); ';\r\n\t } else {\r\n\t out += ' validate.errors = [' + (__err) + ']; return false; ';\r\n\t }\r\n\t } else {\r\n\t out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\r\n\t }\r\n\t out += ' }';\r\n\t return out;\r\n\t}\r\n\r\n\r\n/***/ },\r\n/* 46 */\r\n/***/ function(module, exports) {\r\n\r\n\t'use strict';\r\n\tmodule.exports = function generate__formatLimit(it, $keyword) {\r\n\t var out = ' ';\r\n\t var $lvl = it.level;\r\n\t var $dataLvl = it.dataLevel;\r\n\t var $schema = it.schema[$keyword];\r\n\t var $schemaPath = it.schemaPath + '.' + $keyword;\r\n\t var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\r\n\t var $breakOnError = !it.opts.allErrors;\r\n\t var $errorKeyword;\r\n\t var $data = 'data' + ($dataLvl || '');\r\n\t var $valid = 'valid' + $lvl;\r\n\t out += 'var ' + ($valid) + ' = undefined;';\r\n\t if (it.opts.format === false) {\r\n\t out += ' ' + ($valid) + ' = true; ';\r\n\t return out;\r\n\t }\r\n\t var $schemaFormat = it.schema.format,\r\n\t $isDataFormat = it.opts.v5 && $schemaFormat.$data,\r\n\t $closingBraces = '';\r\n\t if ($isDataFormat) {\r\n\t var $schemaValueFormat = it.util.getData($schemaFormat.$data, $dataLvl, it.dataPathArr),\r\n\t $format = 'format' + $lvl,\r\n\t $compare = 'compare' + $lvl;\r\n\t out += ' var ' + ($format) + ' = formats[' + ($schemaValueFormat) + '] , ' + ($compare) + ' = ' + ($format) + ' && ' + ($format) + '.compare;';\r\n\t } else {\r\n\t var $format = it.formats[$schemaFormat];\r\n\t if (!($format && $format.compare)) {\r\n\t out += ' ' + ($valid) + ' = true; ';\r\n\t return out;\r\n\t }\r\n\t var $compare = 'formats' + it.util.getProperty($schemaFormat) + '.compare';\r\n\t }\r\n\t var $isMax = $keyword == 'formatMaximum',\r\n\t $exclusiveKeyword = 'exclusiveFormat' + ($isMax ? 'Maximum' : 'Minimum'),\r\n\t $schemaExcl = it.schema[$exclusiveKeyword],\r\n\t $isDataExcl = it.opts.v5 && $schemaExcl && $schemaExcl.$data,\r\n\t $op = $isMax ? '<' : '>',\r\n\t $result = 'result' + $lvl;\r\n\t var $isData = it.opts.v5 && $schema.$data;\r\n\t var $schemaValue = $isData ? it.util.getData($schema.$data, $dataLvl, it.dataPathArr) : $schema;\r\n\t if ($isData) {\r\n\t out += ' var schema' + ($lvl) + ' = ' + ($schemaValue) + '; ';\r\n\t $schemaValue = 'schema' + $lvl;\r\n\t }\r\n\t if ($isDataExcl) {\r\n\t var $schemaValueExcl = it.util.getData($schemaExcl.$data, $dataLvl, it.dataPathArr),\r\n\t $exclusive = 'exclusive' + $lvl,\r\n\t $opExpr = 'op' + $lvl,\r\n\t $opStr = '\\' + ' + $opExpr + ' + \\'';\r\n\t out += ' var schemaExcl' + ($lvl) + ' = ' + ($schemaValueExcl) + '; ';\r\n\t $schemaValueExcl = 'schemaExcl' + $lvl;\r\n\t out += ' if (typeof ' + ($schemaValueExcl) + ' != \\'boolean\\' && ' + ($schemaValueExcl) + ' !== undefined) { ' + ($valid) + ' = false; ';\r\n\t var $errorKeyword = $exclusiveKeyword;\r\n\t var $$outStack = $$outStack || [];\r\n\t $$outStack.push(out);\r\n\t out = ''; /* istanbul ignore else */\r\n\t if (it.createErrors !== false) {\r\n\t out += ' { keyword: \\'' + ($errorKeyword || '_exclusiveFormatLimit') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: \"' + ($errSchemaPath) + '\" , params: {} ';\r\n\t if (it.opts.messages !== false) {\r\n\t out += ' , message: \\'' + ($exclusiveKeyword) + ' should be boolean\\' ';\r\n\t }\r\n\t if (it.opts.verbose) {\r\n\t out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\r\n\t }\r\n\t out += ' } ';\r\n\t } else {\r\n\t out += ' {} ';\r\n\t }\r\n\t var __err = out;\r\n\t out = $$outStack.pop();\r\n\t if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */\r\n\t if (it.async) {\r\n\t out += ' throw new ValidationError([' + (__err) + ']); ';\r\n\t } else {\r\n\t out += ' validate.errors = [' + (__err) + ']; return false; ';\r\n\t }\r\n\t } else {\r\n\t out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\r\n\t }\r\n\t out += ' } ';\r\n\t if ($breakOnError) {\r\n\t $closingBraces += '}';\r\n\t out += ' else { ';\r\n\t }\r\n\t if ($isData) {\r\n\t out += ' if (' + ($schemaValue) + ' === undefined) ' + ($valid) + ' = true; else if (typeof ' + ($schemaValue) + ' != \\'string\\') ' + ($valid) + ' = false; else { ';\r\n\t $closingBraces += '}';\r\n\t }\r\n\t if ($isDataFormat) {\r\n\t out += ' if (!' + ($compare) + ') ' + ($valid) + ' = true; else { ';\r\n\t $closingBraces += '}';\r\n\t }\r\n\t out += ' var ' + ($result) + ' = ' + ($compare) + '(' + ($data) + ', ';\r\n\t if ($isData) {\r\n\t out += '' + ($schemaValue);\r\n\t } else {\r\n\t out += '' + (it.util.toQuotedString($schema));\r\n\t }\r\n\t out += ' ); if (' + ($result) + ' === undefined) ' + ($valid) + ' = false; var exclusive' + ($lvl) + ' = ' + ($schemaValueExcl) + ' === true; if (' + ($valid) + ' === undefined) { ' + ($valid) + ' = exclusive' + ($lvl) + ' ? ' + ($result) + ' ' + ($op) + ' 0 : ' + ($result) + ' ' + ($op) + '= 0; } if (!' + ($valid) + ') var op' + ($lvl) + ' = exclusive' + ($lvl) + ' ? \\'' + ($op) + '\\' : \\'' + ($op) + '=\\';';\r\n\t } else {\r\n\t var $exclusive = $schemaExcl === true,\r\n\t $opStr = $op;\r\n\t if (!$exclusive) $opStr += '=';\r\n\t var $opExpr = '\\'' + $opStr + '\\'';\r\n\t if ($isData) {\r\n\t out += ' if (' + ($schemaValue) + ' === undefined) ' + ($valid) + ' = true; else if (typeof ' + ($schemaValue) + ' != \\'string\\') ' + ($valid) + ' = false; else { ';\r\n\t $closingBraces += '}';\r\n\t }\r\n\t if ($isDataFormat) {\r\n\t out += ' if (!' + ($compare) + ') ' + ($valid) + ' = true; else { ';\r\n\t $closingBraces += '}';\r\n\t }\r\n\t out += ' var ' + ($result) + ' = ' + ($compare) + '(' + ($data) + ', ';\r\n\t if ($isData) {\r\n\t out += '' + ($schemaValue);\r\n\t } else {\r\n\t out += '' + (it.util.toQuotedString($schema));\r\n\t }\r\n\t out += ' ); if (' + ($result) + ' === undefined) ' + ($valid) + ' = false; if (' + ($valid) + ' === undefined) ' + ($valid) + ' = ' + ($result) + ' ' + ($op);\r\n\t if (!$exclusive) {\r\n\t out += '=';\r\n\t }\r\n\t out += ' 0;';\r\n\t }\r\n\t out += '' + ($closingBraces) + 'if (!' + ($valid) + ') { ';\r\n\t var $errorKeyword = $keyword;\r\n\t var $$outStack = $$outStack || [];\r\n\t $$outStack.push(out);\r\n\t out = ''; /* istanbul ignore else */\r\n\t if (it.createErrors !== false) {\r\n\t out += ' { keyword: \\'' + ($errorKeyword || '_formatLimit') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: \"' + ($errSchemaPath) + '\" , params: { limit: ';\r\n\t if ($isData) {\r\n\t out += '' + ($schemaValue);\r\n\t } else {\r\n\t out += '' + (it.util.toQuotedString($schema));\r\n\t }\r\n\t out += ' } ';\r\n\t if (it.opts.messages !== false) {\r\n\t out += ' , message: \\'should be ' + ($opStr) + ' \"';\r\n\t if ($isData) {\r\n\t out += '\\' + ' + ($schemaValue) + ' + \\'';\r\n\t } else {\r\n\t out += '' + (it.util.escapeQuotes($schema));\r\n\t }\r\n\t out += '\"\\' ';\r\n\t }\r\n\t if (it.opts.verbose) {\r\n\t out += ' , schema: ';\r\n\t if ($isData) {\r\n\t out += 'validate.schema' + ($schemaPath);\r\n\t } else {\r\n\t out += '' + (it.util.toQuotedString($schema));\r\n\t }\r\n\t out += ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\r\n\t }\r\n\t out += ' } ';\r\n\t } else {\r\n\t out += ' {} ';\r\n\t }\r\n\t var __err = out;\r\n\t out = $$outStack.pop();\r\n\t if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */\r\n\t if (it.async) {\r\n\t out += ' throw new ValidationError([' + (__err) + ']); ';\r\n\t } else {\r\n\t out += ' validate.errors = [' + (__err) + ']; return false; ';\r\n\t }\r\n\t } else {\r\n\t out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\r\n\t }\r\n\t out += '}';\r\n\t return out;\r\n\t}\r\n\r\n\r\n/***/ },\r\n/* 47 */\r\n/***/ function(module, exports) {\r\n\r\n\t'use strict';\r\n\tmodule.exports = function generate_patternRequired(it, $keyword) {\r\n\t var out = ' ';\r\n\t var $lvl = it.level;\r\n\t var $dataLvl = it.dataLevel;\r\n\t var $schema = it.schema[$keyword];\r\n\t var $schemaPath = it.schemaPath + '.' + $keyword;\r\n\t var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\r\n\t var $breakOnError = !it.opts.allErrors;\r\n\t var $errorKeyword;\r\n\t var $data = 'data' + ($dataLvl || '');\r\n\t var $valid = 'valid' + $lvl;\r\n\t var $key = 'key' + $lvl,\r\n\t $matched = 'patternMatched' + $lvl,\r\n\t $closingBraces = '';\r\n\t out += 'var ' + ($valid) + ' = true;';\r\n\t var arr1 = $schema;\r\n\t if (arr1) {\r\n\t var $pProperty, i1 = -1,\r\n\t l1 = arr1.length - 1;\r\n\t while (i1 < l1) {\r\n\t $pProperty = arr1[i1 += 1];\r\n\t out += ' var ' + ($matched) + ' = false; for (var ' + ($key) + ' in ' + ($data) + ') { ' + ($matched) + ' = ' + (it.usePattern($pProperty)) + '.test(' + ($key) + '); if (' + ($matched) + ') break; } ';\r\n\t var $missingPattern = it.util.escapeQuotes($pProperty);\r\n\t out += ' if (!' + ($matched) + ') { ' + ($valid) + ' = false; var err = '; /* istanbul ignore else */\r\n\t if (it.createErrors !== false) {\r\n\t out += ' { keyword: \\'' + ($errorKeyword || 'patternRequired') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: \"' + ($errSchemaPath) + '\" , params: { missingPattern: \\'' + ($missingPattern) + '\\' } ';\r\n\t if (it.opts.messages !== false) {\r\n\t out += ' , message: \\'should have property matching pattern \\\\\\'' + ($missingPattern) + '\\\\\\'\\' ';\r\n\t }\r\n\t if (it.opts.verbose) {\r\n\t out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\r\n\t }\r\n\t out += ' } ';\r\n\t } else {\r\n\t out += ' {} ';\r\n\t }\r\n\t out += '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; } ';\r\n\t if ($breakOnError) {\r\n\t $closingBraces += '}';\r\n\t out += ' else { ';\r\n\t }\r\n\t }\r\n\t }\r\n\t out += '' + ($closingBraces);\r\n\t return out;\r\n\t}\r\n\r\n\r\n/***/ },\r\n/* 48 */\r\n/***/ function(module, exports) {\r\n\r\n\tmodule.exports = {\r\n\t\t\"id\": \"https://raw.githubusercontent.com/epoberezkin/ajv/master/lib/refs/json-schema-v5.json#\",\r\n\t\t\"$schema\": \"http://json-schema.org/draft-04/schema#\",\r\n\t\t\"description\": \"Core schema meta-schema (v5 proposals)\",\r\n\t\t\"definitions\": {\r\n\t\t\t\"schemaArray\": {\r\n\t\t\t\t\"type\": \"array\",\r\n\t\t\t\t\"minItems\": 1,\r\n\t\t\t\t\"items\": {\r\n\t\t\t\t\t\"$ref\": \"#\"\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\t\"positiveInteger\": {\r\n\t\t\t\t\"type\": \"integer\",\r\n\t\t\t\t\"minimum\": 0\r\n\t\t\t},\r\n\t\t\t\"positiveIntegerDefault0\": {\r\n\t\t\t\t\"allOf\": [\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\"$ref\": \"#/definitions/positiveInteger\"\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\"default\": 0\r\n\t\t\t\t\t}\r\n\t\t\t\t]\r\n\t\t\t},\r\n\t\t\t\"simpleTypes\": {\r\n\t\t\t\t\"enum\": [\r\n\t\t\t\t\t\"array\",\r\n\t\t\t\t\t\"boolean\",\r\n\t\t\t\t\t\"integer\",\r\n\t\t\t\t\t\"null\",\r\n\t\t\t\t\t\"number\",\r\n\t\t\t\t\t\"object\",\r\n\t\t\t\t\t\"string\"\r\n\t\t\t\t]\r\n\t\t\t},\r\n\t\t\t\"stringArray\": {\r\n\t\t\t\t\"type\": \"array\",\r\n\t\t\t\t\"items\": {\r\n\t\t\t\t\t\"type\": \"string\"\r\n\t\t\t\t},\r\n\t\t\t\t\"minItems\": 1,\r\n\t\t\t\t\"uniqueItems\": true\r\n\t\t\t},\r\n\t\t\t\"$data\": {\r\n\t\t\t\t\"type\": \"object\",\r\n\t\t\t\t\"required\": [\r\n\t\t\t\t\t\"$data\"\r\n\t\t\t\t],\r\n\t\t\t\t\"properties\": {\r\n\t\t\t\t\t\"$data\": {\r\n\t\t\t\t\t\t\"type\": \"string\",\r\n\t\t\t\t\t\t\"format\": \"relative-json-pointer\"\r\n\t\t\t\t\t}\r\n\t\t\t\t},\r\n\t\t\t\t\"additionalProperties\": false\r\n\t\t\t}\r\n\t\t},\r\n\t\t\"type\": \"object\",\r\n\t\t\"properties\": {\r\n\t\t\t\"id\": {\r\n\t\t\t\t\"type\": \"string\",\r\n\t\t\t\t\"format\": \"uri\"\r\n\t\t\t},\r\n\t\t\t\"$schema\": {\r\n\t\t\t\t\"type\": \"string\",\r\n\t\t\t\t\"format\": \"uri\"\r\n\t\t\t},\r\n\t\t\t\"title\": {\r\n\t\t\t\t\"type\": \"string\"\r\n\t\t\t},\r\n\t\t\t\"description\": {\r\n\t\t\t\t\"type\": \"string\"\r\n\t\t\t},\r\n\t\t\t\"default\": {},\r\n\t\t\t\"multipleOf\": {\r\n\t\t\t\t\"anyOf\": [\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\"type\": \"number\",\r\n\t\t\t\t\t\t\"minimum\": 0,\r\n\t\t\t\t\t\t\"exclusiveMinimum\": true\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\"$ref\": \"#/definitions/$data\"\r\n\t\t\t\t\t}\r\n\t\t\t\t]\r\n\t\t\t},\r\n\t\t\t\"maximum\": {\r\n\t\t\t\t\"anyOf\": [\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\"type\": \"number\"\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\"$ref\": \"#/definitions/$data\"\r\n\t\t\t\t\t}\r\n\t\t\t\t]\r\n\t\t\t},\r\n\t\t\t\"exclusiveMaximum\": {\r\n\t\t\t\t\"anyOf\": [\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\"type\": \"boolean\",\r\n\t\t\t\t\t\t\"default\": false\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\"$ref\": \"#/definitions/$data\"\r\n\t\t\t\t\t}\r\n\t\t\t\t]\r\n\t\t\t},\r\n\t\t\t\"minimum\": {\r\n\t\t\t\t\"anyOf\": [\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\"type\": \"number\"\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\"$ref\": \"#/definitions/$data\"\r\n\t\t\t\t\t}\r\n\t\t\t\t]\r\n\t\t\t},\r\n\t\t\t\"exclusiveMinimum\": {\r\n\t\t\t\t\"anyOf\": [\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\"type\": \"boolean\",\r\n\t\t\t\t\t\t\"default\": false\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\"$ref\": \"#/definitions/$data\"\r\n\t\t\t\t\t}\r\n\t\t\t\t]\r\n\t\t\t},\r\n\t\t\t\"maxLength\": {\r\n\t\t\t\t\"anyOf\": [\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\"$ref\": \"#/definitions/positiveInteger\"\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\"$ref\": \"#/definitions/$data\"\r\n\t\t\t\t\t}\r\n\t\t\t\t]\r\n\t\t\t},\r\n\t\t\t\"minLength\": {\r\n\t\t\t\t\"anyOf\": [\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\"$ref\": \"#/definitions/positiveIntegerDefault0\"\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\"$ref\": \"#/definitions/$data\"\r\n\t\t\t\t\t}\r\n\t\t\t\t]\r\n\t\t\t},\r\n\t\t\t\"pattern\": {\r\n\t\t\t\t\"anyOf\": [\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\"type\": \"string\",\r\n\t\t\t\t\t\t\"format\": \"regex\"\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\"$ref\": \"#/definitions/$data\"\r\n\t\t\t\t\t}\r\n\t\t\t\t]\r\n\t\t\t},\r\n\t\t\t\"additionalItems\": {\r\n\t\t\t\t\"anyOf\": [\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\"type\": \"boolean\"\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\"$ref\": \"#\"\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\"$ref\": \"#/definitions/$data\"\r\n\t\t\t\t\t}\r\n\t\t\t\t],\r\n\t\t\t\t\"default\": {}\r\n\t\t\t},\r\n\t\t\t\"items\": {\r\n\t\t\t\t\"anyOf\": [\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\"$ref\": \"#\"\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\"$ref\": \"#/definitions/schemaArray\"\r\n\t\t\t\t\t}\r\n\t\t\t\t],\r\n\t\t\t\t\"default\": {}\r\n\t\t\t},\r\n\t\t\t\"maxItems\": {\r\n\t\t\t\t\"anyOf\": [\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\"$ref\": \"#/definitions/positiveInteger\"\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\"$ref\": \"#/definitions/$data\"\r\n\t\t\t\t\t}\r\n\t\t\t\t]\r\n\t\t\t},\r\n\t\t\t\"minItems\": {\r\n\t\t\t\t\"anyOf\": [\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\"$ref\": \"#/definitions/positiveIntegerDefault0\"\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\"$ref\": \"#/definitions/$data\"\r\n\t\t\t\t\t}\r\n\t\t\t\t]\r\n\t\t\t},\r\n\t\t\t\"uniqueItems\": {\r\n\t\t\t\t\"anyOf\": [\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\"type\": \"boolean\",\r\n\t\t\t\t\t\t\"default\": false\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\"$ref\": \"#/definitions/$data\"\r\n\t\t\t\t\t}\r\n\t\t\t\t]\r\n\t\t\t},\r\n\t\t\t\"maxProperties\": {\r\n\t\t\t\t\"anyOf\": [\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\"$ref\": \"#/definitions/positiveInteger\"\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\"$ref\": \"#/definitions/$data\"\r\n\t\t\t\t\t}\r\n\t\t\t\t]\r\n\t\t\t},\r\n\t\t\t\"minProperties\": {\r\n\t\t\t\t\"anyOf\": [\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\"$ref\": \"#/definitions/positiveIntegerDefault0\"\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\"$ref\": \"#/definitions/$data\"\r\n\t\t\t\t\t}\r\n\t\t\t\t]\r\n\t\t\t},\r\n\t\t\t\"required\": {\r\n\t\t\t\t\"anyOf\": [\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\"$ref\": \"#/definitions/stringArray\"\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\"$ref\": \"#/definitions/$data\"\r\n\t\t\t\t\t}\r\n\t\t\t\t]\r\n\t\t\t},\r\n\t\t\t\"additionalProperties\": {\r\n\t\t\t\t\"anyOf\": [\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\"type\": \"boolean\"\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\"$ref\": \"#\"\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\"$ref\": \"#/definitions/$data\"\r\n\t\t\t\t\t}\r\n\t\t\t\t],\r\n\t\t\t\t\"default\": {}\r\n\t\t\t},\r\n\t\t\t\"definitions\": {\r\n\t\t\t\t\"type\": \"object\",\r\n\t\t\t\t\"additionalProperties\": {\r\n\t\t\t\t\t\"$ref\": \"#\"\r\n\t\t\t\t},\r\n\t\t\t\t\"default\": {}\r\n\t\t\t},\r\n\t\t\t\"properties\": {\r\n\t\t\t\t\"type\": \"object\",\r\n\t\t\t\t\"additionalProperties\": {\r\n\t\t\t\t\t\"$ref\": \"#\"\r\n\t\t\t\t},\r\n\t\t\t\t\"default\": {}\r\n\t\t\t},\r\n\t\t\t\"patternProperties\": {\r\n\t\t\t\t\"type\": \"object\",\r\n\t\t\t\t\"additionalProperties\": {\r\n\t\t\t\t\t\"$ref\": \"#\"\r\n\t\t\t\t},\r\n\t\t\t\t\"default\": {}\r\n\t\t\t},\r\n\t\t\t\"dependencies\": {\r\n\t\t\t\t\"type\": \"object\",\r\n\t\t\t\t\"additionalProperties\": {\r\n\t\t\t\t\t\"anyOf\": [\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\"$ref\": \"#\"\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\"$ref\": \"#/definitions/stringArray\"\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t]\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\t\"enum\": {\r\n\t\t\t\t\"anyOf\": [\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\"type\": \"array\",\r\n\t\t\t\t\t\t\"minItems\": 1,\r\n\t\t\t\t\t\t\"uniqueItems\": true\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\"$ref\": \"#/definitions/$data\"\r\n\t\t\t\t\t}\r\n\t\t\t\t]\r\n\t\t\t},\r\n\t\t\t\"type\": {\r\n\t\t\t\t\"anyOf\": [\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\"$ref\": \"#/definitions/simpleTypes\"\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\"type\": \"array\",\r\n\t\t\t\t\t\t\"items\": {\r\n\t\t\t\t\t\t\t\"$ref\": \"#/definitions/simpleTypes\"\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\"minItems\": 1,\r\n\t\t\t\t\t\t\"uniqueItems\": true\r\n\t\t\t\t\t}\r\n\t\t\t\t]\r\n\t\t\t},\r\n\t\t\t\"allOf\": {\r\n\t\t\t\t\"$ref\": \"#/definitions/schemaArray\"\r\n\t\t\t},\r\n\t\t\t\"anyOf\": {\r\n\t\t\t\t\"$ref\": \"#/definitions/schemaArray\"\r\n\t\t\t},\r\n\t\t\t\"oneOf\": {\r\n\t\t\t\t\"$ref\": \"#/definitions/schemaArray\"\r\n\t\t\t},\r\n\t\t\t\"not\": {\r\n\t\t\t\t\"$ref\": \"#\"\r\n\t\t\t},\r\n\t\t\t\"format\": {\r\n\t\t\t\t\"anyOf\": [\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\"type\": \"string\"\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\"$ref\": \"#/definitions/$data\"\r\n\t\t\t\t\t}\r\n\t\t\t\t]\r\n\t\t\t},\r\n\t\t\t\"formatMaximum\": {\r\n\t\t\t\t\"anyOf\": [\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\"type\": \"string\"\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\"$ref\": \"#/definitions/$data\"\r\n\t\t\t\t\t}\r\n\t\t\t\t]\r\n\t\t\t},\r\n\t\t\t\"formatMinimum\": {\r\n\t\t\t\t\"anyOf\": [\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\"type\": \"string\"\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\"$ref\": \"#/definitions/$data\"\r\n\t\t\t\t\t}\r\n\t\t\t\t]\r\n\t\t\t},\r\n\t\t\t\"exclusiveFormatMaximum\": {\r\n\t\t\t\t\"anyOf\": [\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\"type\": \"boolean\",\r\n\t\t\t\t\t\t\"default\": false\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\"$ref\": \"#/definitions/$data\"\r\n\t\t\t\t\t}\r\n\t\t\t\t]\r\n\t\t\t},\r\n\t\t\t\"exclusiveFormatMinimum\": {\r\n\t\t\t\t\"anyOf\": [\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\"type\": \"boolean\",\r\n\t\t\t\t\t\t\"default\": false\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\"$ref\": \"#/definitions/$data\"\r\n\t\t\t\t\t}\r\n\t\t\t\t]\r\n\t\t\t},\r\n\t\t\t\"constant\": {\r\n\t\t\t\t\"anyOf\": [\r\n\t\t\t\t\t{},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\"$ref\": \"#/definitions/$data\"\r\n\t\t\t\t\t}\r\n\t\t\t\t]\r\n\t\t\t},\r\n\t\t\t\"contains\": {\r\n\t\t\t\t\"$ref\": \"#\"\r\n\t\t\t},\r\n\t\t\t\"patternGroups\": {\r\n\t\t\t\t\"type\": \"object\",\r\n\t\t\t\t\"additionalProperties\": {\r\n\t\t\t\t\t\"type\": \"object\",\r\n\t\t\t\t\t\"required\": [\r\n\t\t\t\t\t\t\"schema\"\r\n\t\t\t\t\t],\r\n\t\t\t\t\t\"properties\": {\r\n\t\t\t\t\t\t\"maximum\": {\r\n\t\t\t\t\t\t\t\"anyOf\": [\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\"$ref\": \"#/definitions/positiveInteger\"\r\n\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\"$ref\": \"#/definitions/$data\"\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t]\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\"minimum\": {\r\n\t\t\t\t\t\t\t\"anyOf\": [\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\"$ref\": \"#/definitions/positiveIntegerDefault0\"\r\n\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\"$ref\": \"#/definitions/$data\"\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t]\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\"schema\": {\r\n\t\t\t\t\t\t\t\"$ref\": \"#\"\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t},\r\n\t\t\t\t\t\"additionalProperties\": false\r\n\t\t\t\t},\r\n\t\t\t\t\"default\": {}\r\n\t\t\t},\r\n\t\t\t\"switch\": {\r\n\t\t\t\t\"type\": \"array\",\r\n\t\t\t\t\"items\": {\r\n\t\t\t\t\t\"required\": [\r\n\t\t\t\t\t\t\"then\"\r\n\t\t\t\t\t],\r\n\t\t\t\t\t\"properties\": {\r\n\t\t\t\t\t\t\"if\": {\r\n\t\t\t\t\t\t\t\"$ref\": \"#\"\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\"then\": {\r\n\t\t\t\t\t\t\t\"anyOf\": [\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\"type\": \"boolean\"\r\n\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\"$ref\": \"#\"\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t]\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\"continue\": {\r\n\t\t\t\t\t\t\t\"type\": \"boolean\"\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t},\r\n\t\t\t\t\t\"additionalProperties\": false,\r\n\t\t\t\t\t\"dependencies\": {\r\n\t\t\t\t\t\t\"continue\": [\r\n\t\t\t\t\t\t\t\"if\"\r\n\t\t\t\t\t\t]\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\t\t\"dependencies\": {\r\n\t\t\t\"exclusiveMaximum\": [\r\n\t\t\t\t\"maximum\"\r\n\t\t\t],\r\n\t\t\t\"exclusiveMinimum\": [\r\n\t\t\t\t\"minimum\"\r\n\t\t\t],\r\n\t\t\t\"formatMaximum\": [\r\n\t\t\t\t\"format\"\r\n\t\t\t],\r\n\t\t\t\"formatMinimum\": [\r\n\t\t\t\t\"format\"\r\n\t\t\t],\r\n\t\t\t\"exclusiveFormatMaximum\": [\r\n\t\t\t\t\"formatMaximum\"\r\n\t\t\t],\r\n\t\t\t\"exclusiveFormatMinimum\": [\r\n\t\t\t\t\"formatMinimum\"\r\n\t\t\t]\r\n\t\t},\r\n\t\t\"default\": {}\r\n\t};\r\n\r\n/***/ },\r\n/* 49 */\r\n/***/ function(module, exports) {\r\n\r\n\t'use strict';\r\n\r\n\tvar IDENTIFIER = /^[a-z_$][a-z0-9_$]*$/i;\r\n\r\n\t/**\r\n\t * Define custom keyword\r\n\t * @this Ajv\r\n\t * @param {String} keyword custom keyword, should be a valid identifier, should be different from all standard, custom and macro keywords.\r\n\t * @param {Object} definition keyword definition object with properties `type` (type(s) which the keyword applies to), `validate` or `compile`.\r\n\t */\r\n\tmodule.exports = function addKeyword(keyword, definition) {\r\n\t /* eslint no-shadow: 0 */\r\n\t var self = this;\r\n\t if (this.RULES.keywords[keyword])\r\n\t throw new Error('Keyword ' + keyword + ' is already defined');\r\n\r\n\t if (!IDENTIFIER.test(keyword))\r\n\t throw new Error('Keyword ' + keyword + ' is not a valid identifier');\r\n\r\n\t if (definition) {\r\n\t var dataType = definition.type;\r\n\t if (Array.isArray(dataType)) {\r\n\t var i, len = dataType.length;\r\n\t for (i=0; i 0) {\r\n\t this.autoScrollStep = ((top + margin) - mouseY) / 3;\r\n\t }\r\n\t else if (mouseY > bottom - margin &&\r\n\t height + content.scrollTop < content.scrollHeight) {\r\n\t this.autoScrollStep = ((bottom - margin) - mouseY) / 3;\r\n\t }\r\n\t else {\r\n\t this.autoScrollStep = undefined;\r\n\t }\r\n\r\n\t if (this.autoScrollStep) {\r\n\t if (!this.autoScrollTimer) {\r\n\t this.autoScrollTimer = setInterval(function () {\r\n\t if (me.autoScrollStep) {\r\n\t content.scrollTop -= me.autoScrollStep;\r\n\t }\r\n\t else {\r\n\t me.stopAutoScroll();\r\n\t }\r\n\t }, interval);\r\n\t }\r\n\t }\r\n\t else {\r\n\t this.stopAutoScroll();\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Stop auto scrolling. Only applicable when scrolling\r\n\t */\r\n\ttreemode.stopAutoScroll = function () {\r\n\t if (this.autoScrollTimer) {\r\n\t clearTimeout(this.autoScrollTimer);\r\n\t delete this.autoScrollTimer;\r\n\t }\r\n\t if (this.autoScrollStep) {\r\n\t delete this.autoScrollStep;\r\n\t }\r\n\t};\r\n\r\n\r\n\t/**\r\n\t * Set the focus to an element in the editor, set text selection, and\r\n\t * set scroll position.\r\n\t * @param {Object} selection An object containing fields:\r\n\t * {Element | undefined} dom The dom element\r\n\t * which has focus\r\n\t * {Range | TextRange} range A text selection\r\n\t * {Node[]} nodes Nodes in case of multi selection\r\n\t * {Number} scrollTop Scroll position\r\n\t */\r\n\ttreemode.setSelection = function (selection) {\r\n\t if (!selection) {\r\n\t return;\r\n\t }\r\n\r\n\t if ('scrollTop' in selection && this.content) {\r\n\t // TODO: animated scroll\r\n\t this.content.scrollTop = selection.scrollTop;\r\n\t }\r\n\t if (selection.nodes) {\r\n\t // multi-select\r\n\t this.select(selection.nodes);\r\n\t }\r\n\t if (selection.range) {\r\n\t util.setSelectionOffset(selection.range);\r\n\t }\r\n\t if (selection.dom) {\r\n\t selection.dom.focus();\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Get the current focus\r\n\t * @return {Object} selection An object containing fields:\r\n\t * {Element | undefined} dom The dom element\r\n\t * which has focus\r\n\t * {Range | TextRange} range A text selection\r\n\t * {Node[]} nodes Nodes in case of multi selection\r\n\t * {Number} scrollTop Scroll position\r\n\t */\r\n\ttreemode.getSelection = function () {\r\n\t var range = util.getSelectionOffset();\r\n\t if (range && range.container.nodeName !== 'DIV') { // filter on (editable) divs)\r\n\t range = null;\r\n\t }\r\n\r\n\t return {\r\n\t dom: this.focusTarget,\r\n\t range: range,\r\n\t nodes: this.multiselection.nodes.slice(0),\r\n\t scrollTop: this.content ? this.content.scrollTop : 0\r\n\t };\r\n\t};\r\n\r\n\t/**\r\n\t * Adjust the scroll position such that given top position is shown at 1/4\r\n\t * of the window height.\r\n\t * @param {Number} top\r\n\t * @param {function(boolean)} [callback] Callback, executed when animation is\r\n\t * finished. The callback returns true\r\n\t * when animation is finished, or false\r\n\t * when not.\r\n\t */\r\n\ttreemode.scrollTo = function (top, callback) {\r\n\t var content = this.content;\r\n\t if (content) {\r\n\t var editor = this;\r\n\t // cancel any running animation\r\n\t if (editor.animateTimeout) {\r\n\t clearTimeout(editor.animateTimeout);\r\n\t delete editor.animateTimeout;\r\n\t }\r\n\t if (editor.animateCallback) {\r\n\t editor.animateCallback(false);\r\n\t delete editor.animateCallback;\r\n\t }\r\n\r\n\t // calculate final scroll position\r\n\t var height = content.clientHeight;\r\n\t var bottom = content.scrollHeight - height;\r\n\t var finalScrollTop = Math.min(Math.max(top - height / 4, 0), bottom);\r\n\r\n\t // animate towards the new scroll position\r\n\t var animate = function () {\r\n\t var scrollTop = content.scrollTop;\r\n\t var diff = (finalScrollTop - scrollTop);\r\n\t if (Math.abs(diff) > 3) {\r\n\t content.scrollTop += diff / 3;\r\n\t editor.animateCallback = callback;\r\n\t editor.animateTimeout = setTimeout(animate, 50);\r\n\t }\r\n\t else {\r\n\t // finished\r\n\t if (callback) {\r\n\t callback(true);\r\n\t }\r\n\t content.scrollTop = finalScrollTop;\r\n\t delete editor.animateTimeout;\r\n\t delete editor.animateCallback;\r\n\t }\r\n\t };\r\n\t animate();\r\n\t }\r\n\t else {\r\n\t if (callback) {\r\n\t callback(false);\r\n\t }\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Create main frame\r\n\t * @private\r\n\t */\r\n\ttreemode._createFrame = function () {\r\n\t // create the frame\r\n\t this.frame = document.createElement('div');\r\n\t this.frame.className = 'jsoneditor jsoneditor-mode-' + this.options.mode;\r\n\t this.container.appendChild(this.frame);\r\n\r\n\t // create one global event listener to handle all events from all nodes\r\n\t var editor = this;\r\n\t function onEvent(event) {\r\n\t // when switching to mode \"code\" or \"text\" via the menu, some events\r\n\t // are still fired whilst the _onEvent methods is already removed.\r\n\t if (editor._onEvent) {\r\n\t editor._onEvent(event);\r\n\t }\r\n\t }\r\n\t this.frame.onclick = function (event) {\r\n\t var target = event.target;// || event.srcElement;\r\n\r\n\t onEvent(event);\r\n\r\n\t // prevent default submit action of buttons when editor is located\r\n\t // inside a form\r\n\t if (target.nodeName == 'BUTTON') {\r\n\t event.preventDefault();\r\n\t }\r\n\t };\r\n\t this.frame.oninput = onEvent;\r\n\t this.frame.onchange = onEvent;\r\n\t this.frame.onkeydown = onEvent;\r\n\t this.frame.onkeyup = onEvent;\r\n\t this.frame.oncut = onEvent;\r\n\t this.frame.onpaste = onEvent;\r\n\t this.frame.onmousedown = onEvent;\r\n\t this.frame.onmouseup = onEvent;\r\n\t this.frame.onmouseover = onEvent;\r\n\t this.frame.onmouseout = onEvent;\r\n\t // Note: focus and blur events do not propagate, therefore they defined\r\n\t // using an eventListener with useCapture=true\r\n\t // see http://www.quirksmode.org/blog/archives/2008/04/delegating_the.html\r\n\t util.addEventListener(this.frame, 'focus', onEvent, true);\r\n\t util.addEventListener(this.frame, 'blur', onEvent, true);\r\n\t this.frame.onfocusin = onEvent; // for IE\r\n\t this.frame.onfocusout = onEvent; // for IE\r\n\r\n\t // create menu\r\n\t this.menu = document.createElement('div');\r\n\t this.menu.className = 'jsoneditor-menu';\r\n\t this.frame.appendChild(this.menu);\r\n\r\n\t // create expand all button\r\n\t var expandAll = document.createElement('button');\r\n\t expandAll.type = 'button';\r\n\t expandAll.className = 'jsoneditor-expand-all';\r\n\t expandAll.title = 'Expand all fields';\r\n\t expandAll.onclick = function () {\r\n\t editor.expandAll();\r\n\t };\r\n\t this.menu.appendChild(expandAll);\r\n\r\n\t // create expand all button\r\n\t var collapseAll = document.createElement('button');\r\n\t collapseAll.type = 'button';\r\n\t collapseAll.title = 'Collapse all fields';\r\n\t collapseAll.className = 'jsoneditor-collapse-all';\r\n\t collapseAll.onclick = function () {\r\n\t editor.collapseAll();\r\n\t };\r\n\t this.menu.appendChild(collapseAll);\r\n\r\n\t // create undo/redo buttons\r\n\t if (this.history) {\r\n\t // create undo button\r\n\t var undo = document.createElement('button');\r\n\t undo.type = 'button';\r\n\t undo.className = 'jsoneditor-undo jsoneditor-separator';\r\n\t undo.title = 'Undo last action (Ctrl+Z)';\r\n\t undo.onclick = function () {\r\n\t editor._onUndo();\r\n\t };\r\n\t this.menu.appendChild(undo);\r\n\t this.dom.undo = undo;\r\n\r\n\t // create redo button\r\n\t var redo = document.createElement('button');\r\n\t redo.type = 'button';\r\n\t redo.className = 'jsoneditor-redo';\r\n\t redo.title = 'Redo (Ctrl+Shift+Z)';\r\n\t redo.onclick = function () {\r\n\t editor._onRedo();\r\n\t };\r\n\t this.menu.appendChild(redo);\r\n\t this.dom.redo = redo;\r\n\r\n\t // register handler for onchange of history\r\n\t this.history.onChange = function () {\r\n\t undo.disabled = !editor.history.canUndo();\r\n\t redo.disabled = !editor.history.canRedo();\r\n\t };\r\n\t this.history.onChange();\r\n\t }\r\n\r\n\t // create mode box\r\n\t if (this.options && this.options.modes && this.options.modes.length) {\r\n\t var me = this;\r\n\t this.modeSwitcher = new ModeSwitcher(this.menu, this.options.modes, this.options.mode, function onSwitch(mode) {\r\n\t me.modeSwitcher.destroy();\r\n\r\n\t // switch mode and restore focus\r\n\t me.setMode(mode);\r\n\t me.modeSwitcher.focus();\r\n\t });\r\n\t }\r\n\r\n\t // create search box\r\n\t if (this.options.search) {\r\n\t this.searchBox = new SearchBox(this, this.menu);\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Perform an undo action\r\n\t * @private\r\n\t */\r\n\ttreemode._onUndo = function () {\r\n\t if (this.history) {\r\n\t // undo last action\r\n\t this.history.undo();\r\n\r\n\t // fire change event\r\n\t this._onChange();\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Perform a redo action\r\n\t * @private\r\n\t */\r\n\ttreemode._onRedo = function () {\r\n\t if (this.history) {\r\n\t // redo last action\r\n\t this.history.redo();\r\n\r\n\t // fire change event\r\n\t this._onChange();\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Event handler\r\n\t * @param event\r\n\t * @private\r\n\t */\r\n\ttreemode._onEvent = function (event) {\r\n\t if (event.type == 'keydown') {\r\n\t this._onKeyDown(event);\r\n\t }\r\n\r\n\t if (event.type == 'focus') {\r\n\t this.focusTarget = event.target;\r\n\t }\r\n\r\n\t if (event.type == 'mousedown') {\r\n\t this._startDragDistance(event);\r\n\t }\r\n\t if (event.type == 'mousemove' || event.type == 'mouseup' || event.type == 'click') {\r\n\t this._updateDragDistance(event);\r\n\t }\r\n\r\n\t var node = Node.getNodeFromTarget(event.target);\r\n\r\n\t if (node && node.selected) {\r\n\t if (event.type == 'click') {\r\n\t if (event.target == node.dom.menu) {\r\n\t this.showContextMenu(event.target);\r\n\r\n\t // stop propagation (else we will open the context menu of a single node)\r\n\t return;\r\n\t }\r\n\r\n\t // deselect a multi selection\r\n\t if (!event.hasMoved) {\r\n\t this.deselect();\r\n\t }\r\n\t }\r\n\r\n\t if (event.type == 'mousedown') {\r\n\t // drag multiple nodes\r\n\t Node.onDragStart(this.multiselection.nodes, event);\r\n\t }\r\n\t }\r\n\t else {\r\n\t if (event.type == 'mousedown') {\r\n\t this.deselect();\r\n\r\n\t if (node && event.target == node.dom.drag) {\r\n\t // drag a singe node\r\n\t Node.onDragStart(node, event);\r\n\t }\r\n\t else if (!node || (event.target != node.dom.field && event.target != node.dom.value && event.target != node.dom.select)) {\r\n\t // select multiple nodes\r\n\t this._onMultiSelectStart(event);\r\n\t }\r\n\t }\r\n\t }\r\n\r\n\t if (node) {\r\n\t node.onEvent(event);\r\n\t }\r\n\t};\r\n\r\n\ttreemode._startDragDistance = function (event) {\r\n\t this.dragDistanceEvent = {\r\n\t initialTarget: event.target,\r\n\t initialPageX: event.pageX,\r\n\t initialPageY: event.pageY,\r\n\t dragDistance: 0,\r\n\t hasMoved: false\r\n\t };\r\n\t};\r\n\r\n\ttreemode._updateDragDistance = function (event) {\r\n\t if (!this.dragDistanceEvent) {\r\n\t this._startDragDistance(event);\r\n\t }\r\n\r\n\t var diffX = event.pageX - this.dragDistanceEvent.initialPageX;\r\n\t var diffY = event.pageY - this.dragDistanceEvent.initialPageY;\r\n\r\n\t this.dragDistanceEvent.dragDistance = Math.sqrt(diffX * diffX + diffY * diffY);\r\n\t this.dragDistanceEvent.hasMoved =\r\n\t this.dragDistanceEvent.hasMoved || this.dragDistanceEvent.dragDistance > 10;\r\n\r\n\t event.dragDistance = this.dragDistanceEvent.dragDistance;\r\n\t event.hasMoved = this.dragDistanceEvent.hasMoved;\r\n\r\n\t return event.dragDistance;\r\n\t};\r\n\r\n\t/**\r\n\t * Start multi selection of nodes by dragging the mouse\r\n\t * @param event\r\n\t * @private\r\n\t */\r\n\ttreemode._onMultiSelectStart = function (event) {\r\n\t var node = Node.getNodeFromTarget(event.target);\r\n\r\n\t if (this.options.mode !== 'tree' || this.options.onEditable !== undefined) {\r\n\t // dragging not allowed in modes 'view' and 'form'\r\n\t // TODO: allow multiselection of items when option onEditable is specified\r\n\t return;\r\n\t }\r\n\r\n\t this.multiselection = {\r\n\t start: node || null,\r\n\t end: null,\r\n\t nodes: []\r\n\t };\r\n\r\n\t this._startDragDistance(event);\r\n\r\n\t var editor = this;\r\n\t if (!this.mousemove) {\r\n\t this.mousemove = util.addEventListener(window, 'mousemove', function (event) {\r\n\t editor._onMultiSelect(event);\r\n\t });\r\n\t }\r\n\t if (!this.mouseup) {\r\n\t this.mouseup = util.addEventListener(window, 'mouseup', function (event ) {\r\n\t editor._onMultiSelectEnd(event);\r\n\t });\r\n\t }\r\n\r\n\t};\r\n\r\n\t/**\r\n\t * Multiselect nodes by dragging\r\n\t * @param event\r\n\t * @private\r\n\t */\r\n\ttreemode._onMultiSelect = function (event) {\r\n\t event.preventDefault();\r\n\r\n\t this._updateDragDistance(event);\r\n\t if (!event.hasMoved) {\r\n\t return;\r\n\t }\r\n\r\n\t var node = Node.getNodeFromTarget(event.target);\r\n\r\n\t if (node) {\r\n\t if (this.multiselection.start == null) {\r\n\t this.multiselection.start = node;\r\n\t }\r\n\t this.multiselection.end = node;\r\n\t }\r\n\r\n\t // deselect previous selection\r\n\t this.deselect();\r\n\r\n\t // find the selected nodes in the range from first to last\r\n\t var start = this.multiselection.start;\r\n\t var end = this.multiselection.end || this.multiselection.start;\r\n\t if (start && end) {\r\n\t // find the top level childs, all having the same parent\r\n\t this.multiselection.nodes = this._findTopLevelNodes(start, end);\r\n\t this.select(this.multiselection.nodes);\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * End of multiselect nodes by dragging\r\n\t * @param event\r\n\t * @private\r\n\t */\r\n\ttreemode._onMultiSelectEnd = function (event) {\r\n\t // set focus to the context menu button of the first node\r\n\t if (this.multiselection.nodes[0]) {\r\n\t this.multiselection.nodes[0].dom.menu.focus();\r\n\t }\r\n\r\n\t this.multiselection.start = null;\r\n\t this.multiselection.end = null;\r\n\r\n\t // cleanup global event listeners\r\n\t if (this.mousemove) {\r\n\t util.removeEventListener(window, 'mousemove', this.mousemove);\r\n\t delete this.mousemove;\r\n\t }\r\n\t if (this.mouseup) {\r\n\t util.removeEventListener(window, 'mouseup', this.mouseup);\r\n\t delete this.mouseup;\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * deselect currently selected nodes\r\n\t * @param {boolean} [clearStartAndEnd=false] If true, the `start` and `end`\r\n\t * state is cleared too.\r\n\t */\r\n\ttreemode.deselect = function (clearStartAndEnd) {\r\n\t this.multiselection.nodes.forEach(function (node) {\r\n\t node.setSelected(false);\r\n\t });\r\n\t this.multiselection.nodes = [];\r\n\r\n\t if (clearStartAndEnd) {\r\n\t this.multiselection.start = null;\r\n\t this.multiselection.end = null;\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * select nodes\r\n\t * @param {Node[] | Node} nodes\r\n\t */\r\n\ttreemode.select = function (nodes) {\r\n\t if (!Array.isArray(nodes)) {\r\n\t return this.select([nodes]);\r\n\t }\r\n\r\n\t if (nodes) {\r\n\t this.deselect();\r\n\r\n\t this.multiselection.nodes = nodes.slice(0);\r\n\r\n\t var first = nodes[0];\r\n\t nodes.forEach(function (node) {\r\n\t node.setSelected(true, node === first);\r\n\t });\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * From two arbitrary selected nodes, find their shared parent node.\r\n\t * From that parent node, select the two child nodes in the brances going to\r\n\t * nodes `start` and `end`, and select all childs in between.\r\n\t * @param {Node} start\r\n\t * @param {Node} end\r\n\t * @return {Array.} Returns an ordered list with child nodes\r\n\t * @private\r\n\t */\r\n\ttreemode._findTopLevelNodes = function (start, end) {\r\n\t var startPath = start.getNodePath();\r\n\t var endPath = end.getNodePath();\r\n\t var i = 0;\r\n\t while (i < startPath.length && startPath[i] === endPath[i]) {\r\n\t i++;\r\n\t }\r\n\t var root = startPath[i - 1];\r\n\t var startChild = startPath[i];\r\n\t var endChild = endPath[i];\r\n\r\n\t if (!startChild || !endChild) {\r\n\t if (root.parent) {\r\n\t // startChild is a parent of endChild or vice versa\r\n\t startChild = root;\r\n\t endChild = root;\r\n\t root = root.parent\r\n\t }\r\n\t else {\r\n\t // we have selected the root node (which doesn't have a parent)\r\n\t startChild = root.childs[0];\r\n\t endChild = root.childs[root.childs.length - 1];\r\n\t }\r\n\t }\r\n\r\n\t if (root && startChild && endChild) {\r\n\t var startIndex = root.childs.indexOf(startChild);\r\n\t var endIndex = root.childs.indexOf(endChild);\r\n\t var firstIndex = Math.min(startIndex, endIndex);\r\n\t var lastIndex = Math.max(startIndex, endIndex);\r\n\r\n\t return root.childs.slice(firstIndex, lastIndex + 1);\r\n\t }\r\n\t else {\r\n\t return [];\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Event handler for keydown. Handles shortcut keys\r\n\t * @param {Event} event\r\n\t * @private\r\n\t */\r\n\ttreemode._onKeyDown = function (event) {\r\n\t var keynum = event.which || event.keyCode;\r\n\t var ctrlKey = event.ctrlKey;\r\n\t var shiftKey = event.shiftKey;\r\n\t var handled = false;\r\n\r\n\t if (keynum == 9) { // Tab or Shift+Tab\r\n\t var me = this;\r\n\t setTimeout(function () {\r\n\t // select all text when moving focus to an editable div\r\n\t util.selectContentEditable(me.focusTarget);\r\n\t }, 0);\r\n\t }\r\n\r\n\t if (this.searchBox) {\r\n\t if (ctrlKey && keynum == 70) { // Ctrl+F\r\n\t this.searchBox.dom.search.focus();\r\n\t this.searchBox.dom.search.select();\r\n\t handled = true;\r\n\t }\r\n\t else if (keynum == 114 || (ctrlKey && keynum == 71)) { // F3 or Ctrl+G\r\n\t var focus = true;\r\n\t if (!shiftKey) {\r\n\t // select next search result (F3 or Ctrl+G)\r\n\t this.searchBox.next(focus);\r\n\t }\r\n\t else {\r\n\t // select previous search result (Shift+F3 or Ctrl+Shift+G)\r\n\t this.searchBox.previous(focus);\r\n\t }\r\n\r\n\t handled = true;\r\n\t }\r\n\t }\r\n\r\n\t if (this.history) {\r\n\t if (ctrlKey && !shiftKey && keynum == 90) { // Ctrl+Z\r\n\t // undo\r\n\t this._onUndo();\r\n\t handled = true;\r\n\t }\r\n\t else if (ctrlKey && shiftKey && keynum == 90) { // Ctrl+Shift+Z\r\n\t // redo\r\n\t this._onRedo();\r\n\t handled = true;\r\n\t }\r\n\t }\r\n\r\n\t if (handled) {\r\n\t event.preventDefault();\r\n\t event.stopPropagation();\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Create main table\r\n\t * @private\r\n\t */\r\n\ttreemode._createTable = function () {\r\n\t var contentOuter = document.createElement('div');\r\n\t contentOuter.className = 'jsoneditor-outer';\r\n\t this.contentOuter = contentOuter;\r\n\r\n\t this.content = document.createElement('div');\r\n\t this.content.className = 'jsoneditor-tree';\r\n\t contentOuter.appendChild(this.content);\r\n\r\n\t this.table = document.createElement('table');\r\n\t this.table.className = 'jsoneditor-tree';\r\n\t this.content.appendChild(this.table);\r\n\r\n\t // create colgroup where the first two columns don't have a fixed\r\n\t // width, and the edit columns do have a fixed width\r\n\t var col;\r\n\t this.colgroupContent = document.createElement('colgroup');\r\n\t if (this.options.mode === 'tree') {\r\n\t col = document.createElement('col');\r\n\t col.width = \"24px\";\r\n\t this.colgroupContent.appendChild(col);\r\n\t }\r\n\t col = document.createElement('col');\r\n\t col.width = \"24px\";\r\n\t this.colgroupContent.appendChild(col);\r\n\t col = document.createElement('col');\r\n\t this.colgroupContent.appendChild(col);\r\n\t this.table.appendChild(this.colgroupContent);\r\n\r\n\t this.tbody = document.createElement('tbody');\r\n\t this.table.appendChild(this.tbody);\r\n\r\n\t this.frame.appendChild(contentOuter);\r\n\t};\r\n\r\n\t/**\r\n\t * Show a contextmenu for this node.\r\n\t * Used for multiselection\r\n\t * @param {HTMLElement} anchor Anchor element to attache the context menu to.\r\n\t * @param {function} [onClose] Callback method called when the context menu\r\n\t * is being closed.\r\n\t */\r\n\ttreemode.showContextMenu = function (anchor, onClose) {\r\n\t var items = [];\r\n\t var editor = this;\r\n\r\n\t // create duplicate button\r\n\t items.push({\r\n\t text: 'Duplicate',\r\n\t title: 'Duplicate selected fields (Ctrl+D)',\r\n\t className: 'jsoneditor-duplicate',\r\n\t click: function () {\r\n\t Node.onDuplicate(editor.multiselection.nodes);\r\n\t }\r\n\t });\r\n\r\n\t // create remove button\r\n\t items.push({\r\n\t text: 'Remove',\r\n\t title: 'Remove selected fields (Ctrl+Del)',\r\n\t className: 'jsoneditor-remove',\r\n\t click: function () {\r\n\t Node.onRemove(editor.multiselection.nodes);\r\n\t }\r\n\t });\r\n\r\n\t var menu = new ContextMenu(items, {close: onClose});\r\n\t menu.show(anchor, this.content);\r\n\t};\r\n\r\n\r\n\t// define modes\r\n\tmodule.exports = [\r\n\t {\r\n\t mode: 'tree',\r\n\t mixin: treemode,\r\n\t data: 'json'\r\n\t },\r\n\t {\r\n\t mode: 'view',\r\n\t mixin: treemode,\r\n\t data: 'json'\r\n\t },\r\n\t {\r\n\t mode: 'form',\r\n\t mixin: treemode,\r\n\t data: 'json'\r\n\t }\r\n\t];\r\n\r\n\r\n/***/ },\r\n/* 52 */\r\n/***/ function(module, exports) {\r\n\r\n\t'use strict';\r\n\r\n\t/**\r\n\t * The highlighter can highlight/unhighlight a node, and\r\n\t * animate the visibility of a context menu.\r\n\t * @constructor Highlighter\r\n\t */\r\n\tfunction Highlighter () {\r\n\t this.locked = false;\r\n\t}\r\n\r\n\t/**\r\n\t * Hightlight given node and its childs\r\n\t * @param {Node} node\r\n\t */\r\n\tHighlighter.prototype.highlight = function (node) {\r\n\t if (this.locked) {\r\n\t return;\r\n\t }\r\n\r\n\t if (this.node != node) {\r\n\t // unhighlight current node\r\n\t if (this.node) {\r\n\t this.node.setHighlight(false);\r\n\t }\r\n\r\n\t // highlight new node\r\n\t this.node = node;\r\n\t this.node.setHighlight(true);\r\n\t }\r\n\r\n\t // cancel any current timeout\r\n\t this._cancelUnhighlight();\r\n\t};\r\n\r\n\t/**\r\n\t * Unhighlight currently highlighted node.\r\n\t * Will be done after a delay\r\n\t */\r\n\tHighlighter.prototype.unhighlight = function () {\r\n\t if (this.locked) {\r\n\t return;\r\n\t }\r\n\r\n\t var me = this;\r\n\t if (this.node) {\r\n\t this._cancelUnhighlight();\r\n\r\n\t // do the unhighlighting after a small delay, to prevent re-highlighting\r\n\t // the same node when moving from the drag-icon to the contextmenu-icon\r\n\t // or vice versa.\r\n\t this.unhighlightTimer = setTimeout(function () {\r\n\t me.node.setHighlight(false);\r\n\t me.node = undefined;\r\n\t me.unhighlightTimer = undefined;\r\n\t }, 0);\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Cancel an unhighlight action (if before the timeout of the unhighlight action)\r\n\t * @private\r\n\t */\r\n\tHighlighter.prototype._cancelUnhighlight = function () {\r\n\t if (this.unhighlightTimer) {\r\n\t clearTimeout(this.unhighlightTimer);\r\n\t this.unhighlightTimer = undefined;\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Lock highlighting or unhighlighting nodes.\r\n\t * methods highlight and unhighlight do not work while locked.\r\n\t */\r\n\tHighlighter.prototype.lock = function () {\r\n\t this.locked = true;\r\n\t};\r\n\r\n\t/**\r\n\t * Unlock highlighting or unhighlighting nodes\r\n\t */\r\n\tHighlighter.prototype.unlock = function () {\r\n\t this.locked = false;\r\n\t};\r\n\r\n\tmodule.exports = Highlighter;\r\n\r\n\r\n/***/ },\r\n/* 53 */\r\n/***/ function(module, exports, __webpack_require__) {\r\n\r\n\t'use strict';\r\n\r\n\tvar util = __webpack_require__(54);\r\n\r\n\t/**\r\n\t * @constructor History\r\n\t * Store action history, enables undo and redo\r\n\t * @param {JSONEditor} editor\r\n\t */\r\n\tfunction History (editor) {\r\n\t this.editor = editor;\r\n\t this.history = [];\r\n\t this.index = -1;\r\n\r\n\t this.clear();\r\n\r\n\t // map with all supported actions\r\n\t this.actions = {\r\n\t 'editField': {\r\n\t 'undo': function (params) {\r\n\t params.node.updateField(params.oldValue);\r\n\t },\r\n\t 'redo': function (params) {\r\n\t params.node.updateField(params.newValue);\r\n\t }\r\n\t },\r\n\t 'editValue': {\r\n\t 'undo': function (params) {\r\n\t params.node.updateValue(params.oldValue);\r\n\t },\r\n\t 'redo': function (params) {\r\n\t params.node.updateValue(params.newValue);\r\n\t }\r\n\t },\r\n\t 'changeType': {\r\n\t 'undo': function (params) {\r\n\t params.node.changeType(params.oldType);\r\n\t },\r\n\t 'redo': function (params) {\r\n\t params.node.changeType(params.newType);\r\n\t }\r\n\t },\r\n\r\n\t 'appendNodes': {\r\n\t 'undo': function (params) {\r\n\t params.nodes.forEach(function (node) {\r\n\t params.parent.removeChild(node);\r\n\t });\r\n\t },\r\n\t 'redo': function (params) {\r\n\t params.nodes.forEach(function (node) {\r\n\t params.parent.appendChild(node);\r\n\t });\r\n\t }\r\n\t },\r\n\t 'insertBeforeNodes': {\r\n\t 'undo': function (params) {\r\n\t params.nodes.forEach(function (node) {\r\n\t params.parent.removeChild(node);\r\n\t });\r\n\t },\r\n\t 'redo': function (params) {\r\n\t params.nodes.forEach(function (node) {\r\n\t params.parent.insertBefore(node, params.beforeNode);\r\n\t });\r\n\t }\r\n\t },\r\n\t 'insertAfterNodes': {\r\n\t 'undo': function (params) {\r\n\t params.nodes.forEach(function (node) {\r\n\t params.parent.removeChild(node);\r\n\t });\r\n\t },\r\n\t 'redo': function (params) {\r\n\t var afterNode = params.afterNode;\r\n\t params.nodes.forEach(function (node) {\r\n\t params.parent.insertAfter(params.node, afterNode);\r\n\t afterNode = node;\r\n\t });\r\n\t }\r\n\t },\r\n\t 'removeNodes': {\r\n\t 'undo': function (params) {\r\n\t var parent = params.parent;\r\n\t var beforeNode = parent.childs[params.index] || parent.append;\r\n\t params.nodes.forEach(function (node) {\r\n\t parent.insertBefore(node, beforeNode);\r\n\t });\r\n\t },\r\n\t 'redo': function (params) {\r\n\t params.nodes.forEach(function (node) {\r\n\t params.parent.removeChild(node);\r\n\t });\r\n\t }\r\n\t },\r\n\t 'duplicateNodes': {\r\n\t 'undo': function (params) {\r\n\t params.nodes.forEach(function (node) {\r\n\t params.parent.removeChild(node);\r\n\t });\r\n\t },\r\n\t 'redo': function (params) {\r\n\t var afterNode = params.afterNode;\r\n\t params.nodes.forEach(function (node) {\r\n\t params.parent.insertAfter(node, afterNode);\r\n\t afterNode = node;\r\n\t });\r\n\t }\r\n\t },\r\n\t 'moveNodes': {\r\n\t 'undo': function (params) {\r\n\t params.nodes.forEach(function (node) {\r\n\t params.oldBeforeNode.parent.moveBefore(node, params.oldBeforeNode);\r\n\t });\r\n\t },\r\n\t 'redo': function (params) {\r\n\t params.nodes.forEach(function (node) {\r\n\t params.newBeforeNode.parent.moveBefore(node, params.newBeforeNode);\r\n\t });\r\n\t }\r\n\t },\r\n\r\n\t 'sort': {\r\n\t 'undo': function (params) {\r\n\t var node = params.node;\r\n\t node.hideChilds();\r\n\t node.sort = params.oldSort;\r\n\t node.childs = params.oldChilds;\r\n\t node.showChilds();\r\n\t },\r\n\t 'redo': function (params) {\r\n\t var node = params.node;\r\n\t node.hideChilds();\r\n\t node.sort = params.newSort;\r\n\t node.childs = params.newChilds;\r\n\t node.showChilds();\r\n\t }\r\n\t }\r\n\r\n\t // TODO: restore the original caret position and selection with each undo\r\n\t // TODO: implement history for actions \"expand\", \"collapse\", \"scroll\", \"setDocument\"\r\n\t };\r\n\t}\r\n\r\n\t/**\r\n\t * The method onChange is executed when the History is changed, and can\r\n\t * be overloaded.\r\n\t */\r\n\tHistory.prototype.onChange = function () {};\r\n\r\n\t/**\r\n\t * Add a new action to the history\r\n\t * @param {String} action The executed action. Available actions: \"editField\",\r\n\t * \"editValue\", \"changeType\", \"appendNode\",\r\n\t * \"removeNode\", \"duplicateNode\", \"moveNode\"\r\n\t * @param {Object} params Object containing parameters describing the change.\r\n\t * The parameters in params depend on the action (for\r\n\t * example for \"editValue\" the Node, old value, and new\r\n\t * value are provided). params contains all information\r\n\t * needed to undo or redo the action.\r\n\t */\r\n\tHistory.prototype.add = function (action, params) {\r\n\t this.index++;\r\n\t this.history[this.index] = {\r\n\t 'action': action,\r\n\t 'params': params,\r\n\t 'timestamp': new Date()\r\n\t };\r\n\r\n\t // remove redo actions which are invalid now\r\n\t if (this.index < this.history.length - 1) {\r\n\t this.history.splice(this.index + 1, this.history.length - this.index - 1);\r\n\t }\r\n\r\n\t // fire onchange event\r\n\t this.onChange();\r\n\t};\r\n\r\n\t/**\r\n\t * Clear history\r\n\t */\r\n\tHistory.prototype.clear = function () {\r\n\t this.history = [];\r\n\t this.index = -1;\r\n\r\n\t // fire onchange event\r\n\t this.onChange();\r\n\t};\r\n\r\n\t/**\r\n\t * Check if there is an action available for undo\r\n\t * @return {Boolean} canUndo\r\n\t */\r\n\tHistory.prototype.canUndo = function () {\r\n\t return (this.index >= 0);\r\n\t};\r\n\r\n\t/**\r\n\t * Check if there is an action available for redo\r\n\t * @return {Boolean} canRedo\r\n\t */\r\n\tHistory.prototype.canRedo = function () {\r\n\t return (this.index < this.history.length - 1);\r\n\t};\r\n\r\n\t/**\r\n\t * Undo the last action\r\n\t */\r\n\tHistory.prototype.undo = function () {\r\n\t if (this.canUndo()) {\r\n\t var obj = this.history[this.index];\r\n\t if (obj) {\r\n\t var action = this.actions[obj.action];\r\n\t if (action && action.undo) {\r\n\t action.undo(obj.params);\r\n\t if (obj.params.oldSelection) {\r\n\t this.editor.setSelection(obj.params.oldSelection);\r\n\t }\r\n\t }\r\n\t else {\r\n\t console.error(new Error('unknown action \"' + obj.action + '\"'));\r\n\t }\r\n\t }\r\n\t this.index--;\r\n\r\n\t // fire onchange event\r\n\t this.onChange();\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Redo the last action\r\n\t */\r\n\tHistory.prototype.redo = function () {\r\n\t if (this.canRedo()) {\r\n\t this.index++;\r\n\r\n\t var obj = this.history[this.index];\r\n\t if (obj) {\r\n\t var action = this.actions[obj.action];\r\n\t if (action && action.redo) {\r\n\t action.redo(obj.params);\r\n\t if (obj.params.newSelection) {\r\n\t this.editor.setSelection(obj.params.newSelection);\r\n\t }\r\n\t }\r\n\t else {\r\n\t console.error(new Error('unknown action \"' + obj.action + '\"'));\r\n\t }\r\n\t }\r\n\r\n\t // fire onchange event\r\n\t this.onChange();\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Destroy history\r\n\t */\r\n\tHistory.prototype.destroy = function () {\r\n\t this.editor = null;\r\n\r\n\t this.history = [];\r\n\t this.index = -1;\r\n\t};\r\n\r\n\tmodule.exports = History;\r\n\r\n\r\n/***/ },\r\n/* 54 */\r\n/***/ function(module, exports, __webpack_require__) {\r\n\r\n\t'use strict';\r\n\r\n\tvar jsonlint = __webpack_require__(55);\r\n\r\n\t/**\r\n\t * Parse JSON using the parser built-in in the browser.\r\n\t * On exception, the jsonString is validated and a detailed error is thrown.\r\n\t * @param {String} jsonString\r\n\t * @return {JSON} json\r\n\t */\r\n\texports.parse = function parse(jsonString) {\r\n\t try {\r\n\t return JSON.parse(jsonString);\r\n\t }\r\n\t catch (err) {\r\n\t // try to throw a more detailed error message using validate\r\n\t exports.validate(jsonString);\r\n\r\n\t // rethrow the original error\r\n\t throw err;\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Sanitize a JSON-like string containing. For example changes JavaScript\r\n\t * notation into JSON notation.\r\n\t * This function for example changes a string like \"{a: 2, 'b': {c: 'd'}\"\r\n\t * into '{\"a\": 2, \"b\": {\"c\": \"d\"}'\r\n\t * @param {string} jsString\r\n\t * @returns {string} json\r\n\t */\r\n\texports.sanitize = function (jsString) {\r\n\t // escape all single and double quotes inside strings\r\n\t var chars = [];\r\n\t var i = 0;\r\n\r\n\t //If JSON starts with a function (characters/digits/\"_-\"), remove this function.\r\n\t //This is useful for \"stripping\" JSONP objects to become JSON\r\n\t //For example: /* some comment */ function_12321321 ( [{\"a\":\"b\"}] ); => [{\"a\":\"b\"}]\r\n\t var match = jsString.match(/^\\s*(\\/\\*(.|[\\r\\n])*?\\*\\/)?\\s*[\\da-zA-Z_$]+\\s*\\(([\\s\\S]*)\\)\\s*;?\\s*$/);\r\n\t if (match) {\r\n\t jsString = match[3];\r\n\t }\r\n\r\n\t // helper functions to get the current/prev/next character\r\n\t function curr () { return jsString.charAt(i); }\r\n\t function next() { return jsString.charAt(i + 1); }\r\n\t function prev() { return jsString.charAt(i - 1); }\r\n\r\n\t // get the last parsed non-whitespace character\r\n\t function lastNonWhitespace () {\r\n\t var p = chars.length - 1;\r\n\r\n\t while (p >= 0) {\r\n\t var pp = chars[p];\r\n\t if (pp !== ' ' && pp !== '\\n' && pp !== '\\r' && pp !== '\\t') { // non whitespace\r\n\t return pp;\r\n\t }\r\n\t p--;\r\n\t }\r\n\r\n\t return '';\r\n\t }\r\n\r\n\t // skip a block comment '/* ... */'\r\n\t function skipBlockComment () {\r\n\t i += 2;\r\n\t while (i < jsString.length && (curr() !== '*' || next() !== '/')) {\r\n\t i++;\r\n\t }\r\n\t i += 2;\r\n\t }\r\n\r\n\t // skip a comment '// ...'\r\n\t function skipComment () {\r\n\t i += 2;\r\n\t while (i < jsString.length && (curr() !== '\\n')) {\r\n\t i++;\r\n\t }\r\n\t }\r\n\r\n\t // parse single or double quoted string\r\n\t function parseString(quote) {\r\n\t chars.push('\"');\r\n\t i++;\r\n\t var c = curr();\r\n\t while (i < jsString.length && c !== quote) {\r\n\t if (c === '\"' && prev() !== '\\\\') {\r\n\t // unescaped double quote, escape it\r\n\t chars.push('\\\\');\r\n\t }\r\n\r\n\t // handle escape character\r\n\t if (c === '\\\\') {\r\n\t i++;\r\n\t c = curr();\r\n\r\n\t // remove the escape character when followed by a single quote ', not needed\r\n\t if (c !== '\\'') {\r\n\t chars.push('\\\\');\r\n\t }\r\n\t }\r\n\t chars.push(c);\r\n\r\n\t i++;\r\n\t c = curr();\r\n\t }\r\n\t if (c === quote) {\r\n\t chars.push('\"');\r\n\t i++;\r\n\t }\r\n\t }\r\n\r\n\t // parse an unquoted key\r\n\t function parseKey() {\r\n\t var specialValues = ['null', 'true', 'false'];\r\n\t var key = '';\r\n\t var c = curr();\r\n\r\n\t var regexp = /[a-zA-Z_$\\d]/; // letter, number, underscore, dollar character\r\n\t while (regexp.test(c)) {\r\n\t key += c;\r\n\t i++;\r\n\t c = curr();\r\n\t }\r\n\r\n\t if (specialValues.indexOf(key) === -1) {\r\n\t chars.push('\"' + key + '\"');\r\n\t }\r\n\t else {\r\n\t chars.push(key);\r\n\t }\r\n\t }\r\n\r\n\t while(i < jsString.length) {\r\n\t var c = curr();\r\n\r\n\t if (c === '/' && next() === '*') {\r\n\t skipBlockComment();\r\n\t }\r\n\t else if (c === '/' && next() === '/') {\r\n\t skipComment();\r\n\t }\r\n\t else if (c === '\\'' || c === '\"') {\r\n\t parseString(c);\r\n\t }\r\n\t else if (/[a-zA-Z_$]/.test(c) && ['{', ','].indexOf(lastNonWhitespace()) !== -1) {\r\n\t // an unquoted object key (like a in '{a:2}')\r\n\t parseKey();\r\n\t }\r\n\t else {\r\n\t chars.push(c);\r\n\t i++;\r\n\t }\r\n\t }\r\n\r\n\t return chars.join('');\r\n\t};\r\n\r\n\t/**\r\n\t * Escape unicode characters.\r\n\t * For example input '\\u2661' (length 1) will output '\\\\u2661' (length 5).\r\n\t * @param {string} text\r\n\t * @return {string}\r\n\t */\r\n\texports.escapeUnicodeChars = function (text) {\r\n\t // see https://www.wikiwand.com/en/UTF-16\r\n\t // note: we leave surrogate pairs as two individual chars,\r\n\t // as JSON doesn't interpret them as a single unicode char.\r\n\t return text.replace(/[\\u007F-\\uFFFF]/g, function(c) {\r\n\t return '\\\\u'+('0000' + c.charCodeAt(0).toString(16)).slice(-4);\r\n\t })\r\n\t};\r\n\r\n\t/**\r\n\t * Validate a string containing a JSON object\r\n\t * This method uses JSONLint to validate the String. If JSONLint is not\r\n\t * available, the built-in JSON parser of the browser is used.\r\n\t * @param {String} jsonString String with an (invalid) JSON object\r\n\t * @throws Error\r\n\t */\r\n\texports.validate = function validate(jsonString) {\r\n\t if (typeof(jsonlint) != 'undefined') {\r\n\t jsonlint.parse(jsonString);\r\n\t }\r\n\t else {\r\n\t JSON.parse(jsonString);\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Extend object a with the properties of object b\r\n\t * @param {Object} a\r\n\t * @param {Object} b\r\n\t * @return {Object} a\r\n\t */\r\n\texports.extend = function extend(a, b) {\r\n\t for (var prop in b) {\r\n\t if (b.hasOwnProperty(prop)) {\r\n\t a[prop] = b[prop];\r\n\t }\r\n\t }\r\n\t return a;\r\n\t};\r\n\r\n\t/**\r\n\t * Remove all properties from object a\r\n\t * @param {Object} a\r\n\t * @return {Object} a\r\n\t */\r\n\texports.clear = function clear (a) {\r\n\t for (var prop in a) {\r\n\t if (a.hasOwnProperty(prop)) {\r\n\t delete a[prop];\r\n\t }\r\n\t }\r\n\t return a;\r\n\t};\r\n\r\n\t/**\r\n\t * Get the type of an object\r\n\t * @param {*} object\r\n\t * @return {String} type\r\n\t */\r\n\texports.type = function type (object) {\r\n\t if (object === null) {\r\n\t return 'null';\r\n\t }\r\n\t if (object === undefined) {\r\n\t return 'undefined';\r\n\t }\r\n\t if ((object instanceof Number) || (typeof object === 'number')) {\r\n\t return 'number';\r\n\t }\r\n\t if ((object instanceof String) || (typeof object === 'string')) {\r\n\t return 'string';\r\n\t }\r\n\t if ((object instanceof Boolean) || (typeof object === 'boolean')) {\r\n\t return 'boolean';\r\n\t }\r\n\t if ((object instanceof RegExp) || (typeof object === 'regexp')) {\r\n\t return 'regexp';\r\n\t }\r\n\t if (exports.isArray(object)) {\r\n\t return 'array';\r\n\t }\r\n\r\n\t return 'object';\r\n\t};\r\n\r\n\t/**\r\n\t * Test whether a text contains a url (matches when a string starts\r\n\t * with 'http://*' or 'https://*' and has no whitespace characters)\r\n\t * @param {String} text\r\n\t */\r\n\tvar isUrlRegex = /^https?:\\/\\/\\S+$/;\r\n\texports.isUrl = function isUrl (text) {\r\n\t return (typeof text == 'string' || text instanceof String) &&\r\n\t isUrlRegex.test(text);\r\n\t};\r\n\r\n\t/**\r\n\t * Tes whether given object is an Array\r\n\t * @param {*} obj\r\n\t * @returns {boolean} returns true when obj is an array\r\n\t */\r\n\texports.isArray = function (obj) {\r\n\t return Object.prototype.toString.call(obj) === '[object Array]';\r\n\t};\r\n\r\n\t/**\r\n\t * Retrieve the absolute left value of a DOM element\r\n\t * @param {Element} elem A dom element, for example a div\r\n\t * @return {Number} left The absolute left position of this element\r\n\t * in the browser page.\r\n\t */\r\n\texports.getAbsoluteLeft = function getAbsoluteLeft(elem) {\r\n\t var rect = elem.getBoundingClientRect();\r\n\t return rect.left + window.pageXOffset || document.scrollLeft || 0;\r\n\t};\r\n\r\n\t/**\r\n\t * Retrieve the absolute top value of a DOM element\r\n\t * @param {Element} elem A dom element, for example a div\r\n\t * @return {Number} top The absolute top position of this element\r\n\t * in the browser page.\r\n\t */\r\n\texports.getAbsoluteTop = function getAbsoluteTop(elem) {\r\n\t var rect = elem.getBoundingClientRect();\r\n\t return rect.top + window.pageYOffset || document.scrollTop || 0;\r\n\t};\r\n\r\n\t/**\r\n\t * add a className to the given elements style\r\n\t * @param {Element} elem\r\n\t * @param {String} className\r\n\t */\r\n\texports.addClassName = function addClassName(elem, className) {\r\n\t var classes = elem.className.split(' ');\r\n\t if (classes.indexOf(className) == -1) {\r\n\t classes.push(className); // add the class to the array\r\n\t elem.className = classes.join(' ');\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * add a className to the given elements style\r\n\t * @param {Element} elem\r\n\t * @param {String} className\r\n\t */\r\n\texports.removeClassName = function removeClassName(elem, className) {\r\n\t var classes = elem.className.split(' ');\r\n\t var index = classes.indexOf(className);\r\n\t if (index != -1) {\r\n\t classes.splice(index, 1); // remove the class from the array\r\n\t elem.className = classes.join(' ');\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Strip the formatting from the contents of a div\r\n\t * the formatting from the div itself is not stripped, only from its childs.\r\n\t * @param {Element} divElement\r\n\t */\r\n\texports.stripFormatting = function stripFormatting(divElement) {\r\n\t var childs = divElement.childNodes;\r\n\t for (var i = 0, iMax = childs.length; i < iMax; i++) {\r\n\t var child = childs[i];\r\n\r\n\t // remove the style\r\n\t if (child.style) {\r\n\t // TODO: test if child.attributes does contain style\r\n\t child.removeAttribute('style');\r\n\t }\r\n\r\n\t // remove all attributes\r\n\t var attributes = child.attributes;\r\n\t if (attributes) {\r\n\t for (var j = attributes.length - 1; j >= 0; j--) {\r\n\t var attribute = attributes[j];\r\n\t if (attribute.specified === true) {\r\n\t child.removeAttribute(attribute.name);\r\n\t }\r\n\t }\r\n\t }\r\n\r\n\t // recursively strip childs\r\n\t exports.stripFormatting(child);\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Set focus to the end of an editable div\r\n\t * code from Nico Burns\r\n\t * http://stackoverflow.com/users/140293/nico-burns\r\n\t * http://stackoverflow.com/questions/1125292/how-to-move-cursor-to-end-of-contenteditable-entity\r\n\t * @param {Element} contentEditableElement A content editable div\r\n\t */\r\n\texports.setEndOfContentEditable = function setEndOfContentEditable(contentEditableElement) {\r\n\t var range, selection;\r\n\t if(document.createRange) {\r\n\t range = document.createRange();//Create a range (a range is a like the selection but invisible)\r\n\t range.selectNodeContents(contentEditableElement);//Select the entire contents of the element with the range\r\n\t range.collapse(false);//collapse the range to the end point. false means collapse to end rather than the start\r\n\t selection = window.getSelection();//get the selection object (allows you to change selection)\r\n\t selection.removeAllRanges();//remove any selections already made\r\n\t selection.addRange(range);//make the range you have just created the visible selection\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Select all text of a content editable div.\r\n\t * http://stackoverflow.com/a/3806004/1262753\r\n\t * @param {Element} contentEditableElement A content editable div\r\n\t */\r\n\texports.selectContentEditable = function selectContentEditable(contentEditableElement) {\r\n\t if (!contentEditableElement || contentEditableElement.nodeName != 'DIV') {\r\n\t return;\r\n\t }\r\n\r\n\t var sel, range;\r\n\t if (window.getSelection && document.createRange) {\r\n\t range = document.createRange();\r\n\t range.selectNodeContents(contentEditableElement);\r\n\t sel = window.getSelection();\r\n\t sel.removeAllRanges();\r\n\t sel.addRange(range);\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Get text selection\r\n\t * http://stackoverflow.com/questions/4687808/contenteditable-selected-text-save-and-restore\r\n\t * @return {Range | TextRange | null} range\r\n\t */\r\n\texports.getSelection = function getSelection() {\r\n\t if (window.getSelection) {\r\n\t var sel = window.getSelection();\r\n\t if (sel.getRangeAt && sel.rangeCount) {\r\n\t return sel.getRangeAt(0);\r\n\t }\r\n\t }\r\n\t return null;\r\n\t};\r\n\r\n\t/**\r\n\t * Set text selection\r\n\t * http://stackoverflow.com/questions/4687808/contenteditable-selected-text-save-and-restore\r\n\t * @param {Range | TextRange | null} range\r\n\t */\r\n\texports.setSelection = function setSelection(range) {\r\n\t if (range) {\r\n\t if (window.getSelection) {\r\n\t var sel = window.getSelection();\r\n\t sel.removeAllRanges();\r\n\t sel.addRange(range);\r\n\t }\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Get selected text range\r\n\t * @return {Object} params object containing parameters:\r\n\t * {Number} startOffset\r\n\t * {Number} endOffset\r\n\t * {Element} container HTML element holding the\r\n\t * selected text element\r\n\t * Returns null if no text selection is found\r\n\t */\r\n\texports.getSelectionOffset = function getSelectionOffset() {\r\n\t var range = exports.getSelection();\r\n\r\n\t if (range && 'startOffset' in range && 'endOffset' in range &&\r\n\t range.startContainer && (range.startContainer == range.endContainer)) {\r\n\t return {\r\n\t startOffset: range.startOffset,\r\n\t endOffset: range.endOffset,\r\n\t container: range.startContainer.parentNode\r\n\t };\r\n\t }\r\n\r\n\t return null;\r\n\t};\r\n\r\n\t/**\r\n\t * Set selected text range in given element\r\n\t * @param {Object} params An object containing:\r\n\t * {Element} container\r\n\t * {Number} startOffset\r\n\t * {Number} endOffset\r\n\t */\r\n\texports.setSelectionOffset = function setSelectionOffset(params) {\r\n\t if (document.createRange && window.getSelection) {\r\n\t var selection = window.getSelection();\r\n\t if(selection) {\r\n\t var range = document.createRange();\r\n\r\n\t if (!params.container.firstChild) {\r\n\t params.container.appendChild(document.createTextNode(''));\r\n\t }\r\n\r\n\t // TODO: do not suppose that the first child of the container is a textnode,\r\n\t // but recursively find the textnodes\r\n\t range.setStart(params.container.firstChild, params.startOffset);\r\n\t range.setEnd(params.container.firstChild, params.endOffset);\r\n\r\n\t exports.setSelection(range);\r\n\t }\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Get the inner text of an HTML element (for example a div element)\r\n\t * @param {Element} element\r\n\t * @param {Object} [buffer]\r\n\t * @return {String} innerText\r\n\t */\r\n\texports.getInnerText = function getInnerText(element, buffer) {\r\n\t var first = (buffer == undefined);\r\n\t if (first) {\r\n\t buffer = {\r\n\t 'text': '',\r\n\t 'flush': function () {\r\n\t var text = this.text;\r\n\t this.text = '';\r\n\t return text;\r\n\t },\r\n\t 'set': function (text) {\r\n\t this.text = text;\r\n\t }\r\n\t };\r\n\t }\r\n\r\n\t // text node\r\n\t if (element.nodeValue) {\r\n\t return buffer.flush() + element.nodeValue;\r\n\t }\r\n\r\n\t // divs or other HTML elements\r\n\t if (element.hasChildNodes()) {\r\n\t var childNodes = element.childNodes;\r\n\t var innerText = '';\r\n\r\n\t for (var i = 0, iMax = childNodes.length; i < iMax; i++) {\r\n\t var child = childNodes[i];\r\n\r\n\t if (child.nodeName == 'DIV' || child.nodeName == 'P') {\r\n\t var prevChild = childNodes[i - 1];\r\n\t var prevName = prevChild ? prevChild.nodeName : undefined;\r\n\t if (prevName && prevName != 'DIV' && prevName != 'P' && prevName != 'BR') {\r\n\t innerText += '\\n';\r\n\t buffer.flush();\r\n\t }\r\n\t innerText += exports.getInnerText(child, buffer);\r\n\t buffer.set('\\n');\r\n\t }\r\n\t else if (child.nodeName == 'BR') {\r\n\t innerText += buffer.flush();\r\n\t buffer.set('\\n');\r\n\t }\r\n\t else {\r\n\t innerText += exports.getInnerText(child, buffer);\r\n\t }\r\n\t }\r\n\r\n\t return innerText;\r\n\t }\r\n\t else {\r\n\t if (element.nodeName == 'P' && exports.getInternetExplorerVersion() != -1) {\r\n\t // On Internet Explorer, a

with hasChildNodes()==false is\r\n\t // rendered with a new line. Note that a

with\r\n\t // hasChildNodes()==true is rendered without a new line\r\n\t // Other browsers always ensure there is a
inside the

,\r\n\t // and if not, the

does not render a new line\r\n\t return buffer.flush();\r\n\t }\r\n\t }\r\n\r\n\t // br or unknown\r\n\t return '';\r\n\t};\r\n\r\n\t/**\r\n\t * Returns the version of Internet Explorer or a -1\r\n\t * (indicating the use of another browser).\r\n\t * Source: http://msdn.microsoft.com/en-us/library/ms537509(v=vs.85).aspx\r\n\t * @return {Number} Internet Explorer version, or -1 in case of an other browser\r\n\t */\r\n\texports.getInternetExplorerVersion = function getInternetExplorerVersion() {\r\n\t if (_ieVersion == -1) {\r\n\t var rv = -1; // Return value assumes failure.\r\n\t if (navigator.appName == 'Microsoft Internet Explorer')\r\n\t {\r\n\t var ua = navigator.userAgent;\r\n\t var re = new RegExp(\"MSIE ([0-9]{1,}[\\.0-9]{0,})\");\r\n\t if (re.exec(ua) != null) {\r\n\t rv = parseFloat( RegExp.$1 );\r\n\t }\r\n\t }\r\n\r\n\t _ieVersion = rv;\r\n\t }\r\n\r\n\t return _ieVersion;\r\n\t};\r\n\r\n\t/**\r\n\t * Test whether the current browser is Firefox\r\n\t * @returns {boolean} isFirefox\r\n\t */\r\n\texports.isFirefox = function isFirefox () {\r\n\t return (navigator.userAgent.indexOf(\"Firefox\") != -1);\r\n\t};\r\n\r\n\t/**\r\n\t * cached internet explorer version\r\n\t * @type {Number}\r\n\t * @private\r\n\t */\r\n\tvar _ieVersion = -1;\r\n\r\n\t/**\r\n\t * Add and event listener. Works for all browsers\r\n\t * @param {Element} element An html element\r\n\t * @param {string} action The action, for example \"click\",\r\n\t * without the prefix \"on\"\r\n\t * @param {function} listener The callback function to be executed\r\n\t * @param {boolean} [useCapture] false by default\r\n\t * @return {function} the created event listener\r\n\t */\r\n\texports.addEventListener = function addEventListener(element, action, listener, useCapture) {\r\n\t if (element.addEventListener) {\r\n\t if (useCapture === undefined)\r\n\t useCapture = false;\r\n\r\n\t if (action === \"mousewheel\" && exports.isFirefox()) {\r\n\t action = \"DOMMouseScroll\"; // For Firefox\r\n\t }\r\n\r\n\t element.addEventListener(action, listener, useCapture);\r\n\t return listener;\r\n\t } else if (element.attachEvent) {\r\n\t // Old IE browsers\r\n\t var f = function () {\r\n\t return listener.call(element, window.event);\r\n\t };\r\n\t element.attachEvent(\"on\" + action, f);\r\n\t return f;\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Remove an event listener from an element\r\n\t * @param {Element} element An html dom element\r\n\t * @param {string} action The name of the event, for example \"mousedown\"\r\n\t * @param {function} listener The listener function\r\n\t * @param {boolean} [useCapture] false by default\r\n\t */\r\n\texports.removeEventListener = function removeEventListener(element, action, listener, useCapture) {\r\n\t if (element.removeEventListener) {\r\n\t if (useCapture === undefined)\r\n\t useCapture = false;\r\n\r\n\t if (action === \"mousewheel\" && exports.isFirefox()) {\r\n\t action = \"DOMMouseScroll\"; // For Firefox\r\n\t }\r\n\r\n\t element.removeEventListener(action, listener, useCapture);\r\n\t } else if (element.detachEvent) {\r\n\t // Old IE browsers\r\n\t element.detachEvent(\"on\" + action, listener);\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Parse a JSON path like '.items[3].name' into an array\r\n\t * @param {string} jsonPath\r\n\t * @return {Array}\r\n\t */\r\n\texports.parsePath = function parsePath(jsonPath) {\r\n\t var prop, remainder;\r\n\r\n\t if (jsonPath.length === 0) {\r\n\t return [];\r\n\t }\r\n\r\n\t // find a match like '.prop'\r\n\t var match = jsonPath.match(/^\\.(\\w+)/);\r\n\t if (match) {\r\n\t prop = match[1];\r\n\t remainder = jsonPath.substr(prop.length + 1);\r\n\t }\r\n\t else if (jsonPath[0] === '[') {\r\n\t // find a match like\r\n\t var end = jsonPath.indexOf(']');\r\n\t if (end === -1) {\r\n\t throw new SyntaxError('Character ] expected in path');\r\n\t }\r\n\t if (end === 1) {\r\n\t throw new SyntaxError('Index expected after [');\r\n\t }\r\n\r\n\t var value = jsonPath.substring(1, end);\r\n\t if (value[0] === '\\'') {\r\n\t // ajv produces string prop names with single quotes, so we need\r\n\t // to reformat them into valid double-quoted JSON strings\r\n\t value = '\\\"' + value.substring(1, value.length - 1) + '\\\"';\r\n\t }\r\n\r\n\t prop = value === '*' ? value : JSON.parse(value); // parse string and number\r\n\t remainder = jsonPath.substr(end + 1);\r\n\t }\r\n\t else {\r\n\t throw new SyntaxError('Failed to parse path');\r\n\t }\r\n\r\n\t return [prop].concat(parsePath(remainder))\r\n\t};\r\n\r\n\t/**\r\n\t * Improve the error message of a JSON schema error\r\n\t * @param {Object} error\r\n\t * @return {Object} The error\r\n\t */\r\n\texports.improveSchemaError = function (error) {\r\n\t if (error.keyword === 'enum' && Array.isArray(error.schema)) {\r\n\t var enums = error.schema;\r\n\t if (enums) {\r\n\t enums = enums.map(function (value) {\r\n\t return JSON.stringify(value);\r\n\t });\r\n\r\n\t if (enums.length > 5) {\r\n\t var more = ['(' + (enums.length - 5) + ' more...)'];\r\n\t enums = enums.slice(0, 5);\r\n\t enums.push(more);\r\n\t }\r\n\t error.message = 'should be equal to one of: ' + enums.join(', ');\r\n\t }\r\n\t }\r\n\r\n\t if (error.keyword === 'additionalProperties') {\r\n\t error.message = 'should NOT have additional property: ' + error.params.additionalProperty;\r\n\t }\r\n\r\n\t return error;\r\n\t};\r\n\r\n\t/**\r\n\t * Test whether the child rect fits completely inside the parent rect.\r\n\t * @param {ClientRect} parent\r\n\t * @param {ClientRect} child\r\n\t * @param {number} margin\r\n\t */\r\n\texports.insideRect = function (parent, child, margin) {\r\n\t var _margin = margin !== undefined ? margin : 0;\r\n\t return child.left - _margin >= parent.left\r\n\t && child.right + _margin <= parent.right\r\n\t && child.top - _margin >= parent.top\r\n\t && child.bottom + _margin <= parent.bottom;\r\n\t};\r\n\r\n\t/**\r\n\t * Returns a function, that, as long as it continues to be invoked, will not\r\n\t * be triggered. The function will be called after it stops being called for\r\n\t * N milliseconds.\r\n\t *\r\n\t * Source: https://davidwalsh.name/javascript-debounce-function\r\n\t *\r\n\t * @param {function} func\r\n\t * @param {number} wait Number in milliseconds\r\n\t * @param {boolean} [immediate=false] If `immediate` is passed, trigger the\r\n\t * function on the leading edge, instead\r\n\t * of the trailing.\r\n\t * @return {function} Return the debounced function\r\n\t */\r\n\texports.debounce = function debounce(func, wait, immediate) {\r\n\t var timeout;\r\n\t return function() {\r\n\t var context = this, args = arguments;\r\n\t var later = function() {\r\n\t timeout = null;\r\n\t if (!immediate) func.apply(context, args);\r\n\t };\r\n\t var callNow = immediate && !timeout;\r\n\t clearTimeout(timeout);\r\n\t timeout = setTimeout(later, wait);\r\n\t if (callNow) func.apply(context, args);\r\n\t };\r\n\t};\r\n\r\n\t/**\r\n\t * Determines the difference between two texts.\r\n\t * Can only detect one removed or inserted block of characters.\r\n\t * @param {string} oldText\r\n\t * @param {string} newText\r\n\t * @return {{start: number, end: number}} Returns the start and end\r\n\t * of the changed part in newText.\r\n\t */\r\n\texports.textDiff = function textDiff(oldText, newText) {\r\n\t var len = newText.length;\r\n\t var start = 0;\r\n\t var oldEnd = oldText.length;\r\n\t var newEnd = newText.length;\r\n\r\n\t while (newText.charAt(start) === oldText.charAt(start)\r\n\t && start < len) {\r\n\t start++;\r\n\t }\r\n\r\n\t while (newText.charAt(newEnd - 1) === oldText.charAt(oldEnd - 1)\r\n\t && newEnd > start && oldEnd > 0) {\r\n\t newEnd--;\r\n\t oldEnd--;\r\n\t }\r\n\r\n\t return {start: start, end: newEnd};\r\n\t};\r\n\r\n\r\n/***/ },\r\n/* 55 */\r\n/***/ function(module, exports, __webpack_require__) {\r\n\r\n\t/* Jison generated parser */\r\n\tvar jsonlint = (function(){\r\n\tvar parser = {trace: function trace() { },\r\n\tyy: {},\r\n\tsymbols_: {\"error\":2,\"JSONString\":3,\"STRING\":4,\"JSONNumber\":5,\"NUMBER\":6,\"JSONNullLiteral\":7,\"NULL\":8,\"JSONBooleanLiteral\":9,\"TRUE\":10,\"FALSE\":11,\"JSONText\":12,\"JSONValue\":13,\"EOF\":14,\"JSONObject\":15,\"JSONArray\":16,\"{\":17,\"}\":18,\"JSONMemberList\":19,\"JSONMember\":20,\":\":21,\",\":22,\"[\":23,\"]\":24,\"JSONElementList\":25,\"$accept\":0,\"$end\":1},\r\n\tterminals_: {2:\"error\",4:\"STRING\",6:\"NUMBER\",8:\"NULL\",10:\"TRUE\",11:\"FALSE\",14:\"EOF\",17:\"{\",18:\"}\",21:\":\",22:\",\",23:\"[\",24:\"]\"},\r\n\tproductions_: [0,[3,1],[5,1],[7,1],[9,1],[9,1],[12,2],[13,1],[13,1],[13,1],[13,1],[13,1],[13,1],[15,2],[15,3],[20,3],[19,1],[19,3],[16,2],[16,3],[25,1],[25,3]],\r\n\tperformAction: function anonymous(yytext,yyleng,yylineno,yy,yystate,$$,_$) {\r\n\r\n\tvar $0 = $$.length - 1;\r\n\tswitch (yystate) {\r\n\tcase 1: // replace escaped characters with actual character\r\n\t this.$ = yytext.replace(/\\\\(\\\\|\")/g, \"$\"+\"1\")\r\n\t .replace(/\\\\n/g,'\\n')\r\n\t .replace(/\\\\r/g,'\\r')\r\n\t .replace(/\\\\t/g,'\\t')\r\n\t .replace(/\\\\v/g,'\\v')\r\n\t .replace(/\\\\f/g,'\\f')\r\n\t .replace(/\\\\b/g,'\\b');\r\n\t \r\n\tbreak;\r\n\tcase 2:this.$ = Number(yytext);\r\n\tbreak;\r\n\tcase 3:this.$ = null;\r\n\tbreak;\r\n\tcase 4:this.$ = true;\r\n\tbreak;\r\n\tcase 5:this.$ = false;\r\n\tbreak;\r\n\tcase 6:return this.$ = $$[$0-1];\r\n\tbreak;\r\n\tcase 13:this.$ = {};\r\n\tbreak;\r\n\tcase 14:this.$ = $$[$0-1];\r\n\tbreak;\r\n\tcase 15:this.$ = [$$[$0-2], $$[$0]];\r\n\tbreak;\r\n\tcase 16:this.$ = {}; this.$[$$[$0][0]] = $$[$0][1];\r\n\tbreak;\r\n\tcase 17:this.$ = $$[$0-2]; $$[$0-2][$$[$0][0]] = $$[$0][1];\r\n\tbreak;\r\n\tcase 18:this.$ = [];\r\n\tbreak;\r\n\tcase 19:this.$ = $$[$0-1];\r\n\tbreak;\r\n\tcase 20:this.$ = [$$[$0]];\r\n\tbreak;\r\n\tcase 21:this.$ = $$[$0-2]; $$[$0-2].push($$[$0]);\r\n\tbreak;\r\n\t}\r\n\t},\r\n\ttable: [{3:5,4:[1,12],5:6,6:[1,13],7:3,8:[1,9],9:4,10:[1,10],11:[1,11],12:1,13:2,15:7,16:8,17:[1,14],23:[1,15]},{1:[3]},{14:[1,16]},{14:[2,7],18:[2,7],22:[2,7],24:[2,7]},{14:[2,8],18:[2,8],22:[2,8],24:[2,8]},{14:[2,9],18:[2,9],22:[2,9],24:[2,9]},{14:[2,10],18:[2,10],22:[2,10],24:[2,10]},{14:[2,11],18:[2,11],22:[2,11],24:[2,11]},{14:[2,12],18:[2,12],22:[2,12],24:[2,12]},{14:[2,3],18:[2,3],22:[2,3],24:[2,3]},{14:[2,4],18:[2,4],22:[2,4],24:[2,4]},{14:[2,5],18:[2,5],22:[2,5],24:[2,5]},{14:[2,1],18:[2,1],21:[2,1],22:[2,1],24:[2,1]},{14:[2,2],18:[2,2],22:[2,2],24:[2,2]},{3:20,4:[1,12],18:[1,17],19:18,20:19},{3:5,4:[1,12],5:6,6:[1,13],7:3,8:[1,9],9:4,10:[1,10],11:[1,11],13:23,15:7,16:8,17:[1,14],23:[1,15],24:[1,21],25:22},{1:[2,6]},{14:[2,13],18:[2,13],22:[2,13],24:[2,13]},{18:[1,24],22:[1,25]},{18:[2,16],22:[2,16]},{21:[1,26]},{14:[2,18],18:[2,18],22:[2,18],24:[2,18]},{22:[1,28],24:[1,27]},{22:[2,20],24:[2,20]},{14:[2,14],18:[2,14],22:[2,14],24:[2,14]},{3:20,4:[1,12],20:29},{3:5,4:[1,12],5:6,6:[1,13],7:3,8:[1,9],9:4,10:[1,10],11:[1,11],13:30,15:7,16:8,17:[1,14],23:[1,15]},{14:[2,19],18:[2,19],22:[2,19],24:[2,19]},{3:5,4:[1,12],5:6,6:[1,13],7:3,8:[1,9],9:4,10:[1,10],11:[1,11],13:31,15:7,16:8,17:[1,14],23:[1,15]},{18:[2,17],22:[2,17]},{18:[2,15],22:[2,15]},{22:[2,21],24:[2,21]}],\r\n\tdefaultActions: {16:[2,6]},\r\n\tparseError: function parseError(str, hash) {\r\n\t throw new Error(str);\r\n\t},\r\n\tparse: function parse(input) {\r\n\t var self = this,\r\n\t stack = [0],\r\n\t vstack = [null], // semantic value stack\r\n\t lstack = [], // location stack\r\n\t table = this.table,\r\n\t yytext = '',\r\n\t yylineno = 0,\r\n\t yyleng = 0,\r\n\t recovering = 0,\r\n\t TERROR = 2,\r\n\t EOF = 1;\r\n\r\n\t //this.reductionCount = this.shiftCount = 0;\r\n\r\n\t this.lexer.setInput(input);\r\n\t this.lexer.yy = this.yy;\r\n\t this.yy.lexer = this.lexer;\r\n\t if (typeof this.lexer.yylloc == 'undefined')\r\n\t this.lexer.yylloc = {};\r\n\t var yyloc = this.lexer.yylloc;\r\n\t lstack.push(yyloc);\r\n\r\n\t if (typeof this.yy.parseError === 'function')\r\n\t this.parseError = this.yy.parseError;\r\n\r\n\t function popStack (n) {\r\n\t stack.length = stack.length - 2*n;\r\n\t vstack.length = vstack.length - n;\r\n\t lstack.length = lstack.length - n;\r\n\t }\r\n\r\n\t function lex() {\r\n\t var token;\r\n\t token = self.lexer.lex() || 1; // $end = 1\r\n\t // if token isn't its numeric value, convert\r\n\t if (typeof token !== 'number') {\r\n\t token = self.symbols_[token] || token;\r\n\t }\r\n\t return token;\r\n\t }\r\n\r\n\t var symbol, preErrorSymbol, state, action, a, r, yyval={},p,len,newState, expected;\r\n\t while (true) {\r\n\t // retreive state number from top of stack\r\n\t state = stack[stack.length-1];\r\n\r\n\t // use default actions if available\r\n\t if (this.defaultActions[state]) {\r\n\t action = this.defaultActions[state];\r\n\t } else {\r\n\t if (symbol == null)\r\n\t symbol = lex();\r\n\t // read action for current state and first input\r\n\t action = table[state] && table[state][symbol];\r\n\t }\r\n\r\n\t // handle parse error\r\n\t _handle_error:\r\n\t if (typeof action === 'undefined' || !action.length || !action[0]) {\r\n\r\n\t if (!recovering) {\r\n\t // Report error\r\n\t expected = [];\r\n\t for (p in table[state]) if (this.terminals_[p] && p > 2) {\r\n\t expected.push(\"'\"+this.terminals_[p]+\"'\");\r\n\t }\r\n\t var errStr = '';\r\n\t if (this.lexer.showPosition) {\r\n\t errStr = 'Parse error on line '+(yylineno+1)+\":\\n\"+this.lexer.showPosition()+\"\\nExpecting \"+expected.join(', ') + \", got '\" + this.terminals_[symbol]+ \"'\";\r\n\t } else {\r\n\t errStr = 'Parse error on line '+(yylineno+1)+\": Unexpected \" +\r\n\t (symbol == 1 /*EOF*/ ? \"end of input\" :\r\n\t (\"'\"+(this.terminals_[symbol] || symbol)+\"'\"));\r\n\t }\r\n\t this.parseError(errStr,\r\n\t {text: this.lexer.match, token: this.terminals_[symbol] || symbol, line: this.lexer.yylineno, loc: yyloc, expected: expected});\r\n\t }\r\n\r\n\t // just recovered from another error\r\n\t if (recovering == 3) {\r\n\t if (symbol == EOF) {\r\n\t throw new Error(errStr || 'Parsing halted.');\r\n\t }\r\n\r\n\t // discard current lookahead and grab another\r\n\t yyleng = this.lexer.yyleng;\r\n\t yytext = this.lexer.yytext;\r\n\t yylineno = this.lexer.yylineno;\r\n\t yyloc = this.lexer.yylloc;\r\n\t symbol = lex();\r\n\t }\r\n\r\n\t // try to recover from error\r\n\t while (1) {\r\n\t // check for error recovery rule in this state\r\n\t if ((TERROR.toString()) in table[state]) {\r\n\t break;\r\n\t }\r\n\t if (state == 0) {\r\n\t throw new Error(errStr || 'Parsing halted.');\r\n\t }\r\n\t popStack(1);\r\n\t state = stack[stack.length-1];\r\n\t }\r\n\r\n\t preErrorSymbol = symbol; // save the lookahead token\r\n\t symbol = TERROR; // insert generic error symbol as new lookahead\r\n\t state = stack[stack.length-1];\r\n\t action = table[state] && table[state][TERROR];\r\n\t recovering = 3; // allow 3 real symbols to be shifted before reporting a new error\r\n\t }\r\n\r\n\t // this shouldn't happen, unless resolve defaults are off\r\n\t if (action[0] instanceof Array && action.length > 1) {\r\n\t throw new Error('Parse Error: multiple actions possible at state: '+state+', token: '+symbol);\r\n\t }\r\n\r\n\t switch (action[0]) {\r\n\r\n\t case 1: // shift\r\n\t //this.shiftCount++;\r\n\r\n\t stack.push(symbol);\r\n\t vstack.push(this.lexer.yytext);\r\n\t lstack.push(this.lexer.yylloc);\r\n\t stack.push(action[1]); // push state\r\n\t symbol = null;\r\n\t if (!preErrorSymbol) { // normal execution/no error\r\n\t yyleng = this.lexer.yyleng;\r\n\t yytext = this.lexer.yytext;\r\n\t yylineno = this.lexer.yylineno;\r\n\t yyloc = this.lexer.yylloc;\r\n\t if (recovering > 0)\r\n\t recovering--;\r\n\t } else { // error just occurred, resume old lookahead f/ before error\r\n\t symbol = preErrorSymbol;\r\n\t preErrorSymbol = null;\r\n\t }\r\n\t break;\r\n\r\n\t case 2: // reduce\r\n\t //this.reductionCount++;\r\n\r\n\t len = this.productions_[action[1]][1];\r\n\r\n\t // perform semantic action\r\n\t yyval.$ = vstack[vstack.length-len]; // default to $$ = $1\r\n\t // default location, uses first token for firsts, last for lasts\r\n\t yyval._$ = {\r\n\t first_line: lstack[lstack.length-(len||1)].first_line,\r\n\t last_line: lstack[lstack.length-1].last_line,\r\n\t first_column: lstack[lstack.length-(len||1)].first_column,\r\n\t last_column: lstack[lstack.length-1].last_column\r\n\t };\r\n\t r = this.performAction.call(yyval, yytext, yyleng, yylineno, this.yy, action[1], vstack, lstack);\r\n\r\n\t if (typeof r !== 'undefined') {\r\n\t return r;\r\n\t }\r\n\r\n\t // pop off stack\r\n\t if (len) {\r\n\t stack = stack.slice(0,-1*len*2);\r\n\t vstack = vstack.slice(0, -1*len);\r\n\t lstack = lstack.slice(0, -1*len);\r\n\t }\r\n\r\n\t stack.push(this.productions_[action[1]][0]); // push nonterminal (reduce)\r\n\t vstack.push(yyval.$);\r\n\t lstack.push(yyval._$);\r\n\t // goto new state = table[STATE][NONTERMINAL]\r\n\t newState = table[stack[stack.length-2]][stack[stack.length-1]];\r\n\t stack.push(newState);\r\n\t break;\r\n\r\n\t case 3: // accept\r\n\t return true;\r\n\t }\r\n\r\n\t }\r\n\r\n\t return true;\r\n\t}};\r\n\t/* Jison generated lexer */\r\n\tvar lexer = (function(){\r\n\tvar lexer = ({EOF:1,\r\n\tparseError:function parseError(str, hash) {\r\n\t if (this.yy.parseError) {\r\n\t this.yy.parseError(str, hash);\r\n\t } else {\r\n\t throw new Error(str);\r\n\t }\r\n\t },\r\n\tsetInput:function (input) {\r\n\t this._input = input;\r\n\t this._more = this._less = this.done = false;\r\n\t this.yylineno = this.yyleng = 0;\r\n\t this.yytext = this.matched = this.match = '';\r\n\t this.conditionStack = ['INITIAL'];\r\n\t this.yylloc = {first_line:1,first_column:0,last_line:1,last_column:0};\r\n\t return this;\r\n\t },\r\n\tinput:function () {\r\n\t var ch = this._input[0];\r\n\t this.yytext+=ch;\r\n\t this.yyleng++;\r\n\t this.match+=ch;\r\n\t this.matched+=ch;\r\n\t var lines = ch.match(/\\n/);\r\n\t if (lines) this.yylineno++;\r\n\t this._input = this._input.slice(1);\r\n\t return ch;\r\n\t },\r\n\tunput:function (ch) {\r\n\t this._input = ch + this._input;\r\n\t return this;\r\n\t },\r\n\tmore:function () {\r\n\t this._more = true;\r\n\t return this;\r\n\t },\r\n\tless:function (n) {\r\n\t this._input = this.match.slice(n) + this._input;\r\n\t },\r\n\tpastInput:function () {\r\n\t var past = this.matched.substr(0, this.matched.length - this.match.length);\r\n\t return (past.length > 20 ? '...':'') + past.substr(-20).replace(/\\n/g, \"\");\r\n\t },\r\n\tupcomingInput:function () {\r\n\t var next = this.match;\r\n\t if (next.length < 20) {\r\n\t next += this._input.substr(0, 20-next.length);\r\n\t }\r\n\t return (next.substr(0,20)+(next.length > 20 ? '...':'')).replace(/\\n/g, \"\");\r\n\t },\r\n\tshowPosition:function () {\r\n\t var pre = this.pastInput();\r\n\t var c = new Array(pre.length + 1).join(\"-\");\r\n\t return pre + this.upcomingInput() + \"\\n\" + c+\"^\";\r\n\t },\r\n\tnext:function () {\r\n\t if (this.done) {\r\n\t return this.EOF;\r\n\t }\r\n\t if (!this._input) this.done = true;\r\n\r\n\t var token,\r\n\t match,\r\n\t tempMatch,\r\n\t index,\r\n\t col,\r\n\t lines;\r\n\t if (!this._more) {\r\n\t this.yytext = '';\r\n\t this.match = '';\r\n\t }\r\n\t var rules = this._currentRules();\r\n\t for (var i=0;i < rules.length; i++) {\r\n\t tempMatch = this._input.match(this.rules[rules[i]]);\r\n\t if (tempMatch && (!match || tempMatch[0].length > match[0].length)) {\r\n\t match = tempMatch;\r\n\t index = i;\r\n\t if (!this.options.flex) break;\r\n\t }\r\n\t }\r\n\t if (match) {\r\n\t lines = match[0].match(/\\n.*/g);\r\n\t if (lines) this.yylineno += lines.length;\r\n\t this.yylloc = {first_line: this.yylloc.last_line,\r\n\t last_line: this.yylineno+1,\r\n\t first_column: this.yylloc.last_column,\r\n\t last_column: lines ? lines[lines.length-1].length-1 : this.yylloc.last_column + match[0].length}\r\n\t this.yytext += match[0];\r\n\t this.match += match[0];\r\n\t this.yyleng = this.yytext.length;\r\n\t this._more = false;\r\n\t this._input = this._input.slice(match[0].length);\r\n\t this.matched += match[0];\r\n\t token = this.performAction.call(this, this.yy, this, rules[index],this.conditionStack[this.conditionStack.length-1]);\r\n\t if (this.done && this._input) this.done = false;\r\n\t if (token) return token;\r\n\t else return;\r\n\t }\r\n\t if (this._input === \"\") {\r\n\t return this.EOF;\r\n\t } else {\r\n\t this.parseError('Lexical error on line '+(this.yylineno+1)+'. Unrecognized text.\\n'+this.showPosition(), \r\n\t {text: \"\", token: null, line: this.yylineno});\r\n\t }\r\n\t },\r\n\tlex:function lex() {\r\n\t var r = this.next();\r\n\t if (typeof r !== 'undefined') {\r\n\t return r;\r\n\t } else {\r\n\t return this.lex();\r\n\t }\r\n\t },\r\n\tbegin:function begin(condition) {\r\n\t this.conditionStack.push(condition);\r\n\t },\r\n\tpopState:function popState() {\r\n\t return this.conditionStack.pop();\r\n\t },\r\n\t_currentRules:function _currentRules() {\r\n\t return this.conditions[this.conditionStack[this.conditionStack.length-1]].rules;\r\n\t },\r\n\ttopState:function () {\r\n\t return this.conditionStack[this.conditionStack.length-2];\r\n\t },\r\n\tpushState:function begin(condition) {\r\n\t this.begin(condition);\r\n\t }});\r\n\tlexer.options = {};\r\n\tlexer.performAction = function anonymous(yy,yy_,$avoiding_name_collisions,YY_START) {\r\n\r\n\tvar YYSTATE=YY_START\r\n\tswitch($avoiding_name_collisions) {\r\n\tcase 0:/* skip whitespace */\r\n\tbreak;\r\n\tcase 1:return 6\r\n\tbreak;\r\n\tcase 2:yy_.yytext = yy_.yytext.substr(1,yy_.yyleng-2); return 4\r\n\tbreak;\r\n\tcase 3:return 17\r\n\tbreak;\r\n\tcase 4:return 18\r\n\tbreak;\r\n\tcase 5:return 23\r\n\tbreak;\r\n\tcase 6:return 24\r\n\tbreak;\r\n\tcase 7:return 22\r\n\tbreak;\r\n\tcase 8:return 21\r\n\tbreak;\r\n\tcase 9:return 10\r\n\tbreak;\r\n\tcase 10:return 11\r\n\tbreak;\r\n\tcase 11:return 8\r\n\tbreak;\r\n\tcase 12:return 14\r\n\tbreak;\r\n\tcase 13:return 'INVALID'\r\n\tbreak;\r\n\t}\r\n\t};\r\n\tlexer.rules = [/^(?:\\s+)/,/^(?:(-?([0-9]|[1-9][0-9]+))(\\.[0-9]+)?([eE][-+]?[0-9]+)?\\b)/,/^(?:\"(?:\\\\[\\\\\"bfnrt/]|\\\\u[a-fA-F0-9]{4}|[^\\\\\\0-\\x09\\x0a-\\x1f\"])*\")/,/^(?:\\{)/,/^(?:\\})/,/^(?:\\[)/,/^(?:\\])/,/^(?:,)/,/^(?::)/,/^(?:true\\b)/,/^(?:false\\b)/,/^(?:null\\b)/,/^(?:$)/,/^(?:.)/];\r\n\tlexer.conditions = {\"INITIAL\":{\"rules\":[0,1,2,3,4,5,6,7,8,9,10,11,12,13],\"inclusive\":true}};\r\n\r\n\r\n\t;\r\n\treturn lexer;})()\r\n\tparser.lexer = lexer;\r\n\treturn parser;\r\n\t})();\r\n\tif (true) {\r\n\t exports.parser = jsonlint;\r\n\t exports.parse = jsonlint.parse.bind(jsonlint);\r\n\t}\r\n\r\n/***/ },\r\n/* 56 */\r\n/***/ function(module, exports) {\r\n\r\n\t'use strict';\r\n\r\n\t/**\r\n\t * @constructor SearchBox\r\n\t * Create a search box in given HTML container\r\n\t * @param {JSONEditor} editor The JSON Editor to attach to\r\n\t * @param {Element} container HTML container element of where to\r\n\t * create the search box\r\n\t */\r\n\tfunction SearchBox (editor, container) {\r\n\t var searchBox = this;\r\n\r\n\t this.editor = editor;\r\n\t this.timeout = undefined;\r\n\t this.delay = 200; // ms\r\n\t this.lastText = undefined;\r\n\r\n\t this.dom = {};\r\n\t this.dom.container = container;\r\n\r\n\t var table = document.createElement('table');\r\n\t this.dom.table = table;\r\n\t table.className = 'jsoneditor-search';\r\n\t container.appendChild(table);\r\n\t var tbody = document.createElement('tbody');\r\n\t this.dom.tbody = tbody;\r\n\t table.appendChild(tbody);\r\n\t var tr = document.createElement('tr');\r\n\t tbody.appendChild(tr);\r\n\r\n\t var td = document.createElement('td');\r\n\t tr.appendChild(td);\r\n\t var results = document.createElement('div');\r\n\t this.dom.results = results;\r\n\t results.className = 'jsoneditor-results';\r\n\t td.appendChild(results);\r\n\r\n\t td = document.createElement('td');\r\n\t tr.appendChild(td);\r\n\t var divInput = document.createElement('div');\r\n\t this.dom.input = divInput;\r\n\t divInput.className = 'jsoneditor-frame';\r\n\t divInput.title = 'Search fields and values';\r\n\t td.appendChild(divInput);\r\n\r\n\t // table to contain the text input and search button\r\n\t var tableInput = document.createElement('table');\r\n\t divInput.appendChild(tableInput);\r\n\t var tbodySearch = document.createElement('tbody');\r\n\t tableInput.appendChild(tbodySearch);\r\n\t tr = document.createElement('tr');\r\n\t tbodySearch.appendChild(tr);\r\n\r\n\t var refreshSearch = document.createElement('button');\r\n\t refreshSearch.type = 'button';\r\n\t refreshSearch.className = 'jsoneditor-refresh';\r\n\t td = document.createElement('td');\r\n\t td.appendChild(refreshSearch);\r\n\t tr.appendChild(td);\r\n\r\n\t var search = document.createElement('input');\r\n\t // search.type = 'button';\r\n\t this.dom.search = search;\r\n\t search.oninput = function (event) {\r\n\t searchBox._onDelayedSearch(event);\r\n\t };\r\n\t search.onchange = function (event) { // For IE 9\r\n\t searchBox._onSearch();\r\n\t };\r\n\t search.onkeydown = function (event) {\r\n\t searchBox._onKeyDown(event);\r\n\t };\r\n\t search.onkeyup = function (event) {\r\n\t searchBox._onKeyUp(event);\r\n\t };\r\n\t refreshSearch.onclick = function (event) {\r\n\t search.select();\r\n\t };\r\n\r\n\t // TODO: ESC in FF restores the last input, is a FF bug, https://bugzilla.mozilla.org/show_bug.cgi?id=598819\r\n\t td = document.createElement('td');\r\n\t td.appendChild(search);\r\n\t tr.appendChild(td);\r\n\r\n\t var searchNext = document.createElement('button');\r\n\t searchNext.type = 'button';\r\n\t searchNext.title = 'Next result (Enter)';\r\n\t searchNext.className = 'jsoneditor-next';\r\n\t searchNext.onclick = function () {\r\n\t searchBox.next();\r\n\t };\r\n\t td = document.createElement('td');\r\n\t td.appendChild(searchNext);\r\n\t tr.appendChild(td);\r\n\r\n\t var searchPrevious = document.createElement('button');\r\n\t searchPrevious.type = 'button';\r\n\t searchPrevious.title = 'Previous result (Shift+Enter)';\r\n\t searchPrevious.className = 'jsoneditor-previous';\r\n\t searchPrevious.onclick = function () {\r\n\t searchBox.previous();\r\n\t };\r\n\t td = document.createElement('td');\r\n\t td.appendChild(searchPrevious);\r\n\t tr.appendChild(td);\r\n\t}\r\n\r\n\t/**\r\n\t * Go to the next search result\r\n\t * @param {boolean} [focus] If true, focus will be set to the next result\r\n\t * focus is false by default.\r\n\t */\r\n\tSearchBox.prototype.next = function(focus) {\r\n\t if (this.results != undefined) {\r\n\t var index = (this.resultIndex != undefined) ? this.resultIndex + 1 : 0;\r\n\t if (index > this.results.length - 1) {\r\n\t index = 0;\r\n\t }\r\n\t this._setActiveResult(index, focus);\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Go to the prevous search result\r\n\t * @param {boolean} [focus] If true, focus will be set to the next result\r\n\t * focus is false by default.\r\n\t */\r\n\tSearchBox.prototype.previous = function(focus) {\r\n\t if (this.results != undefined) {\r\n\t var max = this.results.length - 1;\r\n\t var index = (this.resultIndex != undefined) ? this.resultIndex - 1 : max;\r\n\t if (index < 0) {\r\n\t index = max;\r\n\t }\r\n\t this._setActiveResult(index, focus);\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Set new value for the current active result\r\n\t * @param {Number} index\r\n\t * @param {boolean} [focus] If true, focus will be set to the next result.\r\n\t * focus is false by default.\r\n\t * @private\r\n\t */\r\n\tSearchBox.prototype._setActiveResult = function(index, focus) {\r\n\t // de-activate current active result\r\n\t if (this.activeResult) {\r\n\t var prevNode = this.activeResult.node;\r\n\t var prevElem = this.activeResult.elem;\r\n\t if (prevElem == 'field') {\r\n\t delete prevNode.searchFieldActive;\r\n\t }\r\n\t else {\r\n\t delete prevNode.searchValueActive;\r\n\t }\r\n\t prevNode.updateDom();\r\n\t }\r\n\r\n\t if (!this.results || !this.results[index]) {\r\n\t // out of range, set to undefined\r\n\t this.resultIndex = undefined;\r\n\t this.activeResult = undefined;\r\n\t return;\r\n\t }\r\n\r\n\t this.resultIndex = index;\r\n\r\n\t // set new node active\r\n\t var node = this.results[this.resultIndex].node;\r\n\t var elem = this.results[this.resultIndex].elem;\r\n\t if (elem == 'field') {\r\n\t node.searchFieldActive = true;\r\n\t }\r\n\t else {\r\n\t node.searchValueActive = true;\r\n\t }\r\n\t this.activeResult = this.results[this.resultIndex];\r\n\t node.updateDom();\r\n\r\n\t // TODO: not so nice that the focus is only set after the animation is finished\r\n\t node.scrollTo(function () {\r\n\t if (focus) {\r\n\t node.focus(elem);\r\n\t }\r\n\t });\r\n\t};\r\n\r\n\t/**\r\n\t * Cancel any running onDelayedSearch.\r\n\t * @private\r\n\t */\r\n\tSearchBox.prototype._clearDelay = function() {\r\n\t if (this.timeout != undefined) {\r\n\t clearTimeout(this.timeout);\r\n\t delete this.timeout;\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Start a timer to execute a search after a short delay.\r\n\t * Used for reducing the number of searches while typing.\r\n\t * @param {Event} event\r\n\t * @private\r\n\t */\r\n\tSearchBox.prototype._onDelayedSearch = function (event) {\r\n\t // execute the search after a short delay (reduces the number of\r\n\t // search actions while typing in the search text box)\r\n\t this._clearDelay();\r\n\t var searchBox = this;\r\n\t this.timeout = setTimeout(function (event) {\r\n\t searchBox._onSearch();\r\n\t },\r\n\t this.delay);\r\n\t};\r\n\r\n\t/**\r\n\t * Handle onSearch event\r\n\t * @param {boolean} [forceSearch] If true, search will be executed again even\r\n\t * when the search text is not changed.\r\n\t * Default is false.\r\n\t * @private\r\n\t */\r\n\tSearchBox.prototype._onSearch = function (forceSearch) {\r\n\t this._clearDelay();\r\n\r\n\t var value = this.dom.search.value;\r\n\t var text = (value.length > 0) ? value : undefined;\r\n\t if (text != this.lastText || forceSearch) {\r\n\t // only search again when changed\r\n\t this.lastText = text;\r\n\t this.results = this.editor.search(text);\r\n\t this._setActiveResult(undefined);\r\n\r\n\t // display search results\r\n\t if (text != undefined) {\r\n\t var resultCount = this.results.length;\r\n\t switch (resultCount) {\r\n\t case 0: this.dom.results.innerHTML = 'no results'; break;\r\n\t case 1: this.dom.results.innerHTML = '1 result'; break;\r\n\t default: this.dom.results.innerHTML = resultCount + ' results'; break;\r\n\t }\r\n\t }\r\n\t else {\r\n\t this.dom.results.innerHTML = '';\r\n\t }\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Handle onKeyDown event in the input box\r\n\t * @param {Event} event\r\n\t * @private\r\n\t */\r\n\tSearchBox.prototype._onKeyDown = function (event) {\r\n\t var keynum = event.which;\r\n\t if (keynum == 27) { // ESC\r\n\t this.dom.search.value = ''; // clear search\r\n\t this._onSearch();\r\n\t event.preventDefault();\r\n\t event.stopPropagation();\r\n\t }\r\n\t else if (keynum == 13) { // Enter\r\n\t if (event.ctrlKey) {\r\n\t // force to search again\r\n\t this._onSearch(true);\r\n\t }\r\n\t else if (event.shiftKey) {\r\n\t // move to the previous search result\r\n\t this.previous();\r\n\t }\r\n\t else {\r\n\t // move to the next search result\r\n\t this.next();\r\n\t }\r\n\t event.preventDefault();\r\n\t event.stopPropagation();\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Handle onKeyUp event in the input box\r\n\t * @param {Event} event\r\n\t * @private\r\n\t */\r\n\tSearchBox.prototype._onKeyUp = function (event) {\r\n\t var keynum = event.keyCode;\r\n\t if (keynum != 27 && keynum != 13) { // !show and !Enter\r\n\t this._onDelayedSearch(event); // For IE 9\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Clear the search results\r\n\t */\r\n\tSearchBox.prototype.clear = function () {\r\n\t this.dom.search.value = '';\r\n\t this._onSearch();\r\n\t};\r\n\r\n\t/**\r\n\t * Destroy the search box\r\n\t */\r\n\tSearchBox.prototype.destroy = function () {\r\n\t this.editor = null;\r\n\t this.dom.container.removeChild(this.dom.table);\r\n\t this.dom = null;\r\n\r\n\t this.results = null;\r\n\t this.activeResult = null;\r\n\r\n\t this._clearDelay();\r\n\r\n\t};\r\n\r\n\tmodule.exports = SearchBox;\r\n\r\n\r\n/***/ },\r\n/* 57 */\r\n/***/ function(module, exports, __webpack_require__) {\r\n\r\n\t'use strict';\r\n\r\n\tvar util = __webpack_require__(54);\r\n\r\n\t/**\r\n\t * A context menu\r\n\t * @param {Object[]} items Array containing the menu structure\r\n\t * TODO: describe structure\r\n\t * @param {Object} [options] Object with options. Available options:\r\n\t * {function} close Callback called when the\r\n\t * context menu is being closed.\r\n\t * @constructor\r\n\t */\r\n\tfunction ContextMenu (items, options) {\r\n\t this.dom = {};\r\n\r\n\t var me = this;\r\n\t var dom = this.dom;\r\n\t this.anchor = undefined;\r\n\t this.items = items;\r\n\t this.eventListeners = {};\r\n\t this.selection = undefined; // holds the selection before the menu was opened\r\n\t this.onClose = options ? options.close : undefined;\r\n\r\n\t // create root element\r\n\t var root = document.createElement('div');\r\n\t root.className = 'jsoneditor-contextmenu-root';\r\n\t dom.root = root;\r\n\r\n\t // create a container element\r\n\t var menu = document.createElement('div');\r\n\t menu.className = 'jsoneditor-contextmenu';\r\n\t dom.menu = menu;\r\n\t root.appendChild(menu);\r\n\r\n\t // create a list to hold the menu items\r\n\t var list = document.createElement('ul');\r\n\t list.className = 'jsoneditor-menu';\r\n\t menu.appendChild(list);\r\n\t dom.list = list;\r\n\t dom.items = []; // list with all buttons\r\n\r\n\t // create a (non-visible) button to set the focus to the menu\r\n\t var focusButton = document.createElement('button');\r\n\t focusButton.type = 'button';\r\n\t dom.focusButton = focusButton;\r\n\t var li = document.createElement('li');\r\n\t li.style.overflow = 'hidden';\r\n\t li.style.height = '0';\r\n\t li.appendChild(focusButton);\r\n\t list.appendChild(li);\r\n\r\n\t function createMenuItems (list, domItems, items) {\r\n\t items.forEach(function (item) {\r\n\t if (item.type == 'separator') {\r\n\t // create a separator\r\n\t var separator = document.createElement('div');\r\n\t separator.className = 'jsoneditor-separator';\r\n\t li = document.createElement('li');\r\n\t li.appendChild(separator);\r\n\t list.appendChild(li);\r\n\t }\r\n\t else {\r\n\t var domItem = {};\r\n\r\n\t // create a menu item\r\n\t var li = document.createElement('li');\r\n\t list.appendChild(li);\r\n\r\n\t // create a button in the menu item\r\n\t var button = document.createElement('button');\r\n\t button.type = 'button';\r\n\t button.className = item.className;\r\n\t domItem.button = button;\r\n\t if (item.title) {\r\n\t button.title = item.title;\r\n\t }\r\n\t if (item.click) {\r\n\t button.onclick = function (event) {\r\n\t event.preventDefault();\r\n\t me.hide();\r\n\t item.click();\r\n\t };\r\n\t }\r\n\t li.appendChild(button);\r\n\r\n\t // create the contents of the button\r\n\t if (item.submenu) {\r\n\t // add the icon to the button\r\n\t var divIcon = document.createElement('div');\r\n\t divIcon.className = 'jsoneditor-icon';\r\n\t button.appendChild(divIcon);\r\n\t button.appendChild(document.createTextNode(item.text));\r\n\r\n\t var buttonSubmenu;\r\n\t if (item.click) {\r\n\t // submenu and a button with a click handler\r\n\t button.className += ' jsoneditor-default';\r\n\r\n\t var buttonExpand = document.createElement('button');\r\n\t buttonExpand.type = 'button';\r\n\t domItem.buttonExpand = buttonExpand;\r\n\t buttonExpand.className = 'jsoneditor-expand';\r\n\t buttonExpand.innerHTML = '

';\r\n\t li.appendChild(buttonExpand);\r\n\t if (item.submenuTitle) {\r\n\t buttonExpand.title = item.submenuTitle;\r\n\t }\r\n\r\n\t buttonSubmenu = buttonExpand;\r\n\t }\r\n\t else {\r\n\t // submenu and a button without a click handler\r\n\t var divExpand = document.createElement('div');\r\n\t divExpand.className = 'jsoneditor-expand';\r\n\t button.appendChild(divExpand);\r\n\r\n\t buttonSubmenu = button;\r\n\t }\r\n\r\n\t // attach a handler to expand/collapse the submenu\r\n\t buttonSubmenu.onclick = function (event) {\r\n\t event.preventDefault();\r\n\t me._onExpandItem(domItem);\r\n\t buttonSubmenu.focus();\r\n\t };\r\n\r\n\t // create the submenu\r\n\t var domSubItems = [];\r\n\t domItem.subItems = domSubItems;\r\n\t var ul = document.createElement('ul');\r\n\t domItem.ul = ul;\r\n\t ul.className = 'jsoneditor-menu';\r\n\t ul.style.height = '0';\r\n\t li.appendChild(ul);\r\n\t createMenuItems(ul, domSubItems, item.submenu);\r\n\t }\r\n\t else {\r\n\t // no submenu, just a button with clickhandler\r\n\t button.innerHTML = '
' + item.text;\r\n\t }\r\n\r\n\t domItems.push(domItem);\r\n\t }\r\n\t });\r\n\t }\r\n\t createMenuItems(list, this.dom.items, items);\r\n\r\n\t // TODO: when the editor is small, show the submenu on the right instead of inline?\r\n\r\n\t // calculate the max height of the menu with one submenu expanded\r\n\t this.maxHeight = 0; // height in pixels\r\n\t items.forEach(function (item) {\r\n\t var height = (items.length + (item.submenu ? item.submenu.length : 0)) * 24;\r\n\t me.maxHeight = Math.max(me.maxHeight, height);\r\n\t });\r\n\t}\r\n\r\n\t/**\r\n\t * Get the currently visible buttons\r\n\t * @return {Array.} buttons\r\n\t * @private\r\n\t */\r\n\tContextMenu.prototype._getVisibleButtons = function () {\r\n\t var buttons = [];\r\n\t var me = this;\r\n\t this.dom.items.forEach(function (item) {\r\n\t buttons.push(item.button);\r\n\t if (item.buttonExpand) {\r\n\t buttons.push(item.buttonExpand);\r\n\t }\r\n\t if (item.subItems && item == me.expandedItem) {\r\n\t item.subItems.forEach(function (subItem) {\r\n\t buttons.push(subItem.button);\r\n\t if (subItem.buttonExpand) {\r\n\t buttons.push(subItem.buttonExpand);\r\n\t }\r\n\t // TODO: change to fully recursive method\r\n\t });\r\n\t }\r\n\t });\r\n\r\n\t return buttons;\r\n\t};\r\n\r\n\t// currently displayed context menu, a singleton. We may only have one visible context menu\r\n\tContextMenu.visibleMenu = undefined;\r\n\r\n\t/**\r\n\t * Attach the menu to an anchor\r\n\t * @param {HTMLElement} anchor Anchor where the menu will be attached\r\n\t * as sibling.\r\n\t * @param {HTMLElement} [contentWindow] The DIV with with the (scrollable) contents\r\n\t */\r\n\tContextMenu.prototype.show = function (anchor, contentWindow) {\r\n\t this.hide();\r\n\r\n\t // determine whether to display the menu below or above the anchor\r\n\t var showBelow = true;\r\n\t if (contentWindow) {\r\n\t var anchorRect = anchor.getBoundingClientRect();\r\n\t var contentRect = contentWindow.getBoundingClientRect();\r\n\r\n\t if (anchorRect.bottom + this.maxHeight < contentRect.bottom) {\r\n\t // fits below -> show below\r\n\t }\r\n\t else if (anchorRect.top - this.maxHeight > contentRect.top) {\r\n\t // fits above -> show above\r\n\t showBelow = false;\r\n\t }\r\n\t else {\r\n\t // doesn't fit above nor below -> show below\r\n\t }\r\n\t }\r\n\r\n\t // position the menu\r\n\t if (showBelow) {\r\n\t // display the menu below the anchor\r\n\t var anchorHeight = anchor.offsetHeight;\r\n\t this.dom.menu.style.left = '0px';\r\n\t this.dom.menu.style.top = anchorHeight + 'px';\r\n\t this.dom.menu.style.bottom = '';\r\n\t }\r\n\t else {\r\n\t // display the menu above the anchor\r\n\t this.dom.menu.style.left = '0px';\r\n\t this.dom.menu.style.top = '';\r\n\t this.dom.menu.style.bottom = '0px';\r\n\t }\r\n\r\n\t // attach the menu to the parent of the anchor\r\n\t var parent = anchor.parentNode;\r\n\t parent.insertBefore(this.dom.root, parent.firstChild);\r\n\r\n\t // create and attach event listeners\r\n\t var me = this;\r\n\t var list = this.dom.list;\r\n\t this.eventListeners.mousedown = util.addEventListener(window, 'mousedown', function (event) {\r\n\t // hide menu on click outside of the menu\r\n\t var target = event.target;\r\n\t if ((target != list) && !me._isChildOf(target, list)) {\r\n\t me.hide();\r\n\t event.stopPropagation();\r\n\t event.preventDefault();\r\n\t }\r\n\t });\r\n\t this.eventListeners.keydown = util.addEventListener(window, 'keydown', function (event) {\r\n\t me._onKeyDown(event);\r\n\t });\r\n\r\n\t // move focus to the first button in the context menu\r\n\t this.selection = util.getSelection();\r\n\t this.anchor = anchor;\r\n\t setTimeout(function () {\r\n\t me.dom.focusButton.focus();\r\n\t }, 0);\r\n\r\n\t if (ContextMenu.visibleMenu) {\r\n\t ContextMenu.visibleMenu.hide();\r\n\t }\r\n\t ContextMenu.visibleMenu = this;\r\n\t};\r\n\r\n\t/**\r\n\t * Hide the context menu if visible\r\n\t */\r\n\tContextMenu.prototype.hide = function () {\r\n\t // remove the menu from the DOM\r\n\t if (this.dom.root.parentNode) {\r\n\t this.dom.root.parentNode.removeChild(this.dom.root);\r\n\t if (this.onClose) {\r\n\t this.onClose();\r\n\t }\r\n\t }\r\n\r\n\t // remove all event listeners\r\n\t // all event listeners are supposed to be attached to document.\r\n\t for (var name in this.eventListeners) {\r\n\t if (this.eventListeners.hasOwnProperty(name)) {\r\n\t var fn = this.eventListeners[name];\r\n\t if (fn) {\r\n\t util.removeEventListener(window, name, fn);\r\n\t }\r\n\t delete this.eventListeners[name];\r\n\t }\r\n\t }\r\n\r\n\t if (ContextMenu.visibleMenu == this) {\r\n\t ContextMenu.visibleMenu = undefined;\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Expand a submenu\r\n\t * Any currently expanded submenu will be hided.\r\n\t * @param {Object} domItem\r\n\t * @private\r\n\t */\r\n\tContextMenu.prototype._onExpandItem = function (domItem) {\r\n\t var me = this;\r\n\t var alreadyVisible = (domItem == this.expandedItem);\r\n\r\n\t // hide the currently visible submenu\r\n\t var expandedItem = this.expandedItem;\r\n\t if (expandedItem) {\r\n\t //var ul = expandedItem.ul;\r\n\t expandedItem.ul.style.height = '0';\r\n\t expandedItem.ul.style.padding = '';\r\n\t setTimeout(function () {\r\n\t if (me.expandedItem != expandedItem) {\r\n\t expandedItem.ul.style.display = '';\r\n\t util.removeClassName(expandedItem.ul.parentNode, 'jsoneditor-selected');\r\n\t }\r\n\t }, 300); // timeout duration must match the css transition duration\r\n\t this.expandedItem = undefined;\r\n\t }\r\n\r\n\t if (!alreadyVisible) {\r\n\t var ul = domItem.ul;\r\n\t ul.style.display = 'block';\r\n\t var height = ul.clientHeight; // force a reflow in Firefox\r\n\t setTimeout(function () {\r\n\t if (me.expandedItem == domItem) {\r\n\t ul.style.height = (ul.childNodes.length * 24) + 'px';\r\n\t ul.style.padding = '5px 10px';\r\n\t }\r\n\t }, 0);\r\n\t util.addClassName(ul.parentNode, 'jsoneditor-selected');\r\n\t this.expandedItem = domItem;\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Handle onkeydown event\r\n\t * @param {Event} event\r\n\t * @private\r\n\t */\r\n\tContextMenu.prototype._onKeyDown = function (event) {\r\n\t var target = event.target;\r\n\t var keynum = event.which;\r\n\t var handled = false;\r\n\t var buttons, targetIndex, prevButton, nextButton;\r\n\r\n\t if (keynum == 27) { // ESC\r\n\t // hide the menu on ESC key\r\n\r\n\t // restore previous selection and focus\r\n\t if (this.selection) {\r\n\t util.setSelection(this.selection);\r\n\t }\r\n\t if (this.anchor) {\r\n\t this.anchor.focus();\r\n\t }\r\n\r\n\t this.hide();\r\n\r\n\t handled = true;\r\n\t }\r\n\t else if (keynum == 9) { // Tab\r\n\t if (!event.shiftKey) { // Tab\r\n\t buttons = this._getVisibleButtons();\r\n\t targetIndex = buttons.indexOf(target);\r\n\t if (targetIndex == buttons.length - 1) {\r\n\t // move to first button\r\n\t buttons[0].focus();\r\n\t handled = true;\r\n\t }\r\n\t }\r\n\t else { // Shift+Tab\r\n\t buttons = this._getVisibleButtons();\r\n\t targetIndex = buttons.indexOf(target);\r\n\t if (targetIndex == 0) {\r\n\t // move to last button\r\n\t buttons[buttons.length - 1].focus();\r\n\t handled = true;\r\n\t }\r\n\t }\r\n\t }\r\n\t else if (keynum == 37) { // Arrow Left\r\n\t if (target.className == 'jsoneditor-expand') {\r\n\t buttons = this._getVisibleButtons();\r\n\t targetIndex = buttons.indexOf(target);\r\n\t prevButton = buttons[targetIndex - 1];\r\n\t if (prevButton) {\r\n\t prevButton.focus();\r\n\t }\r\n\t }\r\n\t handled = true;\r\n\t }\r\n\t else if (keynum == 38) { // Arrow Up\r\n\t buttons = this._getVisibleButtons();\r\n\t targetIndex = buttons.indexOf(target);\r\n\t prevButton = buttons[targetIndex - 1];\r\n\t if (prevButton && prevButton.className == 'jsoneditor-expand') {\r\n\t // skip expand button\r\n\t prevButton = buttons[targetIndex - 2];\r\n\t }\r\n\t if (!prevButton) {\r\n\t // move to last button\r\n\t prevButton = buttons[buttons.length - 1];\r\n\t }\r\n\t if (prevButton) {\r\n\t prevButton.focus();\r\n\t }\r\n\t handled = true;\r\n\t }\r\n\t else if (keynum == 39) { // Arrow Right\r\n\t buttons = this._getVisibleButtons();\r\n\t targetIndex = buttons.indexOf(target);\r\n\t nextButton = buttons[targetIndex + 1];\r\n\t if (nextButton && nextButton.className == 'jsoneditor-expand') {\r\n\t nextButton.focus();\r\n\t }\r\n\t handled = true;\r\n\t }\r\n\t else if (keynum == 40) { // Arrow Down\r\n\t buttons = this._getVisibleButtons();\r\n\t targetIndex = buttons.indexOf(target);\r\n\t nextButton = buttons[targetIndex + 1];\r\n\t if (nextButton && nextButton.className == 'jsoneditor-expand') {\r\n\t // skip expand button\r\n\t nextButton = buttons[targetIndex + 2];\r\n\t }\r\n\t if (!nextButton) {\r\n\t // move to first button\r\n\t nextButton = buttons[0];\r\n\t }\r\n\t if (nextButton) {\r\n\t nextButton.focus();\r\n\t handled = true;\r\n\t }\r\n\t handled = true;\r\n\t }\r\n\t // TODO: arrow left and right\r\n\r\n\t if (handled) {\r\n\t event.stopPropagation();\r\n\t event.preventDefault();\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Test if an element is a child of a parent element.\r\n\t * @param {Element} child\r\n\t * @param {Element} parent\r\n\t * @return {boolean} isChild\r\n\t */\r\n\tContextMenu.prototype._isChildOf = function (child, parent) {\r\n\t var e = child.parentNode;\r\n\t while (e) {\r\n\t if (e == parent) {\r\n\t return true;\r\n\t }\r\n\t e = e.parentNode;\r\n\t }\r\n\r\n\t return false;\r\n\t};\r\n\r\n\tmodule.exports = ContextMenu;\r\n\r\n\r\n/***/ },\r\n/* 58 */\r\n/***/ function(module, exports, __webpack_require__) {\r\n\r\n\t'use strict';\r\n\r\n\tvar naturalSort = __webpack_require__(59);\r\n\tvar ContextMenu = __webpack_require__(57);\r\n\tvar appendNodeFactory = __webpack_require__(60);\r\n\tvar util = __webpack_require__(54);\r\n\r\n\t/**\r\n\t * @constructor Node\r\n\t * Create a new Node\r\n\t * @param {./treemode} editor\r\n\t * @param {Object} [params] Can contain parameters:\r\n\t * {string} field\r\n\t * {boolean} fieldEditable\r\n\t * {*} value\r\n\t * {String} type Can have values 'auto', 'array',\r\n\t * 'object', or 'string'.\r\n\t */\r\n\tfunction Node (editor, params) {\r\n\t /** @type {./treemode} */\r\n\t this.editor = editor;\r\n\t this.dom = {};\r\n\t this.expanded = false;\r\n\r\n\t if(params && (params instanceof Object)) {\r\n\t this.setField(params.field, params.fieldEditable);\r\n\t this.setValue(params.value, params.type);\r\n\t }\r\n\t else {\r\n\t this.setField('');\r\n\t this.setValue(null);\r\n\t }\r\n\r\n\t this._debouncedOnChangeValue = util.debounce(this._onChangeValue.bind(this), Node.prototype.DEBOUNCE_INTERVAL);\r\n\t this._debouncedOnChangeField = util.debounce(this._onChangeField.bind(this), Node.prototype.DEBOUNCE_INTERVAL);\r\n\t}\r\n\r\n\t// debounce interval for keyboard input in milliseconds\r\n\tNode.prototype.DEBOUNCE_INTERVAL = 150;\r\n\r\n\t/**\r\n\t * Determine whether the field and/or value of this node are editable\r\n\t * @private\r\n\t */\r\n\tNode.prototype._updateEditability = function () {\r\n\t this.editable = {\r\n\t field: true,\r\n\t value: true\r\n\t };\r\n\r\n\t if (this.editor) {\r\n\t this.editable.field = this.editor.options.mode === 'tree';\r\n\t this.editable.value = this.editor.options.mode !== 'view';\r\n\r\n\t if ((this.editor.options.mode === 'tree' || this.editor.options.mode === 'form') &&\r\n\t (typeof this.editor.options.onEditable === 'function')) {\r\n\t var editable = this.editor.options.onEditable({\r\n\t field: this.field,\r\n\t value: this.value,\r\n\t path: this.getPath()\r\n\t });\r\n\r\n\t if (typeof editable === 'boolean') {\r\n\t this.editable.field = editable;\r\n\t this.editable.value = editable;\r\n\t }\r\n\t else {\r\n\t if (typeof editable.field === 'boolean') this.editable.field = editable.field;\r\n\t if (typeof editable.value === 'boolean') this.editable.value = editable.value;\r\n\t }\r\n\t }\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Get the path of this node\r\n\t * @return {String[]} Array containing the path to this node\r\n\t */\r\n\tNode.prototype.getPath = function () {\r\n\t var node = this;\r\n\t var path = [];\r\n\t while (node) {\r\n\t var field = !node.parent\r\n\t ? undefined // do not add an (optional) field name of the root node\r\n\t : (node.parent.type != 'array')\r\n\t ? node.field\r\n\t : node.index;\r\n\r\n\t if (field !== undefined) {\r\n\t path.unshift(field);\r\n\t }\r\n\t node = node.parent;\r\n\t }\r\n\t return path;\r\n\t};\r\n\r\n\t/**\r\n\t * Find a Node from a JSON path like '.items[3].name'\r\n\t * @param {string} jsonPath\r\n\t * @return {Node | null} Returns the Node when found, returns null if not found\r\n\t */\r\n\tNode.prototype.findNode = function (jsonPath) {\r\n\t var path = util.parsePath(jsonPath);\r\n\t var node = this;\r\n\t while (node && path.length > 0) {\r\n\t var prop = path.shift();\r\n\t if (typeof prop === 'number') {\r\n\t if (node.type !== 'array') {\r\n\t throw new Error('Cannot get child node at index ' + prop + ': node is no array');\r\n\t }\r\n\t node = node.childs[prop];\r\n\t }\r\n\t else { // string\r\n\t if (node.type !== 'object') {\r\n\t throw new Error('Cannot get child node ' + prop + ': node is no object');\r\n\t }\r\n\t node = node.childs.filter(function (child) {\r\n\t return child.field === prop;\r\n\t })[0];\r\n\t }\r\n\t }\r\n\r\n\t return node;\r\n\t};\r\n\r\n\t/**\r\n\t * Find all parents of this node. The parents are ordered from root node towards\r\n\t * the original node.\r\n\t * @return {Array.}\r\n\t */\r\n\tNode.prototype.findParents = function () {\r\n\t var parents = [];\r\n\t var parent = this.parent;\r\n\t while (parent) {\r\n\t parents.unshift(parent);\r\n\t parent = parent.parent;\r\n\t }\r\n\t return parents;\r\n\t};\r\n\r\n\t/**\r\n\t *\r\n\t * @param {{dataPath: string, keyword: string, message: string, params: Object, schemaPath: string} | null} error\r\n\t * @param {Node} [child] When this is the error of a parent node, pointing\r\n\t * to an invalid child node, the child node itself\r\n\t * can be provided. If provided, clicking the error\r\n\t * icon will set focus to the invalid child node.\r\n\t */\r\n\tNode.prototype.setError = function (error, child) {\r\n\t // ensure the dom exists\r\n\t this.getDom();\r\n\r\n\t this.error = error;\r\n\t var tdError = this.dom.tdError;\r\n\t if (error) {\r\n\t if (!tdError) {\r\n\t tdError = document.createElement('td');\r\n\t this.dom.tdError = tdError;\r\n\t this.dom.tdValue.parentNode.appendChild(tdError);\r\n\t }\r\n\r\n\t var popover = document.createElement('div');\r\n\t popover.className = 'jsoneditor-popover jsoneditor-right';\r\n\t popover.appendChild(document.createTextNode(error.message));\r\n\r\n\t var button = document.createElement('button');\r\n\t button.type = 'button';\r\n\t button.className = 'jsoneditor-schema-error';\r\n\t button.appendChild(popover);\r\n\r\n\t // update the direction of the popover\r\n\t button.onmouseover = button.onfocus = function updateDirection() {\r\n\t var directions = ['right', 'above', 'below', 'left'];\r\n\t for (var i = 0; i < directions.length; i++) {\r\n\t var direction = directions[i];\r\n\t popover.className = 'jsoneditor-popover jsoneditor-' + direction;\r\n\r\n\t var contentRect = this.editor.content.getBoundingClientRect();\r\n\t var popoverRect = popover.getBoundingClientRect();\r\n\t var margin = 20; // account for a scroll bar\r\n\t var fit = util.insideRect(contentRect, popoverRect, margin);\r\n\r\n\t if (fit) {\r\n\t break;\r\n\t }\r\n\t }\r\n\t }.bind(this);\r\n\r\n\t // when clicking the error icon, expand all nodes towards the invalid\r\n\t // child node, and set focus to the child node\r\n\t if (child) {\r\n\t button.onclick = function showInvalidNode() {\r\n\t child.findParents().forEach(function (parent) {\r\n\t parent.expand(false);\r\n\t });\r\n\r\n\t child.scrollTo(function () {\r\n\t child.focus();\r\n\t });\r\n\t };\r\n\t }\r\n\r\n\t // apply the error message to the node\r\n\t while (tdError.firstChild) {\r\n\t tdError.removeChild(tdError.firstChild);\r\n\t }\r\n\t tdError.appendChild(button);\r\n\t }\r\n\t else {\r\n\t if (tdError) {\r\n\t this.dom.tdError.parentNode.removeChild(this.dom.tdError);\r\n\t delete this.dom.tdError;\r\n\t }\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Get the index of this node: the index in the list of childs where this\r\n\t * node is part of\r\n\t * @return {number} Returns the index, or -1 if this is the root node\r\n\t */\r\n\tNode.prototype.getIndex = function () {\r\n\t return this.parent ? this.parent.childs.indexOf(this) : -1;\r\n\t};\r\n\r\n\t/**\r\n\t * Set parent node\r\n\t * @param {Node} parent\r\n\t */\r\n\tNode.prototype.setParent = function(parent) {\r\n\t this.parent = parent;\r\n\t};\r\n\r\n\t/**\r\n\t * Set field\r\n\t * @param {String} field\r\n\t * @param {boolean} [fieldEditable]\r\n\t */\r\n\tNode.prototype.setField = function(field, fieldEditable) {\r\n\t this.field = field;\r\n\t this.previousField = field;\r\n\t this.fieldEditable = (fieldEditable === true);\r\n\t};\r\n\r\n\t/**\r\n\t * Get field\r\n\t * @return {String}\r\n\t */\r\n\tNode.prototype.getField = function() {\r\n\t if (this.field === undefined) {\r\n\t this._getDomField();\r\n\t }\r\n\r\n\t return this.field;\r\n\t};\r\n\r\n\t/**\r\n\t * Set value. Value is a JSON structure or an element String, Boolean, etc.\r\n\t * @param {*} value\r\n\t * @param {String} [type] Specify the type of the value. Can be 'auto',\r\n\t * 'array', 'object', or 'string'\r\n\t */\r\n\tNode.prototype.setValue = function(value, type) {\r\n\t var childValue, child;\r\n\r\n\t // first clear all current childs (if any)\r\n\t var childs = this.childs;\r\n\t if (childs) {\r\n\t while (childs.length) {\r\n\t this.removeChild(childs[0]);\r\n\t }\r\n\t }\r\n\r\n\t // TODO: remove the DOM of this Node\r\n\r\n\t this.type = this._getType(value);\r\n\r\n\t // check if type corresponds with the provided type\r\n\t if (type && type != this.type) {\r\n\t if (type == 'string' && this.type == 'auto') {\r\n\t this.type = type;\r\n\t }\r\n\t else {\r\n\t throw new Error('Type mismatch: ' +\r\n\t 'cannot cast value of type \"' + this.type +\r\n\t ' to the specified type \"' + type + '\"');\r\n\t }\r\n\t }\r\n\r\n\t if (this.type == 'array') {\r\n\t // array\r\n\t this.childs = [];\r\n\t for (var i = 0, iMax = value.length; i < iMax; i++) {\r\n\t childValue = value[i];\r\n\t if (childValue !== undefined && !(childValue instanceof Function)) {\r\n\t // ignore undefined and functions\r\n\t child = new Node(this.editor, {\r\n\t value: childValue\r\n\t });\r\n\t this.appendChild(child);\r\n\t }\r\n\t }\r\n\t this.value = '';\r\n\t }\r\n\t else if (this.type == 'object') {\r\n\t // object\r\n\t this.childs = [];\r\n\t for (var childField in value) {\r\n\t if (value.hasOwnProperty(childField)) {\r\n\t childValue = value[childField];\r\n\t if (childValue !== undefined && !(childValue instanceof Function)) {\r\n\t // ignore undefined and functions\r\n\t child = new Node(this.editor, {\r\n\t field: childField,\r\n\t value: childValue\r\n\t });\r\n\t this.appendChild(child);\r\n\t }\r\n\t }\r\n\t }\r\n\t this.value = '';\r\n\r\n\t // sort object keys\r\n\t if (this.editor.options.sortObjectKeys === true) {\r\n\t this.sort('asc');\r\n\t }\r\n\t }\r\n\t else {\r\n\t // value\r\n\t this.childs = undefined;\r\n\t this.value = value;\r\n\t }\r\n\r\n\t this.previousValue = this.value;\r\n\t};\r\n\r\n\t/**\r\n\t * Get value. Value is a JSON structure\r\n\t * @return {*} value\r\n\t */\r\n\tNode.prototype.getValue = function() {\r\n\t //var childs, i, iMax;\r\n\r\n\t if (this.type == 'array') {\r\n\t var arr = [];\r\n\t this.childs.forEach (function (child) {\r\n\t arr.push(child.getValue());\r\n\t });\r\n\t return arr;\r\n\t }\r\n\t else if (this.type == 'object') {\r\n\t var obj = {};\r\n\t this.childs.forEach (function (child) {\r\n\t obj[child.getField()] = child.getValue();\r\n\t });\r\n\t return obj;\r\n\t }\r\n\t else {\r\n\t if (this.value === undefined) {\r\n\t this._getDomValue();\r\n\t }\r\n\r\n\t return this.value;\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Get the nesting level of this node\r\n\t * @return {Number} level\r\n\t */\r\n\tNode.prototype.getLevel = function() {\r\n\t return (this.parent ? this.parent.getLevel() + 1 : 0);\r\n\t};\r\n\r\n\t/**\r\n\t * Get path of the root node till the current node\r\n\t * @return {Node[]} Returns an array with nodes\r\n\t */\r\n\tNode.prototype.getNodePath = function() {\r\n\t var path = this.parent ? this.parent.getNodePath() : [];\r\n\t path.push(this);\r\n\t return path;\r\n\t};\r\n\r\n\t/**\r\n\t * Create a clone of a node\r\n\t * The complete state of a clone is copied, including whether it is expanded or\r\n\t * not. The DOM elements are not cloned.\r\n\t * @return {Node} clone\r\n\t */\r\n\tNode.prototype.clone = function() {\r\n\t var clone = new Node(this.editor);\r\n\t clone.type = this.type;\r\n\t clone.field = this.field;\r\n\t clone.fieldInnerText = this.fieldInnerText;\r\n\t clone.fieldEditable = this.fieldEditable;\r\n\t clone.value = this.value;\r\n\t clone.valueInnerText = this.valueInnerText;\r\n\t clone.expanded = this.expanded;\r\n\r\n\t if (this.childs) {\r\n\t // an object or array\r\n\t var cloneChilds = [];\r\n\t this.childs.forEach(function (child) {\r\n\t var childClone = child.clone();\r\n\t childClone.setParent(clone);\r\n\t cloneChilds.push(childClone);\r\n\t });\r\n\t clone.childs = cloneChilds;\r\n\t }\r\n\t else {\r\n\t // a value\r\n\t clone.childs = undefined;\r\n\t }\r\n\r\n\t return clone;\r\n\t};\r\n\r\n\t/**\r\n\t * Expand this node and optionally its childs.\r\n\t * @param {boolean} [recurse] Optional recursion, true by default. When\r\n\t * true, all childs will be expanded recursively\r\n\t */\r\n\tNode.prototype.expand = function(recurse) {\r\n\t if (!this.childs) {\r\n\t return;\r\n\t }\r\n\r\n\t // set this node expanded\r\n\t this.expanded = true;\r\n\t if (this.dom.expand) {\r\n\t this.dom.expand.className = 'jsoneditor-expanded';\r\n\t }\r\n\r\n\t this.showChilds();\r\n\r\n\t if (recurse !== false) {\r\n\t this.childs.forEach(function (child) {\r\n\t child.expand(recurse);\r\n\t });\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Collapse this node and optionally its childs.\r\n\t * @param {boolean} [recurse] Optional recursion, true by default. When\r\n\t * true, all childs will be collapsed recursively\r\n\t */\r\n\tNode.prototype.collapse = function(recurse) {\r\n\t if (!this.childs) {\r\n\t return;\r\n\t }\r\n\r\n\t this.hideChilds();\r\n\r\n\t // collapse childs in case of recurse\r\n\t if (recurse !== false) {\r\n\t this.childs.forEach(function (child) {\r\n\t child.collapse(recurse);\r\n\t });\r\n\r\n\t }\r\n\r\n\t // make this node collapsed\r\n\t if (this.dom.expand) {\r\n\t this.dom.expand.className = 'jsoneditor-collapsed';\r\n\t }\r\n\t this.expanded = false;\r\n\t};\r\n\r\n\t/**\r\n\t * Recursively show all childs when they are expanded\r\n\t */\r\n\tNode.prototype.showChilds = function() {\r\n\t var childs = this.childs;\r\n\t if (!childs) {\r\n\t return;\r\n\t }\r\n\t if (!this.expanded) {\r\n\t return;\r\n\t }\r\n\r\n\t var tr = this.dom.tr;\r\n\t var table = tr ? tr.parentNode : undefined;\r\n\t if (table) {\r\n\t // show row with append button\r\n\t var append = this.getAppend();\r\n\t var nextTr = tr.nextSibling;\r\n\t if (nextTr) {\r\n\t table.insertBefore(append, nextTr);\r\n\t }\r\n\t else {\r\n\t table.appendChild(append);\r\n\t }\r\n\r\n\t // show childs\r\n\t this.childs.forEach(function (child) {\r\n\t table.insertBefore(child.getDom(), append);\r\n\t child.showChilds();\r\n\t });\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Hide the node with all its childs\r\n\t */\r\n\tNode.prototype.hide = function() {\r\n\t var tr = this.dom.tr;\r\n\t var table = tr ? tr.parentNode : undefined;\r\n\t if (table) {\r\n\t table.removeChild(tr);\r\n\t }\r\n\t this.hideChilds();\r\n\t};\r\n\r\n\r\n\t/**\r\n\t * Recursively hide all childs\r\n\t */\r\n\tNode.prototype.hideChilds = function() {\r\n\t var childs = this.childs;\r\n\t if (!childs) {\r\n\t return;\r\n\t }\r\n\t if (!this.expanded) {\r\n\t return;\r\n\t }\r\n\r\n\t // hide append row\r\n\t var append = this.getAppend();\r\n\t if (append.parentNode) {\r\n\t append.parentNode.removeChild(append);\r\n\t }\r\n\r\n\t // hide childs\r\n\t this.childs.forEach(function (child) {\r\n\t child.hide();\r\n\t });\r\n\t};\r\n\r\n\r\n\t/**\r\n\t * Add a new child to the node.\r\n\t * Only applicable when Node value is of type array or object\r\n\t * @param {Node} node\r\n\t */\r\n\tNode.prototype.appendChild = function(node) {\r\n\t if (this._hasChilds()) {\r\n\t // adjust the link to the parent\r\n\t node.setParent(this);\r\n\t node.fieldEditable = (this.type == 'object');\r\n\t if (this.type == 'array') {\r\n\t node.index = this.childs.length;\r\n\t }\r\n\t this.childs.push(node);\r\n\r\n\t if (this.expanded) {\r\n\t // insert into the DOM, before the appendRow\r\n\t var newTr = node.getDom();\r\n\t var appendTr = this.getAppend();\r\n\t var table = appendTr ? appendTr.parentNode : undefined;\r\n\t if (appendTr && table) {\r\n\t table.insertBefore(newTr, appendTr);\r\n\t }\r\n\r\n\t node.showChilds();\r\n\t }\r\n\r\n\t this.updateDom({'updateIndexes': true});\r\n\t node.updateDom({'recurse': true});\r\n\t }\r\n\t};\r\n\r\n\r\n\t/**\r\n\t * Move a node from its current parent to this node\r\n\t * Only applicable when Node value is of type array or object\r\n\t * @param {Node} node\r\n\t * @param {Node} beforeNode\r\n\t */\r\n\tNode.prototype.moveBefore = function(node, beforeNode) {\r\n\t if (this._hasChilds()) {\r\n\t // create a temporary row, to prevent the scroll position from jumping\r\n\t // when removing the node\r\n\t var tbody = (this.dom.tr) ? this.dom.tr.parentNode : undefined;\r\n\t if (tbody) {\r\n\t var trTemp = document.createElement('tr');\r\n\t trTemp.style.height = tbody.clientHeight + 'px';\r\n\t tbody.appendChild(trTemp);\r\n\t }\r\n\r\n\t if (node.parent) {\r\n\t node.parent.removeChild(node);\r\n\t }\r\n\r\n\t if (beforeNode instanceof AppendNode) {\r\n\t this.appendChild(node);\r\n\t }\r\n\t else {\r\n\t this.insertBefore(node, beforeNode);\r\n\t }\r\n\r\n\t if (tbody) {\r\n\t tbody.removeChild(trTemp);\r\n\t }\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Move a node from its current parent to this node\r\n\t * Only applicable when Node value is of type array or object.\r\n\t * If index is out of range, the node will be appended to the end\r\n\t * @param {Node} node\r\n\t * @param {Number} index\r\n\t */\r\n\tNode.prototype.moveTo = function (node, index) {\r\n\t if (node.parent == this) {\r\n\t // same parent\r\n\t var currentIndex = this.childs.indexOf(node);\r\n\t if (currentIndex < index) {\r\n\t // compensate the index for removal of the node itself\r\n\t index++;\r\n\t }\r\n\t }\r\n\r\n\t var beforeNode = this.childs[index] || this.append;\r\n\t this.moveBefore(node, beforeNode);\r\n\t};\r\n\r\n\t/**\r\n\t * Insert a new child before a given node\r\n\t * Only applicable when Node value is of type array or object\r\n\t * @param {Node} node\r\n\t * @param {Node} beforeNode\r\n\t */\r\n\tNode.prototype.insertBefore = function(node, beforeNode) {\r\n\t if (this._hasChilds()) {\r\n\t if (beforeNode == this.append) {\r\n\t // append to the child nodes\r\n\r\n\t // adjust the link to the parent\r\n\t node.setParent(this);\r\n\t node.fieldEditable = (this.type == 'object');\r\n\t this.childs.push(node);\r\n\t }\r\n\t else {\r\n\t // insert before a child node\r\n\t var index = this.childs.indexOf(beforeNode);\r\n\t if (index == -1) {\r\n\t throw new Error('Node not found');\r\n\t }\r\n\r\n\t // adjust the link to the parent\r\n\t node.setParent(this);\r\n\t node.fieldEditable = (this.type == 'object');\r\n\t this.childs.splice(index, 0, node);\r\n\t }\r\n\r\n\t if (this.expanded) {\r\n\t // insert into the DOM\r\n\t var newTr = node.getDom();\r\n\t var nextTr = beforeNode.getDom();\r\n\t var table = nextTr ? nextTr.parentNode : undefined;\r\n\t if (nextTr && table) {\r\n\t table.insertBefore(newTr, nextTr);\r\n\t }\r\n\r\n\t node.showChilds();\r\n\t }\r\n\r\n\t this.updateDom({'updateIndexes': true});\r\n\t node.updateDom({'recurse': true});\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Insert a new child before a given node\r\n\t * Only applicable when Node value is of type array or object\r\n\t * @param {Node} node\r\n\t * @param {Node} afterNode\r\n\t */\r\n\tNode.prototype.insertAfter = function(node, afterNode) {\r\n\t if (this._hasChilds()) {\r\n\t var index = this.childs.indexOf(afterNode);\r\n\t var beforeNode = this.childs[index + 1];\r\n\t if (beforeNode) {\r\n\t this.insertBefore(node, beforeNode);\r\n\t }\r\n\t else {\r\n\t this.appendChild(node);\r\n\t }\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Search in this node\r\n\t * The node will be expanded when the text is found one of its childs, else\r\n\t * it will be collapsed. Searches are case insensitive.\r\n\t * @param {String} text\r\n\t * @return {Node[]} results Array with nodes containing the search text\r\n\t */\r\n\tNode.prototype.search = function(text) {\r\n\t var results = [];\r\n\t var index;\r\n\t var search = text ? text.toLowerCase() : undefined;\r\n\r\n\t // delete old search data\r\n\t delete this.searchField;\r\n\t delete this.searchValue;\r\n\r\n\t // search in field\r\n\t if (this.field != undefined) {\r\n\t var field = String(this.field).toLowerCase();\r\n\t index = field.indexOf(search);\r\n\t if (index != -1) {\r\n\t this.searchField = true;\r\n\t results.push({\r\n\t 'node': this,\r\n\t 'elem': 'field'\r\n\t });\r\n\t }\r\n\r\n\t // update dom\r\n\t this._updateDomField();\r\n\t }\r\n\r\n\t // search in value\r\n\t if (this._hasChilds()) {\r\n\t // array, object\r\n\r\n\t // search the nodes childs\r\n\t if (this.childs) {\r\n\t var childResults = [];\r\n\t this.childs.forEach(function (child) {\r\n\t childResults = childResults.concat(child.search(text));\r\n\t });\r\n\t results = results.concat(childResults);\r\n\t }\r\n\r\n\t // update dom\r\n\t if (search != undefined) {\r\n\t var recurse = false;\r\n\t if (childResults.length == 0) {\r\n\t this.collapse(recurse);\r\n\t }\r\n\t else {\r\n\t this.expand(recurse);\r\n\t }\r\n\t }\r\n\t }\r\n\t else {\r\n\t // string, auto\r\n\t if (this.value != undefined ) {\r\n\t var value = String(this.value).toLowerCase();\r\n\t index = value.indexOf(search);\r\n\t if (index != -1) {\r\n\t this.searchValue = true;\r\n\t results.push({\r\n\t 'node': this,\r\n\t 'elem': 'value'\r\n\t });\r\n\t }\r\n\t }\r\n\r\n\t // update dom\r\n\t this._updateDomValue();\r\n\t }\r\n\r\n\t return results;\r\n\t};\r\n\r\n\t/**\r\n\t * Move the scroll position such that this node is in the visible area.\r\n\t * The node will not get the focus\r\n\t * @param {function(boolean)} [callback]\r\n\t */\r\n\tNode.prototype.scrollTo = function(callback) {\r\n\t if (!this.dom.tr || !this.dom.tr.parentNode) {\r\n\t // if the node is not visible, expand its parents\r\n\t var parent = this.parent;\r\n\t var recurse = false;\r\n\t while (parent) {\r\n\t parent.expand(recurse);\r\n\t parent = parent.parent;\r\n\t }\r\n\t }\r\n\r\n\t if (this.dom.tr && this.dom.tr.parentNode) {\r\n\t this.editor.scrollTo(this.dom.tr.offsetTop, callback);\r\n\t }\r\n\t};\r\n\r\n\r\n\t// stores the element name currently having the focus\r\n\tNode.focusElement = undefined;\r\n\r\n\t/**\r\n\t * Set focus to this node\r\n\t * @param {String} [elementName] The field name of the element to get the\r\n\t * focus available values: 'drag', 'menu',\r\n\t * 'expand', 'field', 'value' (default)\r\n\t */\r\n\tNode.prototype.focus = function(elementName) {\r\n\t Node.focusElement = elementName;\r\n\r\n\t if (this.dom.tr && this.dom.tr.parentNode) {\r\n\t var dom = this.dom;\r\n\r\n\t switch (elementName) {\r\n\t case 'drag':\r\n\t if (dom.drag) {\r\n\t dom.drag.focus();\r\n\t }\r\n\t else {\r\n\t dom.menu.focus();\r\n\t }\r\n\t break;\r\n\r\n\t case 'menu':\r\n\t dom.menu.focus();\r\n\t break;\r\n\r\n\t case 'expand':\r\n\t if (this._hasChilds()) {\r\n\t dom.expand.focus();\r\n\t }\r\n\t else if (dom.field && this.fieldEditable) {\r\n\t dom.field.focus();\r\n\t util.selectContentEditable(dom.field);\r\n\t }\r\n\t else if (dom.value && !this._hasChilds()) {\r\n\t dom.value.focus();\r\n\t util.selectContentEditable(dom.value);\r\n\t }\r\n\t else {\r\n\t dom.menu.focus();\r\n\t }\r\n\t break;\r\n\r\n\t case 'field':\r\n\t if (dom.field && this.fieldEditable) {\r\n\t dom.field.focus();\r\n\t util.selectContentEditable(dom.field);\r\n\t }\r\n\t else if (dom.value && !this._hasChilds()) {\r\n\t dom.value.focus();\r\n\t util.selectContentEditable(dom.value);\r\n\t }\r\n\t else if (this._hasChilds()) {\r\n\t dom.expand.focus();\r\n\t }\r\n\t else {\r\n\t dom.menu.focus();\r\n\t }\r\n\t break;\r\n\r\n\t case 'value':\r\n\t default:\r\n\t if (dom.value && !this._hasChilds()) {\r\n\t dom.value.focus();\r\n\t util.selectContentEditable(dom.value);\r\n\t }\r\n\t else if (dom.field && this.fieldEditable) {\r\n\t dom.field.focus();\r\n\t util.selectContentEditable(dom.field);\r\n\t }\r\n\t else if (this._hasChilds()) {\r\n\t dom.expand.focus();\r\n\t }\r\n\t else {\r\n\t dom.menu.focus();\r\n\t }\r\n\t break;\r\n\t }\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Select all text in an editable div after a delay of 0 ms\r\n\t * @param {Element} editableDiv\r\n\t */\r\n\tNode.select = function(editableDiv) {\r\n\t setTimeout(function () {\r\n\t util.selectContentEditable(editableDiv);\r\n\t }, 0);\r\n\t};\r\n\r\n\t/**\r\n\t * Update the values from the DOM field and value of this node\r\n\t */\r\n\tNode.prototype.blur = function() {\r\n\t // retrieve the actual field and value from the DOM.\r\n\t this._getDomValue(false);\r\n\t this._getDomField(false);\r\n\t};\r\n\r\n\t/**\r\n\t * Check if given node is a child. The method will check recursively to find\r\n\t * this node.\r\n\t * @param {Node} node\r\n\t * @return {boolean} containsNode\r\n\t */\r\n\tNode.prototype.containsNode = function(node) {\r\n\t if (this == node) {\r\n\t return true;\r\n\t }\r\n\r\n\t var childs = this.childs;\r\n\t if (childs) {\r\n\t // TODO: use the js5 Array.some() here?\r\n\t for (var i = 0, iMax = childs.length; i < iMax; i++) {\r\n\t if (childs[i].containsNode(node)) {\r\n\t return true;\r\n\t }\r\n\t }\r\n\t }\r\n\r\n\t return false;\r\n\t};\r\n\r\n\t/**\r\n\t * Move given node into this node\r\n\t * @param {Node} node the childNode to be moved\r\n\t * @param {Node} beforeNode node will be inserted before given\r\n\t * node. If no beforeNode is given,\r\n\t * the node is appended at the end\r\n\t * @private\r\n\t */\r\n\tNode.prototype._move = function(node, beforeNode) {\r\n\t if (node == beforeNode) {\r\n\t // nothing to do...\r\n\t return;\r\n\t }\r\n\r\n\t // check if this node is not a child of the node to be moved here\r\n\t if (node.containsNode(this)) {\r\n\t throw new Error('Cannot move a field into a child of itself');\r\n\t }\r\n\r\n\t // remove the original node\r\n\t if (node.parent) {\r\n\t node.parent.removeChild(node);\r\n\t }\r\n\r\n\t // create a clone of the node\r\n\t var clone = node.clone();\r\n\t node.clearDom();\r\n\r\n\t // insert or append the node\r\n\t if (beforeNode) {\r\n\t this.insertBefore(clone, beforeNode);\r\n\t }\r\n\t else {\r\n\t this.appendChild(clone);\r\n\t }\r\n\r\n\t /* TODO: adjust the field name (to prevent equal field names)\r\n\t if (this.type == 'object') {\r\n\t }\r\n\t */\r\n\t};\r\n\r\n\t/**\r\n\t * Remove a child from the node.\r\n\t * Only applicable when Node value is of type array or object\r\n\t * @param {Node} node The child node to be removed;\r\n\t * @return {Node | undefined} node The removed node on success,\r\n\t * else undefined\r\n\t */\r\n\tNode.prototype.removeChild = function(node) {\r\n\t if (this.childs) {\r\n\t var index = this.childs.indexOf(node);\r\n\r\n\t if (index != -1) {\r\n\t node.hide();\r\n\r\n\t // delete old search results\r\n\t delete node.searchField;\r\n\t delete node.searchValue;\r\n\r\n\t var removedNode = this.childs.splice(index, 1)[0];\r\n\t removedNode.parent = null;\r\n\r\n\t this.updateDom({'updateIndexes': true});\r\n\r\n\t return removedNode;\r\n\t }\r\n\t }\r\n\r\n\t return undefined;\r\n\t};\r\n\r\n\t/**\r\n\t * Remove a child node node from this node\r\n\t * This method is equal to Node.removeChild, except that _remove fire an\r\n\t * onChange event.\r\n\t * @param {Node} node\r\n\t * @private\r\n\t */\r\n\tNode.prototype._remove = function (node) {\r\n\t this.removeChild(node);\r\n\t};\r\n\r\n\t/**\r\n\t * Change the type of the value of this Node\r\n\t * @param {String} newType\r\n\t */\r\n\tNode.prototype.changeType = function (newType) {\r\n\t var oldType = this.type;\r\n\r\n\t if (oldType == newType) {\r\n\t // type is not changed\r\n\t return;\r\n\t }\r\n\r\n\t if ((newType == 'string' || newType == 'auto') &&\r\n\t (oldType == 'string' || oldType == 'auto')) {\r\n\t // this is an easy change\r\n\t this.type = newType;\r\n\t }\r\n\t else {\r\n\t // change from array to object, or from string/auto to object/array\r\n\t var table = this.dom.tr ? this.dom.tr.parentNode : undefined;\r\n\t var lastTr;\r\n\t if (this.expanded) {\r\n\t lastTr = this.getAppend();\r\n\t }\r\n\t else {\r\n\t lastTr = this.getDom();\r\n\t }\r\n\t var nextTr = (lastTr && lastTr.parentNode) ? lastTr.nextSibling : undefined;\r\n\r\n\t // hide current field and all its childs\r\n\t this.hide();\r\n\t this.clearDom();\r\n\r\n\t // adjust the field and the value\r\n\t this.type = newType;\r\n\r\n\t // adjust childs\r\n\t if (newType == 'object') {\r\n\t if (!this.childs) {\r\n\t this.childs = [];\r\n\t }\r\n\r\n\t this.childs.forEach(function (child, index) {\r\n\t child.clearDom();\r\n\t delete child.index;\r\n\t child.fieldEditable = true;\r\n\t if (child.field == undefined) {\r\n\t child.field = '';\r\n\t }\r\n\t });\r\n\r\n\t if (oldType == 'string' || oldType == 'auto') {\r\n\t this.expanded = true;\r\n\t }\r\n\t }\r\n\t else if (newType == 'array') {\r\n\t if (!this.childs) {\r\n\t this.childs = [];\r\n\t }\r\n\r\n\t this.childs.forEach(function (child, index) {\r\n\t child.clearDom();\r\n\t child.fieldEditable = false;\r\n\t child.index = index;\r\n\t });\r\n\r\n\t if (oldType == 'string' || oldType == 'auto') {\r\n\t this.expanded = true;\r\n\t }\r\n\t }\r\n\t else {\r\n\t this.expanded = false;\r\n\t }\r\n\r\n\t // create new DOM\r\n\t if (table) {\r\n\t if (nextTr) {\r\n\t table.insertBefore(this.getDom(), nextTr);\r\n\t }\r\n\t else {\r\n\t table.appendChild(this.getDom());\r\n\t }\r\n\t }\r\n\t this.showChilds();\r\n\t }\r\n\r\n\t if (newType == 'auto' || newType == 'string') {\r\n\t // cast value to the correct type\r\n\t if (newType == 'string') {\r\n\t this.value = String(this.value);\r\n\t }\r\n\t else {\r\n\t this.value = this._stringCast(String(this.value));\r\n\t }\r\n\r\n\t this.focus();\r\n\t }\r\n\r\n\t this.updateDom({'updateIndexes': true});\r\n\t};\r\n\r\n\t/**\r\n\t * Retrieve value from DOM\r\n\t * @param {boolean} [silent] If true (default), no errors will be thrown in\r\n\t * case of invalid data\r\n\t * @private\r\n\t */\r\n\tNode.prototype._getDomValue = function(silent) {\r\n\t if (this.dom.value && this.type != 'array' && this.type != 'object') {\r\n\t this.valueInnerText = util.getInnerText(this.dom.value);\r\n\t }\r\n\r\n\t if (this.valueInnerText != undefined) {\r\n\t try {\r\n\t // retrieve the value\r\n\t var value;\r\n\t if (this.type == 'string') {\r\n\t value = this._unescapeHTML(this.valueInnerText);\r\n\t }\r\n\t else {\r\n\t var str = this._unescapeHTML(this.valueInnerText);\r\n\t value = this._stringCast(str);\r\n\t }\r\n\t if (value !== this.value) {\r\n\t this.value = value;\r\n\t this._debouncedOnChangeValue();\r\n\t }\r\n\t }\r\n\t catch (err) {\r\n\t this.value = undefined;\r\n\t // TODO: sent an action with the new, invalid value?\r\n\t if (silent !== true) {\r\n\t throw err;\r\n\t }\r\n\t }\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Handle a changed value\r\n\t * @private\r\n\t */\r\n\tNode.prototype._onChangeValue = function () {\r\n\t // get current selection, then override the range such that we can select\r\n\t // the added/removed text on undo/redo\r\n\t var oldSelection = this.editor.getSelection();\r\n\t if (oldSelection.range) {\r\n\t var undoDiff = util.textDiff(String(this.value), String(this.previousValue));\r\n\t oldSelection.range.startOffset = undoDiff.start;\r\n\t oldSelection.range.endOffset = undoDiff.end;\r\n\t }\r\n\t var newSelection = this.editor.getSelection();\r\n\t if (newSelection.range) {\r\n\t var redoDiff = util.textDiff(String(this.previousValue), String(this.value));\r\n\t newSelection.range.startOffset = redoDiff.start;\r\n\t newSelection.range.endOffset = redoDiff.end;\r\n\t }\r\n\r\n\t this.editor._onAction('editValue', {\r\n\t node: this,\r\n\t oldValue: this.previousValue,\r\n\t newValue: this.value,\r\n\t oldSelection: oldSelection,\r\n\t newSelection: newSelection\r\n\t });\r\n\r\n\t this.previousValue = this.value;\r\n\t};\r\n\r\n\t/**\r\n\t * Handle a changed field\r\n\t * @private\r\n\t */\r\n\tNode.prototype._onChangeField = function () {\r\n\t // get current selection, then override the range such that we can select\r\n\t // the added/removed text on undo/redo\r\n\t var oldSelection = this.editor.getSelection();\r\n\t if (oldSelection.range) {\r\n\t var undoDiff = util.textDiff(this.field, this.previousField);\r\n\t oldSelection.range.startOffset = undoDiff.start;\r\n\t oldSelection.range.endOffset = undoDiff.end;\r\n\t }\r\n\t var newSelection = this.editor.getSelection();\r\n\t if (newSelection.range) {\r\n\t var redoDiff = util.textDiff(this.previousField, this.field);\r\n\t newSelection.range.startOffset = redoDiff.start;\r\n\t newSelection.range.endOffset = redoDiff.end;\r\n\t }\r\n\r\n\t this.editor._onAction('editField', {\r\n\t node: this,\r\n\t oldValue: this.previousField,\r\n\t newValue: this.field,\r\n\t oldSelection: oldSelection,\r\n\t newSelection: newSelection\r\n\t });\r\n\r\n\t this.previousField = this.field;\r\n\t};\r\n\r\n\t/**\r\n\t * Update dom value:\r\n\t * - the text color of the value, depending on the type of the value\r\n\t * - the height of the field, depending on the width\r\n\t * - background color in case it is empty\r\n\t * @private\r\n\t */\r\n\tNode.prototype._updateDomValue = function () {\r\n\t var domValue = this.dom.value;\r\n\t if (domValue) {\r\n\t var classNames = ['jsoneditor-value'];\r\n\r\n\r\n\t // set text color depending on value type\r\n\t var value = this.value;\r\n\t var type = (this.type == 'auto') ? util.type(value) : this.type;\r\n\t var isUrl = type == 'string' && util.isUrl(value);\r\n\t classNames.push('jsoneditor-' + type);\r\n\t if (isUrl) {\r\n\t classNames.push('jsoneditor-url');\r\n\t }\r\n\r\n\t // visual styling when empty\r\n\t var isEmpty = (String(this.value) == '' && this.type != 'array' && this.type != 'object');\r\n\t if (isEmpty) {\r\n\t classNames.push('jsoneditor-empty');\r\n\t }\r\n\r\n\t // highlight when there is a search result\r\n\t if (this.searchValueActive) {\r\n\t classNames.push('jsoneditor-highlight-active');\r\n\t }\r\n\t if (this.searchValue) {\r\n\t classNames.push('jsoneditor-highlight');\r\n\t }\r\n\r\n\t domValue.className = classNames.join(' ');\r\n\r\n\t // update title\r\n\t if (type == 'array' || type == 'object') {\r\n\t var count = this.childs ? this.childs.length : 0;\r\n\t domValue.title = this.type + ' containing ' + count + ' items';\r\n\t }\r\n\t else if (isUrl && this.editable.value) {\r\n\t domValue.title = 'Ctrl+Click or Ctrl+Enter to open url in new window';\r\n\t }\r\n\t else {\r\n\t domValue.title = '';\r\n\t }\r\n\r\n\t // show checkbox when the value is a boolean\r\n\t if (type === 'boolean' && this.editable.value) {\r\n\t if (!this.dom.checkbox) {\r\n\t this.dom.checkbox = document.createElement('input');\r\n\t this.dom.checkbox.type = 'checkbox';\r\n\t this.dom.tdCheckbox = document.createElement('td');\r\n\t this.dom.tdCheckbox.className = 'jsoneditor-tree';\r\n\t this.dom.tdCheckbox.appendChild(this.dom.checkbox);\r\n\r\n\t this.dom.tdValue.parentNode.insertBefore(this.dom.tdCheckbox, this.dom.tdValue);\r\n\t }\r\n\r\n\t this.dom.checkbox.checked = this.value;\r\n\t }\r\n\t else {\r\n\t // cleanup checkbox when displayed\r\n\t if (this.dom.tdCheckbox) {\r\n\t this.dom.tdCheckbox.parentNode.removeChild(this.dom.tdCheckbox);\r\n\t delete this.dom.tdCheckbox;\r\n\t delete this.dom.checkbox;\r\n\t }\r\n\t }\r\n\r\n\t if (this.enum && this.editable.value) {\r\n\t // create select box when this node has an enum object\r\n\t if (!this.dom.select) {\r\n\t this.dom.select = document.createElement('select');\r\n\t this.id = this.field + \"_\" + new Date().getUTCMilliseconds();\r\n\t this.dom.select.id = this.id;\r\n\t this.dom.select.name = this.dom.select.id;\r\n\r\n\t //Create the default empty option\r\n\t this.dom.select.option = document.createElement('option');\r\n\t this.dom.select.option.value = '';\r\n\t this.dom.select.option.innerHTML = '--';\r\n\t this.dom.select.appendChild(this.dom.select.option);\r\n\r\n\t //Iterate all enum values and add them as options\r\n\t for(var i = 0; i < this.enum.length; i++) {\r\n\t this.dom.select.option = document.createElement('option');\r\n\t this.dom.select.option.value = this.enum[i];\r\n\t this.dom.select.option.innerHTML = this.enum[i];\r\n\t if(this.dom.select.option.value == this.value){\r\n\t this.dom.select.option.selected = true;\r\n\t }\r\n\t this.dom.select.appendChild(this.dom.select.option);\r\n\t }\r\n\r\n\t this.dom.tdSelect = document.createElement('td');\r\n\t this.dom.tdSelect.className = 'jsoneditor-tree';\r\n\t this.dom.tdSelect.appendChild(this.dom.select);\r\n\t this.dom.tdValue.parentNode.insertBefore(this.dom.tdSelect, this.dom.tdValue);\r\n\t }\r\n\r\n\t // If the enum is inside a composite type display\r\n\t // both the simple input and the dropdown field\r\n\t if(this.schema && (\r\n\t !this.schema.hasOwnProperty(\"oneOf\") &&\r\n\t !this.schema.hasOwnProperty(\"anyOf\") &&\r\n\t !this.schema.hasOwnProperty(\"allOf\"))\r\n\t ) {\r\n\t this.valueFieldHTML = this.dom.tdValue.innerHTML;\r\n\t this.dom.tdValue.style.visibility = 'hidden';\r\n\t this.dom.tdValue.innerHTML = '';\r\n\t } else {\r\n\t delete this.valueFieldHTML;\r\n\t }\r\n\t }\r\n\t else {\r\n\t // cleanup select box when displayed\r\n\t if (this.dom.tdSelect) {\r\n\t this.dom.tdSelect.parentNode.removeChild(this.dom.tdSelect);\r\n\t delete this.dom.tdSelect;\r\n\t delete this.dom.select;\r\n\t this.dom.tdValue.innerHTML = this.valueFieldHTML;\r\n\t this.dom.tdValue.style.visibility = '';\r\n\t delete this.valueFieldHTML;\r\n\t }\r\n\t }\r\n\r\n\t // strip formatting from the contents of the editable div\r\n\t util.stripFormatting(domValue);\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Update dom field:\r\n\t * - the text color of the field, depending on the text\r\n\t * - the height of the field, depending on the width\r\n\t * - background color in case it is empty\r\n\t * @private\r\n\t */\r\n\tNode.prototype._updateDomField = function () {\r\n\t var domField = this.dom.field;\r\n\t if (domField) {\r\n\t // make backgound color lightgray when empty\r\n\t var isEmpty = (String(this.field) == '' && this.parent.type != 'array');\r\n\t if (isEmpty) {\r\n\t util.addClassName(domField, 'jsoneditor-empty');\r\n\t }\r\n\t else {\r\n\t util.removeClassName(domField, 'jsoneditor-empty');\r\n\t }\r\n\r\n\t // highlight when there is a search result\r\n\t if (this.searchFieldActive) {\r\n\t util.addClassName(domField, 'jsoneditor-highlight-active');\r\n\t }\r\n\t else {\r\n\t util.removeClassName(domField, 'jsoneditor-highlight-active');\r\n\t }\r\n\t if (this.searchField) {\r\n\t util.addClassName(domField, 'jsoneditor-highlight');\r\n\t }\r\n\t else {\r\n\t util.removeClassName(domField, 'jsoneditor-highlight');\r\n\t }\r\n\r\n\t // strip formatting from the contents of the editable div\r\n\t util.stripFormatting(domField);\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Retrieve field from DOM\r\n\t * @param {boolean} [silent] If true (default), no errors will be thrown in\r\n\t * case of invalid data\r\n\t * @private\r\n\t */\r\n\tNode.prototype._getDomField = function(silent) {\r\n\t if (this.dom.field && this.fieldEditable) {\r\n\t this.fieldInnerText = util.getInnerText(this.dom.field);\r\n\t }\r\n\r\n\t if (this.fieldInnerText != undefined) {\r\n\t try {\r\n\t var field = this._unescapeHTML(this.fieldInnerText);\r\n\r\n\t if (field !== this.field) {\r\n\t this.field = field;\r\n\t this._debouncedOnChangeField();\r\n\t }\r\n\t }\r\n\t catch (err) {\r\n\t this.field = undefined;\r\n\t // TODO: sent an action here, with the new, invalid value?\r\n\t if (silent !== true) {\r\n\t throw err;\r\n\t }\r\n\t }\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Validate this node and all it's childs\r\n\t * @return {Array.<{node: Node, error: {message: string}}>} Returns a list with duplicates\r\n\t */\r\n\tNode.prototype.validate = function () {\r\n\t var errors = [];\r\n\r\n\t // find duplicate keys\r\n\t if (this.type === 'object') {\r\n\t var keys = {};\r\n\t var duplicateKeys = [];\r\n\t for (var i = 0; i < this.childs.length; i++) {\r\n\t var child = this.childs[i];\r\n\t if (keys.hasOwnProperty(child.field)) {\r\n\t duplicateKeys.push(child.field);\r\n\t }\r\n\t keys[child.field] = true;\r\n\t }\r\n\r\n\t if (duplicateKeys.length > 0) {\r\n\t errors = this.childs\r\n\t .filter(function (node) {\r\n\t return duplicateKeys.indexOf(node.field) !== -1;\r\n\t })\r\n\t .map(function (node) {\r\n\t return {\r\n\t node: node,\r\n\t error: {\r\n\t message: 'duplicate key \"' + node.field + '\"'\r\n\t }\r\n\t }\r\n\t });\r\n\t }\r\n\t }\r\n\r\n\t // recurse over the childs\r\n\t if (this.childs) {\r\n\t for (var i = 0; i < this.childs.length; i++) {\r\n\t var e = this.childs[i].validate();\r\n\t if (e.length > 0) {\r\n\t errors = errors.concat(e);\r\n\t }\r\n\t }\r\n\t }\r\n\r\n\t return errors;\r\n\t};\r\n\r\n\t/**\r\n\t * Clear the dom of the node\r\n\t */\r\n\tNode.prototype.clearDom = function() {\r\n\t // TODO: hide the node first?\r\n\t //this.hide();\r\n\t // TODO: recursively clear dom?\r\n\r\n\t this.dom = {};\r\n\t};\r\n\r\n\t/**\r\n\t * Get the HTML DOM TR element of the node.\r\n\t * The dom will be generated when not yet created\r\n\t * @return {Element} tr HTML DOM TR Element\r\n\t */\r\n\tNode.prototype.getDom = function() {\r\n\t var dom = this.dom;\r\n\t if (dom.tr) {\r\n\t return dom.tr;\r\n\t }\r\n\r\n\t this._updateEditability();\r\n\r\n\t // create row\r\n\t dom.tr = document.createElement('tr');\r\n\t dom.tr.node = this;\r\n\r\n\t if (this.editor.options.mode === 'tree') { // note: we take here the global setting\r\n\t var tdDrag = document.createElement('td');\r\n\t if (this.editable.field) {\r\n\t // create draggable area\r\n\t if (this.parent) {\r\n\t var domDrag = document.createElement('button');\r\n\t domDrag.type = 'button';\r\n\t dom.drag = domDrag;\r\n\t domDrag.className = 'jsoneditor-dragarea';\r\n\t domDrag.title = 'Drag to move this field (Alt+Shift+Arrows)';\r\n\t tdDrag.appendChild(domDrag);\r\n\t }\r\n\t }\r\n\t dom.tr.appendChild(tdDrag);\r\n\r\n\t // create context menu\r\n\t var tdMenu = document.createElement('td');\r\n\t var menu = document.createElement('button');\r\n\t menu.type = 'button';\r\n\t dom.menu = menu;\r\n\t menu.className = 'jsoneditor-contextmenu';\r\n\t menu.title = 'Click to open the actions menu (Ctrl+M)';\r\n\t tdMenu.appendChild(dom.menu);\r\n\t dom.tr.appendChild(tdMenu);\r\n\t }\r\n\r\n\t // create tree and field\r\n\t var tdField = document.createElement('td');\r\n\t dom.tr.appendChild(tdField);\r\n\t dom.tree = this._createDomTree();\r\n\t tdField.appendChild(dom.tree);\r\n\r\n\t this.updateDom({'updateIndexes': true});\r\n\r\n\t return dom.tr;\r\n\t};\r\n\r\n\t/**\r\n\t * DragStart event, fired on mousedown on the dragarea at the left side of a Node\r\n\t * @param {Node[] | Node} nodes\r\n\t * @param {Event} event\r\n\t */\r\n\tNode.onDragStart = function (nodes, event) {\r\n\t if (!Array.isArray(nodes)) {\r\n\t return Node.onDragStart([nodes], event);\r\n\t }\r\n\t if (nodes.length === 0) {\r\n\t return;\r\n\t }\r\n\r\n\t var firstNode = nodes[0];\r\n\t var lastNode = nodes[nodes.length - 1];\r\n\t var draggedNode = Node.getNodeFromTarget(event.target);\r\n\t var beforeNode = lastNode._nextSibling();\r\n\t var editor = firstNode.editor;\r\n\r\n\t // in case of multiple selected nodes, offsetY prevents the selection from\r\n\t // jumping when you start dragging one of the lower down nodes in the selection\r\n\t var offsetY = util.getAbsoluteTop(draggedNode.dom.tr) - util.getAbsoluteTop(firstNode.dom.tr);\r\n\r\n\t if (!editor.mousemove) {\r\n\t editor.mousemove = util.addEventListener(window, 'mousemove', function (event) {\r\n\t Node.onDrag(nodes, event);\r\n\t });\r\n\t }\r\n\r\n\t if (!editor.mouseup) {\r\n\t editor.mouseup = util.addEventListener(window, 'mouseup',function (event ) {\r\n\t Node.onDragEnd(nodes, event);\r\n\t });\r\n\t }\r\n\r\n\t editor.highlighter.lock();\r\n\t editor.drag = {\r\n\t oldCursor: document.body.style.cursor,\r\n\t oldSelection: editor.getSelection(),\r\n\t oldBeforeNode: beforeNode,\r\n\t mouseX: event.pageX,\r\n\t offsetY: offsetY,\r\n\t level: firstNode.getLevel()\r\n\t };\r\n\t document.body.style.cursor = 'move';\r\n\r\n\t event.preventDefault();\r\n\t};\r\n\r\n\t/**\r\n\t * Drag event, fired when moving the mouse while dragging a Node\r\n\t * @param {Node[] | Node} nodes\r\n\t * @param {Event} event\r\n\t */\r\n\tNode.onDrag = function (nodes, event) {\r\n\t if (!Array.isArray(nodes)) {\r\n\t return Node.onDrag([nodes], event);\r\n\t }\r\n\t if (nodes.length === 0) {\r\n\t return;\r\n\t }\r\n\r\n\t // TODO: this method has grown too large. Split it in a number of methods\r\n\t var editor = nodes[0].editor;\r\n\t var mouseY = event.pageY - editor.drag.offsetY;\r\n\t var mouseX = event.pageX;\r\n\t var trThis, trPrev, trNext, trFirst, trLast, trRoot;\r\n\t var nodePrev, nodeNext;\r\n\t var topThis, topPrev, topFirst, heightThis, bottomNext, heightNext;\r\n\t var moved = false;\r\n\r\n\t // TODO: add an ESC option, which resets to the original position\r\n\r\n\t // move up/down\r\n\t var firstNode = nodes[0];\r\n\t trThis = firstNode.dom.tr;\r\n\t topThis = util.getAbsoluteTop(trThis);\r\n\t heightThis = trThis.offsetHeight;\r\n\t if (mouseY < topThis) {\r\n\t // move up\r\n\t trPrev = trThis;\r\n\t do {\r\n\t trPrev = trPrev.previousSibling;\r\n\t nodePrev = Node.getNodeFromTarget(trPrev);\r\n\t topPrev = trPrev ? util.getAbsoluteTop(trPrev) : 0;\r\n\t }\r\n\t while (trPrev && mouseY < topPrev);\r\n\r\n\t if (nodePrev && !nodePrev.parent) {\r\n\t nodePrev = undefined;\r\n\t }\r\n\r\n\t if (!nodePrev) {\r\n\t // move to the first node\r\n\t trRoot = trThis.parentNode.firstChild;\r\n\t trPrev = trRoot ? trRoot.nextSibling : undefined;\r\n\t nodePrev = Node.getNodeFromTarget(trPrev);\r\n\t if (nodePrev == firstNode) {\r\n\t nodePrev = undefined;\r\n\t }\r\n\t }\r\n\r\n\t if (nodePrev) {\r\n\t // check if mouseY is really inside the found node\r\n\t trPrev = nodePrev.dom.tr;\r\n\t topPrev = trPrev ? util.getAbsoluteTop(trPrev) : 0;\r\n\t if (mouseY > topPrev + heightThis) {\r\n\t nodePrev = undefined;\r\n\t }\r\n\t }\r\n\r\n\t if (nodePrev) {\r\n\t nodes.forEach(function (node) {\r\n\t nodePrev.parent.moveBefore(node, nodePrev);\r\n\t });\r\n\t moved = true;\r\n\t }\r\n\t }\r\n\t else {\r\n\t // move down\r\n\t var lastNode = nodes[nodes.length - 1];\r\n\t trLast = (lastNode.expanded && lastNode.append) ? lastNode.append.getDom() : lastNode.dom.tr;\r\n\t trFirst = trLast ? trLast.nextSibling : undefined;\r\n\t if (trFirst) {\r\n\t topFirst = util.getAbsoluteTop(trFirst);\r\n\t trNext = trFirst;\r\n\t do {\r\n\t nodeNext = Node.getNodeFromTarget(trNext);\r\n\t if (trNext) {\r\n\t bottomNext = trNext.nextSibling ?\r\n\t util.getAbsoluteTop(trNext.nextSibling) : 0;\r\n\t heightNext = trNext ? (bottomNext - topFirst) : 0;\r\n\r\n\t if (nodeNext.parent.childs.length == nodes.length &&\r\n\t nodeNext.parent.childs[nodes.length - 1] == lastNode) {\r\n\t // We are about to remove the last child of this parent,\r\n\t // which will make the parents appendNode visible.\r\n\t topThis += 27;\r\n\t // TODO: dangerous to suppose the height of the appendNode a constant of 27 px.\r\n\t }\r\n\t }\r\n\r\n\t trNext = trNext.nextSibling;\r\n\t }\r\n\t while (trNext && mouseY > topThis + heightNext);\r\n\r\n\t if (nodeNext && nodeNext.parent) {\r\n\t // calculate the desired level\r\n\t var diffX = (mouseX - editor.drag.mouseX);\r\n\t var diffLevel = Math.round(diffX / 24 / 2);\r\n\t var level = editor.drag.level + diffLevel; // desired level\r\n\t var levelNext = nodeNext.getLevel(); // level to be\r\n\r\n\t // find the best fitting level (move upwards over the append nodes)\r\n\t trPrev = nodeNext.dom.tr.previousSibling;\r\n\t while (levelNext < level && trPrev) {\r\n\t nodePrev = Node.getNodeFromTarget(trPrev);\r\n\r\n\t var isDraggedNode = nodes.some(function (node) {\r\n\t return node === nodePrev || nodePrev._isChildOf(node);\r\n\t });\r\n\r\n\t if (isDraggedNode) {\r\n\t // neglect the dragged nodes themselves and their childs\r\n\t }\r\n\t else if (nodePrev instanceof AppendNode) {\r\n\t var childs = nodePrev.parent.childs;\r\n\t if (childs.length != nodes.length || childs[nodes.length - 1] != lastNode) {\r\n\t // non-visible append node of a list of childs\r\n\t // consisting of not only this node (else the\r\n\t // append node will change into a visible \"empty\"\r\n\t // text when removing this node).\r\n\t nodeNext = Node.getNodeFromTarget(trPrev);\r\n\t levelNext = nodeNext.getLevel();\r\n\t }\r\n\t else {\r\n\t break;\r\n\t }\r\n\t }\r\n\t else {\r\n\t break;\r\n\t }\r\n\r\n\t trPrev = trPrev.previousSibling;\r\n\t }\r\n\r\n\t // move the node when its position is changed\r\n\t if (trLast.nextSibling != nodeNext.dom.tr) {\r\n\t nodes.forEach(function (node) {\r\n\t nodeNext.parent.moveBefore(node, nodeNext);\r\n\t });\r\n\t moved = true;\r\n\t }\r\n\t }\r\n\t }\r\n\t }\r\n\r\n\t if (moved) {\r\n\t // update the dragging parameters when moved\r\n\t editor.drag.mouseX = mouseX;\r\n\t editor.drag.level = firstNode.getLevel();\r\n\t }\r\n\r\n\t // auto scroll when hovering around the top of the editor\r\n\t editor.startAutoScroll(mouseY);\r\n\r\n\t event.preventDefault();\r\n\t};\r\n\r\n\t/**\r\n\t * Drag event, fired on mouseup after having dragged a node\r\n\t * @param {Node[] | Node} nodes\r\n\t * @param {Event} event\r\n\t */\r\n\tNode.onDragEnd = function (nodes, event) {\r\n\t if (!Array.isArray(nodes)) {\r\n\t return Node.onDrag([nodes], event);\r\n\t }\r\n\t if (nodes.length === 0) {\r\n\t return;\r\n\t }\r\n\r\n\t var firstNode = nodes[0];\r\n\t var editor = firstNode.editor;\r\n\t var parent = firstNode.parent;\r\n\t var firstIndex = parent.childs.indexOf(firstNode);\r\n\t var beforeNode = parent.childs[firstIndex + nodes.length] || parent.append;\r\n\r\n\t // set focus to the context menu button of the first node\r\n\t if (nodes[0]) {\r\n\t nodes[0].dom.menu.focus();\r\n\t }\r\n\r\n\t var params = {\r\n\t nodes: nodes,\r\n\t oldSelection: editor.drag.oldSelection,\r\n\t newSelection: editor.getSelection(),\r\n\t oldBeforeNode: editor.drag.oldBeforeNode,\r\n\t newBeforeNode: beforeNode\r\n\t };\r\n\r\n\t if (params.oldBeforeNode != params.newBeforeNode) {\r\n\t // only register this action if the node is actually moved to another place\r\n\t editor._onAction('moveNodes', params);\r\n\t }\r\n\r\n\t document.body.style.cursor = editor.drag.oldCursor;\r\n\t editor.highlighter.unlock();\r\n\t nodes.forEach(function (node) {\r\n\t if (event.target !== node.dom.drag && event.target !== node.dom.menu) {\r\n\t editor.highlighter.unhighlight();\r\n\t }\r\n\t });\r\n\t delete editor.drag;\r\n\r\n\t if (editor.mousemove) {\r\n\t util.removeEventListener(window, 'mousemove', editor.mousemove);\r\n\t delete editor.mousemove;\r\n\t }\r\n\t if (editor.mouseup) {\r\n\t util.removeEventListener(window, 'mouseup', editor.mouseup);\r\n\t delete editor.mouseup;\r\n\t }\r\n\r\n\t // Stop any running auto scroll\r\n\t editor.stopAutoScroll();\r\n\r\n\t event.preventDefault();\r\n\t};\r\n\r\n\t/**\r\n\t * Test if this node is a child of an other node\r\n\t * @param {Node} node\r\n\t * @return {boolean} isChild\r\n\t * @private\r\n\t */\r\n\tNode.prototype._isChildOf = function (node) {\r\n\t var n = this.parent;\r\n\t while (n) {\r\n\t if (n == node) {\r\n\t return true;\r\n\t }\r\n\t n = n.parent;\r\n\t }\r\n\r\n\t return false;\r\n\t};\r\n\r\n\t/**\r\n\t * Create an editable field\r\n\t * @return {Element} domField\r\n\t * @private\r\n\t */\r\n\tNode.prototype._createDomField = function () {\r\n\t return document.createElement('div');\r\n\t};\r\n\r\n\t/**\r\n\t * Set highlighting for this node and all its childs.\r\n\t * Only applied to the currently visible (expanded childs)\r\n\t * @param {boolean} highlight\r\n\t */\r\n\tNode.prototype.setHighlight = function (highlight) {\r\n\t if (this.dom.tr) {\r\n\t if (highlight) {\r\n\t util.addClassName(this.dom.tr, 'jsoneditor-highlight');\r\n\t }\r\n\t else {\r\n\t util.removeClassName(this.dom.tr, 'jsoneditor-highlight');\r\n\t }\r\n\r\n\t if (this.append) {\r\n\t this.append.setHighlight(highlight);\r\n\t }\r\n\r\n\t if (this.childs) {\r\n\t this.childs.forEach(function (child) {\r\n\t child.setHighlight(highlight);\r\n\t });\r\n\t }\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Select or deselect a node\r\n\t * @param {boolean} selected\r\n\t * @param {boolean} [isFirst]\r\n\t */\r\n\tNode.prototype.setSelected = function (selected, isFirst) {\r\n\t this.selected = selected;\r\n\r\n\t if (this.dom.tr) {\r\n\t if (selected) {\r\n\t util.addClassName(this.dom.tr, 'jsoneditor-selected');\r\n\t }\r\n\t else {\r\n\t util.removeClassName(this.dom.tr, 'jsoneditor-selected');\r\n\t }\r\n\r\n\t if (isFirst) {\r\n\t util.addClassName(this.dom.tr, 'jsoneditor-first');\r\n\t }\r\n\t else {\r\n\t util.removeClassName(this.dom.tr, 'jsoneditor-first');\r\n\t }\r\n\r\n\t if (this.append) {\r\n\t this.append.setSelected(selected);\r\n\t }\r\n\r\n\t if (this.childs) {\r\n\t this.childs.forEach(function (child) {\r\n\t child.setSelected(selected);\r\n\t });\r\n\t }\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Update the value of the node. Only primitive types are allowed, no Object\r\n\t * or Array is allowed.\r\n\t * @param {String | Number | Boolean | null} value\r\n\t */\r\n\tNode.prototype.updateValue = function (value) {\r\n\t this.value = value;\r\n\t this.updateDom();\r\n\t};\r\n\r\n\t/**\r\n\t * Update the field of the node.\r\n\t * @param {String} field\r\n\t */\r\n\tNode.prototype.updateField = function (field) {\r\n\t this.field = field;\r\n\t this.updateDom();\r\n\t};\r\n\r\n\t/**\r\n\t * Update the HTML DOM, optionally recursing through the childs\r\n\t * @param {Object} [options] Available parameters:\r\n\t * {boolean} [recurse] If true, the\r\n\t * DOM of the childs will be updated recursively.\r\n\t * False by default.\r\n\t * {boolean} [updateIndexes] If true, the childs\r\n\t * indexes of the node will be updated too. False by\r\n\t * default.\r\n\t */\r\n\tNode.prototype.updateDom = function (options) {\r\n\t // update level indentation\r\n\t var domTree = this.dom.tree;\r\n\t if (domTree) {\r\n\t domTree.style.marginLeft = this.getLevel() * 24 + 'px';\r\n\t }\r\n\r\n\t // apply field to DOM\r\n\t var domField = this.dom.field;\r\n\t if (domField) {\r\n\t if (this.fieldEditable) {\r\n\t // parent is an object\r\n\t domField.contentEditable = this.editable.field;\r\n\t domField.spellcheck = false;\r\n\t domField.className = 'jsoneditor-field';\r\n\t }\r\n\t else {\r\n\t // parent is an array this is the root node\r\n\t domField.className = 'jsoneditor-readonly';\r\n\t }\r\n\r\n\t var fieldText;\r\n\t if (this.index != undefined) {\r\n\t fieldText = this.index;\r\n\t }\r\n\t else if (this.field != undefined) {\r\n\t fieldText = this.field;\r\n\t }\r\n\t else if (this._hasChilds()) {\r\n\t fieldText = this.type;\r\n\t }\r\n\t else {\r\n\t fieldText = '';\r\n\t }\r\n\t domField.innerHTML = this._escapeHTML(fieldText);\r\n\r\n\t this._updateSchema();\r\n\t }\r\n\r\n\t // apply value to DOM\r\n\t var domValue = this.dom.value;\r\n\t if (domValue) {\r\n\t var count = this.childs ? this.childs.length : 0;\r\n\t if (this.type == 'array') {\r\n\t domValue.innerHTML = '[' + count + ']';\r\n\t util.addClassName(this.dom.tr, 'jsoneditor-expandable');\r\n\t }\r\n\t else if (this.type == 'object') {\r\n\t domValue.innerHTML = '{' + count + '}';\r\n\t util.addClassName(this.dom.tr, 'jsoneditor-expandable');\r\n\t }\r\n\t else {\r\n\t domValue.innerHTML = this._escapeHTML(this.value);\r\n\t util.removeClassName(this.dom.tr, 'jsoneditor-expandable');\r\n\t }\r\n\t }\r\n\r\n\t // update field and value\r\n\t this._updateDomField();\r\n\t this._updateDomValue();\r\n\r\n\t // update childs indexes\r\n\t if (options && options.updateIndexes === true) {\r\n\t // updateIndexes is true or undefined\r\n\t this._updateDomIndexes();\r\n\t }\r\n\r\n\t if (options && options.recurse === true) {\r\n\t // recurse is true or undefined. update childs recursively\r\n\t if (this.childs) {\r\n\t this.childs.forEach(function (child) {\r\n\t child.updateDom(options);\r\n\t });\r\n\t }\r\n\t }\r\n\r\n\t // update row with append button\r\n\t if (this.append) {\r\n\t this.append.updateDom();\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Locate the JSON schema of the node and check for any enum type\r\n\t * @private\r\n\t */\r\n\tNode.prototype._updateSchema = function () {\r\n\t //Locating the schema of the node and checking for any enum type\r\n\t if(this.editor && this.editor.options) {\r\n\t // find the part of the json schema matching this nodes path\r\n\t this.schema = Node._findSchema(this.editor.options.schema, this.getPath());\r\n\t if (this.schema) {\r\n\t this.enum = Node._findEnum(this.schema);\r\n\t }\r\n\t else {\r\n\t delete this.enum;\r\n\t }\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * find an enum definition in a JSON schema, as property `enum` or inside\r\n\t * one of the schemas composites (`oneOf`, `anyOf`, `allOf`)\r\n\t * @param {Object} schema\r\n\t * @return {Array | null} Returns the enum when found, null otherwise.\r\n\t * @private\r\n\t */\r\n\tNode._findEnum = function (schema) {\r\n\t if (schema.enum) {\r\n\t return schema.enum;\r\n\t }\r\n\r\n\t var composite = schema.oneOf || schema.anyOf || schema.allOf;\r\n\t if (composite) {\r\n\t var match = composite.filter(function (entry) {return entry.enum});\r\n\t if (match.length > 0) {\r\n\t return match[0].enum;\r\n\t }\r\n\t }\r\n\r\n\t return null\r\n\t};\r\n\r\n\t/**\r\n\t * Return the part of a JSON schema matching given path.\r\n\t * @param {Object} schema\r\n\t * @param {Array.} path\r\n\t * @return {Object | null}\r\n\t * @private\r\n\t */\r\n\tNode._findSchema = function (schema, path) {\r\n\t var childSchema = schema;\r\n\r\n\t for (var i = 0; i < path.length && childSchema; i++) {\r\n\t var key = path[i];\r\n\t if (typeof key === 'string' && childSchema.properties) {\r\n\t childSchema = childSchema.properties[key] || null\r\n\t }\r\n\t else if (typeof key === 'number' && childSchema.items) {\r\n\t childSchema = childSchema.items\r\n\t }\r\n\t }\r\n\r\n\t return childSchema\r\n\t};\r\n\r\n\t/**\r\n\t * Update the DOM of the childs of a node: update indexes and undefined field\r\n\t * names.\r\n\t * Only applicable when structure is an array or object\r\n\t * @private\r\n\t */\r\n\tNode.prototype._updateDomIndexes = function () {\r\n\t var domValue = this.dom.value;\r\n\t var childs = this.childs;\r\n\t if (domValue && childs) {\r\n\t if (this.type == 'array') {\r\n\t childs.forEach(function (child, index) {\r\n\t child.index = index;\r\n\t var childField = child.dom.field;\r\n\t if (childField) {\r\n\t childField.innerHTML = index;\r\n\t }\r\n\t });\r\n\t }\r\n\t else if (this.type == 'object') {\r\n\t childs.forEach(function (child) {\r\n\t if (child.index != undefined) {\r\n\t delete child.index;\r\n\r\n\t if (child.field == undefined) {\r\n\t child.field = '';\r\n\t }\r\n\t }\r\n\t });\r\n\t }\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Create an editable value\r\n\t * @private\r\n\t */\r\n\tNode.prototype._createDomValue = function () {\r\n\t var domValue;\r\n\r\n\t if (this.type == 'array') {\r\n\t domValue = document.createElement('div');\r\n\t domValue.innerHTML = '[...]';\r\n\t }\r\n\t else if (this.type == 'object') {\r\n\t domValue = document.createElement('div');\r\n\t domValue.innerHTML = '{...}';\r\n\t }\r\n\t else {\r\n\t if (!this.editable.value && util.isUrl(this.value)) {\r\n\t // create a link in case of read-only editor and value containing an url\r\n\t domValue = document.createElement('a');\r\n\t domValue.href = this.value;\r\n\t domValue.target = '_blank';\r\n\t domValue.innerHTML = this._escapeHTML(this.value);\r\n\t }\r\n\t else {\r\n\t // create an editable or read-only div\r\n\t domValue = document.createElement('div');\r\n\t domValue.contentEditable = this.editable.value;\r\n\t domValue.spellcheck = false;\r\n\t domValue.innerHTML = this._escapeHTML(this.value);\r\n\t }\r\n\t }\r\n\r\n\t return domValue;\r\n\t};\r\n\r\n\t/**\r\n\t * Create an expand/collapse button\r\n\t * @return {Element} expand\r\n\t * @private\r\n\t */\r\n\tNode.prototype._createDomExpandButton = function () {\r\n\t // create expand button\r\n\t var expand = document.createElement('button');\r\n\t expand.type = 'button';\r\n\t if (this._hasChilds()) {\r\n\t expand.className = this.expanded ? 'jsoneditor-expanded' : 'jsoneditor-collapsed';\r\n\t expand.title =\r\n\t 'Click to expand/collapse this field (Ctrl+E). \\n' +\r\n\t 'Ctrl+Click to expand/collapse including all childs.';\r\n\t }\r\n\t else {\r\n\t expand.className = 'jsoneditor-invisible';\r\n\t expand.title = '';\r\n\t }\r\n\r\n\t return expand;\r\n\t};\r\n\r\n\r\n\t/**\r\n\t * Create a DOM tree element, containing the expand/collapse button\r\n\t * @return {Element} domTree\r\n\t * @private\r\n\t */\r\n\tNode.prototype._createDomTree = function () {\r\n\t var dom = this.dom;\r\n\t var domTree = document.createElement('table');\r\n\t var tbody = document.createElement('tbody');\r\n\t domTree.style.borderCollapse = 'collapse'; // TODO: put in css\r\n\t domTree.className = 'jsoneditor-values';\r\n\t domTree.appendChild(tbody);\r\n\t var tr = document.createElement('tr');\r\n\t tbody.appendChild(tr);\r\n\r\n\t // create expand button\r\n\t var tdExpand = document.createElement('td');\r\n\t tdExpand.className = 'jsoneditor-tree';\r\n\t tr.appendChild(tdExpand);\r\n\t dom.expand = this._createDomExpandButton();\r\n\t tdExpand.appendChild(dom.expand);\r\n\t dom.tdExpand = tdExpand;\r\n\r\n\t // create the field\r\n\t var tdField = document.createElement('td');\r\n\t tdField.className = 'jsoneditor-tree';\r\n\t tr.appendChild(tdField);\r\n\t dom.field = this._createDomField();\r\n\t tdField.appendChild(dom.field);\r\n\t dom.tdField = tdField;\r\n\r\n\t // create a separator\r\n\t var tdSeparator = document.createElement('td');\r\n\t tdSeparator.className = 'jsoneditor-tree';\r\n\t tr.appendChild(tdSeparator);\r\n\t if (this.type != 'object' && this.type != 'array') {\r\n\t tdSeparator.appendChild(document.createTextNode(':'));\r\n\t tdSeparator.className = 'jsoneditor-separator';\r\n\t }\r\n\t dom.tdSeparator = tdSeparator;\r\n\r\n\t // create the value\r\n\t var tdValue = document.createElement('td');\r\n\t tdValue.className = 'jsoneditor-tree';\r\n\t tr.appendChild(tdValue);\r\n\t dom.value = this._createDomValue();\r\n\t tdValue.appendChild(dom.value);\r\n\t dom.tdValue = tdValue;\r\n\r\n\t return domTree;\r\n\t};\r\n\r\n\t/**\r\n\t * Handle an event. The event is caught centrally by the editor\r\n\t * @param {Event} event\r\n\t */\r\n\tNode.prototype.onEvent = function (event) {\r\n\t var type = event.type,\r\n\t target = event.target || event.srcElement,\r\n\t dom = this.dom,\r\n\t node = this,\r\n\t expandable = this._hasChilds();\r\n\r\n\t // check if mouse is on menu or on dragarea.\r\n\t // If so, highlight current row and its childs\r\n\t if (target == dom.drag || target == dom.menu) {\r\n\t if (type == 'mouseover') {\r\n\t this.editor.highlighter.highlight(this);\r\n\t }\r\n\t else if (type == 'mouseout') {\r\n\t this.editor.highlighter.unhighlight();\r\n\t }\r\n\t }\r\n\r\n\t // context menu events\r\n\t if (type == 'click' && target == dom.menu) {\r\n\t var highlighter = node.editor.highlighter;\r\n\t highlighter.highlight(node);\r\n\t highlighter.lock();\r\n\t util.addClassName(dom.menu, 'jsoneditor-selected');\r\n\t this.showContextMenu(dom.menu, function () {\r\n\t util.removeClassName(dom.menu, 'jsoneditor-selected');\r\n\t highlighter.unlock();\r\n\t highlighter.unhighlight();\r\n\t });\r\n\t }\r\n\r\n\t // expand events\r\n\t if (type == 'click') {\r\n\t if (target == dom.expand ||\r\n\t ((node.editor.options.mode === 'view' || node.editor.options.mode === 'form') && target.nodeName === 'DIV')) {\r\n\t if (expandable) {\r\n\t var recurse = event.ctrlKey; // with ctrl-key, expand/collapse all\r\n\t this._onExpand(recurse);\r\n\t }\r\n\t }\r\n\t }\r\n\r\n\t // swap the value of a boolean when the checkbox displayed left is clicked\r\n\t if (type == 'change' && target == dom.checkbox) {\r\n\t this.dom.value.innerHTML = !this.value;\r\n\t this._getDomValue();\r\n\t }\r\n\r\n\t // update the value of the node based on the selected option\r\n\t if (type == 'change' && target == dom.select) {\r\n\t this.dom.value.innerHTML = dom.select.value;\r\n\t this._getDomValue();\r\n\t this._updateDomValue();\r\n\t }\r\n\r\n\t // value events\r\n\t var domValue = dom.value;\r\n\t if (target == domValue) {\r\n\t //noinspection FallthroughInSwitchStatementJS\r\n\t switch (type) {\r\n\t case 'blur':\r\n\t case 'change':\r\n\t this._getDomValue(true);\r\n\t this._updateDomValue();\r\n\t if (this.value) {\r\n\t domValue.innerHTML = this._escapeHTML(this.value);\r\n\t }\r\n\t break;\r\n\r\n\t case 'input':\r\n\t //this._debouncedGetDomValue(true); // TODO\r\n\t this._getDomValue(true);\r\n\t this._updateDomValue();\r\n\t break;\r\n\r\n\t case 'keydown':\r\n\t case 'mousedown':\r\n\t // TODO: cleanup\r\n\t this.editor.selection = this.editor.getSelection();\r\n\t break;\r\n\r\n\t case 'click':\r\n\t if (event.ctrlKey || !this.editable.value) {\r\n\t if (util.isUrl(this.value)) {\r\n\t window.open(this.value, '_blank');\r\n\t }\r\n\t }\r\n\t break;\r\n\r\n\t case 'keyup':\r\n\t //this._debouncedGetDomValue(true); // TODO\r\n\t this._getDomValue(true);\r\n\t this._updateDomValue();\r\n\t break;\r\n\r\n\t case 'cut':\r\n\t case 'paste':\r\n\t setTimeout(function () {\r\n\t node._getDomValue(true);\r\n\t node._updateDomValue();\r\n\t }, 1);\r\n\t break;\r\n\t }\r\n\t }\r\n\r\n\t // field events\r\n\t var domField = dom.field;\r\n\t if (target == domField) {\r\n\t switch (type) {\r\n\t case 'blur':\r\n\t case 'change':\r\n\t this._getDomField(true);\r\n\t this._updateDomField();\r\n\t if (this.field) {\r\n\t domField.innerHTML = this._escapeHTML(this.field);\r\n\t }\r\n\t break;\r\n\r\n\t case 'input':\r\n\t this._getDomField(true);\r\n\t this._updateSchema();\r\n\t this._updateDomField();\r\n\t this._updateDomValue();\r\n\t break;\r\n\r\n\t case 'keydown':\r\n\t case 'mousedown':\r\n\t this.editor.selection = this.editor.getSelection();\r\n\t break;\r\n\r\n\t case 'keyup':\r\n\t this._getDomField(true);\r\n\t this._updateDomField();\r\n\t break;\r\n\r\n\t case 'cut':\r\n\t case 'paste':\r\n\t setTimeout(function () {\r\n\t node._getDomField(true);\r\n\t node._updateDomField();\r\n\t }, 1);\r\n\t break;\r\n\t }\r\n\t }\r\n\r\n\t // focus\r\n\t // when clicked in whitespace left or right from the field or value, set focus\r\n\t var domTree = dom.tree;\r\n\t if (target == domTree.parentNode && type == 'click' && !event.hasMoved) {\r\n\t var left = (event.offsetX != undefined) ?\r\n\t (event.offsetX < (this.getLevel() + 1) * 24) :\r\n\t (event.pageX < util.getAbsoluteLeft(dom.tdSeparator));// for FF\r\n\t if (left || expandable) {\r\n\t // node is expandable when it is an object or array\r\n\t if (domField) {\r\n\t util.setEndOfContentEditable(domField);\r\n\t domField.focus();\r\n\t }\r\n\t }\r\n\t else {\r\n\t if (domValue && !this.enum) {\r\n\t util.setEndOfContentEditable(domValue);\r\n\t domValue.focus();\r\n\t }\r\n\t }\r\n\t }\r\n\t if (((target == dom.tdExpand && !expandable) || target == dom.tdField || target == dom.tdSeparator) &&\r\n\t (type == 'click' && !event.hasMoved)) {\r\n\t if (domField) {\r\n\t util.setEndOfContentEditable(domField);\r\n\t domField.focus();\r\n\t }\r\n\t }\r\n\r\n\t if (type == 'keydown') {\r\n\t this.onKeyDown(event);\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Key down event handler\r\n\t * @param {Event} event\r\n\t */\r\n\tNode.prototype.onKeyDown = function (event) {\r\n\t var keynum = event.which || event.keyCode;\r\n\t var target = event.target || event.srcElement;\r\n\t var ctrlKey = event.ctrlKey;\r\n\t var shiftKey = event.shiftKey;\r\n\t var altKey = event.altKey;\r\n\t var handled = false;\r\n\t var prevNode, nextNode, nextDom, nextDom2;\r\n\t var editable = this.editor.options.mode === 'tree';\r\n\t var oldSelection;\r\n\t var oldBeforeNode;\r\n\t var nodes;\r\n\t var multiselection;\r\n\t var selectedNodes = this.editor.multiselection.nodes.length > 0\r\n\t ? this.editor.multiselection.nodes\r\n\t : [this];\r\n\t var firstNode = selectedNodes[0];\r\n\t var lastNode = selectedNodes[selectedNodes.length - 1];\r\n\r\n\t // console.log(ctrlKey, keynum, event.charCode); // TODO: cleanup\r\n\t if (keynum == 13) { // Enter\r\n\t if (target == this.dom.value) {\r\n\t if (!this.editable.value || event.ctrlKey) {\r\n\t if (util.isUrl(this.value)) {\r\n\t window.open(this.value, '_blank');\r\n\t handled = true;\r\n\t }\r\n\t }\r\n\t }\r\n\t else if (target == this.dom.expand) {\r\n\t var expandable = this._hasChilds();\r\n\t if (expandable) {\r\n\t var recurse = event.ctrlKey; // with ctrl-key, expand/collapse all\r\n\t this._onExpand(recurse);\r\n\t target.focus();\r\n\t handled = true;\r\n\t }\r\n\t }\r\n\t }\r\n\t else if (keynum == 68) { // D\r\n\t if (ctrlKey && editable) { // Ctrl+D\r\n\t Node.onDuplicate(selectedNodes);\r\n\t handled = true;\r\n\t }\r\n\t }\r\n\t else if (keynum == 69) { // E\r\n\t if (ctrlKey) { // Ctrl+E and Ctrl+Shift+E\r\n\t this._onExpand(shiftKey); // recurse = shiftKey\r\n\t target.focus(); // TODO: should restore focus in case of recursing expand (which takes DOM offline)\r\n\t handled = true;\r\n\t }\r\n\t }\r\n\t else if (keynum == 77 && editable) { // M\r\n\t if (ctrlKey) { // Ctrl+M\r\n\t this.showContextMenu(target);\r\n\t handled = true;\r\n\t }\r\n\t }\r\n\t else if (keynum == 46 && editable) { // Del\r\n\t if (ctrlKey) { // Ctrl+Del\r\n\t Node.onRemove(selectedNodes);\r\n\t handled = true;\r\n\t }\r\n\t }\r\n\t else if (keynum == 45 && editable) { // Ins\r\n\t if (ctrlKey && !shiftKey) { // Ctrl+Ins\r\n\t this._onInsertBefore();\r\n\t handled = true;\r\n\t }\r\n\t else if (ctrlKey && shiftKey) { // Ctrl+Shift+Ins\r\n\t this._onInsertAfter();\r\n\t handled = true;\r\n\t }\r\n\t }\r\n\t else if (keynum == 35) { // End\r\n\t if (altKey) { // Alt+End\r\n\t // find the last node\r\n\t var endNode = this._lastNode();\r\n\t if (endNode) {\r\n\t endNode.focus(Node.focusElement || this._getElementName(target));\r\n\t }\r\n\t handled = true;\r\n\t }\r\n\t }\r\n\t else if (keynum == 36) { // Home\r\n\t if (altKey) { // Alt+Home\r\n\t // find the first node\r\n\t var homeNode = this._firstNode();\r\n\t if (homeNode) {\r\n\t homeNode.focus(Node.focusElement || this._getElementName(target));\r\n\t }\r\n\t handled = true;\r\n\t }\r\n\t }\r\n\t else if (keynum == 37) { // Arrow Left\r\n\t if (altKey && !shiftKey) { // Alt + Arrow Left\r\n\t // move to left element\r\n\t var prevElement = this._previousElement(target);\r\n\t if (prevElement) {\r\n\t this.focus(this._getElementName(prevElement));\r\n\t }\r\n\t handled = true;\r\n\t }\r\n\t else if (altKey && shiftKey && editable) { // Alt + Shift + Arrow left\r\n\t if (lastNode.expanded) {\r\n\t var appendDom = lastNode.getAppend();\r\n\t nextDom = appendDom ? appendDom.nextSibling : undefined;\r\n\t }\r\n\t else {\r\n\t var dom = lastNode.getDom();\r\n\t nextDom = dom.nextSibling;\r\n\t }\r\n\t if (nextDom) {\r\n\t nextNode = Node.getNodeFromTarget(nextDom);\r\n\t nextDom2 = nextDom.nextSibling;\r\n\t nextNode2 = Node.getNodeFromTarget(nextDom2);\r\n\t if (nextNode && nextNode instanceof AppendNode &&\r\n\t !(lastNode.parent.childs.length == 1) &&\r\n\t nextNode2 && nextNode2.parent) {\r\n\t oldSelection = this.editor.getSelection();\r\n\t oldBeforeNode = lastNode._nextSibling();\r\n\r\n\t selectedNodes.forEach(function (node) {\r\n\t nextNode2.parent.moveBefore(node, nextNode2);\r\n\t });\r\n\t this.focus(Node.focusElement || this._getElementName(target));\r\n\r\n\t this.editor._onAction('moveNodes', {\r\n\t nodes: selectedNodes,\r\n\t oldBeforeNode: oldBeforeNode,\r\n\t newBeforeNode: nextNode2,\r\n\t oldSelection: oldSelection,\r\n\t newSelection: this.editor.getSelection()\r\n\t });\r\n\t }\r\n\t }\r\n\t }\r\n\t }\r\n\t else if (keynum == 38) { // Arrow Up\r\n\t if (altKey && !shiftKey) { // Alt + Arrow Up\r\n\t // find the previous node\r\n\t prevNode = this._previousNode();\r\n\t if (prevNode) {\r\n\t this.editor.deselect(true);\r\n\t prevNode.focus(Node.focusElement || this._getElementName(target));\r\n\t }\r\n\t handled = true;\r\n\t }\r\n\t else if (!altKey && ctrlKey && shiftKey && editable) { // Ctrl + Shift + Arrow Up\r\n\t // select multiple nodes\r\n\t prevNode = this._previousNode();\r\n\t if (prevNode) {\r\n\t multiselection = this.editor.multiselection;\r\n\t multiselection.start = multiselection.start || this;\r\n\t multiselection.end = prevNode;\r\n\t nodes = this.editor._findTopLevelNodes(multiselection.start, multiselection.end);\r\n\r\n\t this.editor.select(nodes);\r\n\t prevNode.focus('field'); // select field as we know this always exists\r\n\t }\r\n\t handled = true;\r\n\t }\r\n\t else if (altKey && shiftKey && editable) { // Alt + Shift + Arrow Up\r\n\t // find the previous node\r\n\t prevNode = firstNode._previousNode();\r\n\t if (prevNode && prevNode.parent) {\r\n\t oldSelection = this.editor.getSelection();\r\n\t oldBeforeNode = lastNode._nextSibling();\r\n\r\n\t selectedNodes.forEach(function (node) {\r\n\t prevNode.parent.moveBefore(node, prevNode);\r\n\t });\r\n\t this.focus(Node.focusElement || this._getElementName(target));\r\n\r\n\t this.editor._onAction('moveNodes', {\r\n\t nodes: selectedNodes,\r\n\t oldBeforeNode: oldBeforeNode,\r\n\t newBeforeNode: prevNode,\r\n\t oldSelection: oldSelection,\r\n\t newSelection: this.editor.getSelection()\r\n\t });\r\n\t }\r\n\t handled = true;\r\n\t }\r\n\t }\r\n\t else if (keynum == 39) { // Arrow Right\r\n\t if (altKey && !shiftKey) { // Alt + Arrow Right\r\n\t // move to right element\r\n\t var nextElement = this._nextElement(target);\r\n\t if (nextElement) {\r\n\t this.focus(this._getElementName(nextElement));\r\n\t }\r\n\t handled = true;\r\n\t }\r\n\t else if (altKey && shiftKey && editable) { // Alt + Shift + Arrow Right\r\n\t dom = firstNode.getDom();\r\n\t var prevDom = dom.previousSibling;\r\n\t if (prevDom) {\r\n\t prevNode = Node.getNodeFromTarget(prevDom);\r\n\t if (prevNode && prevNode.parent &&\r\n\t (prevNode instanceof AppendNode)\r\n\t && !prevNode.isVisible()) {\r\n\t oldSelection = this.editor.getSelection();\r\n\t oldBeforeNode = lastNode._nextSibling();\r\n\r\n\t selectedNodes.forEach(function (node) {\r\n\t prevNode.parent.moveBefore(node, prevNode);\r\n\t });\r\n\t this.focus(Node.focusElement || this._getElementName(target));\r\n\r\n\t this.editor._onAction('moveNodes', {\r\n\t nodes: selectedNodes,\r\n\t oldBeforeNode: oldBeforeNode,\r\n\t newBeforeNode: prevNode,\r\n\t oldSelection: oldSelection,\r\n\t newSelection: this.editor.getSelection()\r\n\t });\r\n\t }\r\n\t }\r\n\t }\r\n\t }\r\n\t else if (keynum == 40) { // Arrow Down\r\n\t if (altKey && !shiftKey) { // Alt + Arrow Down\r\n\t // find the next node\r\n\t nextNode = this._nextNode();\r\n\t if (nextNode) {\r\n\t this.editor.deselect(true);\r\n\t nextNode.focus(Node.focusElement || this._getElementName(target));\r\n\t }\r\n\t handled = true;\r\n\t }\r\n\t else if (!altKey && ctrlKey && shiftKey && editable) { // Ctrl + Shift + Arrow Down\r\n\t // select multiple nodes\r\n\t nextNode = this._nextNode();\r\n\t if (nextNode) {\r\n\t multiselection = this.editor.multiselection;\r\n\t multiselection.start = multiselection.start || this;\r\n\t multiselection.end = nextNode;\r\n\t nodes = this.editor._findTopLevelNodes(multiselection.start, multiselection.end);\r\n\r\n\t this.editor.select(nodes);\r\n\t nextNode.focus('field'); // select field as we know this always exists\r\n\t }\r\n\t handled = true;\r\n\t }\r\n\t else if (altKey && shiftKey && editable) { // Alt + Shift + Arrow Down\r\n\t // find the 2nd next node and move before that one\r\n\t if (lastNode.expanded) {\r\n\t nextNode = lastNode.append ? lastNode.append._nextNode() : undefined;\r\n\t }\r\n\t else {\r\n\t nextNode = lastNode._nextNode();\r\n\t }\r\n\t var nextNode2 = nextNode && (nextNode._nextNode() || nextNode.parent.append);\r\n\t if (nextNode2 && nextNode2.parent) {\r\n\t oldSelection = this.editor.getSelection();\r\n\t oldBeforeNode = lastNode._nextSibling();\r\n\r\n\t selectedNodes.forEach(function (node) {\r\n\t nextNode2.parent.moveBefore(node, nextNode2);\r\n\t });\r\n\t this.focus(Node.focusElement || this._getElementName(target));\r\n\r\n\t this.editor._onAction('moveNodes', {\r\n\t nodes: selectedNodes,\r\n\t oldBeforeNode: oldBeforeNode,\r\n\t newBeforeNode: nextNode2,\r\n\t oldSelection: oldSelection,\r\n\t newSelection: this.editor.getSelection()\r\n\t });\r\n\t }\r\n\t handled = true;\r\n\t }\r\n\t }\r\n\r\n\t if (handled) {\r\n\t event.preventDefault();\r\n\t event.stopPropagation();\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Handle the expand event, when clicked on the expand button\r\n\t * @param {boolean} recurse If true, child nodes will be expanded too\r\n\t * @private\r\n\t */\r\n\tNode.prototype._onExpand = function (recurse) {\r\n\t if (recurse) {\r\n\t // Take the table offline\r\n\t var table = this.dom.tr.parentNode; // TODO: not nice to access the main table like this\r\n\t var frame = table.parentNode;\r\n\t var scrollTop = frame.scrollTop;\r\n\t frame.removeChild(table);\r\n\t }\r\n\r\n\t if (this.expanded) {\r\n\t this.collapse(recurse);\r\n\t }\r\n\t else {\r\n\t this.expand(recurse);\r\n\t }\r\n\r\n\t if (recurse) {\r\n\t // Put the table online again\r\n\t frame.appendChild(table);\r\n\t frame.scrollTop = scrollTop;\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Remove nodes\r\n\t * @param {Node[] | Node} nodes\r\n\t */\r\n\tNode.onRemove = function(nodes) {\r\n\t if (!Array.isArray(nodes)) {\r\n\t return Node.onRemove([nodes]);\r\n\t }\r\n\r\n\t if (nodes && nodes.length > 0) {\r\n\t var firstNode = nodes[0];\r\n\t var parent = firstNode.parent;\r\n\t var editor = firstNode.editor;\r\n\t var firstIndex = firstNode.getIndex();\r\n\t editor.highlighter.unhighlight();\r\n\r\n\t // adjust the focus\r\n\t var oldSelection = editor.getSelection();\r\n\t Node.blurNodes(nodes);\r\n\t var newSelection = editor.getSelection();\r\n\r\n\t // remove the nodes\r\n\t nodes.forEach(function (node) {\r\n\t node.parent._remove(node);\r\n\t });\r\n\r\n\t // store history action\r\n\t editor._onAction('removeNodes', {\r\n\t nodes: nodes.slice(0), // store a copy of the array!\r\n\t parent: parent,\r\n\t index: firstIndex,\r\n\t oldSelection: oldSelection,\r\n\t newSelection: newSelection\r\n\t });\r\n\t }\r\n\t};\r\n\r\n\r\n\t/**\r\n\t * Duplicate nodes\r\n\t * duplicated nodes will be added right after the original nodes\r\n\t * @param {Node[] | Node} nodes\r\n\t */\r\n\tNode.onDuplicate = function(nodes) {\r\n\t if (!Array.isArray(nodes)) {\r\n\t return Node.onDuplicate([nodes]);\r\n\t }\r\n\r\n\t if (nodes && nodes.length > 0) {\r\n\t var lastNode = nodes[nodes.length - 1];\r\n\t var parent = lastNode.parent;\r\n\t var editor = lastNode.editor;\r\n\r\n\t editor.deselect(editor.multiselection.nodes);\r\n\r\n\t // duplicate the nodes\r\n\t var oldSelection = editor.getSelection();\r\n\t var afterNode = lastNode;\r\n\t var clones = nodes.map(function (node) {\r\n\t var clone = node.clone();\r\n\t parent.insertAfter(clone, afterNode);\r\n\t afterNode = clone;\r\n\t return clone;\r\n\t });\r\n\r\n\t // set selection to the duplicated nodes\r\n\t if (nodes.length === 1) {\r\n\t clones[0].focus();\r\n\t }\r\n\t else {\r\n\t editor.select(clones);\r\n\t }\r\n\t var newSelection = editor.getSelection();\r\n\r\n\t editor._onAction('duplicateNodes', {\r\n\t afterNode: lastNode,\r\n\t nodes: clones,\r\n\t parent: parent,\r\n\t oldSelection: oldSelection,\r\n\t newSelection: newSelection\r\n\t });\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Handle insert before event\r\n\t * @param {String} [field]\r\n\t * @param {*} [value]\r\n\t * @param {String} [type] Can be 'auto', 'array', 'object', or 'string'\r\n\t * @private\r\n\t */\r\n\tNode.prototype._onInsertBefore = function (field, value, type) {\r\n\t var oldSelection = this.editor.getSelection();\r\n\r\n\t var newNode = new Node(this.editor, {\r\n\t field: (field != undefined) ? field : '',\r\n\t value: (value != undefined) ? value : '',\r\n\t type: type\r\n\t });\r\n\t newNode.expand(true);\r\n\t this.parent.insertBefore(newNode, this);\r\n\t this.editor.highlighter.unhighlight();\r\n\t newNode.focus('field');\r\n\t var newSelection = this.editor.getSelection();\r\n\r\n\t this.editor._onAction('insertBeforeNodes', {\r\n\t nodes: [newNode],\r\n\t beforeNode: this,\r\n\t parent: this.parent,\r\n\t oldSelection: oldSelection,\r\n\t newSelection: newSelection\r\n\t });\r\n\t};\r\n\r\n\t/**\r\n\t * Handle insert after event\r\n\t * @param {String} [field]\r\n\t * @param {*} [value]\r\n\t * @param {String} [type] Can be 'auto', 'array', 'object', or 'string'\r\n\t * @private\r\n\t */\r\n\tNode.prototype._onInsertAfter = function (field, value, type) {\r\n\t var oldSelection = this.editor.getSelection();\r\n\r\n\t var newNode = new Node(this.editor, {\r\n\t field: (field != undefined) ? field : '',\r\n\t value: (value != undefined) ? value : '',\r\n\t type: type\r\n\t });\r\n\t newNode.expand(true);\r\n\t this.parent.insertAfter(newNode, this);\r\n\t this.editor.highlighter.unhighlight();\r\n\t newNode.focus('field');\r\n\t var newSelection = this.editor.getSelection();\r\n\r\n\t this.editor._onAction('insertAfterNodes', {\r\n\t nodes: [newNode],\r\n\t afterNode: this,\r\n\t parent: this.parent,\r\n\t oldSelection: oldSelection,\r\n\t newSelection: newSelection\r\n\t });\r\n\t};\r\n\r\n\t/**\r\n\t * Handle append event\r\n\t * @param {String} [field]\r\n\t * @param {*} [value]\r\n\t * @param {String} [type] Can be 'auto', 'array', 'object', or 'string'\r\n\t * @private\r\n\t */\r\n\tNode.prototype._onAppend = function (field, value, type) {\r\n\t var oldSelection = this.editor.getSelection();\r\n\r\n\t var newNode = new Node(this.editor, {\r\n\t field: (field != undefined) ? field : '',\r\n\t value: (value != undefined) ? value : '',\r\n\t type: type\r\n\t });\r\n\t newNode.expand(true);\r\n\t this.parent.appendChild(newNode);\r\n\t this.editor.highlighter.unhighlight();\r\n\t newNode.focus('field');\r\n\t var newSelection = this.editor.getSelection();\r\n\r\n\t this.editor._onAction('appendNodes', {\r\n\t nodes: [newNode],\r\n\t parent: this.parent,\r\n\t oldSelection: oldSelection,\r\n\t newSelection: newSelection\r\n\t });\r\n\t};\r\n\r\n\t/**\r\n\t * Change the type of the node's value\r\n\t * @param {String} newType\r\n\t * @private\r\n\t */\r\n\tNode.prototype._onChangeType = function (newType) {\r\n\t var oldType = this.type;\r\n\t if (newType != oldType) {\r\n\t var oldSelection = this.editor.getSelection();\r\n\t this.changeType(newType);\r\n\t var newSelection = this.editor.getSelection();\r\n\r\n\t this.editor._onAction('changeType', {\r\n\t node: this,\r\n\t oldType: oldType,\r\n\t newType: newType,\r\n\t oldSelection: oldSelection,\r\n\t newSelection: newSelection\r\n\t });\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Sort the child's of the node. Only applicable when the node has type 'object'\r\n\t * or 'array'.\r\n\t * @param {String} direction Sorting direction. Available values: \"asc\", \"desc\"\r\n\t * @private\r\n\t */\r\n\tNode.prototype.sort = function (direction) {\r\n\t if (!this._hasChilds()) {\r\n\t return;\r\n\t }\r\n\r\n\t var order = (direction == 'desc') ? -1 : 1;\r\n\t var prop = (this.type == 'array') ? 'value': 'field';\r\n\t this.hideChilds();\r\n\r\n\t var oldChilds = this.childs;\r\n\t var oldSortOrder = this.sortOrder;\r\n\r\n\t // copy the array (the old one will be kept for an undo action\r\n\t this.childs = this.childs.concat();\r\n\r\n\t // sort the arrays\r\n\t this.childs.sort(function (a, b) {\r\n\t return order * naturalSort(a[prop], b[prop]);\r\n\t });\r\n\t this.sortOrder = (order == 1) ? 'asc' : 'desc';\r\n\r\n\t this.editor._onAction('sort', {\r\n\t node: this,\r\n\t oldChilds: oldChilds,\r\n\t oldSort: oldSortOrder,\r\n\t newChilds: this.childs,\r\n\t newSort: this.sortOrder\r\n\t });\r\n\r\n\t this.showChilds();\r\n\t};\r\n\r\n\t/**\r\n\t * Create a table row with an append button.\r\n\t * @return {HTMLElement | undefined} buttonAppend or undefined when inapplicable\r\n\t */\r\n\tNode.prototype.getAppend = function () {\r\n\t if (!this.append) {\r\n\t this.append = new AppendNode(this.editor);\r\n\t this.append.setParent(this);\r\n\t }\r\n\t return this.append.getDom();\r\n\t};\r\n\r\n\t/**\r\n\t * Find the node from an event target\r\n\t * @param {Node} target\r\n\t * @return {Node | undefined} node or undefined when not found\r\n\t * @static\r\n\t */\r\n\tNode.getNodeFromTarget = function (target) {\r\n\t while (target) {\r\n\t if (target.node) {\r\n\t return target.node;\r\n\t }\r\n\t target = target.parentNode;\r\n\t }\r\n\r\n\t return undefined;\r\n\t};\r\n\r\n\t/**\r\n\t * Remove the focus of given nodes, and move the focus to the (a) node before,\r\n\t * (b) the node after, or (c) the parent node.\r\n\t * @param {Array. | Node} nodes\r\n\t */\r\n\tNode.blurNodes = function (nodes) {\r\n\t if (!Array.isArray(nodes)) {\r\n\t Node.blurNodes([nodes]);\r\n\t return;\r\n\t }\r\n\r\n\t var firstNode = nodes[0];\r\n\t var parent = firstNode.parent;\r\n\t var firstIndex = firstNode.getIndex();\r\n\r\n\t if (parent.childs[firstIndex + nodes.length]) {\r\n\t parent.childs[firstIndex + nodes.length].focus();\r\n\t }\r\n\t else if (parent.childs[firstIndex - 1]) {\r\n\t parent.childs[firstIndex - 1].focus();\r\n\t }\r\n\t else {\r\n\t parent.focus();\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Get the next sibling of current node\r\n\t * @return {Node} nextSibling\r\n\t * @private\r\n\t */\r\n\tNode.prototype._nextSibling = function () {\r\n\t var index = this.parent.childs.indexOf(this);\r\n\t return this.parent.childs[index + 1] || this.parent.append;\r\n\t};\r\n\r\n\t/**\r\n\t * Get the previously rendered node\r\n\t * @return {Node | null} previousNode\r\n\t * @private\r\n\t */\r\n\tNode.prototype._previousNode = function () {\r\n\t var prevNode = null;\r\n\t var dom = this.getDom();\r\n\t if (dom && dom.parentNode) {\r\n\t // find the previous field\r\n\t var prevDom = dom;\r\n\t do {\r\n\t prevDom = prevDom.previousSibling;\r\n\t prevNode = Node.getNodeFromTarget(prevDom);\r\n\t }\r\n\t while (prevDom && (prevNode instanceof AppendNode && !prevNode.isVisible()));\r\n\t }\r\n\t return prevNode;\r\n\t};\r\n\r\n\t/**\r\n\t * Get the next rendered node\r\n\t * @return {Node | null} nextNode\r\n\t * @private\r\n\t */\r\n\tNode.prototype._nextNode = function () {\r\n\t var nextNode = null;\r\n\t var dom = this.getDom();\r\n\t if (dom && dom.parentNode) {\r\n\t // find the previous field\r\n\t var nextDom = dom;\r\n\t do {\r\n\t nextDom = nextDom.nextSibling;\r\n\t nextNode = Node.getNodeFromTarget(nextDom);\r\n\t }\r\n\t while (nextDom && (nextNode instanceof AppendNode && !nextNode.isVisible()));\r\n\t }\r\n\r\n\t return nextNode;\r\n\t};\r\n\r\n\t/**\r\n\t * Get the first rendered node\r\n\t * @return {Node | null} firstNode\r\n\t * @private\r\n\t */\r\n\tNode.prototype._firstNode = function () {\r\n\t var firstNode = null;\r\n\t var dom = this.getDom();\r\n\t if (dom && dom.parentNode) {\r\n\t var firstDom = dom.parentNode.firstChild;\r\n\t firstNode = Node.getNodeFromTarget(firstDom);\r\n\t }\r\n\r\n\t return firstNode;\r\n\t};\r\n\r\n\t/**\r\n\t * Get the last rendered node\r\n\t * @return {Node | null} lastNode\r\n\t * @private\r\n\t */\r\n\tNode.prototype._lastNode = function () {\r\n\t var lastNode = null;\r\n\t var dom = this.getDom();\r\n\t if (dom && dom.parentNode) {\r\n\t var lastDom = dom.parentNode.lastChild;\r\n\t lastNode = Node.getNodeFromTarget(lastDom);\r\n\t while (lastDom && (lastNode instanceof AppendNode && !lastNode.isVisible())) {\r\n\t lastDom = lastDom.previousSibling;\r\n\t lastNode = Node.getNodeFromTarget(lastDom);\r\n\t }\r\n\t }\r\n\t return lastNode;\r\n\t};\r\n\r\n\t/**\r\n\t * Get the next element which can have focus.\r\n\t * @param {Element} elem\r\n\t * @return {Element | null} nextElem\r\n\t * @private\r\n\t */\r\n\tNode.prototype._previousElement = function (elem) {\r\n\t var dom = this.dom;\r\n\t // noinspection FallthroughInSwitchStatementJS\r\n\t switch (elem) {\r\n\t case dom.value:\r\n\t if (this.fieldEditable) {\r\n\t return dom.field;\r\n\t }\r\n\t // intentional fall through\r\n\t case dom.field:\r\n\t if (this._hasChilds()) {\r\n\t return dom.expand;\r\n\t }\r\n\t // intentional fall through\r\n\t case dom.expand:\r\n\t return dom.menu;\r\n\t case dom.menu:\r\n\t if (dom.drag) {\r\n\t return dom.drag;\r\n\t }\r\n\t // intentional fall through\r\n\t default:\r\n\t return null;\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Get the next element which can have focus.\r\n\t * @param {Element} elem\r\n\t * @return {Element | null} nextElem\r\n\t * @private\r\n\t */\r\n\tNode.prototype._nextElement = function (elem) {\r\n\t var dom = this.dom;\r\n\t // noinspection FallthroughInSwitchStatementJS\r\n\t switch (elem) {\r\n\t case dom.drag:\r\n\t return dom.menu;\r\n\t case dom.menu:\r\n\t if (this._hasChilds()) {\r\n\t return dom.expand;\r\n\t }\r\n\t // intentional fall through\r\n\t case dom.expand:\r\n\t if (this.fieldEditable) {\r\n\t return dom.field;\r\n\t }\r\n\t // intentional fall through\r\n\t case dom.field:\r\n\t if (!this._hasChilds()) {\r\n\t return dom.value;\r\n\t }\r\n\t default:\r\n\t return null;\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Get the dom name of given element. returns null if not found.\r\n\t * For example when element == dom.field, \"field\" is returned.\r\n\t * @param {Element} element\r\n\t * @return {String | null} elementName Available elements with name: 'drag',\r\n\t * 'menu', 'expand', 'field', 'value'\r\n\t * @private\r\n\t */\r\n\tNode.prototype._getElementName = function (element) {\r\n\t var dom = this.dom;\r\n\t for (var name in dom) {\r\n\t if (dom.hasOwnProperty(name)) {\r\n\t if (dom[name] == element) {\r\n\t return name;\r\n\t }\r\n\t }\r\n\t }\r\n\t return null;\r\n\t};\r\n\r\n\t/**\r\n\t * Test if this node has childs. This is the case when the node is an object\r\n\t * or array.\r\n\t * @return {boolean} hasChilds\r\n\t * @private\r\n\t */\r\n\tNode.prototype._hasChilds = function () {\r\n\t return this.type == 'array' || this.type == 'object';\r\n\t};\r\n\r\n\t// titles with explanation for the different types\r\n\tNode.TYPE_TITLES = {\r\n\t 'auto': 'Field type \"auto\". ' +\r\n\t 'The field type is automatically determined from the value ' +\r\n\t 'and can be a string, number, boolean, or null.',\r\n\t 'object': 'Field type \"object\". ' +\r\n\t 'An object contains an unordered set of key/value pairs.',\r\n\t 'array': 'Field type \"array\". ' +\r\n\t 'An array contains an ordered collection of values.',\r\n\t 'string': 'Field type \"string\". ' +\r\n\t 'Field type is not determined from the value, ' +\r\n\t 'but always returned as string.'\r\n\t};\r\n\r\n\t/**\r\n\t * Show a contextmenu for this node\r\n\t * @param {HTMLElement} anchor Anchor element to attach the context menu to\r\n\t * as sibling.\r\n\t * @param {function} [onClose] Callback method called when the context menu\r\n\t * is being closed.\r\n\t */\r\n\tNode.prototype.showContextMenu = function (anchor, onClose) {\r\n\t var node = this;\r\n\t var titles = Node.TYPE_TITLES;\r\n\t var items = [];\r\n\r\n\t if (this.editable.value) {\r\n\t items.push({\r\n\t text: 'Type',\r\n\t title: 'Change the type of this field',\r\n\t className: 'jsoneditor-type-' + this.type,\r\n\t submenu: [\r\n\t {\r\n\t text: 'Auto',\r\n\t className: 'jsoneditor-type-auto' +\r\n\t (this.type == 'auto' ? ' jsoneditor-selected' : ''),\r\n\t title: titles.auto,\r\n\t click: function () {\r\n\t node._onChangeType('auto');\r\n\t }\r\n\t },\r\n\t {\r\n\t text: 'Array',\r\n\t className: 'jsoneditor-type-array' +\r\n\t (this.type == 'array' ? ' jsoneditor-selected' : ''),\r\n\t title: titles.array,\r\n\t click: function () {\r\n\t node._onChangeType('array');\r\n\t }\r\n\t },\r\n\t {\r\n\t text: 'Object',\r\n\t className: 'jsoneditor-type-object' +\r\n\t (this.type == 'object' ? ' jsoneditor-selected' : ''),\r\n\t title: titles.object,\r\n\t click: function () {\r\n\t node._onChangeType('object');\r\n\t }\r\n\t },\r\n\t {\r\n\t text: 'String',\r\n\t className: 'jsoneditor-type-string' +\r\n\t (this.type == 'string' ? ' jsoneditor-selected' : ''),\r\n\t title: titles.string,\r\n\t click: function () {\r\n\t node._onChangeType('string');\r\n\t }\r\n\t }\r\n\t ]\r\n\t });\r\n\t }\r\n\r\n\t if (this._hasChilds()) {\r\n\t var direction = ((this.sortOrder == 'asc') ? 'desc': 'asc');\r\n\t items.push({\r\n\t text: 'Sort',\r\n\t title: 'Sort the childs of this ' + this.type,\r\n\t className: 'jsoneditor-sort-' + direction,\r\n\t click: function () {\r\n\t node.sort(direction);\r\n\t },\r\n\t submenu: [\r\n\t {\r\n\t text: 'Ascending',\r\n\t className: 'jsoneditor-sort-asc',\r\n\t title: 'Sort the childs of this ' + this.type + ' in ascending order',\r\n\t click: function () {\r\n\t node.sort('asc');\r\n\t }\r\n\t },\r\n\t {\r\n\t text: 'Descending',\r\n\t className: 'jsoneditor-sort-desc',\r\n\t title: 'Sort the childs of this ' + this.type +' in descending order',\r\n\t click: function () {\r\n\t node.sort('desc');\r\n\t }\r\n\t }\r\n\t ]\r\n\t });\r\n\t }\r\n\r\n\t if (this.parent && this.parent._hasChilds()) {\r\n\t if (items.length) {\r\n\t // create a separator\r\n\t items.push({\r\n\t 'type': 'separator'\r\n\t });\r\n\t }\r\n\r\n\t // create append button (for last child node only)\r\n\t var childs = node.parent.childs;\r\n\t if (node == childs[childs.length - 1]) {\r\n\t items.push({\r\n\t text: 'Append',\r\n\t title: 'Append a new field with type \\'auto\\' after this field (Ctrl+Shift+Ins)',\r\n\t submenuTitle: 'Select the type of the field to be appended',\r\n\t className: 'jsoneditor-append',\r\n\t click: function () {\r\n\t node._onAppend('', '', 'auto');\r\n\t },\r\n\t submenu: [\r\n\t {\r\n\t text: 'Auto',\r\n\t className: 'jsoneditor-type-auto',\r\n\t title: titles.auto,\r\n\t click: function () {\r\n\t node._onAppend('', '', 'auto');\r\n\t }\r\n\t },\r\n\t {\r\n\t text: 'Array',\r\n\t className: 'jsoneditor-type-array',\r\n\t title: titles.array,\r\n\t click: function () {\r\n\t node._onAppend('', []);\r\n\t }\r\n\t },\r\n\t {\r\n\t text: 'Object',\r\n\t className: 'jsoneditor-type-object',\r\n\t title: titles.object,\r\n\t click: function () {\r\n\t node._onAppend('', {});\r\n\t }\r\n\t },\r\n\t {\r\n\t text: 'String',\r\n\t className: 'jsoneditor-type-string',\r\n\t title: titles.string,\r\n\t click: function () {\r\n\t node._onAppend('', '', 'string');\r\n\t }\r\n\t }\r\n\t ]\r\n\t });\r\n\t }\r\n\r\n\t // create insert button\r\n\t items.push({\r\n\t text: 'Insert',\r\n\t title: 'Insert a new field with type \\'auto\\' before this field (Ctrl+Ins)',\r\n\t submenuTitle: 'Select the type of the field to be inserted',\r\n\t className: 'jsoneditor-insert',\r\n\t click: function () {\r\n\t node._onInsertBefore('', '', 'auto');\r\n\t },\r\n\t submenu: [\r\n\t {\r\n\t text: 'Auto',\r\n\t className: 'jsoneditor-type-auto',\r\n\t title: titles.auto,\r\n\t click: function () {\r\n\t node._onInsertBefore('', '', 'auto');\r\n\t }\r\n\t },\r\n\t {\r\n\t text: 'Array',\r\n\t className: 'jsoneditor-type-array',\r\n\t title: titles.array,\r\n\t click: function () {\r\n\t node._onInsertBefore('', []);\r\n\t }\r\n\t },\r\n\t {\r\n\t text: 'Object',\r\n\t className: 'jsoneditor-type-object',\r\n\t title: titles.object,\r\n\t click: function () {\r\n\t node._onInsertBefore('', {});\r\n\t }\r\n\t },\r\n\t {\r\n\t text: 'String',\r\n\t className: 'jsoneditor-type-string',\r\n\t title: titles.string,\r\n\t click: function () {\r\n\t node._onInsertBefore('', '', 'string');\r\n\t }\r\n\t }\r\n\t ]\r\n\t });\r\n\r\n\t if (this.editable.field) {\r\n\t // create duplicate button\r\n\t items.push({\r\n\t text: 'Duplicate',\r\n\t title: 'Duplicate this field (Ctrl+D)',\r\n\t className: 'jsoneditor-duplicate',\r\n\t click: function () {\r\n\t Node.onDuplicate(node);\r\n\t }\r\n\t });\r\n\r\n\t // create remove button\r\n\t items.push({\r\n\t text: 'Remove',\r\n\t title: 'Remove this field (Ctrl+Del)',\r\n\t className: 'jsoneditor-remove',\r\n\t click: function () {\r\n\t Node.onRemove(node);\r\n\t }\r\n\t });\r\n\t }\r\n\t }\r\n\r\n\t var menu = new ContextMenu(items, {close: onClose});\r\n\t menu.show(anchor, this.editor.content);\r\n\t};\r\n\r\n\t/**\r\n\t * get the type of a value\r\n\t * @param {*} value\r\n\t * @return {String} type Can be 'object', 'array', 'string', 'auto'\r\n\t * @private\r\n\t */\r\n\tNode.prototype._getType = function(value) {\r\n\t if (value instanceof Array) {\r\n\t return 'array';\r\n\t }\r\n\t if (value instanceof Object) {\r\n\t return 'object';\r\n\t }\r\n\t if (typeof(value) == 'string' && typeof(this._stringCast(value)) != 'string') {\r\n\t return 'string';\r\n\t }\r\n\r\n\t return 'auto';\r\n\t};\r\n\r\n\t/**\r\n\t * cast contents of a string to the correct type. This can be a string,\r\n\t * a number, a boolean, etc\r\n\t * @param {String} str\r\n\t * @return {*} castedStr\r\n\t * @private\r\n\t */\r\n\tNode.prototype._stringCast = function(str) {\r\n\t var lower = str.toLowerCase(),\r\n\t num = Number(str), // will nicely fail with '123ab'\r\n\t numFloat = parseFloat(str); // will nicely fail with ' '\r\n\r\n\t if (str == '') {\r\n\t return '';\r\n\t }\r\n\t else if (lower == 'null') {\r\n\t return null;\r\n\t }\r\n\t else if (lower == 'true') {\r\n\t return true;\r\n\t }\r\n\t else if (lower == 'false') {\r\n\t return false;\r\n\t }\r\n\t else if (!isNaN(num) && !isNaN(numFloat)) {\r\n\t return num;\r\n\t }\r\n\t else {\r\n\t return str;\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * escape a text, such that it can be displayed safely in an HTML element\r\n\t * @param {String} text\r\n\t * @return {String} escapedText\r\n\t * @private\r\n\t */\r\n\tNode.prototype._escapeHTML = function (text) {\r\n\t if (typeof text !== 'string') {\r\n\t return String(text);\r\n\t }\r\n\t else {\r\n\t var htmlEscaped = String(text)\r\n\t .replace(/&/g, '&') // must be replaced first!\r\n\t .replace(//g, '>')\r\n\t .replace(/ /g, '  ') // replace double space with an nbsp and space\r\n\t .replace(/^ /, ' ') // space at start\r\n\t .replace(/ $/, ' '); // space at end\r\n\r\n\t var json = JSON.stringify(htmlEscaped);\r\n\t var html = json.substring(1, json.length - 1);\r\n\t if (this.editor.options.escapeUnicode === true) {\r\n\t html = util.escapeUnicodeChars(html);\r\n\t }\r\n\t return html;\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * unescape a string.\r\n\t * @param {String} escapedText\r\n\t * @return {String} text\r\n\t * @private\r\n\t */\r\n\tNode.prototype._unescapeHTML = function (escapedText) {\r\n\t var json = '\"' + this._escapeJSON(escapedText) + '\"';\r\n\t var htmlEscaped = util.parse(json);\r\n\r\n\t return htmlEscaped\r\n\t .replace(/</g, '<')\r\n\t .replace(/>/g, '>')\r\n\t .replace(/ |\\u00A0/g, ' ')\r\n\t .replace(/&/g, '&'); // must be replaced last\r\n\t};\r\n\r\n\t/**\r\n\t * escape a text to make it a valid JSON string. The method will:\r\n\t * - replace unescaped double quotes with '\\\"'\r\n\t * - replace unescaped backslash with '\\\\'\r\n\t * - replace returns with '\\n'\r\n\t * @param {String} text\r\n\t * @return {String} escapedText\r\n\t * @private\r\n\t */\r\n\tNode.prototype._escapeJSON = function (text) {\r\n\t // TODO: replace with some smart regex (only when a new solution is faster!)\r\n\t var escaped = '';\r\n\t var i = 0;\r\n\t while (i < text.length) {\r\n\t var c = text.charAt(i);\r\n\t if (c == '\\n') {\r\n\t escaped += '\\\\n';\r\n\t }\r\n\t else if (c == '\\\\') {\r\n\t escaped += c;\r\n\t i++;\r\n\r\n\t c = text.charAt(i);\r\n\t if (c === '' || '\"\\\\/bfnrtu'.indexOf(c) == -1) {\r\n\t escaped += '\\\\'; // no valid escape character\r\n\t }\r\n\t escaped += c;\r\n\t }\r\n\t else if (c == '\"') {\r\n\t escaped += '\\\\\"';\r\n\t }\r\n\t else {\r\n\t escaped += c;\r\n\t }\r\n\t i++;\r\n\t }\r\n\r\n\t return escaped;\r\n\t};\r\n\r\n\t// TODO: find a nicer solution to resolve this circular dependency between Node and AppendNode\r\n\tvar AppendNode = appendNodeFactory(Node);\r\n\r\n\tmodule.exports = Node;\r\n\r\n\r\n/***/ },\r\n/* 59 */\r\n/***/ function(module, exports) {\r\n\r\n\t/*\r\n\t * Natural Sort algorithm for Javascript - Version 0.7 - Released under MIT license\r\n\t * Author: Jim Palmer (based on chunking idea from Dave Koelle)\r\n\t */\r\n\t/*jshint unused:false */\r\n\tmodule.exports = function naturalSort (a, b) {\r\n\t\t\"use strict\";\r\n\t\tvar re = /(^([+\\-]?(?:0|[1-9]\\d*)(?:\\.\\d*)?(?:[eE][+\\-]?\\d+)?)?$|^0x[0-9a-f]+$|\\d+)/gi,\r\n\t\t\tsre = /(^[ ]*|[ ]*$)/g,\r\n\t\t\tdre = /(^([\\w ]+,?[\\w ]+)?[\\w ]+,?[\\w ]+\\d+:\\d+(:\\d+)?[\\w ]?|^\\d{1,4}[\\/\\-]\\d{1,4}[\\/\\-]\\d{1,4}|^\\w+, \\w+ \\d+, \\d{4})/,\r\n\t\t\thre = /^0x[0-9a-f]+$/i,\r\n\t\t\tore = /^0/,\r\n\t\t\ti = function(s) { return naturalSort.insensitive && ('' + s).toLowerCase() || '' + s; },\r\n\t\t\t// convert all to strings strip whitespace\r\n\t\t\tx = i(a).replace(sre, '') || '',\r\n\t\t\ty = i(b).replace(sre, '') || '',\r\n\t\t\t// chunk/tokenize\r\n\t\t\txN = x.replace(re, '\\0$1\\0').replace(/\\0$/,'').replace(/^\\0/,'').split('\\0'),\r\n\t\t\tyN = y.replace(re, '\\0$1\\0').replace(/\\0$/,'').replace(/^\\0/,'').split('\\0'),\r\n\t\t\t// numeric, hex or date detection\r\n\t\t\txD = parseInt(x.match(hre), 16) || (xN.length !== 1 && x.match(dre) && Date.parse(x)),\r\n\t\t\tyD = parseInt(y.match(hre), 16) || xD && y.match(dre) && Date.parse(y) || null,\r\n\t\t\toFxNcL, oFyNcL;\r\n\t\t// first try and sort Hex codes or Dates\r\n\t\tif (yD) {\r\n\t\t\tif ( xD < yD ) { return -1; }\r\n\t\t\telse if ( xD > yD ) { return 1; }\r\n\t\t}\r\n\t\t// natural sorting through split numeric strings and default strings\r\n\t\tfor(var cLoc=0, numS=Math.max(xN.length, yN.length); cLoc < numS; cLoc++) {\r\n\t\t\t// find floats not starting with '0', string or 0 if not defined (Clint Priest)\r\n\t\t\toFxNcL = !(xN[cLoc] || '').match(ore) && parseFloat(xN[cLoc]) || xN[cLoc] || 0;\r\n\t\t\toFyNcL = !(yN[cLoc] || '').match(ore) && parseFloat(yN[cLoc]) || yN[cLoc] || 0;\r\n\t\t\t// handle numeric vs string comparison - number < string - (Kyle Adams)\r\n\t\t\tif (isNaN(oFxNcL) !== isNaN(oFyNcL)) { return (isNaN(oFxNcL)) ? 1 : -1; }\r\n\t\t\t// rely on string comparison if different types - i.e. '02' < 2 != '02' < '2'\r\n\t\t\telse if (typeof oFxNcL !== typeof oFyNcL) {\r\n\t\t\t\toFxNcL += '';\r\n\t\t\t\toFyNcL += '';\r\n\t\t\t}\r\n\t\t\tif (oFxNcL < oFyNcL) { return -1; }\r\n\t\t\tif (oFxNcL > oFyNcL) { return 1; }\r\n\t\t}\r\n\t\treturn 0;\r\n\t};\r\n\r\n\r\n/***/ },\r\n/* 60 */\r\n/***/ function(module, exports, __webpack_require__) {\r\n\r\n\t'use strict';\r\n\r\n\tvar util = __webpack_require__(54);\r\n\tvar ContextMenu = __webpack_require__(57);\r\n\r\n\t/**\r\n\t * A factory function to create an AppendNode, which depends on a Node\r\n\t * @param {Node} Node\r\n\t */\r\n\tfunction appendNodeFactory(Node) {\r\n\t /**\r\n\t * @constructor AppendNode\r\n\t * @extends Node\r\n\t * @param {TreeEditor} editor\r\n\t * Create a new AppendNode. This is a special node which is created at the\r\n\t * end of the list with childs for an object or array\r\n\t */\r\n\t function AppendNode (editor) {\r\n\t /** @type {TreeEditor} */\r\n\t this.editor = editor;\r\n\t this.dom = {};\r\n\t }\r\n\r\n\t AppendNode.prototype = new Node();\r\n\r\n\t /**\r\n\t * Return a table row with an append button.\r\n\t * @return {Element} dom TR element\r\n\t */\r\n\t AppendNode.prototype.getDom = function () {\r\n\t // TODO: implement a new solution for the append node\r\n\t var dom = this.dom;\r\n\r\n\t if (dom.tr) {\r\n\t return dom.tr;\r\n\t }\r\n\r\n\t this._updateEditability();\r\n\r\n\t // a row for the append button\r\n\t var trAppend = document.createElement('tr');\r\n\t trAppend.node = this;\r\n\t dom.tr = trAppend;\r\n\r\n\t // TODO: consistent naming\r\n\r\n\t if (this.editor.options.mode === 'tree') {\r\n\t // a cell for the dragarea column\r\n\t dom.tdDrag = document.createElement('td');\r\n\r\n\t // create context menu\r\n\t var tdMenu = document.createElement('td');\r\n\t dom.tdMenu = tdMenu;\r\n\t var menu = document.createElement('button');\r\n\t menu.type = 'button';\r\n\t menu.className = 'jsoneditor-contextmenu';\r\n\t menu.title = 'Click to open the actions menu (Ctrl+M)';\r\n\t dom.menu = menu;\r\n\t tdMenu.appendChild(dom.menu);\r\n\t }\r\n\r\n\t // a cell for the contents (showing text 'empty')\r\n\t var tdAppend = document.createElement('td');\r\n\t var domText = document.createElement('div');\r\n\t domText.innerHTML = '(empty)';\r\n\t domText.className = 'jsoneditor-readonly';\r\n\t tdAppend.appendChild(domText);\r\n\t dom.td = tdAppend;\r\n\t dom.text = domText;\r\n\r\n\t this.updateDom();\r\n\r\n\t return trAppend;\r\n\t };\r\n\r\n\t /**\r\n\t * Update the HTML dom of the Node\r\n\t */\r\n\t AppendNode.prototype.updateDom = function () {\r\n\t var dom = this.dom;\r\n\t var tdAppend = dom.td;\r\n\t if (tdAppend) {\r\n\t tdAppend.style.paddingLeft = (this.getLevel() * 24 + 26) + 'px';\r\n\t // TODO: not so nice hard coded offset\r\n\t }\r\n\r\n\t var domText = dom.text;\r\n\t if (domText) {\r\n\t domText.innerHTML = '(empty ' + this.parent.type + ')';\r\n\t }\r\n\r\n\t // attach or detach the contents of the append node:\r\n\t // hide when the parent has childs, show when the parent has no childs\r\n\t var trAppend = dom.tr;\r\n\t if (!this.isVisible()) {\r\n\t if (dom.tr.firstChild) {\r\n\t if (dom.tdDrag) {\r\n\t trAppend.removeChild(dom.tdDrag);\r\n\t }\r\n\t if (dom.tdMenu) {\r\n\t trAppend.removeChild(dom.tdMenu);\r\n\t }\r\n\t trAppend.removeChild(tdAppend);\r\n\t }\r\n\t }\r\n\t else {\r\n\t if (!dom.tr.firstChild) {\r\n\t if (dom.tdDrag) {\r\n\t trAppend.appendChild(dom.tdDrag);\r\n\t }\r\n\t if (dom.tdMenu) {\r\n\t trAppend.appendChild(dom.tdMenu);\r\n\t }\r\n\t trAppend.appendChild(tdAppend);\r\n\t }\r\n\t }\r\n\t };\r\n\r\n\t /**\r\n\t * Check whether the AppendNode is currently visible.\r\n\t * the AppendNode is visible when its parent has no childs (i.e. is empty).\r\n\t * @return {boolean} isVisible\r\n\t */\r\n\t AppendNode.prototype.isVisible = function () {\r\n\t return (this.parent.childs.length == 0);\r\n\t };\r\n\r\n\t /**\r\n\t * Show a contextmenu for this node\r\n\t * @param {HTMLElement} anchor The element to attach the menu to.\r\n\t * @param {function} [onClose] Callback method called when the context menu\r\n\t * is being closed.\r\n\t */\r\n\t AppendNode.prototype.showContextMenu = function (anchor, onClose) {\r\n\t var node = this;\r\n\t var titles = Node.TYPE_TITLES;\r\n\t var items = [\r\n\t // create append button\r\n\t {\r\n\t 'text': 'Append',\r\n\t 'title': 'Append a new field with type \\'auto\\' (Ctrl+Shift+Ins)',\r\n\t 'submenuTitle': 'Select the type of the field to be appended',\r\n\t 'className': 'jsoneditor-insert',\r\n\t 'click': function () {\r\n\t node._onAppend('', '', 'auto');\r\n\t },\r\n\t 'submenu': [\r\n\t {\r\n\t 'text': 'Auto',\r\n\t 'className': 'jsoneditor-type-auto',\r\n\t 'title': titles.auto,\r\n\t 'click': function () {\r\n\t node._onAppend('', '', 'auto');\r\n\t }\r\n\t },\r\n\t {\r\n\t 'text': 'Array',\r\n\t 'className': 'jsoneditor-type-array',\r\n\t 'title': titles.array,\r\n\t 'click': function () {\r\n\t node._onAppend('', []);\r\n\t }\r\n\t },\r\n\t {\r\n\t 'text': 'Object',\r\n\t 'className': 'jsoneditor-type-object',\r\n\t 'title': titles.object,\r\n\t 'click': function () {\r\n\t node._onAppend('', {});\r\n\t }\r\n\t },\r\n\t {\r\n\t 'text': 'String',\r\n\t 'className': 'jsoneditor-type-string',\r\n\t 'title': titles.string,\r\n\t 'click': function () {\r\n\t node._onAppend('', '', 'string');\r\n\t }\r\n\t }\r\n\t ]\r\n\t }\r\n\t ];\r\n\r\n\t var menu = new ContextMenu(items, {close: onClose});\r\n\t menu.show(anchor, this.editor.content);\r\n\t };\r\n\r\n\t /**\r\n\t * Handle an event. The event is catched centrally by the editor\r\n\t * @param {Event} event\r\n\t */\r\n\t AppendNode.prototype.onEvent = function (event) {\r\n\t var type = event.type;\r\n\t var target = event.target || event.srcElement;\r\n\t var dom = this.dom;\r\n\r\n\t // highlight the append nodes parent\r\n\t var menu = dom.menu;\r\n\t if (target == menu) {\r\n\t if (type == 'mouseover') {\r\n\t this.editor.highlighter.highlight(this.parent);\r\n\t }\r\n\t else if (type == 'mouseout') {\r\n\t this.editor.highlighter.unhighlight();\r\n\t }\r\n\t }\r\n\r\n\t // context menu events\r\n\t if (type == 'click' && target == dom.menu) {\r\n\t var highlighter = this.editor.highlighter;\r\n\t highlighter.highlight(this.parent);\r\n\t highlighter.lock();\r\n\t util.addClassName(dom.menu, 'jsoneditor-selected');\r\n\t this.showContextMenu(dom.menu, function () {\r\n\t util.removeClassName(dom.menu, 'jsoneditor-selected');\r\n\t highlighter.unlock();\r\n\t highlighter.unhighlight();\r\n\t });\r\n\t }\r\n\r\n\t if (type == 'keydown') {\r\n\t this.onKeyDown(event);\r\n\t }\r\n\t };\r\n\r\n\t return AppendNode;\r\n\t}\r\n\r\n\tmodule.exports = appendNodeFactory;\r\n\r\n\r\n/***/ },\r\n/* 61 */\r\n/***/ function(module, exports, __webpack_require__) {\r\n\r\n\t'use strict';\r\n\r\n\tvar ContextMenu = __webpack_require__(57);\r\n\r\n\t/**\r\n\t * Create a select box to be used in the editor menu's, which allows to switch mode\r\n\t * @param {HTMLElement} container\r\n\t * @param {String[]} modes Available modes: 'code', 'form', 'text', 'tree', 'view'\r\n\t * @param {String} current Available modes: 'code', 'form', 'text', 'tree', 'view'\r\n\t * @param {function(mode: string)} onSwitch Callback invoked on switch\r\n\t * @constructor\r\n\t */\r\n\tfunction ModeSwitcher(container, modes, current, onSwitch) {\r\n\t // available modes\r\n\t var availableModes = {\r\n\t code: {\r\n\t 'text': 'Code',\r\n\t 'title': 'Switch to code highlighter',\r\n\t 'click': function () {\r\n\t onSwitch('code')\r\n\t }\r\n\t },\r\n\t form: {\r\n\t 'text': 'Form',\r\n\t 'title': 'Switch to form editor',\r\n\t 'click': function () {\r\n\t onSwitch('form');\r\n\t }\r\n\t },\r\n\t text: {\r\n\t 'text': 'Text',\r\n\t 'title': 'Switch to plain text editor',\r\n\t 'click': function () {\r\n\t onSwitch('text');\r\n\t }\r\n\t },\r\n\t tree: {\r\n\t 'text': 'Tree',\r\n\t 'title': 'Switch to tree editor',\r\n\t 'click': function () {\r\n\t onSwitch('tree');\r\n\t }\r\n\t },\r\n\t view: {\r\n\t 'text': 'View',\r\n\t 'title': 'Switch to tree view',\r\n\t 'click': function () {\r\n\t onSwitch('view');\r\n\t }\r\n\t }\r\n\t };\r\n\r\n\t // list the selected modes\r\n\t var items = [];\r\n\t for (var i = 0; i < modes.length; i++) {\r\n\t var mode = modes[i];\r\n\t var item = availableModes[mode];\r\n\t if (!item) {\r\n\t throw new Error('Unknown mode \"' + mode + '\"');\r\n\t }\r\n\r\n\t item.className = 'jsoneditor-type-modes' + ((current == mode) ? ' jsoneditor-selected' : '');\r\n\t items.push(item);\r\n\t }\r\n\r\n\t // retrieve the title of current mode\r\n\t var currentMode = availableModes[current];\r\n\t if (!currentMode) {\r\n\t throw new Error('Unknown mode \"' + current + '\"');\r\n\t }\r\n\t var currentTitle = currentMode.text;\r\n\r\n\t // create the html element\r\n\t var box = document.createElement('button');\r\n\t box.type = 'button';\r\n\t box.className = 'jsoneditor-modes jsoneditor-separator';\r\n\t box.innerHTML = currentTitle + ' ▾';\r\n\t box.title = 'Switch editor mode';\r\n\t box.onclick = function () {\r\n\t var menu = new ContextMenu(items);\r\n\t menu.show(box);\r\n\t };\r\n\r\n\t var frame = document.createElement('div');\r\n\t frame.className = 'jsoneditor-modes';\r\n\t frame.style.position = 'relative';\r\n\t frame.appendChild(box);\r\n\r\n\t container.appendChild(frame);\r\n\r\n\t this.dom = {\r\n\t container: container,\r\n\t box: box,\r\n\t frame: frame\r\n\t };\r\n\t}\r\n\r\n\t/**\r\n\t * Set focus to switcher\r\n\t */\r\n\tModeSwitcher.prototype.focus = function () {\r\n\t this.dom.box.focus();\r\n\t};\r\n\r\n\t/**\r\n\t * Destroy the ModeSwitcher, remove from DOM\r\n\t */\r\n\tModeSwitcher.prototype.destroy = function () {\r\n\t if (this.dom && this.dom.frame && this.dom.frame.parentNode) {\r\n\t this.dom.frame.parentNode.removeChild(this.dom.frame);\r\n\t }\r\n\t this.dom = null;\r\n\t};\r\n\r\n\tmodule.exports = ModeSwitcher;\r\n\r\n\r\n/***/ },\r\n/* 62 */\r\n/***/ function(module, exports, __webpack_require__) {\r\n\r\n\t'use strict';\r\n\r\n\tvar ace;\r\n\ttry {\r\n\t ace = __webpack_require__(63);\r\n\t}\r\n\tcatch (err) {\r\n\t // failed to load ace, no problem, we will fall back to plain text\r\n\t}\r\n\r\n\tvar ModeSwitcher = __webpack_require__(61);\r\n\tvar util = __webpack_require__(54);\r\n\r\n\t// create a mixin with the functions for text mode\r\n\tvar textmode = {};\r\n\r\n\tvar MAX_ERRORS = 3; // maximum number of displayed errors at the bottom\r\n\r\n\tvar DEFAULT_THEME = 'ace/theme/jsoneditor';\r\n\r\n\t/**\r\n\t * Create a text editor\r\n\t * @param {Element} container\r\n\t * @param {Object} [options] Object with options. available options:\r\n\t * {String} mode Available values:\r\n\t * \"text\" (default)\r\n\t * or \"code\".\r\n\t * {Number} indentation Number of indentation\r\n\t * spaces. 2 by default.\r\n\t * {function} onChange Callback method\r\n\t * triggered on change\r\n\t * {function} onModeChange Callback method\r\n\t * triggered after setMode\r\n\t * {Object} ace A custom instance of\r\n\t * Ace editor.\r\n\t * {boolean} escapeUnicode If true, unicode\r\n\t * characters are escaped.\r\n\t * false by default.\r\n\t * @private\r\n\t */\r\n\ttextmode.create = function (container, options) {\r\n\t // read options\r\n\t options = options || {};\r\n\t this.options = options;\r\n\r\n\t // indentation\r\n\t if (options.indentation) {\r\n\t this.indentation = Number(options.indentation);\r\n\t }\r\n\t else {\r\n\t this.indentation = 2; // number of spaces\r\n\t }\r\n\r\n\t // grab ace from options if provided\r\n\t var _ace = options.ace ? options.ace : ace;\r\n\r\n\t // determine mode\r\n\t this.mode = (options.mode == 'code') ? 'code' : 'text';\r\n\t if (this.mode == 'code') {\r\n\t // verify whether Ace editor is available and supported\r\n\t if (typeof _ace === 'undefined') {\r\n\t this.mode = 'text';\r\n\t console.warn('Failed to load Ace editor, falling back to plain text mode. Please use a JSONEditor bundle including Ace, or pass Ace as via the configuration option `ace`.');\r\n\t }\r\n\t }\r\n\r\n\t // determine theme\r\n\t this.theme = options.theme || DEFAULT_THEME;\r\n\t if (this.theme === DEFAULT_THEME && window.ace) {\r\n\t __webpack_require__(70);\r\n\t }\r\n\r\n\t var me = this;\r\n\t this.container = container;\r\n\t this.dom = {};\r\n\t this.aceEditor = undefined; // ace code editor\r\n\t this.textarea = undefined; // plain text editor (fallback when Ace is not available)\r\n\t this.validateSchema = null;\r\n\r\n\t // create a debounced validate function\r\n\t this._debouncedValidate = util.debounce(this.validate.bind(this), this.DEBOUNCE_INTERVAL);\r\n\r\n\t this.width = container.clientWidth;\r\n\t this.height = container.clientHeight;\r\n\r\n\t this.frame = document.createElement('div');\r\n\t this.frame.className = 'jsoneditor jsoneditor-mode-' + this.options.mode;\r\n\t this.frame.onclick = function (event) {\r\n\t // prevent default submit action when the editor is located inside a form\r\n\t event.preventDefault();\r\n\t };\r\n\t this.frame.onkeydown = function (event) {\r\n\t me._onKeyDown(event);\r\n\t };\r\n\r\n\t // create menu\r\n\t this.menu = document.createElement('div');\r\n\t this.menu.className = 'jsoneditor-menu';\r\n\t this.frame.appendChild(this.menu);\r\n\r\n\t // create format button\r\n\t var buttonFormat = document.createElement('button');\r\n\t buttonFormat.type = 'button';\r\n\t buttonFormat.className = 'jsoneditor-format';\r\n\t buttonFormat.title = 'Format JSON data, with proper indentation and line feeds (Ctrl+\\\\)';\r\n\t this.menu.appendChild(buttonFormat);\r\n\t buttonFormat.onclick = function () {\r\n\t try {\r\n\t me.format();\r\n\t me._onChange();\r\n\t }\r\n\t catch (err) {\r\n\t me._onError(err);\r\n\t }\r\n\t };\r\n\r\n\t // create compact button\r\n\t var buttonCompact = document.createElement('button');\r\n\t buttonCompact.type = 'button';\r\n\t buttonCompact.className = 'jsoneditor-compact';\r\n\t buttonCompact.title = 'Compact JSON data, remove all whitespaces (Ctrl+Shift+\\\\)';\r\n\t this.menu.appendChild(buttonCompact);\r\n\t buttonCompact.onclick = function () {\r\n\t try {\r\n\t me.compact();\r\n\t me._onChange();\r\n\t }\r\n\t catch (err) {\r\n\t me._onError(err);\r\n\t }\r\n\t };\r\n\r\n\t // create mode box\r\n\t if (this.options && this.options.modes && this.options.modes.length) {\r\n\t this.modeSwitcher = new ModeSwitcher(this.menu, this.options.modes, this.options.mode, function onSwitch(mode) {\r\n\t // switch mode and restore focus\r\n\t me.setMode(mode);\r\n\t me.modeSwitcher.focus();\r\n\t });\r\n\t }\r\n\r\n\t this.content = document.createElement('div');\r\n\t this.content.className = 'jsoneditor-outer';\r\n\t this.frame.appendChild(this.content);\r\n\r\n\t this.container.appendChild(this.frame);\r\n\r\n\t if (this.mode == 'code') {\r\n\t this.editorDom = document.createElement('div');\r\n\t this.editorDom.style.height = '100%'; // TODO: move to css\r\n\t this.editorDom.style.width = '100%'; // TODO: move to css\r\n\t this.content.appendChild(this.editorDom);\r\n\r\n\t var aceEditor = _ace.edit(this.editorDom);\r\n\t aceEditor.$blockScrolling = Infinity;\r\n\t aceEditor.setTheme(this.theme);\r\n\t aceEditor.setShowPrintMargin(false);\r\n\t aceEditor.setFontSize(13);\r\n\t aceEditor.getSession().setMode('ace/mode/json');\r\n\t aceEditor.getSession().setTabSize(this.indentation);\r\n\t aceEditor.getSession().setUseSoftTabs(true);\r\n\t aceEditor.getSession().setUseWrapMode(true);\r\n\t aceEditor.commands.bindKey('Ctrl-L', null); // disable Ctrl+L (is used by the browser to select the address bar)\r\n\t aceEditor.commands.bindKey('Command-L', null); // disable Ctrl+L (is used by the browser to select the address bar)\r\n\t this.aceEditor = aceEditor;\r\n\r\n\t // TODO: deprecated since v5.0.0. Cleanup backward compatibility some day\r\n\t if (!this.hasOwnProperty('editor')) {\r\n\t Object.defineProperty(this, 'editor', {\r\n\t get: function () {\r\n\t console.warn('Property \"editor\" has been renamed to \"aceEditor\".');\r\n\t return me.aceEditor;\r\n\t },\r\n\t set: function (aceEditor) {\r\n\t console.warn('Property \"editor\" has been renamed to \"aceEditor\".');\r\n\t me.aceEditor = aceEditor;\r\n\t }\r\n\t });\r\n\t }\r\n\r\n\t var poweredBy = document.createElement('a');\r\n\t poweredBy.appendChild(document.createTextNode('powered by ace'));\r\n\t poweredBy.href = 'http://ace.ajax.org';\r\n\t poweredBy.target = '_blank';\r\n\t poweredBy.className = 'jsoneditor-poweredBy';\r\n\t poweredBy.onclick = function () {\r\n\t // TODO: this anchor falls below the margin of the content,\r\n\t // therefore the normal a.href does not work. We use a click event\r\n\t // for now, but this should be fixed.\r\n\t window.open(poweredBy.href, poweredBy.target);\r\n\t };\r\n\t this.menu.appendChild(poweredBy);\r\n\r\n\t // register onchange event\r\n\t aceEditor.on('change', this._onChange.bind(this));\r\n\t }\r\n\t else {\r\n\t // load a plain text textarea\r\n\t var textarea = document.createElement('textarea');\r\n\t textarea.className = 'jsoneditor-text';\r\n\t textarea.spellcheck = false;\r\n\t this.content.appendChild(textarea);\r\n\t this.textarea = textarea;\r\n\r\n\t // register onchange event\r\n\t if (this.textarea.oninput === null) {\r\n\t this.textarea.oninput = this._onChange.bind(this);\r\n\t }\r\n\t else {\r\n\t // oninput is undefined. For IE8-\r\n\t this.textarea.onchange = this._onChange.bind(this);\r\n\t }\r\n\t }\r\n\r\n\t this.setSchema(this.options.schema);\r\n\t};\r\n\r\n\t/**\r\n\t * Handle a change:\r\n\t * - Validate JSON schema\r\n\t * - Send a callback to the onChange listener if provided\r\n\t * @private\r\n\t */\r\n\ttextmode._onChange = function () {\r\n\t // validate JSON schema (if configured)\r\n\t this._debouncedValidate();\r\n\r\n\t // trigger the onChange callback\r\n\t if (this.options.onChange) {\r\n\t try {\r\n\t this.options.onChange();\r\n\t }\r\n\t catch (err) {\r\n\t console.error('Error in onChange callback: ', err);\r\n\t }\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Event handler for keydown. Handles shortcut keys\r\n\t * @param {Event} event\r\n\t * @private\r\n\t */\r\n\ttextmode._onKeyDown = function (event) {\r\n\t var keynum = event.which || event.keyCode;\r\n\t var handled = false;\r\n\r\n\t if (keynum == 220 && event.ctrlKey) {\r\n\t if (event.shiftKey) { // Ctrl+Shift+\\\r\n\t this.compact();\r\n\t this._onChange();\r\n\t }\r\n\t else { // Ctrl+\\\r\n\t this.format();\r\n\t this._onChange();\r\n\t }\r\n\t handled = true;\r\n\t }\r\n\r\n\t if (handled) {\r\n\t event.preventDefault();\r\n\t event.stopPropagation();\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Destroy the editor. Clean up DOM, event listeners, and web workers.\r\n\t */\r\n\ttextmode.destroy = function () {\r\n\t // remove old ace editor\r\n\t if (this.aceEditor) {\r\n\t this.aceEditor.destroy();\r\n\t this.aceEditor = null;\r\n\t }\r\n\r\n\t if (this.frame && this.container && this.frame.parentNode == this.container) {\r\n\t this.container.removeChild(this.frame);\r\n\t }\r\n\r\n\t if (this.modeSwitcher) {\r\n\t this.modeSwitcher.destroy();\r\n\t this.modeSwitcher = null;\r\n\t }\r\n\r\n\t this.textarea = null;\r\n\t \r\n\t this._debouncedValidate = null;\r\n\t};\r\n\r\n\t/**\r\n\t * Compact the code in the formatter\r\n\t */\r\n\ttextmode.compact = function () {\r\n\t var json = this.get();\r\n\t var text = JSON.stringify(json);\r\n\t this.setText(text);\r\n\t};\r\n\r\n\t/**\r\n\t * Format the code in the formatter\r\n\t */\r\n\ttextmode.format = function () {\r\n\t var json = this.get();\r\n\t var text = JSON.stringify(json, null, this.indentation);\r\n\t this.setText(text);\r\n\t};\r\n\r\n\t/**\r\n\t * Set focus to the formatter\r\n\t */\r\n\ttextmode.focus = function () {\r\n\t if (this.textarea) {\r\n\t this.textarea.focus();\r\n\t }\r\n\t if (this.aceEditor) {\r\n\t this.aceEditor.focus();\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Resize the formatter\r\n\t */\r\n\ttextmode.resize = function () {\r\n\t if (this.aceEditor) {\r\n\t var force = false;\r\n\t this.aceEditor.resize(force);\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Set json data in the formatter\r\n\t * @param {Object} json\r\n\t */\r\n\ttextmode.set = function(json) {\r\n\t this.setText(JSON.stringify(json, null, this.indentation));\r\n\t};\r\n\r\n\t/**\r\n\t * Get json data from the formatter\r\n\t * @return {Object} json\r\n\t */\r\n\ttextmode.get = function() {\r\n\t var text = this.getText();\r\n\t var json;\r\n\r\n\t try {\r\n\t json = util.parse(text); // this can throw an error\r\n\t }\r\n\t catch (err) {\r\n\t // try to sanitize json, replace JavaScript notation with JSON notation\r\n\t text = util.sanitize(text);\r\n\r\n\t // try to parse again\r\n\t json = util.parse(text); // this can throw an error\r\n\t }\r\n\r\n\t return json;\r\n\t};\r\n\r\n\t/**\r\n\t * Get the text contents of the editor\r\n\t * @return {String} jsonText\r\n\t */\r\n\ttextmode.getText = function() {\r\n\t if (this.textarea) {\r\n\t return this.textarea.value;\r\n\t }\r\n\t if (this.aceEditor) {\r\n\t return this.aceEditor.getValue();\r\n\t }\r\n\t return '';\r\n\t};\r\n\r\n\t/**\r\n\t * Set the text contents of the editor\r\n\t * @param {String} jsonText\r\n\t */\r\n\ttextmode.setText = function(jsonText) {\r\n\t var text;\r\n\r\n\t if (this.options.escapeUnicode === true) {\r\n\t text = util.escapeUnicodeChars(jsonText);\r\n\t }\r\n\t else {\r\n\t text = jsonText;\r\n\t }\r\n\r\n\t if (this.textarea) {\r\n\t this.textarea.value = text;\r\n\t }\r\n\t if (this.aceEditor) {\r\n\t // prevent emitting onChange events while setting new text\r\n\t var originalOnChange = this.options.onChange;\r\n\t this.options.onChange = null;\r\n\r\n\t this.aceEditor.setValue(text, -1);\r\n\r\n\t this.options.onChange = originalOnChange;\r\n\t }\r\n\r\n\t // validate JSON schema\r\n\t this.validate();\r\n\t};\r\n\r\n\t/**\r\n\t * Validate current JSON object against the configured JSON schema\r\n\t * Throws an exception when no JSON schema is configured\r\n\t */\r\n\ttextmode.validate = function () {\r\n\t // clear all current errors\r\n\t if (this.dom.validationErrors) {\r\n\t this.dom.validationErrors.parentNode.removeChild(this.dom.validationErrors);\r\n\t this.dom.validationErrors = null;\r\n\r\n\t this.content.style.marginBottom = '';\r\n\t this.content.style.paddingBottom = '';\r\n\t }\r\n\r\n\t var doValidate = false;\r\n\t var errors = [];\r\n\t var json;\r\n\t try {\r\n\t json = this.get(); // this can fail when there is no valid json\r\n\t doValidate = true;\r\n\t }\r\n\t catch (err) {\r\n\t // no valid JSON, don't validate\r\n\t }\r\n\r\n\t // only validate the JSON when parsing the JSON succeeded\r\n\t if (doValidate && this.validateSchema) {\r\n\t var valid = this.validateSchema(json);\r\n\t if (!valid) {\r\n\t errors = this.validateSchema.errors.map(function (error) {\r\n\t return util.improveSchemaError(error);\r\n\t });\r\n\t }\r\n\t }\r\n\r\n\t if (errors.length > 0) {\r\n\t // limit the number of displayed errors\r\n\t var limit = errors.length > MAX_ERRORS;\r\n\t if (limit) {\r\n\t errors = errors.slice(0, MAX_ERRORS);\r\n\t var hidden = this.validateSchema.errors.length - MAX_ERRORS;\r\n\t errors.push('(' + hidden + ' more errors...)')\r\n\t }\r\n\r\n\t var validationErrors = document.createElement('div');\r\n\t validationErrors.innerHTML = '' +\r\n\t '' +\r\n\t errors.map(function (error) {\r\n\t var message;\r\n\t if (typeof error === 'string') {\r\n\t message = '';\r\n\t }\r\n\t else {\r\n\t message = '' +\r\n\t '';\r\n\t }\r\n\r\n\t return '' + message + ''\r\n\t }).join('') +\r\n\t '' +\r\n\t '
' + error + '
' + error.dataPath + '' + error.message + '
';\r\n\r\n\t this.dom.validationErrors = validationErrors;\r\n\t this.frame.appendChild(validationErrors);\r\n\r\n\t var height = validationErrors.clientHeight;\r\n\t this.content.style.marginBottom = (-height) + 'px';\r\n\t this.content.style.paddingBottom = height + 'px';\r\n\t }\r\n\r\n\t // update the height of the ace editor\r\n\t if (this.aceEditor) {\r\n\t var force = false;\r\n\t this.aceEditor.resize(force);\r\n\t }\r\n\t};\r\n\r\n\t// define modes\r\n\tmodule.exports = [\r\n\t {\r\n\t mode: 'text',\r\n\t mixin: textmode,\r\n\t data: 'text',\r\n\t load: textmode.format\r\n\t },\r\n\t {\r\n\t mode: 'code',\r\n\t mixin: textmode,\r\n\t data: 'text',\r\n\t load: textmode.format\r\n\t }\r\n\t];\r\n\r\n\r\n/***/ },\r\n/* 63 */\r\n/***/ function(module, exports, __webpack_require__) {\r\n\r\n\t// load brace\r\n\tvar ace = __webpack_require__(64);\r\n\r\n\t// load required ace modules\r\n\t__webpack_require__(67);\r\n\t__webpack_require__(69);\r\n\r\n\tmodule.exports = ace;\r\n\r\n\r\n/***/ },\r\n/* 64 */\r\n/***/ function(module, exports, __webpack_require__) {\r\n\r\n\t/* ***** BEGIN LICENSE BLOCK *****\r\n\t * Distributed under the BSD license:\r\n\t *\r\n\t * Copyright (c) 2010, Ajax.org B.V.\r\n\t * All rights reserved.\r\n\t *\r\n\t * Redistribution and use in source and binary forms, with or without\r\n\t * modification, are permitted provided that the following conditions are met:\r\n\t * * Redistributions of source code must retain the above copyright\r\n\t * notice, this list of conditions and the following disclaimer.\r\n\t * * Redistributions in binary form must reproduce the above copyright\r\n\t * notice, this list of conditions and the following disclaimer in the\r\n\t * documentation and/or other materials provided with the distribution.\r\n\t * * Neither the name of Ajax.org B.V. nor the\r\n\t * names of its contributors may be used to endorse or promote products\r\n\t * derived from this software without specific prior written permission.\r\n\t *\r\n\t * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\r\n\t * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\r\n\t * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r\n\t * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\r\n\t * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\r\n\t * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\r\n\t * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\r\n\t * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\r\n\t * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\r\n\t * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n\t *\r\n\t * ***** END LICENSE BLOCK ***** */\r\n\r\n\t/**\r\n\t * Define a module along with a payload\r\n\t * @param module a name for the payload\r\n\t * @param payload a function to call with (acequire, exports, module) params\r\n\t */\r\n\r\n\t(function() {\r\n\r\n\tvar ACE_NAMESPACE = \"ace\";\r\n\r\n\tvar global = (function() { return this; })();\r\n\tif (!global && typeof window != \"undefined\") global = window; // strict mode\r\n\r\n\r\n\tif (!ACE_NAMESPACE && typeof acequirejs !== \"undefined\")\r\n\t return;\r\n\r\n\r\n\tvar define = function(module, deps, payload) {\r\n\t if (typeof module !== \"string\") {\r\n\t if (define.original)\r\n\t define.original.apply(this, arguments);\r\n\t else {\r\n\t console.error(\"dropping module because define wasn\\'t a string.\");\r\n\t console.trace();\r\n\t }\r\n\t return;\r\n\t }\r\n\t if (arguments.length == 2)\r\n\t payload = deps;\r\n\t if (!define.modules[module]) {\r\n\t define.payloads[module] = payload;\r\n\t define.modules[module] = null;\r\n\t }\r\n\t};\r\n\r\n\tdefine.modules = {};\r\n\tdefine.payloads = {};\r\n\r\n\t/**\r\n\t * Get at functionality define()ed using the function above\r\n\t */\r\n\tvar _acequire = function(parentId, module, callback) {\r\n\t if (typeof module === \"string\") {\r\n\t var payload = lookup(parentId, module);\r\n\t if (payload != undefined) {\r\n\t callback && callback();\r\n\t return payload;\r\n\t }\r\n\t } else if (Object.prototype.toString.call(module) === \"[object Array]\") {\r\n\t var params = [];\r\n\t for (var i = 0, l = module.length; i < l; ++i) {\r\n\t var dep = lookup(parentId, module[i]);\r\n\t if (dep == undefined && acequire.original)\r\n\t return;\r\n\t params.push(dep);\r\n\t }\r\n\t return callback && callback.apply(null, params) || true;\r\n\t }\r\n\t};\r\n\r\n\tvar acequire = function(module, callback) {\r\n\t var packagedModule = _acequire(\"\", module, callback);\r\n\t if (packagedModule == undefined && acequire.original)\r\n\t return acequire.original.apply(this, arguments);\r\n\t return packagedModule;\r\n\t};\r\n\r\n\tvar normalizeModule = function(parentId, moduleName) {\r\n\t // normalize plugin acequires\r\n\t if (moduleName.indexOf(\"!\") !== -1) {\r\n\t var chunks = moduleName.split(\"!\");\r\n\t return normalizeModule(parentId, chunks[0]) + \"!\" + normalizeModule(parentId, chunks[1]);\r\n\t }\r\n\t // normalize relative acequires\r\n\t if (moduleName.charAt(0) == \".\") {\r\n\t var base = parentId.split(\"/\").slice(0, -1).join(\"/\");\r\n\t moduleName = base + \"/\" + moduleName;\r\n\r\n\t while(moduleName.indexOf(\".\") !== -1 && previous != moduleName) {\r\n\t var previous = moduleName;\r\n\t moduleName = moduleName.replace(/\\/\\.\\//, \"/\").replace(/[^\\/]+\\/\\.\\.\\//, \"\");\r\n\t }\r\n\t }\r\n\t return moduleName;\r\n\t};\r\n\r\n\t/**\r\n\t * Internal function to lookup moduleNames and resolve them by calling the\r\n\t * definition function if needed.\r\n\t */\r\n\tvar lookup = function(parentId, moduleName) {\r\n\t moduleName = normalizeModule(parentId, moduleName);\r\n\r\n\t var module = define.modules[moduleName];\r\n\t if (!module) {\r\n\t module = define.payloads[moduleName];\r\n\t if (typeof module === 'function') {\r\n\t var exports = {};\r\n\t var mod = {\r\n\t id: moduleName,\r\n\t uri: '',\r\n\t exports: exports,\r\n\t packaged: true\r\n\t };\r\n\r\n\t var req = function(module, callback) {\r\n\t return _acequire(moduleName, module, callback);\r\n\t };\r\n\r\n\t var returnValue = module(req, exports, mod);\r\n\t exports = returnValue || mod.exports;\r\n\t define.modules[moduleName] = exports;\r\n\t delete define.payloads[moduleName];\r\n\t }\r\n\t module = define.modules[moduleName] = exports || module;\r\n\t }\r\n\t return module;\r\n\t};\r\n\r\n\tfunction exportAce(ns) {\r\n\t var root = global;\r\n\t if (ns) {\r\n\t if (!global[ns])\r\n\t global[ns] = {};\r\n\t root = global[ns];\r\n\t }\r\n\r\n\t if (!root.define || !root.define.packaged) {\r\n\t define.original = root.define;\r\n\t root.define = define;\r\n\t root.define.packaged = true;\r\n\t }\r\n\r\n\t if (!root.acequire || !root.acequire.packaged) {\r\n\t acequire.original = root.acequire;\r\n\t root.acequire = acequire;\r\n\t root.acequire.packaged = true;\r\n\t }\r\n\t}\r\n\r\n\texportAce(ACE_NAMESPACE);\r\n\r\n\t})();\r\n\r\n\tace.define(\"ace/lib/regexp\",[\"require\",\"exports\",\"module\"], function(acequire, exports, module) {\r\n\t\"use strict\";\r\n\r\n\t var real = {\r\n\t exec: RegExp.prototype.exec,\r\n\t test: RegExp.prototype.test,\r\n\t match: String.prototype.match,\r\n\t replace: String.prototype.replace,\r\n\t split: String.prototype.split\r\n\t },\r\n\t compliantExecNpcg = real.exec.call(/()??/, \"\")[1] === undefined, // check `exec` handling of nonparticipating capturing groups\r\n\t compliantLastIndexIncrement = function () {\r\n\t var x = /^/g;\r\n\t real.test.call(x, \"\");\r\n\t return !x.lastIndex;\r\n\t }();\r\n\r\n\t if (compliantLastIndexIncrement && compliantExecNpcg)\r\n\t return;\r\n\t RegExp.prototype.exec = function (str) {\r\n\t var match = real.exec.apply(this, arguments),\r\n\t name, r2;\r\n\t if ( typeof(str) == 'string' && match) {\r\n\t if (!compliantExecNpcg && match.length > 1 && indexOf(match, \"\") > -1) {\r\n\t r2 = RegExp(this.source, real.replace.call(getNativeFlags(this), \"g\", \"\"));\r\n\t real.replace.call(str.slice(match.index), r2, function () {\r\n\t for (var i = 1; i < arguments.length - 2; i++) {\r\n\t if (arguments[i] === undefined)\r\n\t match[i] = undefined;\r\n\t }\r\n\t });\r\n\t }\r\n\t if (this._xregexp && this._xregexp.captureNames) {\r\n\t for (var i = 1; i < match.length; i++) {\r\n\t name = this._xregexp.captureNames[i - 1];\r\n\t if (name)\r\n\t match[name] = match[i];\r\n\t }\r\n\t }\r\n\t if (!compliantLastIndexIncrement && this.global && !match[0].length && (this.lastIndex > match.index))\r\n\t this.lastIndex--;\r\n\t }\r\n\t return match;\r\n\t };\r\n\t if (!compliantLastIndexIncrement) {\r\n\t RegExp.prototype.test = function (str) {\r\n\t var match = real.exec.call(this, str);\r\n\t if (match && this.global && !match[0].length && (this.lastIndex > match.index))\r\n\t this.lastIndex--;\r\n\t return !!match;\r\n\t };\r\n\t }\r\n\r\n\t function getNativeFlags (regex) {\r\n\t return (regex.global ? \"g\" : \"\") +\r\n\t (regex.ignoreCase ? \"i\" : \"\") +\r\n\t (regex.multiline ? \"m\" : \"\") +\r\n\t (regex.extended ? \"x\" : \"\") + // Proposed for ES4; included in AS3\r\n\t (regex.sticky ? \"y\" : \"\");\r\n\t }\r\n\r\n\t function indexOf (array, item, from) {\r\n\t if (Array.prototype.indexOf) // Use the native array method if available\r\n\t return array.indexOf(item, from);\r\n\t for (var i = from || 0; i < array.length; i++) {\r\n\t if (array[i] === item)\r\n\t return i;\r\n\t }\r\n\t return -1;\r\n\t }\r\n\r\n\t});\r\n\r\n\tace.define(\"ace/lib/es5-shim\",[\"require\",\"exports\",\"module\"], function(acequire, exports, module) {\r\n\r\n\tfunction Empty() {}\r\n\r\n\tif (!Function.prototype.bind) {\r\n\t Function.prototype.bind = function bind(that) { // .length is 1\r\n\t var target = this;\r\n\t if (typeof target != \"function\") {\r\n\t throw new TypeError(\"Function.prototype.bind called on incompatible \" + target);\r\n\t }\r\n\t var args = slice.call(arguments, 1); // for normal call\r\n\t var bound = function () {\r\n\r\n\t if (this instanceof bound) {\r\n\r\n\t var result = target.apply(\r\n\t this,\r\n\t args.concat(slice.call(arguments))\r\n\t );\r\n\t if (Object(result) === result) {\r\n\t return result;\r\n\t }\r\n\t return this;\r\n\r\n\t } else {\r\n\t return target.apply(\r\n\t that,\r\n\t args.concat(slice.call(arguments))\r\n\t );\r\n\r\n\t }\r\n\r\n\t };\r\n\t if(target.prototype) {\r\n\t Empty.prototype = target.prototype;\r\n\t bound.prototype = new Empty();\r\n\t Empty.prototype = null;\r\n\t }\r\n\t return bound;\r\n\t };\r\n\t}\r\n\tvar call = Function.prototype.call;\r\n\tvar prototypeOfArray = Array.prototype;\r\n\tvar prototypeOfObject = Object.prototype;\r\n\tvar slice = prototypeOfArray.slice;\r\n\tvar _toString = call.bind(prototypeOfObject.toString);\r\n\tvar owns = call.bind(prototypeOfObject.hasOwnProperty);\r\n\tvar defineGetter;\r\n\tvar defineSetter;\r\n\tvar lookupGetter;\r\n\tvar lookupSetter;\r\n\tvar supportsAccessors;\r\n\tif ((supportsAccessors = owns(prototypeOfObject, \"__defineGetter__\"))) {\r\n\t defineGetter = call.bind(prototypeOfObject.__defineGetter__);\r\n\t defineSetter = call.bind(prototypeOfObject.__defineSetter__);\r\n\t lookupGetter = call.bind(prototypeOfObject.__lookupGetter__);\r\n\t lookupSetter = call.bind(prototypeOfObject.__lookupSetter__);\r\n\t}\r\n\tif ([1,2].splice(0).length != 2) {\r\n\t if(function() { // test IE < 9 to splice bug - see issue #138\r\n\t function makeArray(l) {\r\n\t var a = new Array(l+2);\r\n\t a[0] = a[1] = 0;\r\n\t return a;\r\n\t }\r\n\t var array = [], lengthBefore;\r\n\t \r\n\t array.splice.apply(array, makeArray(20));\r\n\t array.splice.apply(array, makeArray(26));\r\n\r\n\t lengthBefore = array.length; //46\r\n\t array.splice(5, 0, \"XXX\"); // add one element\r\n\r\n\t lengthBefore + 1 == array.length\r\n\r\n\t if (lengthBefore + 1 == array.length) {\r\n\t return true;// has right splice implementation without bugs\r\n\t }\r\n\t }()) {//IE 6/7\r\n\t var array_splice = Array.prototype.splice;\r\n\t Array.prototype.splice = function(start, deleteCount) {\r\n\t if (!arguments.length) {\r\n\t return [];\r\n\t } else {\r\n\t return array_splice.apply(this, [\r\n\t start === void 0 ? 0 : start,\r\n\t deleteCount === void 0 ? (this.length - start) : deleteCount\r\n\t ].concat(slice.call(arguments, 2)))\r\n\t }\r\n\t };\r\n\t } else {//IE8\r\n\t Array.prototype.splice = function(pos, removeCount){\r\n\t var length = this.length;\r\n\t if (pos > 0) {\r\n\t if (pos > length)\r\n\t pos = length;\r\n\t } else if (pos == void 0) {\r\n\t pos = 0;\r\n\t } else if (pos < 0) {\r\n\t pos = Math.max(length + pos, 0);\r\n\t }\r\n\r\n\t if (!(pos+removeCount < length))\r\n\t removeCount = length - pos;\r\n\r\n\t var removed = this.slice(pos, pos+removeCount);\r\n\t var insert = slice.call(arguments, 2);\r\n\t var add = insert.length; \r\n\t if (pos === length) {\r\n\t if (add) {\r\n\t this.push.apply(this, insert);\r\n\t }\r\n\t } else {\r\n\t var remove = Math.min(removeCount, length - pos);\r\n\t var tailOldPos = pos + remove;\r\n\t var tailNewPos = tailOldPos + add - remove;\r\n\t var tailCount = length - tailOldPos;\r\n\t var lengthAfterRemove = length - remove;\r\n\r\n\t if (tailNewPos < tailOldPos) { // case A\r\n\t for (var i = 0; i < tailCount; ++i) {\r\n\t this[tailNewPos+i] = this[tailOldPos+i];\r\n\t }\r\n\t } else if (tailNewPos > tailOldPos) { // case B\r\n\t for (i = tailCount; i--; ) {\r\n\t this[tailNewPos+i] = this[tailOldPos+i];\r\n\t }\r\n\t } // else, add == remove (nothing to do)\r\n\r\n\t if (add && pos === lengthAfterRemove) {\r\n\t this.length = lengthAfterRemove; // truncate array\r\n\t this.push.apply(this, insert);\r\n\t } else {\r\n\t this.length = lengthAfterRemove + add; // reserves space\r\n\t for (i = 0; i < add; ++i) {\r\n\t this[pos+i] = insert[i];\r\n\t }\r\n\t }\r\n\t }\r\n\t return removed;\r\n\t };\r\n\t }\r\n\t}\r\n\tif (!Array.isArray) {\r\n\t Array.isArray = function isArray(obj) {\r\n\t return _toString(obj) == \"[object Array]\";\r\n\t };\r\n\t}\r\n\tvar boxedString = Object(\"a\"),\r\n\t splitString = boxedString[0] != \"a\" || !(0 in boxedString);\r\n\r\n\tif (!Array.prototype.forEach) {\r\n\t Array.prototype.forEach = function forEach(fun /*, thisp*/) {\r\n\t var object = toObject(this),\r\n\t self = splitString && _toString(this) == \"[object String]\" ?\r\n\t this.split(\"\") :\r\n\t object,\r\n\t thisp = arguments[1],\r\n\t i = -1,\r\n\t length = self.length >>> 0;\r\n\t if (_toString(fun) != \"[object Function]\") {\r\n\t throw new TypeError(); // TODO message\r\n\t }\r\n\r\n\t while (++i < length) {\r\n\t if (i in self) {\r\n\t fun.call(thisp, self[i], i, object);\r\n\t }\r\n\t }\r\n\t };\r\n\t}\r\n\tif (!Array.prototype.map) {\r\n\t Array.prototype.map = function map(fun /*, thisp*/) {\r\n\t var object = toObject(this),\r\n\t self = splitString && _toString(this) == \"[object String]\" ?\r\n\t this.split(\"\") :\r\n\t object,\r\n\t length = self.length >>> 0,\r\n\t result = Array(length),\r\n\t thisp = arguments[1];\r\n\t if (_toString(fun) != \"[object Function]\") {\r\n\t throw new TypeError(fun + \" is not a function\");\r\n\t }\r\n\r\n\t for (var i = 0; i < length; i++) {\r\n\t if (i in self)\r\n\t result[i] = fun.call(thisp, self[i], i, object);\r\n\t }\r\n\t return result;\r\n\t };\r\n\t}\r\n\tif (!Array.prototype.filter) {\r\n\t Array.prototype.filter = function filter(fun /*, thisp */) {\r\n\t var object = toObject(this),\r\n\t self = splitString && _toString(this) == \"[object String]\" ?\r\n\t this.split(\"\") :\r\n\t object,\r\n\t length = self.length >>> 0,\r\n\t result = [],\r\n\t value,\r\n\t thisp = arguments[1];\r\n\t if (_toString(fun) != \"[object Function]\") {\r\n\t throw new TypeError(fun + \" is not a function\");\r\n\t }\r\n\r\n\t for (var i = 0; i < length; i++) {\r\n\t if (i in self) {\r\n\t value = self[i];\r\n\t if (fun.call(thisp, value, i, object)) {\r\n\t result.push(value);\r\n\t }\r\n\t }\r\n\t }\r\n\t return result;\r\n\t };\r\n\t}\r\n\tif (!Array.prototype.every) {\r\n\t Array.prototype.every = function every(fun /*, thisp */) {\r\n\t var object = toObject(this),\r\n\t self = splitString && _toString(this) == \"[object String]\" ?\r\n\t this.split(\"\") :\r\n\t object,\r\n\t length = self.length >>> 0,\r\n\t thisp = arguments[1];\r\n\t if (_toString(fun) != \"[object Function]\") {\r\n\t throw new TypeError(fun + \" is not a function\");\r\n\t }\r\n\r\n\t for (var i = 0; i < length; i++) {\r\n\t if (i in self && !fun.call(thisp, self[i], i, object)) {\r\n\t return false;\r\n\t }\r\n\t }\r\n\t return true;\r\n\t };\r\n\t}\r\n\tif (!Array.prototype.some) {\r\n\t Array.prototype.some = function some(fun /*, thisp */) {\r\n\t var object = toObject(this),\r\n\t self = splitString && _toString(this) == \"[object String]\" ?\r\n\t this.split(\"\") :\r\n\t object,\r\n\t length = self.length >>> 0,\r\n\t thisp = arguments[1];\r\n\t if (_toString(fun) != \"[object Function]\") {\r\n\t throw new TypeError(fun + \" is not a function\");\r\n\t }\r\n\r\n\t for (var i = 0; i < length; i++) {\r\n\t if (i in self && fun.call(thisp, self[i], i, object)) {\r\n\t return true;\r\n\t }\r\n\t }\r\n\t return false;\r\n\t };\r\n\t}\r\n\tif (!Array.prototype.reduce) {\r\n\t Array.prototype.reduce = function reduce(fun /*, initial*/) {\r\n\t var object = toObject(this),\r\n\t self = splitString && _toString(this) == \"[object String]\" ?\r\n\t this.split(\"\") :\r\n\t object,\r\n\t length = self.length >>> 0;\r\n\t if (_toString(fun) != \"[object Function]\") {\r\n\t throw new TypeError(fun + \" is not a function\");\r\n\t }\r\n\t if (!length && arguments.length == 1) {\r\n\t throw new TypeError(\"reduce of empty array with no initial value\");\r\n\t }\r\n\r\n\t var i = 0;\r\n\t var result;\r\n\t if (arguments.length >= 2) {\r\n\t result = arguments[1];\r\n\t } else {\r\n\t do {\r\n\t if (i in self) {\r\n\t result = self[i++];\r\n\t break;\r\n\t }\r\n\t if (++i >= length) {\r\n\t throw new TypeError(\"reduce of empty array with no initial value\");\r\n\t }\r\n\t } while (true);\r\n\t }\r\n\r\n\t for (; i < length; i++) {\r\n\t if (i in self) {\r\n\t result = fun.call(void 0, result, self[i], i, object);\r\n\t }\r\n\t }\r\n\r\n\t return result;\r\n\t };\r\n\t}\r\n\tif (!Array.prototype.reduceRight) {\r\n\t Array.prototype.reduceRight = function reduceRight(fun /*, initial*/) {\r\n\t var object = toObject(this),\r\n\t self = splitString && _toString(this) == \"[object String]\" ?\r\n\t this.split(\"\") :\r\n\t object,\r\n\t length = self.length >>> 0;\r\n\t if (_toString(fun) != \"[object Function]\") {\r\n\t throw new TypeError(fun + \" is not a function\");\r\n\t }\r\n\t if (!length && arguments.length == 1) {\r\n\t throw new TypeError(\"reduceRight of empty array with no initial value\");\r\n\t }\r\n\r\n\t var result, i = length - 1;\r\n\t if (arguments.length >= 2) {\r\n\t result = arguments[1];\r\n\t } else {\r\n\t do {\r\n\t if (i in self) {\r\n\t result = self[i--];\r\n\t break;\r\n\t }\r\n\t if (--i < 0) {\r\n\t throw new TypeError(\"reduceRight of empty array with no initial value\");\r\n\t }\r\n\t } while (true);\r\n\t }\r\n\r\n\t do {\r\n\t if (i in this) {\r\n\t result = fun.call(void 0, result, self[i], i, object);\r\n\t }\r\n\t } while (i--);\r\n\r\n\t return result;\r\n\t };\r\n\t}\r\n\tif (!Array.prototype.indexOf || ([0, 1].indexOf(1, 2) != -1)) {\r\n\t Array.prototype.indexOf = function indexOf(sought /*, fromIndex */ ) {\r\n\t var self = splitString && _toString(this) == \"[object String]\" ?\r\n\t this.split(\"\") :\r\n\t toObject(this),\r\n\t length = self.length >>> 0;\r\n\r\n\t if (!length) {\r\n\t return -1;\r\n\t }\r\n\r\n\t var i = 0;\r\n\t if (arguments.length > 1) {\r\n\t i = toInteger(arguments[1]);\r\n\t }\r\n\t i = i >= 0 ? i : Math.max(0, length + i);\r\n\t for (; i < length; i++) {\r\n\t if (i in self && self[i] === sought) {\r\n\t return i;\r\n\t }\r\n\t }\r\n\t return -1;\r\n\t };\r\n\t}\r\n\tif (!Array.prototype.lastIndexOf || ([0, 1].lastIndexOf(0, -3) != -1)) {\r\n\t Array.prototype.lastIndexOf = function lastIndexOf(sought /*, fromIndex */) {\r\n\t var self = splitString && _toString(this) == \"[object String]\" ?\r\n\t this.split(\"\") :\r\n\t toObject(this),\r\n\t length = self.length >>> 0;\r\n\r\n\t if (!length) {\r\n\t return -1;\r\n\t }\r\n\t var i = length - 1;\r\n\t if (arguments.length > 1) {\r\n\t i = Math.min(i, toInteger(arguments[1]));\r\n\t }\r\n\t i = i >= 0 ? i : length - Math.abs(i);\r\n\t for (; i >= 0; i--) {\r\n\t if (i in self && sought === self[i]) {\r\n\t return i;\r\n\t }\r\n\t }\r\n\t return -1;\r\n\t };\r\n\t}\r\n\tif (!Object.getPrototypeOf) {\r\n\t Object.getPrototypeOf = function getPrototypeOf(object) {\r\n\t return object.__proto__ || (\r\n\t object.constructor ?\r\n\t object.constructor.prototype :\r\n\t prototypeOfObject\r\n\t );\r\n\t };\r\n\t}\r\n\tif (!Object.getOwnPropertyDescriptor) {\r\n\t var ERR_NON_OBJECT = \"Object.getOwnPropertyDescriptor called on a \" +\r\n\t \"non-object: \";\r\n\t Object.getOwnPropertyDescriptor = function getOwnPropertyDescriptor(object, property) {\r\n\t if ((typeof object != \"object\" && typeof object != \"function\") || object === null)\r\n\t throw new TypeError(ERR_NON_OBJECT + object);\r\n\t if (!owns(object, property))\r\n\t return;\r\n\r\n\t var descriptor, getter, setter;\r\n\t descriptor = { enumerable: true, configurable: true };\r\n\t if (supportsAccessors) {\r\n\t var prototype = object.__proto__;\r\n\t object.__proto__ = prototypeOfObject;\r\n\r\n\t var getter = lookupGetter(object, property);\r\n\t var setter = lookupSetter(object, property);\r\n\t object.__proto__ = prototype;\r\n\r\n\t if (getter || setter) {\r\n\t if (getter) descriptor.get = getter;\r\n\t if (setter) descriptor.set = setter;\r\n\t return descriptor;\r\n\t }\r\n\t }\r\n\t descriptor.value = object[property];\r\n\t return descriptor;\r\n\t };\r\n\t}\r\n\tif (!Object.getOwnPropertyNames) {\r\n\t Object.getOwnPropertyNames = function getOwnPropertyNames(object) {\r\n\t return Object.keys(object);\r\n\t };\r\n\t}\r\n\tif (!Object.create) {\r\n\t var createEmpty;\r\n\t if (Object.prototype.__proto__ === null) {\r\n\t createEmpty = function () {\r\n\t return { \"__proto__\": null };\r\n\t };\r\n\t } else {\r\n\t createEmpty = function () {\r\n\t var empty = {};\r\n\t for (var i in empty)\r\n\t empty[i] = null;\r\n\t empty.constructor =\r\n\t empty.hasOwnProperty =\r\n\t empty.propertyIsEnumerable =\r\n\t empty.isPrototypeOf =\r\n\t empty.toLocaleString =\r\n\t empty.toString =\r\n\t empty.valueOf =\r\n\t empty.__proto__ = null;\r\n\t return empty;\r\n\t }\r\n\t }\r\n\r\n\t Object.create = function create(prototype, properties) {\r\n\t var object;\r\n\t if (prototype === null) {\r\n\t object = createEmpty();\r\n\t } else {\r\n\t if (typeof prototype != \"object\")\r\n\t throw new TypeError(\"typeof prototype[\"+(typeof prototype)+\"] != 'object'\");\r\n\t var Type = function () {};\r\n\t Type.prototype = prototype;\r\n\t object = new Type();\r\n\t object.__proto__ = prototype;\r\n\t }\r\n\t if (properties !== void 0)\r\n\t Object.defineProperties(object, properties);\r\n\t return object;\r\n\t };\r\n\t}\r\n\r\n\tfunction doesDefinePropertyWork(object) {\r\n\t try {\r\n\t Object.defineProperty(object, \"sentinel\", {});\r\n\t return \"sentinel\" in object;\r\n\t } catch (exception) {\r\n\t }\r\n\t}\r\n\tif (Object.defineProperty) {\r\n\t var definePropertyWorksOnObject = doesDefinePropertyWork({});\r\n\t var definePropertyWorksOnDom = typeof document == \"undefined\" ||\r\n\t doesDefinePropertyWork(document.createElement(\"div\"));\r\n\t if (!definePropertyWorksOnObject || !definePropertyWorksOnDom) {\r\n\t var definePropertyFallback = Object.defineProperty;\r\n\t }\r\n\t}\r\n\r\n\tif (!Object.defineProperty || definePropertyFallback) {\r\n\t var ERR_NON_OBJECT_DESCRIPTOR = \"Property description must be an object: \";\r\n\t var ERR_NON_OBJECT_TARGET = \"Object.defineProperty called on non-object: \"\r\n\t var ERR_ACCESSORS_NOT_SUPPORTED = \"getters & setters can not be defined \" +\r\n\t \"on this javascript engine\";\r\n\r\n\t Object.defineProperty = function defineProperty(object, property, descriptor) {\r\n\t if ((typeof object != \"object\" && typeof object != \"function\") || object === null)\r\n\t throw new TypeError(ERR_NON_OBJECT_TARGET + object);\r\n\t if ((typeof descriptor != \"object\" && typeof descriptor != \"function\") || descriptor === null)\r\n\t throw new TypeError(ERR_NON_OBJECT_DESCRIPTOR + descriptor);\r\n\t if (definePropertyFallback) {\r\n\t try {\r\n\t return definePropertyFallback.call(Object, object, property, descriptor);\r\n\t } catch (exception) {\r\n\t }\r\n\t }\r\n\t if (owns(descriptor, \"value\")) {\r\n\r\n\t if (supportsAccessors && (lookupGetter(object, property) ||\r\n\t lookupSetter(object, property)))\r\n\t {\r\n\t var prototype = object.__proto__;\r\n\t object.__proto__ = prototypeOfObject;\r\n\t delete object[property];\r\n\t object[property] = descriptor.value;\r\n\t object.__proto__ = prototype;\r\n\t } else {\r\n\t object[property] = descriptor.value;\r\n\t }\r\n\t } else {\r\n\t if (!supportsAccessors)\r\n\t throw new TypeError(ERR_ACCESSORS_NOT_SUPPORTED);\r\n\t if (owns(descriptor, \"get\"))\r\n\t defineGetter(object, property, descriptor.get);\r\n\t if (owns(descriptor, \"set\"))\r\n\t defineSetter(object, property, descriptor.set);\r\n\t }\r\n\r\n\t return object;\r\n\t };\r\n\t}\r\n\tif (!Object.defineProperties) {\r\n\t Object.defineProperties = function defineProperties(object, properties) {\r\n\t for (var property in properties) {\r\n\t if (owns(properties, property))\r\n\t Object.defineProperty(object, property, properties[property]);\r\n\t }\r\n\t return object;\r\n\t };\r\n\t}\r\n\tif (!Object.seal) {\r\n\t Object.seal = function seal(object) {\r\n\t return object;\r\n\t };\r\n\t}\r\n\tif (!Object.freeze) {\r\n\t Object.freeze = function freeze(object) {\r\n\t return object;\r\n\t };\r\n\t}\r\n\ttry {\r\n\t Object.freeze(function () {});\r\n\t} catch (exception) {\r\n\t Object.freeze = (function freeze(freezeObject) {\r\n\t return function freeze(object) {\r\n\t if (typeof object == \"function\") {\r\n\t return object;\r\n\t } else {\r\n\t return freezeObject(object);\r\n\t }\r\n\t };\r\n\t })(Object.freeze);\r\n\t}\r\n\tif (!Object.preventExtensions) {\r\n\t Object.preventExtensions = function preventExtensions(object) {\r\n\t return object;\r\n\t };\r\n\t}\r\n\tif (!Object.isSealed) {\r\n\t Object.isSealed = function isSealed(object) {\r\n\t return false;\r\n\t };\r\n\t}\r\n\tif (!Object.isFrozen) {\r\n\t Object.isFrozen = function isFrozen(object) {\r\n\t return false;\r\n\t };\r\n\t}\r\n\tif (!Object.isExtensible) {\r\n\t Object.isExtensible = function isExtensible(object) {\r\n\t if (Object(object) === object) {\r\n\t throw new TypeError(); // TODO message\r\n\t }\r\n\t var name = '';\r\n\t while (owns(object, name)) {\r\n\t name += '?';\r\n\t }\r\n\t object[name] = true;\r\n\t var returnValue = owns(object, name);\r\n\t delete object[name];\r\n\t return returnValue;\r\n\t };\r\n\t}\r\n\tif (!Object.keys) {\r\n\t var hasDontEnumBug = true,\r\n\t dontEnums = [\r\n\t \"toString\",\r\n\t \"toLocaleString\",\r\n\t \"valueOf\",\r\n\t \"hasOwnProperty\",\r\n\t \"isPrototypeOf\",\r\n\t \"propertyIsEnumerable\",\r\n\t \"constructor\"\r\n\t ],\r\n\t dontEnumsLength = dontEnums.length;\r\n\r\n\t for (var key in {\"toString\": null}) {\r\n\t hasDontEnumBug = false;\r\n\t }\r\n\r\n\t Object.keys = function keys(object) {\r\n\r\n\t if (\r\n\t (typeof object != \"object\" && typeof object != \"function\") ||\r\n\t object === null\r\n\t ) {\r\n\t throw new TypeError(\"Object.keys called on a non-object\");\r\n\t }\r\n\r\n\t var keys = [];\r\n\t for (var name in object) {\r\n\t if (owns(object, name)) {\r\n\t keys.push(name);\r\n\t }\r\n\t }\r\n\r\n\t if (hasDontEnumBug) {\r\n\t for (var i = 0, ii = dontEnumsLength; i < ii; i++) {\r\n\t var dontEnum = dontEnums[i];\r\n\t if (owns(object, dontEnum)) {\r\n\t keys.push(dontEnum);\r\n\t }\r\n\t }\r\n\t }\r\n\t return keys;\r\n\t };\r\n\r\n\t}\r\n\tif (!Date.now) {\r\n\t Date.now = function now() {\r\n\t return new Date().getTime();\r\n\t };\r\n\t}\r\n\tvar ws = \"\\x09\\x0A\\x0B\\x0C\\x0D\\x20\\xA0\\u1680\\u180E\\u2000\\u2001\\u2002\\u2003\" +\r\n\t \"\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u3000\\u2028\" +\r\n\t \"\\u2029\\uFEFF\";\r\n\tif (!String.prototype.trim || ws.trim()) {\r\n\t ws = \"[\" + ws + \"]\";\r\n\t var trimBeginRegexp = new RegExp(\"^\" + ws + ws + \"*\"),\r\n\t trimEndRegexp = new RegExp(ws + ws + \"*$\");\r\n\t String.prototype.trim = function trim() {\r\n\t return String(this).replace(trimBeginRegexp, \"\").replace(trimEndRegexp, \"\");\r\n\t };\r\n\t}\r\n\r\n\tfunction toInteger(n) {\r\n\t n = +n;\r\n\t if (n !== n) { // isNaN\r\n\t n = 0;\r\n\t } else if (n !== 0 && n !== (1/0) && n !== -(1/0)) {\r\n\t n = (n > 0 || -1) * Math.floor(Math.abs(n));\r\n\t }\r\n\t return n;\r\n\t}\r\n\r\n\tfunction isPrimitive(input) {\r\n\t var type = typeof input;\r\n\t return (\r\n\t input === null ||\r\n\t type === \"undefined\" ||\r\n\t type === \"boolean\" ||\r\n\t type === \"number\" ||\r\n\t type === \"string\"\r\n\t );\r\n\t}\r\n\r\n\tfunction toPrimitive(input) {\r\n\t var val, valueOf, toString;\r\n\t if (isPrimitive(input)) {\r\n\t return input;\r\n\t }\r\n\t valueOf = input.valueOf;\r\n\t if (typeof valueOf === \"function\") {\r\n\t val = valueOf.call(input);\r\n\t if (isPrimitive(val)) {\r\n\t return val;\r\n\t }\r\n\t }\r\n\t toString = input.toString;\r\n\t if (typeof toString === \"function\") {\r\n\t val = toString.call(input);\r\n\t if (isPrimitive(val)) {\r\n\t return val;\r\n\t }\r\n\t }\r\n\t throw new TypeError();\r\n\t}\r\n\tvar toObject = function (o) {\r\n\t if (o == null) { // this matches both null and undefined\r\n\t throw new TypeError(\"can't convert \"+o+\" to object\");\r\n\t }\r\n\t return Object(o);\r\n\t};\r\n\r\n\t});\r\n\r\n\tace.define(\"ace/lib/fixoldbrowsers\",[\"require\",\"exports\",\"module\",\"ace/lib/regexp\",\"ace/lib/es5-shim\"], function(acequire, exports, module) {\r\n\t\"use strict\";\r\n\r\n\tacequire(\"./regexp\");\r\n\tacequire(\"./es5-shim\");\r\n\r\n\t});\r\n\r\n\tace.define(\"ace/lib/dom\",[\"require\",\"exports\",\"module\"], function(acequire, exports, module) {\r\n\t\"use strict\";\r\n\r\n\tvar XHTML_NS = \"http://www.w3.org/1999/xhtml\";\r\n\r\n\texports.getDocumentHead = function(doc) {\r\n\t if (!doc)\r\n\t doc = document;\r\n\t return doc.head || doc.getElementsByTagName(\"head\")[0] || doc.documentElement;\r\n\t};\r\n\r\n\texports.createElement = function(tag, ns) {\r\n\t return document.createElementNS ?\r\n\t document.createElementNS(ns || XHTML_NS, tag) :\r\n\t document.createElement(tag);\r\n\t};\r\n\r\n\texports.hasCssClass = function(el, name) {\r\n\t var classes = (el.className || \"\").split(/\\s+/g);\r\n\t return classes.indexOf(name) !== -1;\r\n\t};\r\n\texports.addCssClass = function(el, name) {\r\n\t if (!exports.hasCssClass(el, name)) {\r\n\t el.className += \" \" + name;\r\n\t }\r\n\t};\r\n\texports.removeCssClass = function(el, name) {\r\n\t var classes = el.className.split(/\\s+/g);\r\n\t while (true) {\r\n\t var index = classes.indexOf(name);\r\n\t if (index == -1) {\r\n\t break;\r\n\t }\r\n\t classes.splice(index, 1);\r\n\t }\r\n\t el.className = classes.join(\" \");\r\n\t};\r\n\r\n\texports.toggleCssClass = function(el, name) {\r\n\t var classes = el.className.split(/\\s+/g), add = true;\r\n\t while (true) {\r\n\t var index = classes.indexOf(name);\r\n\t if (index == -1) {\r\n\t break;\r\n\t }\r\n\t add = false;\r\n\t classes.splice(index, 1);\r\n\t }\r\n\t if (add)\r\n\t classes.push(name);\r\n\r\n\t el.className = classes.join(\" \");\r\n\t return add;\r\n\t};\r\n\texports.setCssClass = function(node, className, include) {\r\n\t if (include) {\r\n\t exports.addCssClass(node, className);\r\n\t } else {\r\n\t exports.removeCssClass(node, className);\r\n\t }\r\n\t};\r\n\r\n\texports.hasCssString = function(id, doc) {\r\n\t var index = 0, sheets;\r\n\t doc = doc || document;\r\n\r\n\t if (doc.createStyleSheet && (sheets = doc.styleSheets)) {\r\n\t while (index < sheets.length)\r\n\t if (sheets[index++].owningElement.id === id) return true;\r\n\t } else if ((sheets = doc.getElementsByTagName(\"style\"))) {\r\n\t while (index < sheets.length)\r\n\t if (sheets[index++].id === id) return true;\r\n\t }\r\n\r\n\t return false;\r\n\t};\r\n\r\n\texports.importCssString = function importCssString(cssText, id, doc) {\r\n\t doc = doc || document;\r\n\t if (id && exports.hasCssString(id, doc))\r\n\t return null;\r\n\t \r\n\t var style;\r\n\t \r\n\t if (id)\r\n\t cssText += \"\\n/*# sourceURL=ace/css/\" + id + \" */\";\r\n\t \r\n\t if (doc.createStyleSheet) {\r\n\t style = doc.createStyleSheet();\r\n\t style.cssText = cssText;\r\n\t if (id)\r\n\t style.owningElement.id = id;\r\n\t } else {\r\n\t style = exports.createElement(\"style\");\r\n\t style.appendChild(doc.createTextNode(cssText));\r\n\t if (id)\r\n\t style.id = id;\r\n\r\n\t exports.getDocumentHead(doc).appendChild(style);\r\n\t }\r\n\t};\r\n\r\n\texports.importCssStylsheet = function(uri, doc) {\r\n\t if (doc.createStyleSheet) {\r\n\t doc.createStyleSheet(uri);\r\n\t } else {\r\n\t var link = exports.createElement('link');\r\n\t link.rel = 'stylesheet';\r\n\t link.href = uri;\r\n\r\n\t exports.getDocumentHead(doc).appendChild(link);\r\n\t }\r\n\t};\r\n\r\n\texports.getInnerWidth = function(element) {\r\n\t return (\r\n\t parseInt(exports.computedStyle(element, \"paddingLeft\"), 10) +\r\n\t parseInt(exports.computedStyle(element, \"paddingRight\"), 10) + \r\n\t element.clientWidth\r\n\t );\r\n\t};\r\n\r\n\texports.getInnerHeight = function(element) {\r\n\t return (\r\n\t parseInt(exports.computedStyle(element, \"paddingTop\"), 10) +\r\n\t parseInt(exports.computedStyle(element, \"paddingBottom\"), 10) +\r\n\t element.clientHeight\r\n\t );\r\n\t};\r\n\r\n\texports.scrollbarWidth = function(document) {\r\n\t var inner = exports.createElement(\"ace_inner\");\r\n\t inner.style.width = \"100%\";\r\n\t inner.style.minWidth = \"0px\";\r\n\t inner.style.height = \"200px\";\r\n\t inner.style.display = \"block\";\r\n\r\n\t var outer = exports.createElement(\"ace_outer\");\r\n\t var style = outer.style;\r\n\r\n\t style.position = \"absolute\";\r\n\t style.left = \"-10000px\";\r\n\t style.overflow = \"hidden\";\r\n\t style.width = \"200px\";\r\n\t style.minWidth = \"0px\";\r\n\t style.height = \"150px\";\r\n\t style.display = \"block\";\r\n\r\n\t outer.appendChild(inner);\r\n\r\n\t var body = document.documentElement;\r\n\t body.appendChild(outer);\r\n\r\n\t var noScrollbar = inner.offsetWidth;\r\n\r\n\t style.overflow = \"scroll\";\r\n\t var withScrollbar = inner.offsetWidth;\r\n\r\n\t if (noScrollbar == withScrollbar) {\r\n\t withScrollbar = outer.clientWidth;\r\n\t }\r\n\r\n\t body.removeChild(outer);\r\n\r\n\t return noScrollbar-withScrollbar;\r\n\t};\r\n\r\n\tif (typeof document == \"undefined\") {\r\n\t exports.importCssString = function() {};\r\n\t return;\r\n\t}\r\n\r\n\tif (window.pageYOffset !== undefined) {\r\n\t exports.getPageScrollTop = function() {\r\n\t return window.pageYOffset;\r\n\t };\r\n\r\n\t exports.getPageScrollLeft = function() {\r\n\t return window.pageXOffset;\r\n\t };\r\n\t}\r\n\telse {\r\n\t exports.getPageScrollTop = function() {\r\n\t return document.body.scrollTop;\r\n\t };\r\n\r\n\t exports.getPageScrollLeft = function() {\r\n\t return document.body.scrollLeft;\r\n\t };\r\n\t}\r\n\r\n\tif (window.getComputedStyle)\r\n\t exports.computedStyle = function(element, style) {\r\n\t if (style)\r\n\t return (window.getComputedStyle(element, \"\") || {})[style] || \"\";\r\n\t return window.getComputedStyle(element, \"\") || {};\r\n\t };\r\n\telse\r\n\t exports.computedStyle = function(element, style) {\r\n\t if (style)\r\n\t return element.currentStyle[style];\r\n\t return element.currentStyle;\r\n\t };\r\n\texports.setInnerHtml = function(el, innerHtml) {\r\n\t var element = el.cloneNode(false);//document.createElement(\"div\");\r\n\t element.innerHTML = innerHtml;\r\n\t el.parentNode.replaceChild(element, el);\r\n\t return element;\r\n\t};\r\n\r\n\tif (\"textContent\" in document.documentElement) {\r\n\t exports.setInnerText = function(el, innerText) {\r\n\t el.textContent = innerText;\r\n\t };\r\n\r\n\t exports.getInnerText = function(el) {\r\n\t return el.textContent;\r\n\t };\r\n\t}\r\n\telse {\r\n\t exports.setInnerText = function(el, innerText) {\r\n\t el.innerText = innerText;\r\n\t };\r\n\r\n\t exports.getInnerText = function(el) {\r\n\t return el.innerText;\r\n\t };\r\n\t}\r\n\r\n\texports.getParentWindow = function(document) {\r\n\t return document.defaultView || document.parentWindow;\r\n\t};\r\n\r\n\t});\r\n\r\n\tace.define(\"ace/lib/oop\",[\"require\",\"exports\",\"module\"], function(acequire, exports, module) {\r\n\t\"use strict\";\r\n\r\n\texports.inherits = function(ctor, superCtor) {\r\n\t ctor.super_ = superCtor;\r\n\t ctor.prototype = Object.create(superCtor.prototype, {\r\n\t constructor: {\r\n\t value: ctor,\r\n\t enumerable: false,\r\n\t writable: true,\r\n\t configurable: true\r\n\t }\r\n\t });\r\n\t};\r\n\r\n\texports.mixin = function(obj, mixin) {\r\n\t for (var key in mixin) {\r\n\t obj[key] = mixin[key];\r\n\t }\r\n\t return obj;\r\n\t};\r\n\r\n\texports.implement = function(proto, mixin) {\r\n\t exports.mixin(proto, mixin);\r\n\t};\r\n\r\n\t});\r\n\r\n\tace.define(\"ace/lib/keys\",[\"require\",\"exports\",\"module\",\"ace/lib/fixoldbrowsers\",\"ace/lib/oop\"], function(acequire, exports, module) {\r\n\t\"use strict\";\r\n\r\n\tacequire(\"./fixoldbrowsers\");\r\n\r\n\tvar oop = acequire(\"./oop\");\r\n\tvar Keys = (function() {\r\n\t var ret = {\r\n\t MODIFIER_KEYS: {\r\n\t 16: 'Shift', 17: 'Ctrl', 18: 'Alt', 224: 'Meta'\r\n\t },\r\n\r\n\t KEY_MODS: {\r\n\t \"ctrl\": 1, \"alt\": 2, \"option\" : 2, \"shift\": 4,\r\n\t \"super\": 8, \"meta\": 8, \"command\": 8, \"cmd\": 8\r\n\t },\r\n\r\n\t FUNCTION_KEYS : {\r\n\t 8 : \"Backspace\",\r\n\t 9 : \"Tab\",\r\n\t 13 : \"Return\",\r\n\t 19 : \"Pause\",\r\n\t 27 : \"Esc\",\r\n\t 32 : \"Space\",\r\n\t 33 : \"PageUp\",\r\n\t 34 : \"PageDown\",\r\n\t 35 : \"End\",\r\n\t 36 : \"Home\",\r\n\t 37 : \"Left\",\r\n\t 38 : \"Up\",\r\n\t 39 : \"Right\",\r\n\t 40 : \"Down\",\r\n\t 44 : \"Print\",\r\n\t 45 : \"Insert\",\r\n\t 46 : \"Delete\",\r\n\t 96 : \"Numpad0\",\r\n\t 97 : \"Numpad1\",\r\n\t 98 : \"Numpad2\",\r\n\t 99 : \"Numpad3\",\r\n\t 100: \"Numpad4\",\r\n\t 101: \"Numpad5\",\r\n\t 102: \"Numpad6\",\r\n\t 103: \"Numpad7\",\r\n\t 104: \"Numpad8\",\r\n\t 105: \"Numpad9\",\r\n\t '-13': \"NumpadEnter\",\r\n\t 112: \"F1\",\r\n\t 113: \"F2\",\r\n\t 114: \"F3\",\r\n\t 115: \"F4\",\r\n\t 116: \"F5\",\r\n\t 117: \"F6\",\r\n\t 118: \"F7\",\r\n\t 119: \"F8\",\r\n\t 120: \"F9\",\r\n\t 121: \"F10\",\r\n\t 122: \"F11\",\r\n\t 123: \"F12\",\r\n\t 144: \"Numlock\",\r\n\t 145: \"Scrolllock\"\r\n\t },\r\n\r\n\t PRINTABLE_KEYS: {\r\n\t 32: ' ', 48: '0', 49: '1', 50: '2', 51: '3', 52: '4', 53: '5',\r\n\t 54: '6', 55: '7', 56: '8', 57: '9', 59: ';', 61: '=', 65: 'a',\r\n\t 66: 'b', 67: 'c', 68: 'd', 69: 'e', 70: 'f', 71: 'g', 72: 'h',\r\n\t 73: 'i', 74: 'j', 75: 'k', 76: 'l', 77: 'm', 78: 'n', 79: 'o',\r\n\t 80: 'p', 81: 'q', 82: 'r', 83: 's', 84: 't', 85: 'u', 86: 'v',\r\n\t 87: 'w', 88: 'x', 89: 'y', 90: 'z', 107: '+', 109: '-', 110: '.',\r\n\t 186: ';', 187: '=', 188: ',', 189: '-', 190: '.', 191: '/', 192: '`',\r\n\t 219: '[', 220: '\\\\',221: ']', 222: \"'\", 111: '/', 106: '*'\r\n\t }\r\n\t };\r\n\t var name, i;\r\n\t for (i in ret.FUNCTION_KEYS) {\r\n\t name = ret.FUNCTION_KEYS[i].toLowerCase();\r\n\t ret[name] = parseInt(i, 10);\r\n\t }\r\n\t for (i in ret.PRINTABLE_KEYS) {\r\n\t name = ret.PRINTABLE_KEYS[i].toLowerCase();\r\n\t ret[name] = parseInt(i, 10);\r\n\t }\r\n\t oop.mixin(ret, ret.MODIFIER_KEYS);\r\n\t oop.mixin(ret, ret.PRINTABLE_KEYS);\r\n\t oop.mixin(ret, ret.FUNCTION_KEYS);\r\n\t ret.enter = ret[\"return\"];\r\n\t ret.escape = ret.esc;\r\n\t ret.del = ret[\"delete\"];\r\n\t ret[173] = '-';\r\n\t \r\n\t (function() {\r\n\t var mods = [\"cmd\", \"ctrl\", \"alt\", \"shift\"];\r\n\t for (var i = Math.pow(2, mods.length); i--;) { \r\n\t ret.KEY_MODS[i] = mods.filter(function(x) {\r\n\t return i & ret.KEY_MODS[x];\r\n\t }).join(\"-\") + \"-\";\r\n\t }\r\n\t })();\r\n\r\n\t ret.KEY_MODS[0] = \"\";\r\n\t ret.KEY_MODS[-1] = \"input-\";\r\n\r\n\t return ret;\r\n\t})();\r\n\toop.mixin(exports, Keys);\r\n\r\n\texports.keyCodeToString = function(keyCode) {\r\n\t var keyString = Keys[keyCode];\r\n\t if (typeof keyString != \"string\")\r\n\t keyString = String.fromCharCode(keyCode);\r\n\t return keyString.toLowerCase();\r\n\t};\r\n\r\n\t});\r\n\r\n\tace.define(\"ace/lib/useragent\",[\"require\",\"exports\",\"module\"], function(acequire, exports, module) {\r\n\t\"use strict\";\r\n\texports.OS = {\r\n\t LINUX: \"LINUX\",\r\n\t MAC: \"MAC\",\r\n\t WINDOWS: \"WINDOWS\"\r\n\t};\r\n\texports.getOS = function() {\r\n\t if (exports.isMac) {\r\n\t return exports.OS.MAC;\r\n\t } else if (exports.isLinux) {\r\n\t return exports.OS.LINUX;\r\n\t } else {\r\n\t return exports.OS.WINDOWS;\r\n\t }\r\n\t};\r\n\tif (typeof navigator != \"object\")\r\n\t return;\r\n\r\n\tvar os = (navigator.platform.match(/mac|win|linux/i) || [\"other\"])[0].toLowerCase();\r\n\tvar ua = navigator.userAgent;\r\n\texports.isWin = (os == \"win\");\r\n\texports.isMac = (os == \"mac\");\r\n\texports.isLinux = (os == \"linux\");\r\n\texports.isIE = \r\n\t (navigator.appName == \"Microsoft Internet Explorer\" || navigator.appName.indexOf(\"MSAppHost\") >= 0)\r\n\t ? parseFloat((ua.match(/(?:MSIE |Trident\\/[0-9]+[\\.0-9]+;.*rv:)([0-9]+[\\.0-9]+)/)||[])[1])\r\n\t : parseFloat((ua.match(/(?:Trident\\/[0-9]+[\\.0-9]+;.*rv:)([0-9]+[\\.0-9]+)/)||[])[1]); // for ie\r\n\t \r\n\texports.isOldIE = exports.isIE && exports.isIE < 9;\r\n\texports.isGecko = exports.isMozilla = (window.Controllers || window.controllers) && window.navigator.product === \"Gecko\";\r\n\texports.isOldGecko = exports.isGecko && parseInt((ua.match(/rv\\:(\\d+)/)||[])[1], 10) < 4;\r\n\texports.isOpera = window.opera && Object.prototype.toString.call(window.opera) == \"[object Opera]\";\r\n\texports.isWebKit = parseFloat(ua.split(\"WebKit/\")[1]) || undefined;\r\n\r\n\texports.isChrome = parseFloat(ua.split(\" Chrome/\")[1]) || undefined;\r\n\r\n\texports.isAIR = ua.indexOf(\"AdobeAIR\") >= 0;\r\n\r\n\texports.isIPad = ua.indexOf(\"iPad\") >= 0;\r\n\r\n\texports.isTouchPad = ua.indexOf(\"TouchPad\") >= 0;\r\n\r\n\texports.isChromeOS = ua.indexOf(\" CrOS \") >= 0;\r\n\r\n\t});\r\n\r\n\tace.define(\"ace/lib/event\",[\"require\",\"exports\",\"module\",\"ace/lib/keys\",\"ace/lib/useragent\"], function(acequire, exports, module) {\r\n\t\"use strict\";\r\n\r\n\tvar keys = acequire(\"./keys\");\r\n\tvar useragent = acequire(\"./useragent\");\r\n\r\n\tvar pressedKeys = null;\r\n\tvar ts = 0;\r\n\r\n\texports.addListener = function(elem, type, callback) {\r\n\t if (elem.addEventListener) {\r\n\t return elem.addEventListener(type, callback, false);\r\n\t }\r\n\t if (elem.attachEvent) {\r\n\t var wrapper = function() {\r\n\t callback.call(elem, window.event);\r\n\t };\r\n\t callback._wrapper = wrapper;\r\n\t elem.attachEvent(\"on\" + type, wrapper);\r\n\t }\r\n\t};\r\n\r\n\texports.removeListener = function(elem, type, callback) {\r\n\t if (elem.removeEventListener) {\r\n\t return elem.removeEventListener(type, callback, false);\r\n\t }\r\n\t if (elem.detachEvent) {\r\n\t elem.detachEvent(\"on\" + type, callback._wrapper || callback);\r\n\t }\r\n\t};\r\n\texports.stopEvent = function(e) {\r\n\t exports.stopPropagation(e);\r\n\t exports.preventDefault(e);\r\n\t return false;\r\n\t};\r\n\r\n\texports.stopPropagation = function(e) {\r\n\t if (e.stopPropagation)\r\n\t e.stopPropagation();\r\n\t else\r\n\t e.cancelBubble = true;\r\n\t};\r\n\r\n\texports.preventDefault = function(e) {\r\n\t if (e.preventDefault)\r\n\t e.preventDefault();\r\n\t else\r\n\t e.returnValue = false;\r\n\t};\r\n\texports.getButton = function(e) {\r\n\t if (e.type == \"dblclick\")\r\n\t return 0;\r\n\t if (e.type == \"contextmenu\" || (useragent.isMac && (e.ctrlKey && !e.altKey && !e.shiftKey)))\r\n\t return 2;\r\n\t if (e.preventDefault) {\r\n\t return e.button;\r\n\t }\r\n\t else {\r\n\t return {1:0, 2:2, 4:1}[e.button];\r\n\t }\r\n\t};\r\n\r\n\texports.capture = function(el, eventHandler, releaseCaptureHandler) {\r\n\t function onMouseUp(e) {\r\n\t eventHandler && eventHandler(e);\r\n\t releaseCaptureHandler && releaseCaptureHandler(e);\r\n\r\n\t exports.removeListener(document, \"mousemove\", eventHandler, true);\r\n\t exports.removeListener(document, \"mouseup\", onMouseUp, true);\r\n\t exports.removeListener(document, \"dragstart\", onMouseUp, true);\r\n\t }\r\n\r\n\t exports.addListener(document, \"mousemove\", eventHandler, true);\r\n\t exports.addListener(document, \"mouseup\", onMouseUp, true);\r\n\t exports.addListener(document, \"dragstart\", onMouseUp, true);\r\n\t \r\n\t return onMouseUp;\r\n\t};\r\n\r\n\texports.addTouchMoveListener = function (el, callback) {\r\n\t if (\"ontouchmove\" in el) {\r\n\t var startx, starty;\r\n\t exports.addListener(el, \"touchstart\", function (e) {\r\n\t var touchObj = e.changedTouches[0];\r\n\t startx = touchObj.clientX;\r\n\t starty = touchObj.clientY;\r\n\t });\r\n\t exports.addListener(el, \"touchmove\", function (e) {\r\n\t var factor = 1,\r\n\t touchObj = e.changedTouches[0];\r\n\r\n\t e.wheelX = -(touchObj.clientX - startx) / factor;\r\n\t e.wheelY = -(touchObj.clientY - starty) / factor;\r\n\r\n\t startx = touchObj.clientX;\r\n\t starty = touchObj.clientY;\r\n\r\n\t callback(e);\r\n\t });\r\n\t } \r\n\t};\r\n\r\n\texports.addMouseWheelListener = function(el, callback) {\r\n\t if (\"onmousewheel\" in el) {\r\n\t exports.addListener(el, \"mousewheel\", function(e) {\r\n\t var factor = 8;\r\n\t if (e.wheelDeltaX !== undefined) {\r\n\t e.wheelX = -e.wheelDeltaX / factor;\r\n\t e.wheelY = -e.wheelDeltaY / factor;\r\n\t } else {\r\n\t e.wheelX = 0;\r\n\t e.wheelY = -e.wheelDelta / factor;\r\n\t }\r\n\t callback(e);\r\n\t });\r\n\t } else if (\"onwheel\" in el) {\r\n\t exports.addListener(el, \"wheel\", function(e) {\r\n\t var factor = 0.35;\r\n\t switch (e.deltaMode) {\r\n\t case e.DOM_DELTA_PIXEL:\r\n\t e.wheelX = e.deltaX * factor || 0;\r\n\t e.wheelY = e.deltaY * factor || 0;\r\n\t break;\r\n\t case e.DOM_DELTA_LINE:\r\n\t case e.DOM_DELTA_PAGE:\r\n\t e.wheelX = (e.deltaX || 0) * 5;\r\n\t e.wheelY = (e.deltaY || 0) * 5;\r\n\t break;\r\n\t }\r\n\t \r\n\t callback(e);\r\n\t });\r\n\t } else {\r\n\t exports.addListener(el, \"DOMMouseScroll\", function(e) {\r\n\t if (e.axis && e.axis == e.HORIZONTAL_AXIS) {\r\n\t e.wheelX = (e.detail || 0) * 5;\r\n\t e.wheelY = 0;\r\n\t } else {\r\n\t e.wheelX = 0;\r\n\t e.wheelY = (e.detail || 0) * 5;\r\n\t }\r\n\t callback(e);\r\n\t });\r\n\t }\r\n\t};\r\n\r\n\texports.addMultiMouseDownListener = function(elements, timeouts, eventHandler, callbackName) {\r\n\t var clicks = 0;\r\n\t var startX, startY, timer; \r\n\t var eventNames = {\r\n\t 2: \"dblclick\",\r\n\t 3: \"tripleclick\",\r\n\t 4: \"quadclick\"\r\n\t };\r\n\r\n\t function onMousedown(e) {\r\n\t if (exports.getButton(e) !== 0) {\r\n\t clicks = 0;\r\n\t } else if (e.detail > 1) {\r\n\t clicks++;\r\n\t if (clicks > 4)\r\n\t clicks = 1;\r\n\t } else {\r\n\t clicks = 1;\r\n\t }\r\n\t if (useragent.isIE) {\r\n\t var isNewClick = Math.abs(e.clientX - startX) > 5 || Math.abs(e.clientY - startY) > 5;\r\n\t if (!timer || isNewClick)\r\n\t clicks = 1;\r\n\t if (timer)\r\n\t clearTimeout(timer);\r\n\t timer = setTimeout(function() {timer = null}, timeouts[clicks - 1] || 600);\r\n\r\n\t if (clicks == 1) {\r\n\t startX = e.clientX;\r\n\t startY = e.clientY;\r\n\t }\r\n\t }\r\n\t \r\n\t e._clicks = clicks;\r\n\r\n\t eventHandler[callbackName](\"mousedown\", e);\r\n\r\n\t if (clicks > 4)\r\n\t clicks = 0;\r\n\t else if (clicks > 1)\r\n\t return eventHandler[callbackName](eventNames[clicks], e);\r\n\t }\r\n\t function onDblclick(e) {\r\n\t clicks = 2;\r\n\t if (timer)\r\n\t clearTimeout(timer);\r\n\t timer = setTimeout(function() {timer = null}, timeouts[clicks - 1] || 600);\r\n\t eventHandler[callbackName](\"mousedown\", e);\r\n\t eventHandler[callbackName](eventNames[clicks], e);\r\n\t }\r\n\t if (!Array.isArray(elements))\r\n\t elements = [elements];\r\n\t elements.forEach(function(el) {\r\n\t exports.addListener(el, \"mousedown\", onMousedown);\r\n\t if (useragent.isOldIE)\r\n\t exports.addListener(el, \"dblclick\", onDblclick);\r\n\t });\r\n\t};\r\n\r\n\tvar getModifierHash = useragent.isMac && useragent.isOpera && !(\"KeyboardEvent\" in window)\r\n\t ? function(e) {\r\n\t return 0 | (e.metaKey ? 1 : 0) | (e.altKey ? 2 : 0) | (e.shiftKey ? 4 : 0) | (e.ctrlKey ? 8 : 0);\r\n\t }\r\n\t : function(e) {\r\n\t return 0 | (e.ctrlKey ? 1 : 0) | (e.altKey ? 2 : 0) | (e.shiftKey ? 4 : 0) | (e.metaKey ? 8 : 0);\r\n\t };\r\n\r\n\texports.getModifierString = function(e) {\r\n\t return keys.KEY_MODS[getModifierHash(e)];\r\n\t};\r\n\r\n\tfunction normalizeCommandKeys(callback, e, keyCode) {\r\n\t var hashId = getModifierHash(e);\r\n\r\n\t if (!useragent.isMac && pressedKeys) {\r\n\t if (pressedKeys.OSKey)\r\n\t hashId |= 8;\r\n\t if (pressedKeys.altGr) {\r\n\t if ((3 & hashId) != 3)\r\n\t pressedKeys.altGr = 0;\r\n\t else\r\n\t return;\r\n\t }\r\n\t if (keyCode === 18 || keyCode === 17) {\r\n\t var location = \"location\" in e ? e.location : e.keyLocation;\r\n\t if (keyCode === 17 && location === 1) {\r\n\t if (pressedKeys[keyCode] == 1)\r\n\t ts = e.timeStamp;\r\n\t } else if (keyCode === 18 && hashId === 3 && location === 2) {\r\n\t var dt = e.timeStamp - ts;\r\n\t if (dt < 50)\r\n\t pressedKeys.altGr = true;\r\n\t }\r\n\t }\r\n\t }\r\n\t \r\n\t if (keyCode in keys.MODIFIER_KEYS) {\r\n\t keyCode = -1;\r\n\t }\r\n\t if (hashId & 8 && (keyCode >= 91 && keyCode <= 93)) {\r\n\t keyCode = -1;\r\n\t }\r\n\t \r\n\t if (!hashId && keyCode === 13) {\r\n\t var location = \"location\" in e ? e.location : e.keyLocation;\r\n\t if (location === 3) {\r\n\t callback(e, hashId, -keyCode);\r\n\t if (e.defaultPrevented)\r\n\t return;\r\n\t }\r\n\t }\r\n\t \r\n\t if (useragent.isChromeOS && hashId & 8) {\r\n\t callback(e, hashId, keyCode);\r\n\t if (e.defaultPrevented)\r\n\t return;\r\n\t else\r\n\t hashId &= ~8;\r\n\t }\r\n\t if (!hashId && !(keyCode in keys.FUNCTION_KEYS) && !(keyCode in keys.PRINTABLE_KEYS)) {\r\n\t return false;\r\n\t }\r\n\t \r\n\t return callback(e, hashId, keyCode);\r\n\t}\r\n\r\n\r\n\texports.addCommandKeyListener = function(el, callback) {\r\n\t var addListener = exports.addListener;\r\n\t if (useragent.isOldGecko || (useragent.isOpera && !(\"KeyboardEvent\" in window))) {\r\n\t var lastKeyDownKeyCode = null;\r\n\t addListener(el, \"keydown\", function(e) {\r\n\t lastKeyDownKeyCode = e.keyCode;\r\n\t });\r\n\t addListener(el, \"keypress\", function(e) {\r\n\t return normalizeCommandKeys(callback, e, lastKeyDownKeyCode);\r\n\t });\r\n\t } else {\r\n\t var lastDefaultPrevented = null;\r\n\r\n\t addListener(el, \"keydown\", function(e) {\r\n\t var keyCode = e.keyCode;\r\n\t pressedKeys[keyCode] = (pressedKeys[keyCode] || 0) + 1;\r\n\t if (keyCode == 91 || keyCode == 92) {\r\n\t pressedKeys.OSKey = true;\r\n\t } else if (pressedKeys.OSKey) {\r\n\t if (e.timeStamp - pressedKeys.lastT > 200 && pressedKeys.count == 1)\r\n\t resetPressedKeys();\r\n\t }\r\n\t if (pressedKeys[keyCode] == 1)\r\n\t pressedKeys.count++;\r\n\t pressedKeys.lastT = e.timeStamp;\r\n\t var result = normalizeCommandKeys(callback, e, keyCode);\r\n\t lastDefaultPrevented = e.defaultPrevented;\r\n\t return result;\r\n\t });\r\n\r\n\t addListener(el, \"keypress\", function(e) {\r\n\t if (lastDefaultPrevented && (e.ctrlKey || e.altKey || e.shiftKey || e.metaKey)) {\r\n\t exports.stopEvent(e);\r\n\t lastDefaultPrevented = null;\r\n\t }\r\n\t });\r\n\r\n\t addListener(el, \"keyup\", function(e) {\r\n\t var keyCode = e.keyCode;\r\n\t if (!pressedKeys[keyCode]) {\r\n\t resetPressedKeys();\r\n\t } else {\r\n\t pressedKeys.count = Math.max(pressedKeys.count - 1, 0);\r\n\t }\r\n\t if (keyCode == 91 || keyCode == 92) {\r\n\t pressedKeys.OSKey = false;\r\n\t }\r\n\t pressedKeys[keyCode] = null;\r\n\t });\r\n\r\n\t if (!pressedKeys) {\r\n\t resetPressedKeys();\r\n\t addListener(window, \"focus\", resetPressedKeys);\r\n\t }\r\n\t }\r\n\t};\r\n\tfunction resetPressedKeys() {\r\n\t pressedKeys = Object.create(null);\r\n\t pressedKeys.count = 0;\r\n\t pressedKeys.lastT = 0;\r\n\t}\r\n\r\n\tif (typeof window == \"object\" && window.postMessage && !useragent.isOldIE) {\r\n\t var postMessageId = 1;\r\n\t exports.nextTick = function(callback, win) {\r\n\t win = win || window;\r\n\t var messageName = \"zero-timeout-message-\" + postMessageId;\r\n\t exports.addListener(win, \"message\", function listener(e) {\r\n\t if (e.data == messageName) {\r\n\t exports.stopPropagation(e);\r\n\t exports.removeListener(win, \"message\", listener);\r\n\t callback();\r\n\t }\r\n\t });\r\n\t win.postMessage(messageName, \"*\");\r\n\t };\r\n\t}\r\n\r\n\r\n\texports.nextFrame = typeof window == \"object\" && (window.requestAnimationFrame\r\n\t || window.mozRequestAnimationFrame\r\n\t || window.webkitRequestAnimationFrame\r\n\t || window.msRequestAnimationFrame\r\n\t || window.oRequestAnimationFrame);\r\n\r\n\tif (exports.nextFrame)\r\n\t exports.nextFrame = exports.nextFrame.bind(window);\r\n\telse\r\n\t exports.nextFrame = function(callback) {\r\n\t setTimeout(callback, 17);\r\n\t };\r\n\t});\r\n\r\n\tace.define(\"ace/lib/lang\",[\"require\",\"exports\",\"module\"], function(acequire, exports, module) {\r\n\t\"use strict\";\r\n\r\n\texports.last = function(a) {\r\n\t return a[a.length - 1];\r\n\t};\r\n\r\n\texports.stringReverse = function(string) {\r\n\t return string.split(\"\").reverse().join(\"\");\r\n\t};\r\n\r\n\texports.stringRepeat = function (string, count) {\r\n\t var result = '';\r\n\t while (count > 0) {\r\n\t if (count & 1)\r\n\t result += string;\r\n\r\n\t if (count >>= 1)\r\n\t string += string;\r\n\t }\r\n\t return result;\r\n\t};\r\n\r\n\tvar trimBeginRegexp = /^\\s\\s*/;\r\n\tvar trimEndRegexp = /\\s\\s*$/;\r\n\r\n\texports.stringTrimLeft = function (string) {\r\n\t return string.replace(trimBeginRegexp, '');\r\n\t};\r\n\r\n\texports.stringTrimRight = function (string) {\r\n\t return string.replace(trimEndRegexp, '');\r\n\t};\r\n\r\n\texports.copyObject = function(obj) {\r\n\t var copy = {};\r\n\t for (var key in obj) {\r\n\t copy[key] = obj[key];\r\n\t }\r\n\t return copy;\r\n\t};\r\n\r\n\texports.copyArray = function(array){\r\n\t var copy = [];\r\n\t for (var i=0, l=array.length; i 1);\r\n\t return ev.preventDefault();\r\n\t };\r\n\r\n\t this.startSelect = function(pos, waitForClickSelection) {\r\n\t pos = pos || this.editor.renderer.screenToTextCoordinates(this.x, this.y);\r\n\t var editor = this.editor;\r\n\t editor.$blockScrolling++;\r\n\t if (this.mousedownEvent.getShiftKey())\r\n\t editor.selection.selectToPosition(pos);\r\n\t else if (!waitForClickSelection)\r\n\t editor.selection.moveToPosition(pos);\r\n\t if (!waitForClickSelection)\r\n\t this.select();\r\n\t if (editor.renderer.scroller.setCapture) {\r\n\t editor.renderer.scroller.setCapture();\r\n\t }\r\n\t editor.setStyle(\"ace_selecting\");\r\n\t this.setState(\"select\");\r\n\t editor.$blockScrolling--;\r\n\t };\r\n\r\n\t this.select = function() {\r\n\t var anchor, editor = this.editor;\r\n\t var cursor = editor.renderer.screenToTextCoordinates(this.x, this.y);\r\n\t editor.$blockScrolling++;\r\n\t if (this.$clickSelection) {\r\n\t var cmp = this.$clickSelection.comparePoint(cursor);\r\n\r\n\t if (cmp == -1) {\r\n\t anchor = this.$clickSelection.end;\r\n\t } else if (cmp == 1) {\r\n\t anchor = this.$clickSelection.start;\r\n\t } else {\r\n\t var orientedRange = calcRangeOrientation(this.$clickSelection, cursor);\r\n\t cursor = orientedRange.cursor;\r\n\t anchor = orientedRange.anchor;\r\n\t }\r\n\t editor.selection.setSelectionAnchor(anchor.row, anchor.column);\r\n\t }\r\n\t editor.selection.selectToPosition(cursor);\r\n\t editor.$blockScrolling--;\r\n\t editor.renderer.scrollCursorIntoView();\r\n\t };\r\n\r\n\t this.extendSelectionBy = function(unitName) {\r\n\t var anchor, editor = this.editor;\r\n\t var cursor = editor.renderer.screenToTextCoordinates(this.x, this.y);\r\n\t var range = editor.selection[unitName](cursor.row, cursor.column);\r\n\t editor.$blockScrolling++;\r\n\t if (this.$clickSelection) {\r\n\t var cmpStart = this.$clickSelection.comparePoint(range.start);\r\n\t var cmpEnd = this.$clickSelection.comparePoint(range.end);\r\n\r\n\t if (cmpStart == -1 && cmpEnd <= 0) {\r\n\t anchor = this.$clickSelection.end;\r\n\t if (range.end.row != cursor.row || range.end.column != cursor.column)\r\n\t cursor = range.start;\r\n\t } else if (cmpEnd == 1 && cmpStart >= 0) {\r\n\t anchor = this.$clickSelection.start;\r\n\t if (range.start.row != cursor.row || range.start.column != cursor.column)\r\n\t cursor = range.end;\r\n\t } else if (cmpStart == -1 && cmpEnd == 1) {\r\n\t cursor = range.end;\r\n\t anchor = range.start;\r\n\t } else {\r\n\t var orientedRange = calcRangeOrientation(this.$clickSelection, cursor);\r\n\t cursor = orientedRange.cursor;\r\n\t anchor = orientedRange.anchor;\r\n\t }\r\n\t editor.selection.setSelectionAnchor(anchor.row, anchor.column);\r\n\t }\r\n\t editor.selection.selectToPosition(cursor);\r\n\t editor.$blockScrolling--;\r\n\t editor.renderer.scrollCursorIntoView();\r\n\t };\r\n\r\n\t this.selectEnd =\r\n\t this.selectAllEnd =\r\n\t this.selectByWordsEnd =\r\n\t this.selectByLinesEnd = function() {\r\n\t this.$clickSelection = null;\r\n\t this.editor.unsetStyle(\"ace_selecting\");\r\n\t if (this.editor.renderer.scroller.releaseCapture) {\r\n\t this.editor.renderer.scroller.releaseCapture();\r\n\t }\r\n\t };\r\n\r\n\t this.focusWait = function() {\r\n\t var distance = calcDistance(this.mousedownEvent.x, this.mousedownEvent.y, this.x, this.y);\r\n\t var time = Date.now();\r\n\r\n\t if (distance > DRAG_OFFSET || time - this.mousedownEvent.time > this.$focusTimout)\r\n\t this.startSelect(this.mousedownEvent.getDocumentPosition());\r\n\t };\r\n\r\n\t this.onDoubleClick = function(ev) {\r\n\t var pos = ev.getDocumentPosition();\r\n\t var editor = this.editor;\r\n\t var session = editor.session;\r\n\r\n\t var range = session.getBracketRange(pos);\r\n\t if (range) {\r\n\t if (range.isEmpty()) {\r\n\t range.start.column--;\r\n\t range.end.column++;\r\n\t }\r\n\t this.setState(\"select\");\r\n\t } else {\r\n\t range = editor.selection.getWordRange(pos.row, pos.column);\r\n\t this.setState(\"selectByWords\");\r\n\t }\r\n\t this.$clickSelection = range;\r\n\t this.select();\r\n\t };\r\n\r\n\t this.onTripleClick = function(ev) {\r\n\t var pos = ev.getDocumentPosition();\r\n\t var editor = this.editor;\r\n\r\n\t this.setState(\"selectByLines\");\r\n\t var range = editor.getSelectionRange();\r\n\t if (range.isMultiLine() && range.contains(pos.row, pos.column)) {\r\n\t this.$clickSelection = editor.selection.getLineRange(range.start.row);\r\n\t this.$clickSelection.end = editor.selection.getLineRange(range.end.row).end;\r\n\t } else {\r\n\t this.$clickSelection = editor.selection.getLineRange(pos.row);\r\n\t }\r\n\t this.select();\r\n\t };\r\n\r\n\t this.onQuadClick = function(ev) {\r\n\t var editor = this.editor;\r\n\r\n\t editor.selectAll();\r\n\t this.$clickSelection = editor.getSelectionRange();\r\n\t this.setState(\"selectAll\");\r\n\t };\r\n\r\n\t this.onMouseWheel = function(ev) {\r\n\t if (ev.getAccelKey())\r\n\t return;\r\n\t if (ev.getShiftKey() && ev.wheelY && !ev.wheelX) {\r\n\t ev.wheelX = ev.wheelY;\r\n\t ev.wheelY = 0;\r\n\t }\r\n\r\n\t var t = ev.domEvent.timeStamp;\r\n\t var dt = t - (this.$lastScrollTime||0);\r\n\t \r\n\t var editor = this.editor;\r\n\t var isScrolable = editor.renderer.isScrollableBy(ev.wheelX * ev.speed, ev.wheelY * ev.speed);\r\n\t if (isScrolable || dt < 200) {\r\n\t this.$lastScrollTime = t;\r\n\t editor.renderer.scrollBy(ev.wheelX * ev.speed, ev.wheelY * ev.speed);\r\n\t return ev.stop();\r\n\t }\r\n\t };\r\n\t \r\n\t this.onTouchMove = function (ev) {\r\n\t var t = ev.domEvent.timeStamp;\r\n\t var dt = t - (this.$lastScrollTime || 0);\r\n\r\n\t var editor = this.editor;\r\n\t var isScrolable = editor.renderer.isScrollableBy(ev.wheelX * ev.speed, ev.wheelY * ev.speed);\r\n\t if (isScrolable || dt < 200) {\r\n\t this.$lastScrollTime = t;\r\n\t editor.renderer.scrollBy(ev.wheelX * ev.speed, ev.wheelY * ev.speed);\r\n\t return ev.stop();\r\n\t }\r\n\t };\r\n\r\n\t}).call(DefaultHandlers.prototype);\r\n\r\n\texports.DefaultHandlers = DefaultHandlers;\r\n\r\n\tfunction calcDistance(ax, ay, bx, by) {\r\n\t return Math.sqrt(Math.pow(bx - ax, 2) + Math.pow(by - ay, 2));\r\n\t}\r\n\r\n\tfunction calcRangeOrientation(range, cursor) {\r\n\t if (range.start.row == range.end.row)\r\n\t var cmp = 2 * cursor.column - range.start.column - range.end.column;\r\n\t else if (range.start.row == range.end.row - 1 && !range.start.column && !range.end.column)\r\n\t var cmp = cursor.column - 4;\r\n\t else\r\n\t var cmp = 2 * cursor.row - range.start.row - range.end.row;\r\n\r\n\t if (cmp < 0)\r\n\t return {cursor: range.start, anchor: range.end};\r\n\t else\r\n\t return {cursor: range.end, anchor: range.start};\r\n\t}\r\n\r\n\t});\r\n\r\n\tace.define(\"ace/tooltip\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/dom\"], function(acequire, exports, module) {\r\n\t\"use strict\";\r\n\r\n\tvar oop = acequire(\"./lib/oop\");\r\n\tvar dom = acequire(\"./lib/dom\");\r\n\tfunction Tooltip (parentNode) {\r\n\t this.isOpen = false;\r\n\t this.$element = null;\r\n\t this.$parentNode = parentNode;\r\n\t}\r\n\r\n\t(function() {\r\n\t this.$init = function() {\r\n\t this.$element = dom.createElement(\"div\");\r\n\t this.$element.className = \"ace_tooltip\";\r\n\t this.$element.style.display = \"none\";\r\n\t this.$parentNode.appendChild(this.$element);\r\n\t return this.$element;\r\n\t };\r\n\t this.getElement = function() {\r\n\t return this.$element || this.$init();\r\n\t };\r\n\t this.setText = function(text) {\r\n\t dom.setInnerText(this.getElement(), text);\r\n\t };\r\n\t this.setHtml = function(html) {\r\n\t this.getElement().innerHTML = html;\r\n\t };\r\n\t this.setPosition = function(x, y) {\r\n\t this.getElement().style.left = x + \"px\";\r\n\t this.getElement().style.top = y + \"px\";\r\n\t };\r\n\t this.setClassName = function(className) {\r\n\t dom.addCssClass(this.getElement(), className);\r\n\t };\r\n\t this.show = function(text, x, y) {\r\n\t if (text != null)\r\n\t this.setText(text);\r\n\t if (x != null && y != null)\r\n\t this.setPosition(x, y);\r\n\t if (!this.isOpen) {\r\n\t this.getElement().style.display = \"block\";\r\n\t this.isOpen = true;\r\n\t }\r\n\t };\r\n\r\n\t this.hide = function() {\r\n\t if (this.isOpen) {\r\n\t this.getElement().style.display = \"none\";\r\n\t this.isOpen = false;\r\n\t }\r\n\t };\r\n\t this.getHeight = function() {\r\n\t return this.getElement().offsetHeight;\r\n\t };\r\n\t this.getWidth = function() {\r\n\t return this.getElement().offsetWidth;\r\n\t };\r\n\r\n\t}).call(Tooltip.prototype);\r\n\r\n\texports.Tooltip = Tooltip;\r\n\t});\r\n\r\n\tace.define(\"ace/mouse/default_gutter_handler\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\",\"ace/lib/oop\",\"ace/lib/event\",\"ace/tooltip\"], function(acequire, exports, module) {\r\n\t\"use strict\";\r\n\tvar dom = acequire(\"../lib/dom\");\r\n\tvar oop = acequire(\"../lib/oop\");\r\n\tvar event = acequire(\"../lib/event\");\r\n\tvar Tooltip = acequire(\"../tooltip\").Tooltip;\r\n\r\n\tfunction GutterHandler(mouseHandler) {\r\n\t var editor = mouseHandler.editor;\r\n\t var gutter = editor.renderer.$gutterLayer;\r\n\t var tooltip = new GutterTooltip(editor.container);\r\n\r\n\t mouseHandler.editor.setDefaultHandler(\"guttermousedown\", function(e) {\r\n\t if (!editor.isFocused() || e.getButton() != 0)\r\n\t return;\r\n\t var gutterRegion = gutter.getRegion(e);\r\n\r\n\t if (gutterRegion == \"foldWidgets\")\r\n\t return;\r\n\r\n\t var row = e.getDocumentPosition().row;\r\n\t var selection = editor.session.selection;\r\n\r\n\t if (e.getShiftKey())\r\n\t selection.selectTo(row, 0);\r\n\t else {\r\n\t if (e.domEvent.detail == 2) {\r\n\t editor.selectAll();\r\n\t return e.preventDefault();\r\n\t }\r\n\t mouseHandler.$clickSelection = editor.selection.getLineRange(row);\r\n\t }\r\n\t mouseHandler.setState(\"selectByLines\");\r\n\t mouseHandler.captureMouse(e);\r\n\t return e.preventDefault();\r\n\t });\r\n\r\n\r\n\t var tooltipTimeout, mouseEvent, tooltipAnnotation;\r\n\r\n\t function showTooltip() {\r\n\t var row = mouseEvent.getDocumentPosition().row;\r\n\t var annotation = gutter.$annotations[row];\r\n\t if (!annotation)\r\n\t return hideTooltip();\r\n\r\n\t var maxRow = editor.session.getLength();\r\n\t if (row == maxRow) {\r\n\t var screenRow = editor.renderer.pixelToScreenCoordinates(0, mouseEvent.y).row;\r\n\t var pos = mouseEvent.$pos;\r\n\t if (screenRow > editor.session.documentToScreenRow(pos.row, pos.column))\r\n\t return hideTooltip();\r\n\t }\r\n\r\n\t if (tooltipAnnotation == annotation)\r\n\t return;\r\n\t tooltipAnnotation = annotation.text.join(\"
\");\r\n\r\n\t tooltip.setHtml(tooltipAnnotation);\r\n\t tooltip.show();\r\n\t editor.on(\"mousewheel\", hideTooltip);\r\n\r\n\t if (mouseHandler.$tooltipFollowsMouse) {\r\n\t moveTooltip(mouseEvent);\r\n\t } else {\r\n\t var gutterElement = mouseEvent.domEvent.target;\r\n\t var rect = gutterElement.getBoundingClientRect();\r\n\t var style = tooltip.getElement().style;\r\n\t style.left = rect.right + \"px\";\r\n\t style.top = rect.bottom + \"px\";\r\n\t }\r\n\t }\r\n\r\n\t function hideTooltip() {\r\n\t if (tooltipTimeout)\r\n\t tooltipTimeout = clearTimeout(tooltipTimeout);\r\n\t if (tooltipAnnotation) {\r\n\t tooltip.hide();\r\n\t tooltipAnnotation = null;\r\n\t editor.removeEventListener(\"mousewheel\", hideTooltip);\r\n\t }\r\n\t }\r\n\r\n\t function moveTooltip(e) {\r\n\t tooltip.setPosition(e.x, e.y);\r\n\t }\r\n\r\n\t mouseHandler.editor.setDefaultHandler(\"guttermousemove\", function(e) {\r\n\t var target = e.domEvent.target || e.domEvent.srcElement;\r\n\t if (dom.hasCssClass(target, \"ace_fold-widget\"))\r\n\t return hideTooltip();\r\n\r\n\t if (tooltipAnnotation && mouseHandler.$tooltipFollowsMouse)\r\n\t moveTooltip(e);\r\n\r\n\t mouseEvent = e;\r\n\t if (tooltipTimeout)\r\n\t return;\r\n\t tooltipTimeout = setTimeout(function() {\r\n\t tooltipTimeout = null;\r\n\t if (mouseEvent && !mouseHandler.isMousePressed)\r\n\t showTooltip();\r\n\t else\r\n\t hideTooltip();\r\n\t }, 50);\r\n\t });\r\n\r\n\t event.addListener(editor.renderer.$gutter, \"mouseout\", function(e) {\r\n\t mouseEvent = null;\r\n\t if (!tooltipAnnotation || tooltipTimeout)\r\n\t return;\r\n\r\n\t tooltipTimeout = setTimeout(function() {\r\n\t tooltipTimeout = null;\r\n\t hideTooltip();\r\n\t }, 50);\r\n\t });\r\n\t \r\n\t editor.on(\"changeSession\", hideTooltip);\r\n\t}\r\n\r\n\tfunction GutterTooltip(parentNode) {\r\n\t Tooltip.call(this, parentNode);\r\n\t}\r\n\r\n\toop.inherits(GutterTooltip, Tooltip);\r\n\r\n\t(function(){\r\n\t this.setPosition = function(x, y) {\r\n\t var windowWidth = window.innerWidth || document.documentElement.clientWidth;\r\n\t var windowHeight = window.innerHeight || document.documentElement.clientHeight;\r\n\t var width = this.getWidth();\r\n\t var height = this.getHeight();\r\n\t x += 15;\r\n\t y += 15;\r\n\t if (x + width > windowWidth) {\r\n\t x -= (x + width) - windowWidth;\r\n\t }\r\n\t if (y + height > windowHeight) {\r\n\t y -= 20 + height;\r\n\t }\r\n\t Tooltip.prototype.setPosition.call(this, x, y);\r\n\t };\r\n\r\n\t}).call(GutterTooltip.prototype);\r\n\r\n\r\n\r\n\texports.GutterHandler = GutterHandler;\r\n\r\n\t});\r\n\r\n\tace.define(\"ace/mouse/mouse_event\",[\"require\",\"exports\",\"module\",\"ace/lib/event\",\"ace/lib/useragent\"], function(acequire, exports, module) {\r\n\t\"use strict\";\r\n\r\n\tvar event = acequire(\"../lib/event\");\r\n\tvar useragent = acequire(\"../lib/useragent\");\r\n\tvar MouseEvent = exports.MouseEvent = function(domEvent, editor) {\r\n\t this.domEvent = domEvent;\r\n\t this.editor = editor;\r\n\t \r\n\t this.x = this.clientX = domEvent.clientX;\r\n\t this.y = this.clientY = domEvent.clientY;\r\n\r\n\t this.$pos = null;\r\n\t this.$inSelection = null;\r\n\t \r\n\t this.propagationStopped = false;\r\n\t this.defaultPrevented = false;\r\n\t};\r\n\r\n\t(function() { \r\n\t \r\n\t this.stopPropagation = function() {\r\n\t event.stopPropagation(this.domEvent);\r\n\t this.propagationStopped = true;\r\n\t };\r\n\t \r\n\t this.preventDefault = function() {\r\n\t event.preventDefault(this.domEvent);\r\n\t this.defaultPrevented = true;\r\n\t };\r\n\t \r\n\t this.stop = function() {\r\n\t this.stopPropagation();\r\n\t this.preventDefault();\r\n\t };\r\n\t this.getDocumentPosition = function() {\r\n\t if (this.$pos)\r\n\t return this.$pos;\r\n\t \r\n\t this.$pos = this.editor.renderer.screenToTextCoordinates(this.clientX, this.clientY);\r\n\t return this.$pos;\r\n\t };\r\n\t this.inSelection = function() {\r\n\t if (this.$inSelection !== null)\r\n\t return this.$inSelection;\r\n\t \r\n\t var editor = this.editor;\r\n\t \r\n\r\n\t var selectionRange = editor.getSelectionRange();\r\n\t if (selectionRange.isEmpty())\r\n\t this.$inSelection = false;\r\n\t else {\r\n\t var pos = this.getDocumentPosition();\r\n\t this.$inSelection = selectionRange.contains(pos.row, pos.column);\r\n\t }\r\n\r\n\t return this.$inSelection;\r\n\t };\r\n\t this.getButton = function() {\r\n\t return event.getButton(this.domEvent);\r\n\t };\r\n\t this.getShiftKey = function() {\r\n\t return this.domEvent.shiftKey;\r\n\t };\r\n\t \r\n\t this.getAccelKey = useragent.isMac\r\n\t ? function() { return this.domEvent.metaKey; }\r\n\t : function() { return this.domEvent.ctrlKey; };\r\n\t \r\n\t}).call(MouseEvent.prototype);\r\n\r\n\t});\r\n\r\n\tace.define(\"ace/mouse/dragdrop_handler\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\",\"ace/lib/event\",\"ace/lib/useragent\"], function(acequire, exports, module) {\r\n\t\"use strict\";\r\n\r\n\tvar dom = acequire(\"../lib/dom\");\r\n\tvar event = acequire(\"../lib/event\");\r\n\tvar useragent = acequire(\"../lib/useragent\");\r\n\r\n\tvar AUTOSCROLL_DELAY = 200;\r\n\tvar SCROLL_CURSOR_DELAY = 200;\r\n\tvar SCROLL_CURSOR_HYSTERESIS = 5;\r\n\r\n\tfunction DragdropHandler(mouseHandler) {\r\n\r\n\t var editor = mouseHandler.editor;\r\n\r\n\t var blankImage = dom.createElement(\"img\");\r\n\t blankImage.src = \"data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\";\r\n\t if (useragent.isOpera)\r\n\t blankImage.style.cssText = \"width:1px;height:1px;position:fixed;top:0;left:0;z-index:2147483647;opacity:0;\";\r\n\r\n\t var exports = [\"dragWait\", \"dragWaitEnd\", \"startDrag\", \"dragReadyEnd\", \"onMouseDrag\"];\r\n\r\n\t exports.forEach(function(x) {\r\n\t mouseHandler[x] = this[x];\r\n\t }, this);\r\n\t editor.addEventListener(\"mousedown\", this.onMouseDown.bind(mouseHandler));\r\n\r\n\r\n\t var mouseTarget = editor.container;\r\n\t var dragSelectionMarker, x, y;\r\n\t var timerId, range;\r\n\t var dragCursor, counter = 0;\r\n\t var dragOperation;\r\n\t var isInternal;\r\n\t var autoScrollStartTime;\r\n\t var cursorMovedTime;\r\n\t var cursorPointOnCaretMoved;\r\n\r\n\t this.onDragStart = function(e) {\r\n\t if (this.cancelDrag || !mouseTarget.draggable) {\r\n\t var self = this;\r\n\t setTimeout(function(){\r\n\t self.startSelect();\r\n\t self.captureMouse(e);\r\n\t }, 0);\r\n\t return e.preventDefault();\r\n\t }\r\n\t range = editor.getSelectionRange();\r\n\r\n\t var dataTransfer = e.dataTransfer;\r\n\t dataTransfer.effectAllowed = editor.getReadOnly() ? \"copy\" : \"copyMove\";\r\n\t if (useragent.isOpera) {\r\n\t editor.container.appendChild(blankImage);\r\n\t blankImage.scrollTop = 0;\r\n\t }\r\n\t dataTransfer.setDragImage && dataTransfer.setDragImage(blankImage, 0, 0);\r\n\t if (useragent.isOpera) {\r\n\t editor.container.removeChild(blankImage);\r\n\t }\r\n\t dataTransfer.clearData();\r\n\t dataTransfer.setData(\"Text\", editor.session.getTextRange());\r\n\r\n\t isInternal = true;\r\n\t this.setState(\"drag\");\r\n\t };\r\n\r\n\t this.onDragEnd = function(e) {\r\n\t mouseTarget.draggable = false;\r\n\t isInternal = false;\r\n\t this.setState(null);\r\n\t if (!editor.getReadOnly()) {\r\n\t var dropEffect = e.dataTransfer.dropEffect;\r\n\t if (!dragOperation && dropEffect == \"move\")\r\n\t editor.session.remove(editor.getSelectionRange());\r\n\t editor.renderer.$cursorLayer.setBlinking(true);\r\n\t }\r\n\t this.editor.unsetStyle(\"ace_dragging\");\r\n\t this.editor.renderer.setCursorStyle(\"\");\r\n\t };\r\n\r\n\t this.onDragEnter = function(e) {\r\n\t if (editor.getReadOnly() || !canAccept(e.dataTransfer))\r\n\t return;\r\n\t x = e.clientX;\r\n\t y = e.clientY;\r\n\t if (!dragSelectionMarker)\r\n\t addDragMarker();\r\n\t counter++;\r\n\t e.dataTransfer.dropEffect = dragOperation = getDropEffect(e);\r\n\t return event.preventDefault(e);\r\n\t };\r\n\r\n\t this.onDragOver = function(e) {\r\n\t if (editor.getReadOnly() || !canAccept(e.dataTransfer))\r\n\t return;\r\n\t x = e.clientX;\r\n\t y = e.clientY;\r\n\t if (!dragSelectionMarker) {\r\n\t addDragMarker();\r\n\t counter++;\r\n\t }\r\n\t if (onMouseMoveTimer !== null)\r\n\t onMouseMoveTimer = null;\r\n\r\n\t e.dataTransfer.dropEffect = dragOperation = getDropEffect(e);\r\n\t return event.preventDefault(e);\r\n\t };\r\n\r\n\t this.onDragLeave = function(e) {\r\n\t counter--;\r\n\t if (counter <= 0 && dragSelectionMarker) {\r\n\t clearDragMarker();\r\n\t dragOperation = null;\r\n\t return event.preventDefault(e);\r\n\t }\r\n\t };\r\n\r\n\t this.onDrop = function(e) {\r\n\t if (!dragCursor)\r\n\t return;\r\n\t var dataTransfer = e.dataTransfer;\r\n\t if (isInternal) {\r\n\t switch (dragOperation) {\r\n\t case \"move\":\r\n\t if (range.contains(dragCursor.row, dragCursor.column)) {\r\n\t range = {\r\n\t start: dragCursor,\r\n\t end: dragCursor\r\n\t };\r\n\t } else {\r\n\t range = editor.moveText(range, dragCursor);\r\n\t }\r\n\t break;\r\n\t case \"copy\":\r\n\t range = editor.moveText(range, dragCursor, true);\r\n\t break;\r\n\t }\r\n\t } else {\r\n\t var dropData = dataTransfer.getData('Text');\r\n\t range = {\r\n\t start: dragCursor,\r\n\t end: editor.session.insert(dragCursor, dropData)\r\n\t };\r\n\t editor.focus();\r\n\t dragOperation = null;\r\n\t }\r\n\t clearDragMarker();\r\n\t return event.preventDefault(e);\r\n\t };\r\n\r\n\t event.addListener(mouseTarget, \"dragstart\", this.onDragStart.bind(mouseHandler));\r\n\t event.addListener(mouseTarget, \"dragend\", this.onDragEnd.bind(mouseHandler));\r\n\t event.addListener(mouseTarget, \"dragenter\", this.onDragEnter.bind(mouseHandler));\r\n\t event.addListener(mouseTarget, \"dragover\", this.onDragOver.bind(mouseHandler));\r\n\t event.addListener(mouseTarget, \"dragleave\", this.onDragLeave.bind(mouseHandler));\r\n\t event.addListener(mouseTarget, \"drop\", this.onDrop.bind(mouseHandler));\r\n\r\n\t function scrollCursorIntoView(cursor, prevCursor) {\r\n\t var now = Date.now();\r\n\t var vMovement = !prevCursor || cursor.row != prevCursor.row;\r\n\t var hMovement = !prevCursor || cursor.column != prevCursor.column;\r\n\t if (!cursorMovedTime || vMovement || hMovement) {\r\n\t editor.$blockScrolling += 1;\r\n\t editor.moveCursorToPosition(cursor);\r\n\t editor.$blockScrolling -= 1;\r\n\t cursorMovedTime = now;\r\n\t cursorPointOnCaretMoved = {x: x, y: y};\r\n\t } else {\r\n\t var distance = calcDistance(cursorPointOnCaretMoved.x, cursorPointOnCaretMoved.y, x, y);\r\n\t if (distance > SCROLL_CURSOR_HYSTERESIS) {\r\n\t cursorMovedTime = null;\r\n\t } else if (now - cursorMovedTime >= SCROLL_CURSOR_DELAY) {\r\n\t editor.renderer.scrollCursorIntoView();\r\n\t cursorMovedTime = null;\r\n\t }\r\n\t }\r\n\t }\r\n\r\n\t function autoScroll(cursor, prevCursor) {\r\n\t var now = Date.now();\r\n\t var lineHeight = editor.renderer.layerConfig.lineHeight;\r\n\t var characterWidth = editor.renderer.layerConfig.characterWidth;\r\n\t var editorRect = editor.renderer.scroller.getBoundingClientRect();\r\n\t var offsets = {\r\n\t x: {\r\n\t left: x - editorRect.left,\r\n\t right: editorRect.right - x\r\n\t },\r\n\t y: {\r\n\t top: y - editorRect.top,\r\n\t bottom: editorRect.bottom - y\r\n\t }\r\n\t };\r\n\t var nearestXOffset = Math.min(offsets.x.left, offsets.x.right);\r\n\t var nearestYOffset = Math.min(offsets.y.top, offsets.y.bottom);\r\n\t var scrollCursor = {row: cursor.row, column: cursor.column};\r\n\t if (nearestXOffset / characterWidth <= 2) {\r\n\t scrollCursor.column += (offsets.x.left < offsets.x.right ? -3 : +2);\r\n\t }\r\n\t if (nearestYOffset / lineHeight <= 1) {\r\n\t scrollCursor.row += (offsets.y.top < offsets.y.bottom ? -1 : +1);\r\n\t }\r\n\t var vScroll = cursor.row != scrollCursor.row;\r\n\t var hScroll = cursor.column != scrollCursor.column;\r\n\t var vMovement = !prevCursor || cursor.row != prevCursor.row;\r\n\t if (vScroll || (hScroll && !vMovement)) {\r\n\t if (!autoScrollStartTime)\r\n\t autoScrollStartTime = now;\r\n\t else if (now - autoScrollStartTime >= AUTOSCROLL_DELAY)\r\n\t editor.renderer.scrollCursorIntoView(scrollCursor);\r\n\t } else {\r\n\t autoScrollStartTime = null;\r\n\t }\r\n\t }\r\n\r\n\t function onDragInterval() {\r\n\t var prevCursor = dragCursor;\r\n\t dragCursor = editor.renderer.screenToTextCoordinates(x, y);\r\n\t scrollCursorIntoView(dragCursor, prevCursor);\r\n\t autoScroll(dragCursor, prevCursor);\r\n\t }\r\n\r\n\t function addDragMarker() {\r\n\t range = editor.selection.toOrientedRange();\r\n\t dragSelectionMarker = editor.session.addMarker(range, \"ace_selection\", editor.getSelectionStyle());\r\n\t editor.clearSelection();\r\n\t if (editor.isFocused())\r\n\t editor.renderer.$cursorLayer.setBlinking(false);\r\n\t clearInterval(timerId);\r\n\t onDragInterval();\r\n\t timerId = setInterval(onDragInterval, 20);\r\n\t counter = 0;\r\n\t event.addListener(document, \"mousemove\", onMouseMove);\r\n\t }\r\n\r\n\t function clearDragMarker() {\r\n\t clearInterval(timerId);\r\n\t editor.session.removeMarker(dragSelectionMarker);\r\n\t dragSelectionMarker = null;\r\n\t editor.$blockScrolling += 1;\r\n\t editor.selection.fromOrientedRange(range);\r\n\t editor.$blockScrolling -= 1;\r\n\t if (editor.isFocused() && !isInternal)\r\n\t editor.renderer.$cursorLayer.setBlinking(!editor.getReadOnly());\r\n\t range = null;\r\n\t dragCursor = null;\r\n\t counter = 0;\r\n\t autoScrollStartTime = null;\r\n\t cursorMovedTime = null;\r\n\t event.removeListener(document, \"mousemove\", onMouseMove);\r\n\t }\r\n\t var onMouseMoveTimer = null;\r\n\t function onMouseMove() {\r\n\t if (onMouseMoveTimer == null) {\r\n\t onMouseMoveTimer = setTimeout(function() {\r\n\t if (onMouseMoveTimer != null && dragSelectionMarker)\r\n\t clearDragMarker();\r\n\t }, 20);\r\n\t }\r\n\t }\r\n\r\n\t function canAccept(dataTransfer) {\r\n\t var types = dataTransfer.types;\r\n\t return !types || Array.prototype.some.call(types, function(type) {\r\n\t return type == 'text/plain' || type == 'Text';\r\n\t });\r\n\t }\r\n\r\n\t function getDropEffect(e) {\r\n\t var copyAllowed = ['copy', 'copymove', 'all', 'uninitialized'];\r\n\t var moveAllowed = ['move', 'copymove', 'linkmove', 'all', 'uninitialized'];\r\n\r\n\t var copyModifierState = useragent.isMac ? e.altKey : e.ctrlKey;\r\n\t var effectAllowed = \"uninitialized\";\r\n\t try {\r\n\t effectAllowed = e.dataTransfer.effectAllowed.toLowerCase();\r\n\t } catch (e) {}\r\n\t var dropEffect = \"none\";\r\n\r\n\t if (copyModifierState && copyAllowed.indexOf(effectAllowed) >= 0)\r\n\t dropEffect = \"copy\";\r\n\t else if (moveAllowed.indexOf(effectAllowed) >= 0)\r\n\t dropEffect = \"move\";\r\n\t else if (copyAllowed.indexOf(effectAllowed) >= 0)\r\n\t dropEffect = \"copy\";\r\n\r\n\t return dropEffect;\r\n\t }\r\n\t}\r\n\r\n\t(function() {\r\n\r\n\t this.dragWait = function() {\r\n\t var interval = Date.now() - this.mousedownEvent.time;\r\n\t if (interval > this.editor.getDragDelay())\r\n\t this.startDrag();\r\n\t };\r\n\r\n\t this.dragWaitEnd = function() {\r\n\t var target = this.editor.container;\r\n\t target.draggable = false;\r\n\t this.startSelect(this.mousedownEvent.getDocumentPosition());\r\n\t this.selectEnd();\r\n\t };\r\n\r\n\t this.dragReadyEnd = function(e) {\r\n\t this.editor.renderer.$cursorLayer.setBlinking(!this.editor.getReadOnly());\r\n\t this.editor.unsetStyle(\"ace_dragging\");\r\n\t this.editor.renderer.setCursorStyle(\"\");\r\n\t this.dragWaitEnd();\r\n\t };\r\n\r\n\t this.startDrag = function(){\r\n\t this.cancelDrag = false;\r\n\t var editor = this.editor;\r\n\t var target = editor.container;\r\n\t target.draggable = true;\r\n\t editor.renderer.$cursorLayer.setBlinking(false);\r\n\t editor.setStyle(\"ace_dragging\");\r\n\t var cursorStyle = useragent.isWin ? \"default\" : \"move\";\r\n\t editor.renderer.setCursorStyle(cursorStyle);\r\n\t this.setState(\"dragReady\");\r\n\t };\r\n\r\n\t this.onMouseDrag = function(e) {\r\n\t var target = this.editor.container;\r\n\t if (useragent.isIE && this.state == \"dragReady\") {\r\n\t var distance = calcDistance(this.mousedownEvent.x, this.mousedownEvent.y, this.x, this.y);\r\n\t if (distance > 3)\r\n\t target.dragDrop();\r\n\t }\r\n\t if (this.state === \"dragWait\") {\r\n\t var distance = calcDistance(this.mousedownEvent.x, this.mousedownEvent.y, this.x, this.y);\r\n\t if (distance > 0) {\r\n\t target.draggable = false;\r\n\t this.startSelect(this.mousedownEvent.getDocumentPosition());\r\n\t }\r\n\t }\r\n\t };\r\n\r\n\t this.onMouseDown = function(e) {\r\n\t if (!this.$dragEnabled)\r\n\t return;\r\n\t this.mousedownEvent = e;\r\n\t var editor = this.editor;\r\n\r\n\t var inSelection = e.inSelection();\r\n\t var button = e.getButton();\r\n\t var clickCount = e.domEvent.detail || 1;\r\n\t if (clickCount === 1 && button === 0 && inSelection) {\r\n\t if (e.editor.inMultiSelectMode && (e.getAccelKey() || e.getShiftKey()))\r\n\t return;\r\n\t this.mousedownEvent.time = Date.now();\r\n\t var eventTarget = e.domEvent.target || e.domEvent.srcElement;\r\n\t if (\"unselectable\" in eventTarget)\r\n\t eventTarget.unselectable = \"on\";\r\n\t if (editor.getDragDelay()) {\r\n\t if (useragent.isWebKit) {\r\n\t this.cancelDrag = true;\r\n\t var mouseTarget = editor.container;\r\n\t mouseTarget.draggable = true;\r\n\t }\r\n\t this.setState(\"dragWait\");\r\n\t } else {\r\n\t this.startDrag();\r\n\t }\r\n\t this.captureMouse(e, this.onMouseDrag.bind(this));\r\n\t e.defaultPrevented = true;\r\n\t }\r\n\t };\r\n\r\n\t}).call(DragdropHandler.prototype);\r\n\r\n\r\n\tfunction calcDistance(ax, ay, bx, by) {\r\n\t return Math.sqrt(Math.pow(bx - ax, 2) + Math.pow(by - ay, 2));\r\n\t}\r\n\r\n\texports.DragdropHandler = DragdropHandler;\r\n\r\n\t});\r\n\r\n\tace.define(\"ace/lib/net\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(acequire, exports, module) {\r\n\t\"use strict\";\r\n\tvar dom = acequire(\"./dom\");\r\n\r\n\texports.get = function (url, callback) {\r\n\t var xhr = new XMLHttpRequest();\r\n\t xhr.open('GET', url, true);\r\n\t xhr.onreadystatechange = function () {\r\n\t if (xhr.readyState === 4) {\r\n\t callback(xhr.responseText);\r\n\t }\r\n\t };\r\n\t xhr.send(null);\r\n\t};\r\n\r\n\texports.loadScript = function(path, callback) {\r\n\t var head = dom.getDocumentHead();\r\n\t var s = document.createElement('script');\r\n\r\n\t s.src = path;\r\n\t head.appendChild(s);\r\n\r\n\t s.onload = s.onreadystatechange = function(_, isAbort) {\r\n\t if (isAbort || !s.readyState || s.readyState == \"loaded\" || s.readyState == \"complete\") {\r\n\t s = s.onload = s.onreadystatechange = null;\r\n\t if (!isAbort)\r\n\t callback();\r\n\t }\r\n\t };\r\n\t};\r\n\texports.qualifyURL = function(url) {\r\n\t var a = document.createElement('a');\r\n\t a.href = url;\r\n\t return a.href;\r\n\t}\r\n\r\n\t});\r\n\r\n\tace.define(\"ace/lib/event_emitter\",[\"require\",\"exports\",\"module\"], function(acequire, exports, module) {\r\n\t\"use strict\";\r\n\r\n\tvar EventEmitter = {};\r\n\tvar stopPropagation = function() { this.propagationStopped = true; };\r\n\tvar preventDefault = function() { this.defaultPrevented = true; };\r\n\r\n\tEventEmitter._emit =\r\n\tEventEmitter._dispatchEvent = function(eventName, e) {\r\n\t this._eventRegistry || (this._eventRegistry = {});\r\n\t this._defaultHandlers || (this._defaultHandlers = {});\r\n\r\n\t var listeners = this._eventRegistry[eventName] || [];\r\n\t var defaultHandler = this._defaultHandlers[eventName];\r\n\t if (!listeners.length && !defaultHandler)\r\n\t return;\r\n\r\n\t if (typeof e != \"object\" || !e)\r\n\t e = {};\r\n\r\n\t if (!e.type)\r\n\t e.type = eventName;\r\n\t if (!e.stopPropagation)\r\n\t e.stopPropagation = stopPropagation;\r\n\t if (!e.preventDefault)\r\n\t e.preventDefault = preventDefault;\r\n\r\n\t listeners = listeners.slice();\r\n\t for (var i=0; i 1)\r\n\t base = parts[parts.length - 2];\r\n\t var path = options[component + \"Path\"];\r\n\t if (path == null) {\r\n\t path = options.basePath;\r\n\t } else if (sep == \"/\") {\r\n\t component = sep = \"\";\r\n\t }\r\n\t if (path && path.slice(-1) != \"/\")\r\n\t path += \"/\";\r\n\t return path + component + sep + base + this.get(\"suffix\");\r\n\t};\r\n\r\n\texports.setModuleUrl = function(name, subst) {\r\n\t return options.$moduleUrls[name] = subst;\r\n\t};\r\n\r\n\texports.$loading = {};\r\n\texports.loadModule = function(moduleName, onLoad) {\r\n\t var module, moduleType;\r\n\t if (Array.isArray(moduleName)) {\r\n\t moduleType = moduleName[0];\r\n\t moduleName = moduleName[1];\r\n\t }\r\n\r\n\t try {\r\n\t module = acequire(moduleName);\r\n\t } catch (e) {}\r\n\t if (module && !exports.$loading[moduleName])\r\n\t return onLoad && onLoad(module);\r\n\r\n\t if (!exports.$loading[moduleName])\r\n\t exports.$loading[moduleName] = [];\r\n\r\n\t exports.$loading[moduleName].push(onLoad);\r\n\r\n\t if (exports.$loading[moduleName].length > 1)\r\n\t return;\r\n\r\n\t var afterLoad = function() {\r\n\t acequire([moduleName], function(module) {\r\n\t exports._emit(\"load.module\", {name: moduleName, module: module});\r\n\t var listeners = exports.$loading[moduleName];\r\n\t exports.$loading[moduleName] = null;\r\n\t listeners.forEach(function(onLoad) {\r\n\t onLoad && onLoad(module);\r\n\t });\r\n\t });\r\n\t };\r\n\r\n\t if (!exports.get(\"packaged\"))\r\n\t return afterLoad();\r\n\t net.loadScript(exports.moduleUrl(moduleName, moduleType), afterLoad);\r\n\t};\r\n\tinit(true);function init(packaged) {\r\n\r\n\t if (!global || !global.document)\r\n\t return;\r\n\t \r\n\t options.packaged = packaged || acequire.packaged || module.packaged || (global.define && __webpack_require__(65).packaged);\r\n\r\n\t var scriptOptions = {};\r\n\t var scriptUrl = \"\";\r\n\t var currentScript = (document.currentScript || document._currentScript ); // native or polyfill\r\n\t var currentDocument = currentScript && currentScript.ownerDocument || document;\r\n\t \r\n\t var scripts = currentDocument.getElementsByTagName(\"script\");\r\n\t for (var i=0; i [\" + this.end.row + \"/\" + this.end.column + \"]\");\r\n\t };\r\n\r\n\t this.contains = function(row, column) {\r\n\t return this.compare(row, column) == 0;\r\n\t };\r\n\t this.compareRange = function(range) {\r\n\t var cmp,\r\n\t end = range.end,\r\n\t start = range.start;\r\n\r\n\t cmp = this.compare(end.row, end.column);\r\n\t if (cmp == 1) {\r\n\t cmp = this.compare(start.row, start.column);\r\n\t if (cmp == 1) {\r\n\t return 2;\r\n\t } else if (cmp == 0) {\r\n\t return 1;\r\n\t } else {\r\n\t return 0;\r\n\t }\r\n\t } else if (cmp == -1) {\r\n\t return -2;\r\n\t } else {\r\n\t cmp = this.compare(start.row, start.column);\r\n\t if (cmp == -1) {\r\n\t return -1;\r\n\t } else if (cmp == 1) {\r\n\t return 42;\r\n\t } else {\r\n\t return 0;\r\n\t }\r\n\t }\r\n\t };\r\n\t this.comparePoint = function(p) {\r\n\t return this.compare(p.row, p.column);\r\n\t };\r\n\t this.containsRange = function(range) {\r\n\t return this.comparePoint(range.start) == 0 && this.comparePoint(range.end) == 0;\r\n\t };\r\n\t this.intersects = function(range) {\r\n\t var cmp = this.compareRange(range);\r\n\t return (cmp == -1 || cmp == 0 || cmp == 1);\r\n\t };\r\n\t this.isEnd = function(row, column) {\r\n\t return this.end.row == row && this.end.column == column;\r\n\t };\r\n\t this.isStart = function(row, column) {\r\n\t return this.start.row == row && this.start.column == column;\r\n\t };\r\n\t this.setStart = function(row, column) {\r\n\t if (typeof row == \"object\") {\r\n\t this.start.column = row.column;\r\n\t this.start.row = row.row;\r\n\t } else {\r\n\t this.start.row = row;\r\n\t this.start.column = column;\r\n\t }\r\n\t };\r\n\t this.setEnd = function(row, column) {\r\n\t if (typeof row == \"object\") {\r\n\t this.end.column = row.column;\r\n\t this.end.row = row.row;\r\n\t } else {\r\n\t this.end.row = row;\r\n\t this.end.column = column;\r\n\t }\r\n\t };\r\n\t this.inside = function(row, column) {\r\n\t if (this.compare(row, column) == 0) {\r\n\t if (this.isEnd(row, column) || this.isStart(row, column)) {\r\n\t return false;\r\n\t } else {\r\n\t return true;\r\n\t }\r\n\t }\r\n\t return false;\r\n\t };\r\n\t this.insideStart = function(row, column) {\r\n\t if (this.compare(row, column) == 0) {\r\n\t if (this.isEnd(row, column)) {\r\n\t return false;\r\n\t } else {\r\n\t return true;\r\n\t }\r\n\t }\r\n\t return false;\r\n\t };\r\n\t this.insideEnd = function(row, column) {\r\n\t if (this.compare(row, column) == 0) {\r\n\t if (this.isStart(row, column)) {\r\n\t return false;\r\n\t } else {\r\n\t return true;\r\n\t }\r\n\t }\r\n\t return false;\r\n\t };\r\n\t this.compare = function(row, column) {\r\n\t if (!this.isMultiLine()) {\r\n\t if (row === this.start.row) {\r\n\t return column < this.start.column ? -1 : (column > this.end.column ? 1 : 0);\r\n\t }\r\n\t }\r\n\r\n\t if (row < this.start.row)\r\n\t return -1;\r\n\r\n\t if (row > this.end.row)\r\n\t return 1;\r\n\r\n\t if (this.start.row === row)\r\n\t return column >= this.start.column ? 0 : -1;\r\n\r\n\t if (this.end.row === row)\r\n\t return column <= this.end.column ? 0 : 1;\r\n\r\n\t return 0;\r\n\t };\r\n\t this.compareStart = function(row, column) {\r\n\t if (this.start.row == row && this.start.column == column) {\r\n\t return -1;\r\n\t } else {\r\n\t return this.compare(row, column);\r\n\t }\r\n\t };\r\n\t this.compareEnd = function(row, column) {\r\n\t if (this.end.row == row && this.end.column == column) {\r\n\t return 1;\r\n\t } else {\r\n\t return this.compare(row, column);\r\n\t }\r\n\t };\r\n\t this.compareInside = function(row, column) {\r\n\t if (this.end.row == row && this.end.column == column) {\r\n\t return 1;\r\n\t } else if (this.start.row == row && this.start.column == column) {\r\n\t return -1;\r\n\t } else {\r\n\t return this.compare(row, column);\r\n\t }\r\n\t };\r\n\t this.clipRows = function(firstRow, lastRow) {\r\n\t if (this.end.row > lastRow)\r\n\t var end = {row: lastRow + 1, column: 0};\r\n\t else if (this.end.row < firstRow)\r\n\t var end = {row: firstRow, column: 0};\r\n\r\n\t if (this.start.row > lastRow)\r\n\t var start = {row: lastRow + 1, column: 0};\r\n\t else if (this.start.row < firstRow)\r\n\t var start = {row: firstRow, column: 0};\r\n\r\n\t return Range.fromPoints(start || this.start, end || this.end);\r\n\t };\r\n\t this.extend = function(row, column) {\r\n\t var cmp = this.compare(row, column);\r\n\r\n\t if (cmp == 0)\r\n\t return this;\r\n\t else if (cmp == -1)\r\n\t var start = {row: row, column: column};\r\n\t else\r\n\t var end = {row: row, column: column};\r\n\r\n\t return Range.fromPoints(start || this.start, end || this.end);\r\n\t };\r\n\r\n\t this.isEmpty = function() {\r\n\t return (this.start.row === this.end.row && this.start.column === this.end.column);\r\n\t };\r\n\t this.isMultiLine = function() {\r\n\t return (this.start.row !== this.end.row);\r\n\t };\r\n\t this.clone = function() {\r\n\t return Range.fromPoints(this.start, this.end);\r\n\t };\r\n\t this.collapseRows = function() {\r\n\t if (this.end.column == 0)\r\n\t return new Range(this.start.row, 0, Math.max(this.start.row, this.end.row-1), 0)\r\n\t else\r\n\t return new Range(this.start.row, 0, this.end.row, 0)\r\n\t };\r\n\t this.toScreenRange = function(session) {\r\n\t var screenPosStart = session.documentToScreenPosition(this.start);\r\n\t var screenPosEnd = session.documentToScreenPosition(this.end);\r\n\r\n\t return new Range(\r\n\t screenPosStart.row, screenPosStart.column,\r\n\t screenPosEnd.row, screenPosEnd.column\r\n\t );\r\n\t };\r\n\t this.moveBy = function(row, column) {\r\n\t this.start.row += row;\r\n\t this.start.column += column;\r\n\t this.end.row += row;\r\n\t this.end.column += column;\r\n\t };\r\n\r\n\t}).call(Range.prototype);\r\n\tRange.fromPoints = function(start, end) {\r\n\t return new Range(start.row, start.column, end.row, end.column);\r\n\t};\r\n\tRange.comparePoints = comparePoints;\r\n\r\n\tRange.comparePoints = function(p1, p2) {\r\n\t return p1.row - p2.row || p1.column - p2.column;\r\n\t};\r\n\r\n\r\n\texports.Range = Range;\r\n\t});\r\n\r\n\tace.define(\"ace/selection\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/lib/event_emitter\",\"ace/range\"], function(acequire, exports, module) {\r\n\t\"use strict\";\r\n\r\n\tvar oop = acequire(\"./lib/oop\");\r\n\tvar lang = acequire(\"./lib/lang\");\r\n\tvar EventEmitter = acequire(\"./lib/event_emitter\").EventEmitter;\r\n\tvar Range = acequire(\"./range\").Range;\r\n\tvar Selection = function(session) {\r\n\t this.session = session;\r\n\t this.doc = session.getDocument();\r\n\r\n\t this.clearSelection();\r\n\t this.lead = this.selectionLead = this.doc.createAnchor(0, 0);\r\n\t this.anchor = this.selectionAnchor = this.doc.createAnchor(0, 0);\r\n\r\n\t var self = this;\r\n\t this.lead.on(\"change\", function(e) {\r\n\t self._emit(\"changeCursor\");\r\n\t if (!self.$isEmpty)\r\n\t self._emit(\"changeSelection\");\r\n\t if (!self.$keepDesiredColumnOnChange && e.old.column != e.value.column)\r\n\t self.$desiredColumn = null;\r\n\t });\r\n\r\n\t this.selectionAnchor.on(\"change\", function() {\r\n\t if (!self.$isEmpty)\r\n\t self._emit(\"changeSelection\");\r\n\t });\r\n\t};\r\n\r\n\t(function() {\r\n\r\n\t oop.implement(this, EventEmitter);\r\n\t this.isEmpty = function() {\r\n\t return (this.$isEmpty || (\r\n\t this.anchor.row == this.lead.row &&\r\n\t this.anchor.column == this.lead.column\r\n\t ));\r\n\t };\r\n\t this.isMultiLine = function() {\r\n\t if (this.isEmpty()) {\r\n\t return false;\r\n\t }\r\n\r\n\t return this.getRange().isMultiLine();\r\n\t };\r\n\t this.getCursor = function() {\r\n\t return this.lead.getPosition();\r\n\t };\r\n\t this.setSelectionAnchor = function(row, column) {\r\n\t this.anchor.setPosition(row, column);\r\n\r\n\t if (this.$isEmpty) {\r\n\t this.$isEmpty = false;\r\n\t this._emit(\"changeSelection\");\r\n\t }\r\n\t };\r\n\t this.getSelectionAnchor = function() {\r\n\t if (this.$isEmpty)\r\n\t return this.getSelectionLead();\r\n\t else\r\n\t return this.anchor.getPosition();\r\n\t };\r\n\t this.getSelectionLead = function() {\r\n\t return this.lead.getPosition();\r\n\t };\r\n\t this.shiftSelection = function(columns) {\r\n\t if (this.$isEmpty) {\r\n\t this.moveCursorTo(this.lead.row, this.lead.column + columns);\r\n\t return;\r\n\t }\r\n\r\n\t var anchor = this.getSelectionAnchor();\r\n\t var lead = this.getSelectionLead();\r\n\r\n\t var isBackwards = this.isBackwards();\r\n\r\n\t if (!isBackwards || anchor.column !== 0)\r\n\t this.setSelectionAnchor(anchor.row, anchor.column + columns);\r\n\r\n\t if (isBackwards || lead.column !== 0) {\r\n\t this.$moveSelection(function() {\r\n\t this.moveCursorTo(lead.row, lead.column + columns);\r\n\t });\r\n\t }\r\n\t };\r\n\t this.isBackwards = function() {\r\n\t var anchor = this.anchor;\r\n\t var lead = this.lead;\r\n\t return (anchor.row > lead.row || (anchor.row == lead.row && anchor.column > lead.column));\r\n\t };\r\n\t this.getRange = function() {\r\n\t var anchor = this.anchor;\r\n\t var lead = this.lead;\r\n\r\n\t if (this.isEmpty())\r\n\t return Range.fromPoints(lead, lead);\r\n\r\n\t if (this.isBackwards()) {\r\n\t return Range.fromPoints(lead, anchor);\r\n\t }\r\n\t else {\r\n\t return Range.fromPoints(anchor, lead);\r\n\t }\r\n\t };\r\n\t this.clearSelection = function() {\r\n\t if (!this.$isEmpty) {\r\n\t this.$isEmpty = true;\r\n\t this._emit(\"changeSelection\");\r\n\t }\r\n\t };\r\n\t this.selectAll = function() {\r\n\t var lastRow = this.doc.getLength() - 1;\r\n\t this.setSelectionAnchor(0, 0);\r\n\t this.moveCursorTo(lastRow, this.doc.getLine(lastRow).length);\r\n\t };\r\n\t this.setRange =\r\n\t this.setSelectionRange = function(range, reverse) {\r\n\t if (reverse) {\r\n\t this.setSelectionAnchor(range.end.row, range.end.column);\r\n\t this.selectTo(range.start.row, range.start.column);\r\n\t } else {\r\n\t this.setSelectionAnchor(range.start.row, range.start.column);\r\n\t this.selectTo(range.end.row, range.end.column);\r\n\t }\r\n\t if (this.getRange().isEmpty())\r\n\t this.$isEmpty = true;\r\n\t this.$desiredColumn = null;\r\n\t };\r\n\r\n\t this.$moveSelection = function(mover) {\r\n\t var lead = this.lead;\r\n\t if (this.$isEmpty)\r\n\t this.setSelectionAnchor(lead.row, lead.column);\r\n\r\n\t mover.call(this);\r\n\t };\r\n\t this.selectTo = function(row, column) {\r\n\t this.$moveSelection(function() {\r\n\t this.moveCursorTo(row, column);\r\n\t });\r\n\t };\r\n\t this.selectToPosition = function(pos) {\r\n\t this.$moveSelection(function() {\r\n\t this.moveCursorToPosition(pos);\r\n\t });\r\n\t };\r\n\t this.moveTo = function(row, column) {\r\n\t this.clearSelection();\r\n\t this.moveCursorTo(row, column);\r\n\t };\r\n\t this.moveToPosition = function(pos) {\r\n\t this.clearSelection();\r\n\t this.moveCursorToPosition(pos);\r\n\t };\r\n\t this.selectUp = function() {\r\n\t this.$moveSelection(this.moveCursorUp);\r\n\t };\r\n\t this.selectDown = function() {\r\n\t this.$moveSelection(this.moveCursorDown);\r\n\t };\r\n\t this.selectRight = function() {\r\n\t this.$moveSelection(this.moveCursorRight);\r\n\t };\r\n\t this.selectLeft = function() {\r\n\t this.$moveSelection(this.moveCursorLeft);\r\n\t };\r\n\t this.selectLineStart = function() {\r\n\t this.$moveSelection(this.moveCursorLineStart);\r\n\t };\r\n\t this.selectLineEnd = function() {\r\n\t this.$moveSelection(this.moveCursorLineEnd);\r\n\t };\r\n\t this.selectFileEnd = function() {\r\n\t this.$moveSelection(this.moveCursorFileEnd);\r\n\t };\r\n\t this.selectFileStart = function() {\r\n\t this.$moveSelection(this.moveCursorFileStart);\r\n\t };\r\n\t this.selectWordRight = function() {\r\n\t this.$moveSelection(this.moveCursorWordRight);\r\n\t };\r\n\t this.selectWordLeft = function() {\r\n\t this.$moveSelection(this.moveCursorWordLeft);\r\n\t };\r\n\t this.getWordRange = function(row, column) {\r\n\t if (typeof column == \"undefined\") {\r\n\t var cursor = row || this.lead;\r\n\t row = cursor.row;\r\n\t column = cursor.column;\r\n\t }\r\n\t return this.session.getWordRange(row, column);\r\n\t };\r\n\t this.selectWord = function() {\r\n\t this.setSelectionRange(this.getWordRange());\r\n\t };\r\n\t this.selectAWord = function() {\r\n\t var cursor = this.getCursor();\r\n\t var range = this.session.getAWordRange(cursor.row, cursor.column);\r\n\t this.setSelectionRange(range);\r\n\t };\r\n\r\n\t this.getLineRange = function(row, excludeLastChar) {\r\n\t var rowStart = typeof row == \"number\" ? row : this.lead.row;\r\n\t var rowEnd;\r\n\r\n\t var foldLine = this.session.getFoldLine(rowStart);\r\n\t if (foldLine) {\r\n\t rowStart = foldLine.start.row;\r\n\t rowEnd = foldLine.end.row;\r\n\t } else {\r\n\t rowEnd = rowStart;\r\n\t }\r\n\t if (excludeLastChar === true)\r\n\t return new Range(rowStart, 0, rowEnd, this.session.getLine(rowEnd).length);\r\n\t else\r\n\t return new Range(rowStart, 0, rowEnd + 1, 0);\r\n\t };\r\n\t this.selectLine = function() {\r\n\t this.setSelectionRange(this.getLineRange());\r\n\t };\r\n\t this.moveCursorUp = function() {\r\n\t this.moveCursorBy(-1, 0);\r\n\t };\r\n\t this.moveCursorDown = function() {\r\n\t this.moveCursorBy(1, 0);\r\n\t };\r\n\t this.moveCursorLeft = function() {\r\n\t var cursor = this.lead.getPosition(),\r\n\t fold;\r\n\r\n\t if (fold = this.session.getFoldAt(cursor.row, cursor.column, -1)) {\r\n\t this.moveCursorTo(fold.start.row, fold.start.column);\r\n\t } else if (cursor.column === 0) {\r\n\t if (cursor.row > 0) {\r\n\t this.moveCursorTo(cursor.row - 1, this.doc.getLine(cursor.row - 1).length);\r\n\t }\r\n\t }\r\n\t else {\r\n\t var tabSize = this.session.getTabSize();\r\n\t if (this.session.isTabStop(cursor) && this.doc.getLine(cursor.row).slice(cursor.column-tabSize, cursor.column).split(\" \").length-1 == tabSize)\r\n\t this.moveCursorBy(0, -tabSize);\r\n\t else\r\n\t this.moveCursorBy(0, -1);\r\n\t }\r\n\t };\r\n\t this.moveCursorRight = function() {\r\n\t var cursor = this.lead.getPosition(),\r\n\t fold;\r\n\t if (fold = this.session.getFoldAt(cursor.row, cursor.column, 1)) {\r\n\t this.moveCursorTo(fold.end.row, fold.end.column);\r\n\t }\r\n\t else if (this.lead.column == this.doc.getLine(this.lead.row).length) {\r\n\t if (this.lead.row < this.doc.getLength() - 1) {\r\n\t this.moveCursorTo(this.lead.row + 1, 0);\r\n\t }\r\n\t }\r\n\t else {\r\n\t var tabSize = this.session.getTabSize();\r\n\t var cursor = this.lead;\r\n\t if (this.session.isTabStop(cursor) && this.doc.getLine(cursor.row).slice(cursor.column, cursor.column+tabSize).split(\" \").length-1 == tabSize)\r\n\t this.moveCursorBy(0, tabSize);\r\n\t else\r\n\t this.moveCursorBy(0, 1);\r\n\t }\r\n\t };\r\n\t this.moveCursorLineStart = function() {\r\n\t var row = this.lead.row;\r\n\t var column = this.lead.column;\r\n\t var screenRow = this.session.documentToScreenRow(row, column);\r\n\t var firstColumnPosition = this.session.screenToDocumentPosition(screenRow, 0);\r\n\t var beforeCursor = this.session.getDisplayLine(\r\n\t row, null, firstColumnPosition.row,\r\n\t firstColumnPosition.column\r\n\t );\r\n\r\n\t var leadingSpace = beforeCursor.match(/^\\s*/);\r\n\t if (leadingSpace[0].length != column && !this.session.$useEmacsStyleLineStart)\r\n\t firstColumnPosition.column += leadingSpace[0].length;\r\n\t this.moveCursorToPosition(firstColumnPosition);\r\n\t };\r\n\t this.moveCursorLineEnd = function() {\r\n\t var lead = this.lead;\r\n\t var lineEnd = this.session.getDocumentLastRowColumnPosition(lead.row, lead.column);\r\n\t if (this.lead.column == lineEnd.column) {\r\n\t var line = this.session.getLine(lineEnd.row);\r\n\t if (lineEnd.column == line.length) {\r\n\t var textEnd = line.search(/\\s+$/);\r\n\t if (textEnd > 0)\r\n\t lineEnd.column = textEnd;\r\n\t }\r\n\t }\r\n\r\n\t this.moveCursorTo(lineEnd.row, lineEnd.column);\r\n\t };\r\n\t this.moveCursorFileEnd = function() {\r\n\t var row = this.doc.getLength() - 1;\r\n\t var column = this.doc.getLine(row).length;\r\n\t this.moveCursorTo(row, column);\r\n\t };\r\n\t this.moveCursorFileStart = function() {\r\n\t this.moveCursorTo(0, 0);\r\n\t };\r\n\t this.moveCursorLongWordRight = function() {\r\n\t var row = this.lead.row;\r\n\t var column = this.lead.column;\r\n\t var line = this.doc.getLine(row);\r\n\t var rightOfCursor = line.substring(column);\r\n\r\n\t var match;\r\n\t this.session.nonTokenRe.lastIndex = 0;\r\n\t this.session.tokenRe.lastIndex = 0;\r\n\t var fold = this.session.getFoldAt(row, column, 1);\r\n\t if (fold) {\r\n\t this.moveCursorTo(fold.end.row, fold.end.column);\r\n\t return;\r\n\t }\r\n\t if (match = this.session.nonTokenRe.exec(rightOfCursor)) {\r\n\t column += this.session.nonTokenRe.lastIndex;\r\n\t this.session.nonTokenRe.lastIndex = 0;\r\n\t rightOfCursor = line.substring(column);\r\n\t }\r\n\t if (column >= line.length) {\r\n\t this.moveCursorTo(row, line.length);\r\n\t this.moveCursorRight();\r\n\t if (row < this.doc.getLength() - 1)\r\n\t this.moveCursorWordRight();\r\n\t return;\r\n\t }\r\n\t if (match = this.session.tokenRe.exec(rightOfCursor)) {\r\n\t column += this.session.tokenRe.lastIndex;\r\n\t this.session.tokenRe.lastIndex = 0;\r\n\t }\r\n\r\n\t this.moveCursorTo(row, column);\r\n\t };\r\n\t this.moveCursorLongWordLeft = function() {\r\n\t var row = this.lead.row;\r\n\t var column = this.lead.column;\r\n\t var fold;\r\n\t if (fold = this.session.getFoldAt(row, column, -1)) {\r\n\t this.moveCursorTo(fold.start.row, fold.start.column);\r\n\t return;\r\n\t }\r\n\r\n\t var str = this.session.getFoldStringAt(row, column, -1);\r\n\t if (str == null) {\r\n\t str = this.doc.getLine(row).substring(0, column);\r\n\t }\r\n\r\n\t var leftOfCursor = lang.stringReverse(str);\r\n\t var match;\r\n\t this.session.nonTokenRe.lastIndex = 0;\r\n\t this.session.tokenRe.lastIndex = 0;\r\n\t if (match = this.session.nonTokenRe.exec(leftOfCursor)) {\r\n\t column -= this.session.nonTokenRe.lastIndex;\r\n\t leftOfCursor = leftOfCursor.slice(this.session.nonTokenRe.lastIndex);\r\n\t this.session.nonTokenRe.lastIndex = 0;\r\n\t }\r\n\t if (column <= 0) {\r\n\t this.moveCursorTo(row, 0);\r\n\t this.moveCursorLeft();\r\n\t if (row > 0)\r\n\t this.moveCursorWordLeft();\r\n\t return;\r\n\t }\r\n\t if (match = this.session.tokenRe.exec(leftOfCursor)) {\r\n\t column -= this.session.tokenRe.lastIndex;\r\n\t this.session.tokenRe.lastIndex = 0;\r\n\t }\r\n\r\n\t this.moveCursorTo(row, column);\r\n\t };\r\n\r\n\t this.$shortWordEndIndex = function(rightOfCursor) {\r\n\t var match, index = 0, ch;\r\n\t var whitespaceRe = /\\s/;\r\n\t var tokenRe = this.session.tokenRe;\r\n\r\n\t tokenRe.lastIndex = 0;\r\n\t if (match = this.session.tokenRe.exec(rightOfCursor)) {\r\n\t index = this.session.tokenRe.lastIndex;\r\n\t } else {\r\n\t while ((ch = rightOfCursor[index]) && whitespaceRe.test(ch))\r\n\t index ++;\r\n\r\n\t if (index < 1) {\r\n\t tokenRe.lastIndex = 0;\r\n\t while ((ch = rightOfCursor[index]) && !tokenRe.test(ch)) {\r\n\t tokenRe.lastIndex = 0;\r\n\t index ++;\r\n\t if (whitespaceRe.test(ch)) {\r\n\t if (index > 2) {\r\n\t index--;\r\n\t break;\r\n\t } else {\r\n\t while ((ch = rightOfCursor[index]) && whitespaceRe.test(ch))\r\n\t index ++;\r\n\t if (index > 2)\r\n\t break;\r\n\t }\r\n\t }\r\n\t }\r\n\t }\r\n\t }\r\n\t tokenRe.lastIndex = 0;\r\n\r\n\t return index;\r\n\t };\r\n\r\n\t this.moveCursorShortWordRight = function() {\r\n\t var row = this.lead.row;\r\n\t var column = this.lead.column;\r\n\t var line = this.doc.getLine(row);\r\n\t var rightOfCursor = line.substring(column);\r\n\r\n\t var fold = this.session.getFoldAt(row, column, 1);\r\n\t if (fold)\r\n\t return this.moveCursorTo(fold.end.row, fold.end.column);\r\n\r\n\t if (column == line.length) {\r\n\t var l = this.doc.getLength();\r\n\t do {\r\n\t row++;\r\n\t rightOfCursor = this.doc.getLine(row);\r\n\t } while (row < l && /^\\s*$/.test(rightOfCursor));\r\n\r\n\t if (!/^\\s+/.test(rightOfCursor))\r\n\t rightOfCursor = \"\";\r\n\t column = 0;\r\n\t }\r\n\r\n\t var index = this.$shortWordEndIndex(rightOfCursor);\r\n\r\n\t this.moveCursorTo(row, column + index);\r\n\t };\r\n\r\n\t this.moveCursorShortWordLeft = function() {\r\n\t var row = this.lead.row;\r\n\t var column = this.lead.column;\r\n\r\n\t var fold;\r\n\t if (fold = this.session.getFoldAt(row, column, -1))\r\n\t return this.moveCursorTo(fold.start.row, fold.start.column);\r\n\r\n\t var line = this.session.getLine(row).substring(0, column);\r\n\t if (column === 0) {\r\n\t do {\r\n\t row--;\r\n\t line = this.doc.getLine(row);\r\n\t } while (row > 0 && /^\\s*$/.test(line));\r\n\r\n\t column = line.length;\r\n\t if (!/\\s+$/.test(line))\r\n\t line = \"\";\r\n\t }\r\n\r\n\t var leftOfCursor = lang.stringReverse(line);\r\n\t var index = this.$shortWordEndIndex(leftOfCursor);\r\n\r\n\t return this.moveCursorTo(row, column - index);\r\n\t };\r\n\r\n\t this.moveCursorWordRight = function() {\r\n\t if (this.session.$selectLongWords)\r\n\t this.moveCursorLongWordRight();\r\n\t else\r\n\t this.moveCursorShortWordRight();\r\n\t };\r\n\r\n\t this.moveCursorWordLeft = function() {\r\n\t if (this.session.$selectLongWords)\r\n\t this.moveCursorLongWordLeft();\r\n\t else\r\n\t this.moveCursorShortWordLeft();\r\n\t };\r\n\t this.moveCursorBy = function(rows, chars) {\r\n\t var screenPos = this.session.documentToScreenPosition(\r\n\t this.lead.row,\r\n\t this.lead.column\r\n\t );\r\n\r\n\t if (chars === 0) {\r\n\t if (this.$desiredColumn)\r\n\t screenPos.column = this.$desiredColumn;\r\n\t else\r\n\t this.$desiredColumn = screenPos.column;\r\n\t }\r\n\r\n\t var docPos = this.session.screenToDocumentPosition(screenPos.row + rows, screenPos.column);\r\n\t \r\n\t if (rows !== 0 && chars === 0 && docPos.row === this.lead.row && docPos.column === this.lead.column) {\r\n\t if (this.session.lineWidgets && this.session.lineWidgets[docPos.row]) {\r\n\t if (docPos.row > 0 || rows > 0)\r\n\t docPos.row++;\r\n\t }\r\n\t }\r\n\t this.moveCursorTo(docPos.row, docPos.column + chars, chars === 0);\r\n\t };\r\n\t this.moveCursorToPosition = function(position) {\r\n\t this.moveCursorTo(position.row, position.column);\r\n\t };\r\n\t this.moveCursorTo = function(row, column, keepDesiredColumn) {\r\n\t var fold = this.session.getFoldAt(row, column, 1);\r\n\t if (fold) {\r\n\t row = fold.start.row;\r\n\t column = fold.start.column;\r\n\t }\r\n\r\n\t this.$keepDesiredColumnOnChange = true;\r\n\t this.lead.setPosition(row, column);\r\n\t this.$keepDesiredColumnOnChange = false;\r\n\r\n\t if (!keepDesiredColumn)\r\n\t this.$desiredColumn = null;\r\n\t };\r\n\t this.moveCursorToScreen = function(row, column, keepDesiredColumn) {\r\n\t var pos = this.session.screenToDocumentPosition(row, column);\r\n\t this.moveCursorTo(pos.row, pos.column, keepDesiredColumn);\r\n\t };\r\n\t this.detach = function() {\r\n\t this.lead.detach();\r\n\t this.anchor.detach();\r\n\t this.session = this.doc = null;\r\n\t };\r\n\r\n\t this.fromOrientedRange = function(range) {\r\n\t this.setSelectionRange(range, range.cursor == range.start);\r\n\t this.$desiredColumn = range.desiredColumn || this.$desiredColumn;\r\n\t };\r\n\r\n\t this.toOrientedRange = function(range) {\r\n\t var r = this.getRange();\r\n\t if (range) {\r\n\t range.start.column = r.start.column;\r\n\t range.start.row = r.start.row;\r\n\t range.end.column = r.end.column;\r\n\t range.end.row = r.end.row;\r\n\t } else {\r\n\t range = r;\r\n\t }\r\n\r\n\t range.cursor = this.isBackwards() ? range.start : range.end;\r\n\t range.desiredColumn = this.$desiredColumn;\r\n\t return range;\r\n\t };\r\n\t this.getRangeOfMovements = function(func) {\r\n\t var start = this.getCursor();\r\n\t try {\r\n\t func(this);\r\n\t var end = this.getCursor();\r\n\t return Range.fromPoints(start,end);\r\n\t } catch(e) {\r\n\t return Range.fromPoints(start,start);\r\n\t } finally {\r\n\t this.moveCursorToPosition(start);\r\n\t }\r\n\t };\r\n\r\n\t this.toJSON = function() {\r\n\t if (this.rangeCount) {\r\n\t var data = this.ranges.map(function(r) {\r\n\t var r1 = r.clone();\r\n\t r1.isBackwards = r.cursor == r.start;\r\n\t return r1;\r\n\t });\r\n\t } else {\r\n\t var data = this.getRange();\r\n\t data.isBackwards = this.isBackwards();\r\n\t }\r\n\t return data;\r\n\t };\r\n\r\n\t this.fromJSON = function(data) {\r\n\t if (data.start == undefined) {\r\n\t if (this.rangeList) {\r\n\t this.toSingleRange(data[0]);\r\n\t for (var i = data.length; i--; ) {\r\n\t var r = Range.fromPoints(data[i].start, data[i].end);\r\n\t if (data[i].isBackwards)\r\n\t r.cursor = r.start;\r\n\t this.addRange(r, true);\r\n\t }\r\n\t return;\r\n\t } else\r\n\t data = data[0];\r\n\t }\r\n\t if (this.rangeList)\r\n\t this.toSingleRange(data);\r\n\t this.setSelectionRange(data, data.isBackwards);\r\n\t };\r\n\r\n\t this.isEqual = function(data) {\r\n\t if ((data.length || this.rangeCount) && data.length != this.rangeCount)\r\n\t return false;\r\n\t if (!data.length || !this.ranges)\r\n\t return this.getRange().isEqual(data);\r\n\r\n\t for (var i = this.ranges.length; i--; ) {\r\n\t if (!this.ranges[i].isEqual(data[i]))\r\n\t return false;\r\n\t }\r\n\t return true;\r\n\t };\r\n\r\n\t}).call(Selection.prototype);\r\n\r\n\texports.Selection = Selection;\r\n\t});\r\n\r\n\tace.define(\"ace/tokenizer\",[\"require\",\"exports\",\"module\",\"ace/config\"], function(acequire, exports, module) {\r\n\t\"use strict\";\r\n\r\n\tvar config = acequire(\"./config\");\r\n\tvar MAX_TOKEN_COUNT = 2000;\r\n\tvar Tokenizer = function(rules) {\r\n\t this.states = rules;\r\n\r\n\t this.regExps = {};\r\n\t this.matchMappings = {};\r\n\t for (var key in this.states) {\r\n\t var state = this.states[key];\r\n\t var ruleRegExps = [];\r\n\t var matchTotal = 0;\r\n\t var mapping = this.matchMappings[key] = {defaultToken: \"text\"};\r\n\t var flag = \"g\";\r\n\r\n\t var splitterRurles = [];\r\n\t for (var i = 0; i < state.length; i++) {\r\n\t var rule = state[i];\r\n\t if (rule.defaultToken)\r\n\t mapping.defaultToken = rule.defaultToken;\r\n\t if (rule.caseInsensitive)\r\n\t flag = \"gi\";\r\n\t if (rule.regex == null)\r\n\t continue;\r\n\r\n\t if (rule.regex instanceof RegExp)\r\n\t rule.regex = rule.regex.toString().slice(1, -1);\r\n\t var adjustedregex = rule.regex;\r\n\t var matchcount = new RegExp(\"(?:(\" + adjustedregex + \")|(.))\").exec(\"a\").length - 2;\r\n\t if (Array.isArray(rule.token)) {\r\n\t if (rule.token.length == 1 || matchcount == 1) {\r\n\t rule.token = rule.token[0];\r\n\t } else if (matchcount - 1 != rule.token.length) {\r\n\t this.reportError(\"number of classes and regexp groups doesn't match\", { \r\n\t rule: rule,\r\n\t groupCount: matchcount - 1\r\n\t });\r\n\t rule.token = rule.token[0];\r\n\t } else {\r\n\t rule.tokenArray = rule.token;\r\n\t rule.token = null;\r\n\t rule.onMatch = this.$arrayTokens;\r\n\t }\r\n\t } else if (typeof rule.token == \"function\" && !rule.onMatch) {\r\n\t if (matchcount > 1)\r\n\t rule.onMatch = this.$applyToken;\r\n\t else\r\n\t rule.onMatch = rule.token;\r\n\t }\r\n\r\n\t if (matchcount > 1) {\r\n\t if (/\\\\\\d/.test(rule.regex)) {\r\n\t adjustedregex = rule.regex.replace(/\\\\([0-9]+)/g, function(match, digit) {\r\n\t return \"\\\\\" + (parseInt(digit, 10) + matchTotal + 1);\r\n\t });\r\n\t } else {\r\n\t matchcount = 1;\r\n\t adjustedregex = this.removeCapturingGroups(rule.regex);\r\n\t }\r\n\t if (!rule.splitRegex && typeof rule.token != \"string\")\r\n\t splitterRurles.push(rule); // flag will be known only at the very end\r\n\t }\r\n\r\n\t mapping[matchTotal] = i;\r\n\t matchTotal += matchcount;\r\n\r\n\t ruleRegExps.push(adjustedregex);\r\n\t if (!rule.onMatch)\r\n\t rule.onMatch = null;\r\n\t }\r\n\t \r\n\t if (!ruleRegExps.length) {\r\n\t mapping[0] = 0;\r\n\t ruleRegExps.push(\"$\");\r\n\t }\r\n\t \r\n\t splitterRurles.forEach(function(rule) {\r\n\t rule.splitRegex = this.createSplitterRegexp(rule.regex, flag);\r\n\t }, this);\r\n\r\n\t this.regExps[key] = new RegExp(\"(\" + ruleRegExps.join(\")|(\") + \")|($)\", flag);\r\n\t }\r\n\t};\r\n\r\n\t(function() {\r\n\t this.$setMaxTokenCount = function(m) {\r\n\t MAX_TOKEN_COUNT = m | 0;\r\n\t };\r\n\t \r\n\t this.$applyToken = function(str) {\r\n\t var values = this.splitRegex.exec(str).slice(1);\r\n\t var types = this.token.apply(this, values);\r\n\t if (typeof types === \"string\")\r\n\t return [{type: types, value: str}];\r\n\r\n\t var tokens = [];\r\n\t for (var i = 0, l = types.length; i < l; i++) {\r\n\t if (values[i])\r\n\t tokens[tokens.length] = {\r\n\t type: types[i],\r\n\t value: values[i]\r\n\t };\r\n\t }\r\n\t return tokens;\r\n\t };\r\n\r\n\t this.$arrayTokens = function(str) {\r\n\t if (!str)\r\n\t return [];\r\n\t var values = this.splitRegex.exec(str);\r\n\t if (!values)\r\n\t return \"text\";\r\n\t var tokens = [];\r\n\t var types = this.tokenArray;\r\n\t for (var i = 0, l = types.length; i < l; i++) {\r\n\t if (values[i + 1])\r\n\t tokens[tokens.length] = {\r\n\t type: types[i],\r\n\t value: values[i + 1]\r\n\t };\r\n\t }\r\n\t return tokens;\r\n\t };\r\n\r\n\t this.removeCapturingGroups = function(src) {\r\n\t var r = src.replace(\r\n\t /\\[(?:\\\\.|[^\\]])*?\\]|\\\\.|\\(\\?[:=!]|(\\()/g,\r\n\t function(x, y) {return y ? \"(?:\" : x;}\r\n\t );\r\n\t return r;\r\n\t };\r\n\r\n\t this.createSplitterRegexp = function(src, flag) {\r\n\t if (src.indexOf(\"(?=\") != -1) {\r\n\t var stack = 0;\r\n\t var inChClass = false;\r\n\t var lastCapture = {};\r\n\t src.replace(/(\\\\.)|(\\((?:\\?[=!])?)|(\\))|([\\[\\]])/g, function(\r\n\t m, esc, parenOpen, parenClose, square, index\r\n\t ) {\r\n\t if (inChClass) {\r\n\t inChClass = square != \"]\";\r\n\t } else if (square) {\r\n\t inChClass = true;\r\n\t } else if (parenClose) {\r\n\t if (stack == lastCapture.stack) {\r\n\t lastCapture.end = index+1;\r\n\t lastCapture.stack = -1;\r\n\t }\r\n\t stack--;\r\n\t } else if (parenOpen) {\r\n\t stack++;\r\n\t if (parenOpen.length != 1) {\r\n\t lastCapture.stack = stack\r\n\t lastCapture.start = index;\r\n\t }\r\n\t }\r\n\t return m;\r\n\t });\r\n\r\n\t if (lastCapture.end != null && /^\\)*$/.test(src.substr(lastCapture.end)))\r\n\t src = src.substring(0, lastCapture.start) + src.substr(lastCapture.end);\r\n\t }\r\n\t if (src.charAt(0) != \"^\") src = \"^\" + src;\r\n\t if (src.charAt(src.length - 1) != \"$\") src += \"$\";\r\n\t \r\n\t return new RegExp(src, (flag||\"\").replace(\"g\", \"\"));\r\n\t };\r\n\t this.getLineTokens = function(line, startState) {\r\n\t if (startState && typeof startState != \"string\") {\r\n\t var stack = startState.slice(0);\r\n\t startState = stack[0];\r\n\t if (startState === \"#tmp\") {\r\n\t stack.shift()\r\n\t startState = stack.shift()\r\n\t }\r\n\t } else\r\n\t var stack = [];\r\n\r\n\t var currentState = startState || \"start\";\r\n\t var state = this.states[currentState];\r\n\t if (!state) {\r\n\t currentState = \"start\";\r\n\t state = this.states[currentState];\r\n\t }\r\n\t var mapping = this.matchMappings[currentState];\r\n\t var re = this.regExps[currentState];\r\n\t re.lastIndex = 0;\r\n\r\n\t var match, tokens = [];\r\n\t var lastIndex = 0;\r\n\t var matchAttempts = 0;\r\n\r\n\t var token = {type: null, value: \"\"};\r\n\r\n\t while (match = re.exec(line)) {\r\n\t var type = mapping.defaultToken;\r\n\t var rule = null;\r\n\t var value = match[0];\r\n\t var index = re.lastIndex;\r\n\r\n\t if (index - value.length > lastIndex) {\r\n\t var skipped = line.substring(lastIndex, index - value.length);\r\n\t if (token.type == type) {\r\n\t token.value += skipped;\r\n\t } else {\r\n\t if (token.type)\r\n\t tokens.push(token);\r\n\t token = {type: type, value: skipped};\r\n\t }\r\n\t }\r\n\r\n\t for (var i = 0; i < match.length-2; i++) {\r\n\t if (match[i + 1] === undefined)\r\n\t continue;\r\n\r\n\t rule = state[mapping[i]];\r\n\r\n\t if (rule.onMatch)\r\n\t type = rule.onMatch(value, currentState, stack);\r\n\t else\r\n\t type = rule.token;\r\n\r\n\t if (rule.next) {\r\n\t if (typeof rule.next == \"string\") {\r\n\t currentState = rule.next;\r\n\t } else {\r\n\t currentState = rule.next(currentState, stack);\r\n\t }\r\n\t \r\n\t state = this.states[currentState];\r\n\t if (!state) {\r\n\t this.reportError(\"state doesn't exist\", currentState);\r\n\t currentState = \"start\";\r\n\t state = this.states[currentState];\r\n\t }\r\n\t mapping = this.matchMappings[currentState];\r\n\t lastIndex = index;\r\n\t re = this.regExps[currentState];\r\n\t re.lastIndex = index;\r\n\t }\r\n\t break;\r\n\t }\r\n\r\n\t if (value) {\r\n\t if (typeof type === \"string\") {\r\n\t if ((!rule || rule.merge !== false) && token.type === type) {\r\n\t token.value += value;\r\n\t } else {\r\n\t if (token.type)\r\n\t tokens.push(token);\r\n\t token = {type: type, value: value};\r\n\t }\r\n\t } else if (type) {\r\n\t if (token.type)\r\n\t tokens.push(token);\r\n\t token = {type: null, value: \"\"};\r\n\t for (var i = 0; i < type.length; i++)\r\n\t tokens.push(type[i]);\r\n\t }\r\n\t }\r\n\r\n\t if (lastIndex == line.length)\r\n\t break;\r\n\r\n\t lastIndex = index;\r\n\r\n\t if (matchAttempts++ > MAX_TOKEN_COUNT) {\r\n\t if (matchAttempts > 2 * line.length) {\r\n\t this.reportError(\"infinite loop with in ace tokenizer\", {\r\n\t startState: startState,\r\n\t line: line\r\n\t });\r\n\t }\r\n\t while (lastIndex < line.length) {\r\n\t if (token.type)\r\n\t tokens.push(token);\r\n\t token = {\r\n\t value: line.substring(lastIndex, lastIndex += 2000),\r\n\t type: \"overflow\"\r\n\t };\r\n\t }\r\n\t currentState = \"start\";\r\n\t stack = [];\r\n\t break;\r\n\t }\r\n\t }\r\n\r\n\t if (token.type)\r\n\t tokens.push(token);\r\n\t \r\n\t if (stack.length > 1) {\r\n\t if (stack[0] !== currentState)\r\n\t stack.unshift(\"#tmp\", currentState);\r\n\t }\r\n\t return {\r\n\t tokens : tokens,\r\n\t state : stack.length ? stack : currentState\r\n\t };\r\n\t };\r\n\t \r\n\t this.reportError = config.reportError;\r\n\t \r\n\t}).call(Tokenizer.prototype);\r\n\r\n\texports.Tokenizer = Tokenizer;\r\n\t});\r\n\r\n\tace.define(\"ace/mode/text_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/lang\"], function(acequire, exports, module) {\r\n\t\"use strict\";\r\n\r\n\tvar lang = acequire(\"../lib/lang\");\r\n\r\n\tvar TextHighlightRules = function() {\r\n\r\n\t this.$rules = {\r\n\t \"start\" : [{\r\n\t token : \"empty_line\",\r\n\t regex : '^$'\r\n\t }, {\r\n\t defaultToken : \"text\"\r\n\t }]\r\n\t };\r\n\t};\r\n\r\n\t(function() {\r\n\r\n\t this.addRules = function(rules, prefix) {\r\n\t if (!prefix) {\r\n\t for (var key in rules)\r\n\t this.$rules[key] = rules[key];\r\n\t return;\r\n\t }\r\n\t for (var key in rules) {\r\n\t var state = rules[key];\r\n\t for (var i = 0; i < state.length; i++) {\r\n\t var rule = state[i];\r\n\t if (rule.next || rule.onMatch) {\r\n\t if (typeof rule.next == \"string\") {\r\n\t if (rule.next.indexOf(prefix) !== 0)\r\n\t rule.next = prefix + rule.next;\r\n\t }\r\n\t if (rule.nextState && rule.nextState.indexOf(prefix) !== 0)\r\n\t rule.nextState = prefix + rule.nextState;\r\n\t }\r\n\t }\r\n\t this.$rules[prefix + key] = state;\r\n\t }\r\n\t };\r\n\r\n\t this.getRules = function() {\r\n\t return this.$rules;\r\n\t };\r\n\r\n\t this.embedRules = function (HighlightRules, prefix, escapeRules, states, append) {\r\n\t var embedRules = typeof HighlightRules == \"function\"\r\n\t ? new HighlightRules().getRules()\r\n\t : HighlightRules;\r\n\t if (states) {\r\n\t for (var i = 0; i < states.length; i++)\r\n\t states[i] = prefix + states[i];\r\n\t } else {\r\n\t states = [];\r\n\t for (var key in embedRules)\r\n\t states.push(prefix + key);\r\n\t }\r\n\r\n\t this.addRules(embedRules, prefix);\r\n\r\n\t if (escapeRules) {\r\n\t var addRules = Array.prototype[append ? \"push\" : \"unshift\"];\r\n\t for (var i = 0; i < states.length; i++)\r\n\t addRules.apply(this.$rules[states[i]], lang.deepCopy(escapeRules));\r\n\t }\r\n\r\n\t if (!this.$embeds)\r\n\t this.$embeds = [];\r\n\t this.$embeds.push(prefix);\r\n\t };\r\n\r\n\t this.getEmbeds = function() {\r\n\t return this.$embeds;\r\n\t };\r\n\r\n\t var pushState = function(currentState, stack) {\r\n\t if (currentState != \"start\" || stack.length)\r\n\t stack.unshift(this.nextState, currentState);\r\n\t return this.nextState;\r\n\t };\r\n\t var popState = function(currentState, stack) {\r\n\t stack.shift();\r\n\t return stack.shift() || \"start\";\r\n\t };\r\n\r\n\t this.normalizeRules = function() {\r\n\t var id = 0;\r\n\t var rules = this.$rules;\r\n\t function processState(key) {\r\n\t var state = rules[key];\r\n\t state.processed = true;\r\n\t for (var i = 0; i < state.length; i++) {\r\n\t var rule = state[i];\r\n\t if (!rule.regex && rule.start) {\r\n\t rule.regex = rule.start;\r\n\t if (!rule.next)\r\n\t rule.next = [];\r\n\t rule.next.push({\r\n\t defaultToken: rule.token\r\n\t }, {\r\n\t token: rule.token + \".end\",\r\n\t regex: rule.end || rule.start,\r\n\t next: \"pop\"\r\n\t });\r\n\t rule.token = rule.token + \".start\";\r\n\t rule.push = true;\r\n\t }\r\n\t var next = rule.next || rule.push;\r\n\t if (next && Array.isArray(next)) {\r\n\t var stateName = rule.stateName;\r\n\t if (!stateName) {\r\n\t stateName = rule.token;\r\n\t if (typeof stateName != \"string\")\r\n\t stateName = stateName[0] || \"\";\r\n\t if (rules[stateName])\r\n\t stateName += id++;\r\n\t }\r\n\t rules[stateName] = next;\r\n\t rule.next = stateName;\r\n\t processState(stateName);\r\n\t } else if (next == \"pop\") {\r\n\t rule.next = popState;\r\n\t }\r\n\r\n\t if (rule.push) {\r\n\t rule.nextState = rule.next || rule.push;\r\n\t rule.next = pushState;\r\n\t delete rule.push;\r\n\t }\r\n\r\n\t if (rule.rules) {\r\n\t for (var r in rule.rules) {\r\n\t if (rules[r]) {\r\n\t if (rules[r].push)\r\n\t rules[r].push.apply(rules[r], rule.rules[r]);\r\n\t } else {\r\n\t rules[r] = rule.rules[r];\r\n\t }\r\n\t }\r\n\t }\r\n\t if (rule.include || typeof rule == \"string\") {\r\n\t var includeName = rule.include || rule;\r\n\t var toInsert = rules[includeName];\r\n\t } else if (Array.isArray(rule))\r\n\t toInsert = rule;\r\n\r\n\t if (toInsert) {\r\n\t var args = [i, 1].concat(toInsert);\r\n\t if (rule.noEscape)\r\n\t args = args.filter(function(x) {return !x.next;});\r\n\t state.splice.apply(state, args);\r\n\t i--;\r\n\t toInsert = null;\r\n\t }\r\n\t \r\n\t if (rule.keywordMap) {\r\n\t rule.token = this.createKeywordMapper(\r\n\t rule.keywordMap, rule.defaultToken || \"text\", rule.caseInsensitive\r\n\t );\r\n\t delete rule.defaultToken;\r\n\t }\r\n\t }\r\n\t }\r\n\t Object.keys(rules).forEach(processState, this);\r\n\t };\r\n\r\n\t this.createKeywordMapper = function(map, defaultToken, ignoreCase, splitChar) {\r\n\t var keywords = Object.create(null);\r\n\t Object.keys(map).forEach(function(className) {\r\n\t var a = map[className];\r\n\t if (ignoreCase)\r\n\t a = a.toLowerCase();\r\n\t var list = a.split(splitChar || \"|\");\r\n\t for (var i = list.length; i--; )\r\n\t keywords[list[i]] = className;\r\n\t });\r\n\t if (Object.getPrototypeOf(keywords)) {\r\n\t keywords.__proto__ = null;\r\n\t }\r\n\t this.$keywordList = Object.keys(keywords);\r\n\t map = null;\r\n\t return ignoreCase\r\n\t ? function(value) {return keywords[value.toLowerCase()] || defaultToken }\r\n\t : function(value) {return keywords[value] || defaultToken };\r\n\t };\r\n\r\n\t this.getKeywords = function() {\r\n\t return this.$keywords;\r\n\t };\r\n\r\n\t}).call(TextHighlightRules.prototype);\r\n\r\n\texports.TextHighlightRules = TextHighlightRules;\r\n\t});\r\n\r\n\tace.define(\"ace/mode/behaviour\",[\"require\",\"exports\",\"module\"], function(acequire, exports, module) {\r\n\t\"use strict\";\r\n\r\n\tvar Behaviour = function() {\r\n\t this.$behaviours = {};\r\n\t};\r\n\r\n\t(function () {\r\n\r\n\t this.add = function (name, action, callback) {\r\n\t switch (undefined) {\r\n\t case this.$behaviours:\r\n\t this.$behaviours = {};\r\n\t case this.$behaviours[name]:\r\n\t this.$behaviours[name] = {};\r\n\t }\r\n\t this.$behaviours[name][action] = callback;\r\n\t }\r\n\t \r\n\t this.addBehaviours = function (behaviours) {\r\n\t for (var key in behaviours) {\r\n\t for (var action in behaviours[key]) {\r\n\t this.add(key, action, behaviours[key][action]);\r\n\t }\r\n\t }\r\n\t }\r\n\t \r\n\t this.remove = function (name) {\r\n\t if (this.$behaviours && this.$behaviours[name]) {\r\n\t delete this.$behaviours[name];\r\n\t }\r\n\t }\r\n\t \r\n\t this.inherit = function (mode, filter) {\r\n\t if (typeof mode === \"function\") {\r\n\t var behaviours = new mode().getBehaviours(filter);\r\n\t } else {\r\n\t var behaviours = mode.getBehaviours(filter);\r\n\t }\r\n\t this.addBehaviours(behaviours);\r\n\t }\r\n\t \r\n\t this.getBehaviours = function (filter) {\r\n\t if (!filter) {\r\n\t return this.$behaviours;\r\n\t } else {\r\n\t var ret = {}\r\n\t for (var i = 0; i < filter.length; i++) {\r\n\t if (this.$behaviours[filter[i]]) {\r\n\t ret[filter[i]] = this.$behaviours[filter[i]];\r\n\t }\r\n\t }\r\n\t return ret;\r\n\t }\r\n\t }\r\n\r\n\t}).call(Behaviour.prototype);\r\n\r\n\texports.Behaviour = Behaviour;\r\n\t});\r\n\r\n\tace.define(\"ace/unicode\",[\"require\",\"exports\",\"module\"], function(acequire, exports, module) {\r\n\t\"use strict\";\r\n\texports.packages = {};\r\n\r\n\taddUnicodePackage({\r\n\t L: \"0041-005A0061-007A00AA00B500BA00C0-00D600D8-00F600F8-02C102C6-02D102E0-02E402EC02EE0370-037403760377037A-037D03860388-038A038C038E-03A103A3-03F503F7-0481048A-05250531-055605590561-058705D0-05EA05F0-05F20621-064A066E066F0671-06D306D506E506E606EE06EF06FA-06FC06FF07100712-072F074D-07A507B107CA-07EA07F407F507FA0800-0815081A082408280904-0939093D09500958-0961097109720979-097F0985-098C098F09900993-09A809AA-09B009B209B6-09B909BD09CE09DC09DD09DF-09E109F009F10A05-0A0A0A0F0A100A13-0A280A2A-0A300A320A330A350A360A380A390A59-0A5C0A5E0A72-0A740A85-0A8D0A8F-0A910A93-0AA80AAA-0AB00AB20AB30AB5-0AB90ABD0AD00AE00AE10B05-0B0C0B0F0B100B13-0B280B2A-0B300B320B330B35-0B390B3D0B5C0B5D0B5F-0B610B710B830B85-0B8A0B8E-0B900B92-0B950B990B9A0B9C0B9E0B9F0BA30BA40BA8-0BAA0BAE-0BB90BD00C05-0C0C0C0E-0C100C12-0C280C2A-0C330C35-0C390C3D0C580C590C600C610C85-0C8C0C8E-0C900C92-0CA80CAA-0CB30CB5-0CB90CBD0CDE0CE00CE10D05-0D0C0D0E-0D100D12-0D280D2A-0D390D3D0D600D610D7A-0D7F0D85-0D960D9A-0DB10DB3-0DBB0DBD0DC0-0DC60E01-0E300E320E330E40-0E460E810E820E840E870E880E8A0E8D0E94-0E970E99-0E9F0EA1-0EA30EA50EA70EAA0EAB0EAD-0EB00EB20EB30EBD0EC0-0EC40EC60EDC0EDD0F000F40-0F470F49-0F6C0F88-0F8B1000-102A103F1050-1055105A-105D106110651066106E-10701075-1081108E10A0-10C510D0-10FA10FC1100-1248124A-124D1250-12561258125A-125D1260-1288128A-128D1290-12B012B2-12B512B8-12BE12C012C2-12C512C8-12D612D8-13101312-13151318-135A1380-138F13A0-13F41401-166C166F-167F1681-169A16A0-16EA1700-170C170E-17111720-17311740-17511760-176C176E-17701780-17B317D717DC1820-18771880-18A818AA18B0-18F51900-191C1950-196D1970-19741980-19AB19C1-19C71A00-1A161A20-1A541AA71B05-1B331B45-1B4B1B83-1BA01BAE1BAF1C00-1C231C4D-1C4F1C5A-1C7D1CE9-1CEC1CEE-1CF11D00-1DBF1E00-1F151F18-1F1D1F20-1F451F48-1F4D1F50-1F571F591F5B1F5D1F5F-1F7D1F80-1FB41FB6-1FBC1FBE1FC2-1FC41FC6-1FCC1FD0-1FD31FD6-1FDB1FE0-1FEC1FF2-1FF41FF6-1FFC2071207F2090-209421022107210A-211321152119-211D212421262128212A-212D212F-2139213C-213F2145-2149214E218321842C00-2C2E2C30-2C5E2C60-2CE42CEB-2CEE2D00-2D252D30-2D652D6F2D80-2D962DA0-2DA62DA8-2DAE2DB0-2DB62DB8-2DBE2DC0-2DC62DC8-2DCE2DD0-2DD62DD8-2DDE2E2F300530063031-3035303B303C3041-3096309D-309F30A1-30FA30FC-30FF3105-312D3131-318E31A0-31B731F0-31FF3400-4DB54E00-9FCBA000-A48CA4D0-A4FDA500-A60CA610-A61FA62AA62BA640-A65FA662-A66EA67F-A697A6A0-A6E5A717-A71FA722-A788A78BA78CA7FB-A801A803-A805A807-A80AA80C-A822A840-A873A882-A8B3A8F2-A8F7A8FBA90A-A925A930-A946A960-A97CA984-A9B2A9CFAA00-AA28AA40-AA42AA44-AA4BAA60-AA76AA7AAA80-AAAFAAB1AAB5AAB6AAB9-AABDAAC0AAC2AADB-AADDABC0-ABE2AC00-D7A3D7B0-D7C6D7CB-D7FBF900-FA2DFA30-FA6DFA70-FAD9FB00-FB06FB13-FB17FB1DFB1F-FB28FB2A-FB36FB38-FB3CFB3EFB40FB41FB43FB44FB46-FBB1FBD3-FD3DFD50-FD8FFD92-FDC7FDF0-FDFBFE70-FE74FE76-FEFCFF21-FF3AFF41-FF5AFF66-FFBEFFC2-FFC7FFCA-FFCFFFD2-FFD7FFDA-FFDC\",\r\n\t Ll: \"0061-007A00AA00B500BA00DF-00F600F8-00FF01010103010501070109010B010D010F01110113011501170119011B011D011F01210123012501270129012B012D012F01310133013501370138013A013C013E014001420144014601480149014B014D014F01510153015501570159015B015D015F01610163016501670169016B016D016F0171017301750177017A017C017E-0180018301850188018C018D019201950199-019B019E01A101A301A501A801AA01AB01AD01B001B401B601B901BA01BD-01BF01C601C901CC01CE01D001D201D401D601D801DA01DC01DD01DF01E101E301E501E701E901EB01ED01EF01F001F301F501F901FB01FD01FF02010203020502070209020B020D020F02110213021502170219021B021D021F02210223022502270229022B022D022F02310233-0239023C023F0240024202470249024B024D024F-02930295-02AF037103730377037B-037D039003AC-03CE03D003D103D5-03D703D903DB03DD03DF03E103E303E503E703E903EB03ED03EF-03F303F503F803FB03FC0430-045F04610463046504670469046B046D046F04710473047504770479047B047D047F0481048B048D048F04910493049504970499049B049D049F04A104A304A504A704A904AB04AD04AF04B104B304B504B704B904BB04BD04BF04C204C404C604C804CA04CC04CE04CF04D104D304D504D704D904DB04DD04DF04E104E304E504E704E904EB04ED04EF04F104F304F504F704F904FB04FD04FF05010503050505070509050B050D050F05110513051505170519051B051D051F0521052305250561-05871D00-1D2B1D62-1D771D79-1D9A1E011E031E051E071E091E0B1E0D1E0F1E111E131E151E171E191E1B1E1D1E1F1E211E231E251E271E291E2B1E2D1E2F1E311E331E351E371E391E3B1E3D1E3F1E411E431E451E471E491E4B1E4D1E4F1E511E531E551E571E591E5B1E5D1E5F1E611E631E651E671E691E6B1E6D1E6F1E711E731E751E771E791E7B1E7D1E7F1E811E831E851E871E891E8B1E8D1E8F1E911E931E95-1E9D1E9F1EA11EA31EA51EA71EA91EAB1EAD1EAF1EB11EB31EB51EB71EB91EBB1EBD1EBF1EC11EC31EC51EC71EC91ECB1ECD1ECF1ED11ED31ED51ED71ED91EDB1EDD1EDF1EE11EE31EE51EE71EE91EEB1EED1EEF1EF11EF31EF51EF71EF91EFB1EFD1EFF-1F071F10-1F151F20-1F271F30-1F371F40-1F451F50-1F571F60-1F671F70-1F7D1F80-1F871F90-1F971FA0-1FA71FB0-1FB41FB61FB71FBE1FC2-1FC41FC61FC71FD0-1FD31FD61FD71FE0-1FE71FF2-1FF41FF61FF7210A210E210F2113212F21342139213C213D2146-2149214E21842C30-2C5E2C612C652C662C682C6A2C6C2C712C732C742C76-2C7C2C812C832C852C872C892C8B2C8D2C8F2C912C932C952C972C992C9B2C9D2C9F2CA12CA32CA52CA72CA92CAB2CAD2CAF2CB12CB32CB52CB72CB92CBB2CBD2CBF2CC12CC32CC52CC72CC92CCB2CCD2CCF2CD12CD32CD52CD72CD92CDB2CDD2CDF2CE12CE32CE42CEC2CEE2D00-2D25A641A643A645A647A649A64BA64DA64FA651A653A655A657A659A65BA65DA65FA663A665A667A669A66BA66DA681A683A685A687A689A68BA68DA68FA691A693A695A697A723A725A727A729A72BA72DA72F-A731A733A735A737A739A73BA73DA73FA741A743A745A747A749A74BA74DA74FA751A753A755A757A759A75BA75DA75FA761A763A765A767A769A76BA76DA76FA771-A778A77AA77CA77FA781A783A785A787A78CFB00-FB06FB13-FB17FF41-FF5A\",\r\n\t Lu: \"0041-005A00C0-00D600D8-00DE01000102010401060108010A010C010E01100112011401160118011A011C011E01200122012401260128012A012C012E01300132013401360139013B013D013F0141014301450147014A014C014E01500152015401560158015A015C015E01600162016401660168016A016C016E017001720174017601780179017B017D018101820184018601870189-018B018E-0191019301940196-0198019C019D019F01A001A201A401A601A701A901AC01AE01AF01B1-01B301B501B701B801BC01C401C701CA01CD01CF01D101D301D501D701D901DB01DE01E001E201E401E601E801EA01EC01EE01F101F401F6-01F801FA01FC01FE02000202020402060208020A020C020E02100212021402160218021A021C021E02200222022402260228022A022C022E02300232023A023B023D023E02410243-02460248024A024C024E03700372037603860388-038A038C038E038F0391-03A103A3-03AB03CF03D2-03D403D803DA03DC03DE03E003E203E403E603E803EA03EC03EE03F403F703F903FA03FD-042F04600462046404660468046A046C046E04700472047404760478047A047C047E0480048A048C048E04900492049404960498049A049C049E04A004A204A404A604A804AA04AC04AE04B004B204B404B604B804BA04BC04BE04C004C104C304C504C704C904CB04CD04D004D204D404D604D804DA04DC04DE04E004E204E404E604E804EA04EC04EE04F004F204F404F604F804FA04FC04FE05000502050405060508050A050C050E05100512051405160518051A051C051E0520052205240531-055610A0-10C51E001E021E041E061E081E0A1E0C1E0E1E101E121E141E161E181E1A1E1C1E1E1E201E221E241E261E281E2A1E2C1E2E1E301E321E341E361E381E3A1E3C1E3E1E401E421E441E461E481E4A1E4C1E4E1E501E521E541E561E581E5A1E5C1E5E1E601E621E641E661E681E6A1E6C1E6E1E701E721E741E761E781E7A1E7C1E7E1E801E821E841E861E881E8A1E8C1E8E1E901E921E941E9E1EA01EA21EA41EA61EA81EAA1EAC1EAE1EB01EB21EB41EB61EB81EBA1EBC1EBE1EC01EC21EC41EC61EC81ECA1ECC1ECE1ED01ED21ED41ED61ED81EDA1EDC1EDE1EE01EE21EE41EE61EE81EEA1EEC1EEE1EF01EF21EF41EF61EF81EFA1EFC1EFE1F08-1F0F1F18-1F1D1F28-1F2F1F38-1F3F1F48-1F4D1F591F5B1F5D1F5F1F68-1F6F1FB8-1FBB1FC8-1FCB1FD8-1FDB1FE8-1FEC1FF8-1FFB21022107210B-210D2110-211221152119-211D212421262128212A-212D2130-2133213E213F214521832C00-2C2E2C602C62-2C642C672C692C6B2C6D-2C702C722C752C7E-2C802C822C842C862C882C8A2C8C2C8E2C902C922C942C962C982C9A2C9C2C9E2CA02CA22CA42CA62CA82CAA2CAC2CAE2CB02CB22CB42CB62CB82CBA2CBC2CBE2CC02CC22CC42CC62CC82CCA2CCC2CCE2CD02CD22CD42CD62CD82CDA2CDC2CDE2CE02CE22CEB2CEDA640A642A644A646A648A64AA64CA64EA650A652A654A656A658A65AA65CA65EA662A664A666A668A66AA66CA680A682A684A686A688A68AA68CA68EA690A692A694A696A722A724A726A728A72AA72CA72EA732A734A736A738A73AA73CA73EA740A742A744A746A748A74AA74CA74EA750A752A754A756A758A75AA75CA75EA760A762A764A766A768A76AA76CA76EA779A77BA77DA77EA780A782A784A786A78BFF21-FF3A\",\r\n\t Lt: \"01C501C801CB01F21F88-1F8F1F98-1F9F1FA8-1FAF1FBC1FCC1FFC\",\r\n\t Lm: \"02B0-02C102C6-02D102E0-02E402EC02EE0374037A0559064006E506E607F407F507FA081A0824082809710E460EC610FC17D718431AA71C78-1C7D1D2C-1D611D781D9B-1DBF2071207F2090-20942C7D2D6F2E2F30053031-3035303B309D309E30FC-30FEA015A4F8-A4FDA60CA67FA717-A71FA770A788A9CFAA70AADDFF70FF9EFF9F\",\r\n\t Lo: \"01BB01C0-01C3029405D0-05EA05F0-05F20621-063F0641-064A066E066F0671-06D306D506EE06EF06FA-06FC06FF07100712-072F074D-07A507B107CA-07EA0800-08150904-0939093D09500958-096109720979-097F0985-098C098F09900993-09A809AA-09B009B209B6-09B909BD09CE09DC09DD09DF-09E109F009F10A05-0A0A0A0F0A100A13-0A280A2A-0A300A320A330A350A360A380A390A59-0A5C0A5E0A72-0A740A85-0A8D0A8F-0A910A93-0AA80AAA-0AB00AB20AB30AB5-0AB90ABD0AD00AE00AE10B05-0B0C0B0F0B100B13-0B280B2A-0B300B320B330B35-0B390B3D0B5C0B5D0B5F-0B610B710B830B85-0B8A0B8E-0B900B92-0B950B990B9A0B9C0B9E0B9F0BA30BA40BA8-0BAA0BAE-0BB90BD00C05-0C0C0C0E-0C100C12-0C280C2A-0C330C35-0C390C3D0C580C590C600C610C85-0C8C0C8E-0C900C92-0CA80CAA-0CB30CB5-0CB90CBD0CDE0CE00CE10D05-0D0C0D0E-0D100D12-0D280D2A-0D390D3D0D600D610D7A-0D7F0D85-0D960D9A-0DB10DB3-0DBB0DBD0DC0-0DC60E01-0E300E320E330E40-0E450E810E820E840E870E880E8A0E8D0E94-0E970E99-0E9F0EA1-0EA30EA50EA70EAA0EAB0EAD-0EB00EB20EB30EBD0EC0-0EC40EDC0EDD0F000F40-0F470F49-0F6C0F88-0F8B1000-102A103F1050-1055105A-105D106110651066106E-10701075-1081108E10D0-10FA1100-1248124A-124D1250-12561258125A-125D1260-1288128A-128D1290-12B012B2-12B512B8-12BE12C012C2-12C512C8-12D612D8-13101312-13151318-135A1380-138F13A0-13F41401-166C166F-167F1681-169A16A0-16EA1700-170C170E-17111720-17311740-17511760-176C176E-17701780-17B317DC1820-18421844-18771880-18A818AA18B0-18F51900-191C1950-196D1970-19741980-19AB19C1-19C71A00-1A161A20-1A541B05-1B331B45-1B4B1B83-1BA01BAE1BAF1C00-1C231C4D-1C4F1C5A-1C771CE9-1CEC1CEE-1CF12135-21382D30-2D652D80-2D962DA0-2DA62DA8-2DAE2DB0-2DB62DB8-2DBE2DC0-2DC62DC8-2DCE2DD0-2DD62DD8-2DDE3006303C3041-3096309F30A1-30FA30FF3105-312D3131-318E31A0-31B731F0-31FF3400-4DB54E00-9FCBA000-A014A016-A48CA4D0-A4F7A500-A60BA610-A61FA62AA62BA66EA6A0-A6E5A7FB-A801A803-A805A807-A80AA80C-A822A840-A873A882-A8B3A8F2-A8F7A8FBA90A-A925A930-A946A960-A97CA984-A9B2AA00-AA28AA40-AA42AA44-AA4BAA60-AA6FAA71-AA76AA7AAA80-AAAFAAB1AAB5AAB6AAB9-AABDAAC0AAC2AADBAADCABC0-ABE2AC00-D7A3D7B0-D7C6D7CB-D7FBF900-FA2DFA30-FA6DFA70-FAD9FB1DFB1F-FB28FB2A-FB36FB38-FB3CFB3EFB40FB41FB43FB44FB46-FBB1FBD3-FD3DFD50-FD8FFD92-FDC7FDF0-FDFBFE70-FE74FE76-FEFCFF66-FF6FFF71-FF9DFFA0-FFBEFFC2-FFC7FFCA-FFCFFFD2-FFD7FFDA-FFDC\",\r\n\t M: \"0300-036F0483-04890591-05BD05BF05C105C205C405C505C70610-061A064B-065E067006D6-06DC06DE-06E406E706E806EA-06ED07110730-074A07A6-07B007EB-07F30816-0819081B-08230825-08270829-082D0900-0903093C093E-094E0951-0955096209630981-098309BC09BE-09C409C709C809CB-09CD09D709E209E30A01-0A030A3C0A3E-0A420A470A480A4B-0A4D0A510A700A710A750A81-0A830ABC0ABE-0AC50AC7-0AC90ACB-0ACD0AE20AE30B01-0B030B3C0B3E-0B440B470B480B4B-0B4D0B560B570B620B630B820BBE-0BC20BC6-0BC80BCA-0BCD0BD70C01-0C030C3E-0C440C46-0C480C4A-0C4D0C550C560C620C630C820C830CBC0CBE-0CC40CC6-0CC80CCA-0CCD0CD50CD60CE20CE30D020D030D3E-0D440D46-0D480D4A-0D4D0D570D620D630D820D830DCA0DCF-0DD40DD60DD8-0DDF0DF20DF30E310E34-0E3A0E47-0E4E0EB10EB4-0EB90EBB0EBC0EC8-0ECD0F180F190F350F370F390F3E0F3F0F71-0F840F860F870F90-0F970F99-0FBC0FC6102B-103E1056-1059105E-10601062-10641067-106D1071-10741082-108D108F109A-109D135F1712-17141732-1734175217531772177317B6-17D317DD180B-180D18A91920-192B1930-193B19B0-19C019C819C91A17-1A1B1A55-1A5E1A60-1A7C1A7F1B00-1B041B34-1B441B6B-1B731B80-1B821BA1-1BAA1C24-1C371CD0-1CD21CD4-1CE81CED1CF21DC0-1DE61DFD-1DFF20D0-20F02CEF-2CF12DE0-2DFF302A-302F3099309AA66F-A672A67CA67DA6F0A6F1A802A806A80BA823-A827A880A881A8B4-A8C4A8E0-A8F1A926-A92DA947-A953A980-A983A9B3-A9C0AA29-AA36AA43AA4CAA4DAA7BAAB0AAB2-AAB4AAB7AAB8AABEAABFAAC1ABE3-ABEAABECABEDFB1EFE00-FE0FFE20-FE26\",\r\n\t Mn: \"0300-036F0483-04870591-05BD05BF05C105C205C405C505C70610-061A064B-065E067006D6-06DC06DF-06E406E706E806EA-06ED07110730-074A07A6-07B007EB-07F30816-0819081B-08230825-08270829-082D0900-0902093C0941-0948094D0951-095509620963098109BC09C1-09C409CD09E209E30A010A020A3C0A410A420A470A480A4B-0A4D0A510A700A710A750A810A820ABC0AC1-0AC50AC70AC80ACD0AE20AE30B010B3C0B3F0B41-0B440B4D0B560B620B630B820BC00BCD0C3E-0C400C46-0C480C4A-0C4D0C550C560C620C630CBC0CBF0CC60CCC0CCD0CE20CE30D41-0D440D4D0D620D630DCA0DD2-0DD40DD60E310E34-0E3A0E47-0E4E0EB10EB4-0EB90EBB0EBC0EC8-0ECD0F180F190F350F370F390F71-0F7E0F80-0F840F860F870F90-0F970F99-0FBC0FC6102D-10301032-10371039103A103D103E10581059105E-10601071-1074108210851086108D109D135F1712-17141732-1734175217531772177317B7-17BD17C617C9-17D317DD180B-180D18A91920-19221927192819321939-193B1A171A181A561A58-1A5E1A601A621A65-1A6C1A73-1A7C1A7F1B00-1B031B341B36-1B3A1B3C1B421B6B-1B731B801B811BA2-1BA51BA81BA91C2C-1C331C361C371CD0-1CD21CD4-1CE01CE2-1CE81CED1DC0-1DE61DFD-1DFF20D0-20DC20E120E5-20F02CEF-2CF12DE0-2DFF302A-302F3099309AA66FA67CA67DA6F0A6F1A802A806A80BA825A826A8C4A8E0-A8F1A926-A92DA947-A951A980-A982A9B3A9B6-A9B9A9BCAA29-AA2EAA31AA32AA35AA36AA43AA4CAAB0AAB2-AAB4AAB7AAB8AABEAABFAAC1ABE5ABE8ABEDFB1EFE00-FE0FFE20-FE26\",\r\n\t Mc: \"0903093E-09400949-094C094E0982098309BE-09C009C709C809CB09CC09D70A030A3E-0A400A830ABE-0AC00AC90ACB0ACC0B020B030B3E0B400B470B480B4B0B4C0B570BBE0BBF0BC10BC20BC6-0BC80BCA-0BCC0BD70C01-0C030C41-0C440C820C830CBE0CC0-0CC40CC70CC80CCA0CCB0CD50CD60D020D030D3E-0D400D46-0D480D4A-0D4C0D570D820D830DCF-0DD10DD8-0DDF0DF20DF30F3E0F3F0F7F102B102C10311038103B103C105610571062-10641067-106D108310841087-108C108F109A-109C17B617BE-17C517C717C81923-19261929-192B193019311933-193819B0-19C019C819C91A19-1A1B1A551A571A611A631A641A6D-1A721B041B351B3B1B3D-1B411B431B441B821BA11BA61BA71BAA1C24-1C2B1C341C351CE11CF2A823A824A827A880A881A8B4-A8C3A952A953A983A9B4A9B5A9BAA9BBA9BD-A9C0AA2FAA30AA33AA34AA4DAA7BABE3ABE4ABE6ABE7ABE9ABEAABEC\",\r\n\t Me: \"0488048906DE20DD-20E020E2-20E4A670-A672\",\r\n\t N: \"0030-003900B200B300B900BC-00BE0660-066906F0-06F907C0-07C90966-096F09E6-09EF09F4-09F90A66-0A6F0AE6-0AEF0B66-0B6F0BE6-0BF20C66-0C6F0C78-0C7E0CE6-0CEF0D66-0D750E50-0E590ED0-0ED90F20-0F331040-10491090-10991369-137C16EE-16F017E0-17E917F0-17F91810-18191946-194F19D0-19DA1A80-1A891A90-1A991B50-1B591BB0-1BB91C40-1C491C50-1C5920702074-20792080-20892150-21822185-21892460-249B24EA-24FF2776-27932CFD30073021-30293038-303A3192-31953220-32293251-325F3280-328932B1-32BFA620-A629A6E6-A6EFA830-A835A8D0-A8D9A900-A909A9D0-A9D9AA50-AA59ABF0-ABF9FF10-FF19\",\r\n\t Nd: \"0030-00390660-066906F0-06F907C0-07C90966-096F09E6-09EF0A66-0A6F0AE6-0AEF0B66-0B6F0BE6-0BEF0C66-0C6F0CE6-0CEF0D66-0D6F0E50-0E590ED0-0ED90F20-0F291040-10491090-109917E0-17E91810-18191946-194F19D0-19DA1A80-1A891A90-1A991B50-1B591BB0-1BB91C40-1C491C50-1C59A620-A629A8D0-A8D9A900-A909A9D0-A9D9AA50-AA59ABF0-ABF9FF10-FF19\",\r\n\t Nl: \"16EE-16F02160-21822185-218830073021-30293038-303AA6E6-A6EF\",\r\n\t No: \"00B200B300B900BC-00BE09F4-09F90BF0-0BF20C78-0C7E0D70-0D750F2A-0F331369-137C17F0-17F920702074-20792080-20892150-215F21892460-249B24EA-24FF2776-27932CFD3192-31953220-32293251-325F3280-328932B1-32BFA830-A835\",\r\n\t P: \"0021-00230025-002A002C-002F003A003B003F0040005B-005D005F007B007D00A100AB00B700BB00BF037E0387055A-055F0589058A05BE05C005C305C605F305F40609060A060C060D061B061E061F066A-066D06D40700-070D07F7-07F90830-083E0964096509700DF40E4F0E5A0E5B0F04-0F120F3A-0F3D0F850FD0-0FD4104A-104F10FB1361-13681400166D166E169B169C16EB-16ED1735173617D4-17D617D8-17DA1800-180A1944194519DE19DF1A1E1A1F1AA0-1AA61AA8-1AAD1B5A-1B601C3B-1C3F1C7E1C7F1CD32010-20272030-20432045-20512053-205E207D207E208D208E2329232A2768-277527C527C627E6-27EF2983-299829D8-29DB29FC29FD2CF9-2CFC2CFE2CFF2E00-2E2E2E302E313001-30033008-30113014-301F3030303D30A030FBA4FEA4FFA60D-A60FA673A67EA6F2-A6F7A874-A877A8CEA8CFA8F8-A8FAA92EA92FA95FA9C1-A9CDA9DEA9DFAA5C-AA5FAADEAADFABEBFD3EFD3FFE10-FE19FE30-FE52FE54-FE61FE63FE68FE6AFE6BFF01-FF03FF05-FF0AFF0C-FF0FFF1AFF1BFF1FFF20FF3B-FF3DFF3FFF5BFF5DFF5F-FF65\",\r\n\t Pd: \"002D058A05BE140018062010-20152E172E1A301C303030A0FE31FE32FE58FE63FF0D\",\r\n\t Ps: \"0028005B007B0F3A0F3C169B201A201E2045207D208D23292768276A276C276E27702772277427C527E627E827EA27EC27EE2983298529872989298B298D298F299129932995299729D829DA29FC2E222E242E262E283008300A300C300E3010301430163018301A301DFD3EFE17FE35FE37FE39FE3BFE3DFE3FFE41FE43FE47FE59FE5BFE5DFF08FF3BFF5BFF5FFF62\",\r\n\t Pe: \"0029005D007D0F3B0F3D169C2046207E208E232A2769276B276D276F27712773277527C627E727E927EB27ED27EF298429862988298A298C298E2990299229942996299829D929DB29FD2E232E252E272E293009300B300D300F3011301530173019301B301E301FFD3FFE18FE36FE38FE3AFE3CFE3EFE40FE42FE44FE48FE5AFE5CFE5EFF09FF3DFF5DFF60FF63\",\r\n\t Pi: \"00AB2018201B201C201F20392E022E042E092E0C2E1C2E20\",\r\n\t Pf: \"00BB2019201D203A2E032E052E0A2E0D2E1D2E21\",\r\n\t Pc: \"005F203F20402054FE33FE34FE4D-FE4FFF3F\",\r\n\t Po: \"0021-00230025-0027002A002C002E002F003A003B003F0040005C00A100B700BF037E0387055A-055F058905C005C305C605F305F40609060A060C060D061B061E061F066A-066D06D40700-070D07F7-07F90830-083E0964096509700DF40E4F0E5A0E5B0F04-0F120F850FD0-0FD4104A-104F10FB1361-1368166D166E16EB-16ED1735173617D4-17D617D8-17DA1800-18051807-180A1944194519DE19DF1A1E1A1F1AA0-1AA61AA8-1AAD1B5A-1B601C3B-1C3F1C7E1C7F1CD3201620172020-20272030-2038203B-203E2041-20432047-205120532055-205E2CF9-2CFC2CFE2CFF2E002E012E06-2E082E0B2E0E-2E162E182E192E1B2E1E2E1F2E2A-2E2E2E302E313001-3003303D30FBA4FEA4FFA60D-A60FA673A67EA6F2-A6F7A874-A877A8CEA8CFA8F8-A8FAA92EA92FA95FA9C1-A9CDA9DEA9DFAA5C-AA5FAADEAADFABEBFE10-FE16FE19FE30FE45FE46FE49-FE4CFE50-FE52FE54-FE57FE5F-FE61FE68FE6AFE6BFF01-FF03FF05-FF07FF0AFF0CFF0EFF0FFF1AFF1BFF1FFF20FF3CFF61FF64FF65\",\r\n\t S: \"0024002B003C-003E005E0060007C007E00A2-00A900AC00AE-00B100B400B600B800D700F702C2-02C502D2-02DF02E5-02EB02ED02EF-02FF03750384038503F604820606-0608060B060E060F06E906FD06FE07F609F209F309FA09FB0AF10B700BF3-0BFA0C7F0CF10CF20D790E3F0F01-0F030F13-0F170F1A-0F1F0F340F360F380FBE-0FC50FC7-0FCC0FCE0FCF0FD5-0FD8109E109F13601390-139917DB194019E0-19FF1B61-1B6A1B74-1B7C1FBD1FBF-1FC11FCD-1FCF1FDD-1FDF1FED-1FEF1FFD1FFE20442052207A-207C208A-208C20A0-20B8210021012103-21062108210921142116-2118211E-2123212521272129212E213A213B2140-2144214A-214D214F2190-2328232B-23E82400-24262440-244A249C-24E92500-26CD26CF-26E126E326E8-26FF2701-27042706-2709270C-27272729-274B274D274F-27522756-275E2761-276727942798-27AF27B1-27BE27C0-27C427C7-27CA27CC27D0-27E527F0-29822999-29D729DC-29FB29FE-2B4C2B50-2B592CE5-2CEA2E80-2E992E9B-2EF32F00-2FD52FF0-2FFB300430123013302030363037303E303F309B309C319031913196-319F31C0-31E33200-321E322A-32503260-327F328A-32B032C0-32FE3300-33FF4DC0-4DFFA490-A4C6A700-A716A720A721A789A78AA828-A82BA836-A839AA77-AA79FB29FDFCFDFDFE62FE64-FE66FE69FF04FF0BFF1C-FF1EFF3EFF40FF5CFF5EFFE0-FFE6FFE8-FFEEFFFCFFFD\",\r\n\t Sm: \"002B003C-003E007C007E00AC00B100D700F703F60606-060820442052207A-207C208A-208C2140-2144214B2190-2194219A219B21A021A321A621AE21CE21CF21D221D421F4-22FF2308-230B23202321237C239B-23B323DC-23E125B725C125F8-25FF266F27C0-27C427C7-27CA27CC27D0-27E527F0-27FF2900-29822999-29D729DC-29FB29FE-2AFF2B30-2B442B47-2B4CFB29FE62FE64-FE66FF0BFF1C-FF1EFF5CFF5EFFE2FFE9-FFEC\",\r\n\t Sc: \"002400A2-00A5060B09F209F309FB0AF10BF90E3F17DB20A0-20B8A838FDFCFE69FF04FFE0FFE1FFE5FFE6\",\r\n\t Sk: \"005E006000A800AF00B400B802C2-02C502D2-02DF02E5-02EB02ED02EF-02FF0375038403851FBD1FBF-1FC11FCD-1FCF1FDD-1FDF1FED-1FEF1FFD1FFE309B309CA700-A716A720A721A789A78AFF3EFF40FFE3\",\r\n\t So: \"00A600A700A900AE00B000B60482060E060F06E906FD06FE07F609FA0B700BF3-0BF80BFA0C7F0CF10CF20D790F01-0F030F13-0F170F1A-0F1F0F340F360F380FBE-0FC50FC7-0FCC0FCE0FCF0FD5-0FD8109E109F13601390-1399194019E0-19FF1B61-1B6A1B74-1B7C210021012103-21062108210921142116-2118211E-2123212521272129212E213A213B214A214C214D214F2195-2199219C-219F21A121A221A421A521A7-21AD21AF-21CD21D021D121D321D5-21F32300-2307230C-231F2322-2328232B-237B237D-239A23B4-23DB23E2-23E82400-24262440-244A249C-24E92500-25B625B8-25C025C2-25F72600-266E2670-26CD26CF-26E126E326E8-26FF2701-27042706-2709270C-27272729-274B274D274F-27522756-275E2761-276727942798-27AF27B1-27BE2800-28FF2B00-2B2F2B452B462B50-2B592CE5-2CEA2E80-2E992E9B-2EF32F00-2FD52FF0-2FFB300430123013302030363037303E303F319031913196-319F31C0-31E33200-321E322A-32503260-327F328A-32B032C0-32FE3300-33FF4DC0-4DFFA490-A4C6A828-A82BA836A837A839AA77-AA79FDFDFFE4FFE8FFEDFFEEFFFCFFFD\",\r\n\t Z: \"002000A01680180E2000-200A20282029202F205F3000\",\r\n\t Zs: \"002000A01680180E2000-200A202F205F3000\",\r\n\t Zl: \"2028\",\r\n\t Zp: \"2029\",\r\n\t C: \"0000-001F007F-009F00AD03780379037F-0383038B038D03A20526-05300557055805600588058B-059005C8-05CF05EB-05EF05F5-0605061C061D0620065F06DD070E070F074B074C07B2-07BF07FB-07FF082E082F083F-08FF093A093B094F095609570973-097809800984098D098E0991099209A909B109B3-09B509BA09BB09C509C609C909CA09CF-09D609D8-09DB09DE09E409E509FC-0A000A040A0B-0A0E0A110A120A290A310A340A370A3A0A3B0A3D0A43-0A460A490A4A0A4E-0A500A52-0A580A5D0A5F-0A650A76-0A800A840A8E0A920AA90AB10AB40ABA0ABB0AC60ACA0ACE0ACF0AD1-0ADF0AE40AE50AF00AF2-0B000B040B0D0B0E0B110B120B290B310B340B3A0B3B0B450B460B490B4A0B4E-0B550B58-0B5B0B5E0B640B650B72-0B810B840B8B-0B8D0B910B96-0B980B9B0B9D0BA0-0BA20BA5-0BA70BAB-0BAD0BBA-0BBD0BC3-0BC50BC90BCE0BCF0BD1-0BD60BD8-0BE50BFB-0C000C040C0D0C110C290C340C3A-0C3C0C450C490C4E-0C540C570C5A-0C5F0C640C650C70-0C770C800C810C840C8D0C910CA90CB40CBA0CBB0CC50CC90CCE-0CD40CD7-0CDD0CDF0CE40CE50CF00CF3-0D010D040D0D0D110D290D3A-0D3C0D450D490D4E-0D560D58-0D5F0D640D650D76-0D780D800D810D840D97-0D990DB20DBC0DBE0DBF0DC7-0DC90DCB-0DCE0DD50DD70DE0-0DF10DF5-0E000E3B-0E3E0E5C-0E800E830E850E860E890E8B0E8C0E8E-0E930E980EA00EA40EA60EA80EA90EAC0EBA0EBE0EBF0EC50EC70ECE0ECF0EDA0EDB0EDE-0EFF0F480F6D-0F700F8C-0F8F0F980FBD0FCD0FD9-0FFF10C6-10CF10FD-10FF1249124E124F12571259125E125F1289128E128F12B112B612B712BF12C112C612C712D7131113161317135B-135E137D-137F139A-139F13F5-13FF169D-169F16F1-16FF170D1715-171F1737-173F1754-175F176D17711774-177F17B417B517DE17DF17EA-17EF17FA-17FF180F181A-181F1878-187F18AB-18AF18F6-18FF191D-191F192C-192F193C-193F1941-1943196E196F1975-197F19AC-19AF19CA-19CF19DB-19DD1A1C1A1D1A5F1A7D1A7E1A8A-1A8F1A9A-1A9F1AAE-1AFF1B4C-1B4F1B7D-1B7F1BAB-1BAD1BBA-1BFF1C38-1C3A1C4A-1C4C1C80-1CCF1CF3-1CFF1DE7-1DFC1F161F171F1E1F1F1F461F471F4E1F4F1F581F5A1F5C1F5E1F7E1F7F1FB51FC51FD41FD51FDC1FF01FF11FF51FFF200B-200F202A-202E2060-206F20722073208F2095-209F20B9-20CF20F1-20FF218A-218F23E9-23FF2427-243F244B-245F26CE26E226E4-26E727002705270A270B2728274C274E2753-2755275F27602795-279727B027BF27CB27CD-27CF2B4D-2B4F2B5A-2BFF2C2F2C5F2CF2-2CF82D26-2D2F2D66-2D6E2D70-2D7F2D97-2D9F2DA72DAF2DB72DBF2DC72DCF2DD72DDF2E32-2E7F2E9A2EF4-2EFF2FD6-2FEF2FFC-2FFF3040309730983100-3104312E-3130318F31B8-31BF31E4-31EF321F32FF4DB6-4DBF9FCC-9FFFA48D-A48FA4C7-A4CFA62C-A63FA660A661A674-A67BA698-A69FA6F8-A6FFA78D-A7FAA82C-A82FA83A-A83FA878-A87FA8C5-A8CDA8DA-A8DFA8FC-A8FFA954-A95EA97D-A97FA9CEA9DA-A9DDA9E0-A9FFAA37-AA3FAA4EAA4FAA5AAA5BAA7C-AA7FAAC3-AADAAAE0-ABBFABEEABEFABFA-ABFFD7A4-D7AFD7C7-D7CAD7FC-F8FFFA2EFA2FFA6EFA6FFADA-FAFFFB07-FB12FB18-FB1CFB37FB3DFB3FFB42FB45FBB2-FBD2FD40-FD4FFD90FD91FDC8-FDEFFDFEFDFFFE1A-FE1FFE27-FE2FFE53FE67FE6C-FE6FFE75FEFD-FF00FFBF-FFC1FFC8FFC9FFD0FFD1FFD8FFD9FFDD-FFDFFFE7FFEF-FFFBFFFEFFFF\",\r\n\t Cc: \"0000-001F007F-009F\",\r\n\t Cf: \"00AD0600-060306DD070F17B417B5200B-200F202A-202E2060-2064206A-206FFEFFFFF9-FFFB\",\r\n\t Co: \"E000-F8FF\",\r\n\t Cs: \"D800-DFFF\",\r\n\t Cn: \"03780379037F-0383038B038D03A20526-05300557055805600588058B-059005C8-05CF05EB-05EF05F5-05FF06040605061C061D0620065F070E074B074C07B2-07BF07FB-07FF082E082F083F-08FF093A093B094F095609570973-097809800984098D098E0991099209A909B109B3-09B509BA09BB09C509C609C909CA09CF-09D609D8-09DB09DE09E409E509FC-0A000A040A0B-0A0E0A110A120A290A310A340A370A3A0A3B0A3D0A43-0A460A490A4A0A4E-0A500A52-0A580A5D0A5F-0A650A76-0A800A840A8E0A920AA90AB10AB40ABA0ABB0AC60ACA0ACE0ACF0AD1-0ADF0AE40AE50AF00AF2-0B000B040B0D0B0E0B110B120B290B310B340B3A0B3B0B450B460B490B4A0B4E-0B550B58-0B5B0B5E0B640B650B72-0B810B840B8B-0B8D0B910B96-0B980B9B0B9D0BA0-0BA20BA5-0BA70BAB-0BAD0BBA-0BBD0BC3-0BC50BC90BCE0BCF0BD1-0BD60BD8-0BE50BFB-0C000C040C0D0C110C290C340C3A-0C3C0C450C490C4E-0C540C570C5A-0C5F0C640C650C70-0C770C800C810C840C8D0C910CA90CB40CBA0CBB0CC50CC90CCE-0CD40CD7-0CDD0CDF0CE40CE50CF00CF3-0D010D040D0D0D110D290D3A-0D3C0D450D490D4E-0D560D58-0D5F0D640D650D76-0D780D800D810D840D97-0D990DB20DBC0DBE0DBF0DC7-0DC90DCB-0DCE0DD50DD70DE0-0DF10DF5-0E000E3B-0E3E0E5C-0E800E830E850E860E890E8B0E8C0E8E-0E930E980EA00EA40EA60EA80EA90EAC0EBA0EBE0EBF0EC50EC70ECE0ECF0EDA0EDB0EDE-0EFF0F480F6D-0F700F8C-0F8F0F980FBD0FCD0FD9-0FFF10C6-10CF10FD-10FF1249124E124F12571259125E125F1289128E128F12B112B612B712BF12C112C612C712D7131113161317135B-135E137D-137F139A-139F13F5-13FF169D-169F16F1-16FF170D1715-171F1737-173F1754-175F176D17711774-177F17DE17DF17EA-17EF17FA-17FF180F181A-181F1878-187F18AB-18AF18F6-18FF191D-191F192C-192F193C-193F1941-1943196E196F1975-197F19AC-19AF19CA-19CF19DB-19DD1A1C1A1D1A5F1A7D1A7E1A8A-1A8F1A9A-1A9F1AAE-1AFF1B4C-1B4F1B7D-1B7F1BAB-1BAD1BBA-1BFF1C38-1C3A1C4A-1C4C1C80-1CCF1CF3-1CFF1DE7-1DFC1F161F171F1E1F1F1F461F471F4E1F4F1F581F5A1F5C1F5E1F7E1F7F1FB51FC51FD41FD51FDC1FF01FF11FF51FFF2065-206920722073208F2095-209F20B9-20CF20F1-20FF218A-218F23E9-23FF2427-243F244B-245F26CE26E226E4-26E727002705270A270B2728274C274E2753-2755275F27602795-279727B027BF27CB27CD-27CF2B4D-2B4F2B5A-2BFF2C2F2C5F2CF2-2CF82D26-2D2F2D66-2D6E2D70-2D7F2D97-2D9F2DA72DAF2DB72DBF2DC72DCF2DD72DDF2E32-2E7F2E9A2EF4-2EFF2FD6-2FEF2FFC-2FFF3040309730983100-3104312E-3130318F31B8-31BF31E4-31EF321F32FF4DB6-4DBF9FCC-9FFFA48D-A48FA4C7-A4CFA62C-A63FA660A661A674-A67BA698-A69FA6F8-A6FFA78D-A7FAA82C-A82FA83A-A83FA878-A87FA8C5-A8CDA8DA-A8DFA8FC-A8FFA954-A95EA97D-A97FA9CEA9DA-A9DDA9E0-A9FFAA37-AA3FAA4EAA4FAA5AAA5BAA7C-AA7FAAC3-AADAAAE0-ABBFABEEABEFABFA-ABFFD7A4-D7AFD7C7-D7CAD7FC-D7FFFA2EFA2FFA6EFA6FFADA-FAFFFB07-FB12FB18-FB1CFB37FB3DFB3FFB42FB45FBB2-FBD2FD40-FD4FFD90FD91FDC8-FDEFFDFEFDFFFE1A-FE1FFE27-FE2FFE53FE67FE6C-FE6FFE75FEFDFEFEFF00FFBF-FFC1FFC8FFC9FFD0FFD1FFD8FFD9FFDD-FFDFFFE7FFEF-FFF8FFFEFFFF\"\r\n\t});\r\n\r\n\tfunction addUnicodePackage (pack) {\r\n\t var codePoint = /\\w{4}/g;\r\n\t for (var name in pack)\r\n\t exports.packages[name] = pack[name].replace(codePoint, \"\\\\u$&\");\r\n\t}\r\n\r\n\t});\r\n\r\n\tace.define(\"ace/token_iterator\",[\"require\",\"exports\",\"module\"], function(acequire, exports, module) {\r\n\t\"use strict\";\r\n\tvar TokenIterator = function(session, initialRow, initialColumn) {\r\n\t this.$session = session;\r\n\t this.$row = initialRow;\r\n\t this.$rowTokens = session.getTokens(initialRow);\r\n\r\n\t var token = session.getTokenAt(initialRow, initialColumn);\r\n\t this.$tokenIndex = token ? token.index : -1;\r\n\t};\r\n\r\n\t(function() { \r\n\t this.stepBackward = function() {\r\n\t this.$tokenIndex -= 1;\r\n\t \r\n\t while (this.$tokenIndex < 0) {\r\n\t this.$row -= 1;\r\n\t if (this.$row < 0) {\r\n\t this.$row = 0;\r\n\t return null;\r\n\t }\r\n\t \r\n\t this.$rowTokens = this.$session.getTokens(this.$row);\r\n\t this.$tokenIndex = this.$rowTokens.length - 1;\r\n\t }\r\n\t \r\n\t return this.$rowTokens[this.$tokenIndex];\r\n\t }; \r\n\t this.stepForward = function() {\r\n\t this.$tokenIndex += 1;\r\n\t var rowCount;\r\n\t while (this.$tokenIndex >= this.$rowTokens.length) {\r\n\t this.$row += 1;\r\n\t if (!rowCount)\r\n\t rowCount = this.$session.getLength();\r\n\t if (this.$row >= rowCount) {\r\n\t this.$row = rowCount - 1;\r\n\t return null;\r\n\t }\r\n\r\n\t this.$rowTokens = this.$session.getTokens(this.$row);\r\n\t this.$tokenIndex = 0;\r\n\t }\r\n\t \r\n\t return this.$rowTokens[this.$tokenIndex];\r\n\t }; \r\n\t this.getCurrentToken = function () {\r\n\t return this.$rowTokens[this.$tokenIndex];\r\n\t }; \r\n\t this.getCurrentTokenRow = function () {\r\n\t return this.$row;\r\n\t }; \r\n\t this.getCurrentTokenColumn = function() {\r\n\t var rowTokens = this.$rowTokens;\r\n\t var tokenIndex = this.$tokenIndex;\r\n\t var column = rowTokens[tokenIndex].start;\r\n\t if (column !== undefined)\r\n\t return column;\r\n\t \r\n\t column = 0;\r\n\t while (tokenIndex > 0) {\r\n\t tokenIndex -= 1;\r\n\t column += rowTokens[tokenIndex].value.length;\r\n\t }\r\n\t \r\n\t return column; \r\n\t };\r\n\t this.getCurrentTokenPosition = function() {\r\n\t return {row: this.$row, column: this.getCurrentTokenColumn()};\r\n\t };\r\n\t \r\n\t}).call(TokenIterator.prototype);\r\n\r\n\texports.TokenIterator = TokenIterator;\r\n\t});\r\n\r\n\tace.define(\"ace/mode/text\",[\"require\",\"exports\",\"module\",\"ace/tokenizer\",\"ace/mode/text_highlight_rules\",\"ace/mode/behaviour\",\"ace/unicode\",\"ace/lib/lang\",\"ace/token_iterator\",\"ace/range\"], function(acequire, exports, module) {\r\n\t\"use strict\";\r\n\r\n\tvar Tokenizer = acequire(\"../tokenizer\").Tokenizer;\r\n\tvar TextHighlightRules = acequire(\"./text_highlight_rules\").TextHighlightRules;\r\n\tvar Behaviour = acequire(\"./behaviour\").Behaviour;\r\n\tvar unicode = acequire(\"../unicode\");\r\n\tvar lang = acequire(\"../lib/lang\");\r\n\tvar TokenIterator = acequire(\"../token_iterator\").TokenIterator;\r\n\tvar Range = acequire(\"../range\").Range;\r\n\r\n\tvar Mode = function() {\r\n\t this.HighlightRules = TextHighlightRules;\r\n\t this.$behaviour = new Behaviour();\r\n\t};\r\n\r\n\t(function() {\r\n\r\n\t this.tokenRe = new RegExp(\"^[\"\r\n\t + unicode.packages.L\r\n\t + unicode.packages.Mn + unicode.packages.Mc\r\n\t + unicode.packages.Nd\r\n\t + unicode.packages.Pc + \"\\\\$_]+\", \"g\"\r\n\t );\r\n\r\n\t this.nonTokenRe = new RegExp(\"^(?:[^\"\r\n\t + unicode.packages.L\r\n\t + unicode.packages.Mn + unicode.packages.Mc\r\n\t + unicode.packages.Nd\r\n\t + unicode.packages.Pc + \"\\\\$_]|\\\\s])+\", \"g\"\r\n\t );\r\n\r\n\t this.getTokenizer = function() {\r\n\t if (!this.$tokenizer) {\r\n\t this.$highlightRules = this.$highlightRules || new this.HighlightRules();\r\n\t this.$tokenizer = new Tokenizer(this.$highlightRules.getRules());\r\n\t }\r\n\t return this.$tokenizer;\r\n\t };\r\n\r\n\t this.lineCommentStart = \"\";\r\n\t this.blockComment = \"\";\r\n\r\n\t this.toggleCommentLines = function(state, session, startRow, endRow) {\r\n\t var doc = session.doc;\r\n\r\n\t var ignoreBlankLines = true;\r\n\t var shouldRemove = true;\r\n\t var minIndent = Infinity;\r\n\t var tabSize = session.getTabSize();\r\n\t var insertAtTabStop = false;\r\n\r\n\t if (!this.lineCommentStart) {\r\n\t if (!this.blockComment)\r\n\t return false;\r\n\t var lineCommentStart = this.blockComment.start;\r\n\t var lineCommentEnd = this.blockComment.end;\r\n\t var regexpStart = new RegExp(\"^(\\\\s*)(?:\" + lang.escapeRegExp(lineCommentStart) + \")\");\r\n\t var regexpEnd = new RegExp(\"(?:\" + lang.escapeRegExp(lineCommentEnd) + \")\\\\s*$\");\r\n\r\n\t var comment = function(line, i) {\r\n\t if (testRemove(line, i))\r\n\t return;\r\n\t if (!ignoreBlankLines || /\\S/.test(line)) {\r\n\t doc.insertInLine({row: i, column: line.length}, lineCommentEnd);\r\n\t doc.insertInLine({row: i, column: minIndent}, lineCommentStart);\r\n\t }\r\n\t };\r\n\r\n\t var uncomment = function(line, i) {\r\n\t var m;\r\n\t if (m = line.match(regexpEnd))\r\n\t doc.removeInLine(i, line.length - m[0].length, line.length);\r\n\t if (m = line.match(regexpStart))\r\n\t doc.removeInLine(i, m[1].length, m[0].length);\r\n\t };\r\n\r\n\t var testRemove = function(line, row) {\r\n\t if (regexpStart.test(line))\r\n\t return true;\r\n\t var tokens = session.getTokens(row);\r\n\t for (var i = 0; i < tokens.length; i++) {\r\n\t if (tokens[i].type === \"comment\")\r\n\t return true;\r\n\t }\r\n\t };\r\n\t } else {\r\n\t if (Array.isArray(this.lineCommentStart)) {\r\n\t var regexpStart = this.lineCommentStart.map(lang.escapeRegExp).join(\"|\");\r\n\t var lineCommentStart = this.lineCommentStart[0];\r\n\t } else {\r\n\t var regexpStart = lang.escapeRegExp(this.lineCommentStart);\r\n\t var lineCommentStart = this.lineCommentStart;\r\n\t }\r\n\t regexpStart = new RegExp(\"^(\\\\s*)(?:\" + regexpStart + \") ?\");\r\n\t \r\n\t insertAtTabStop = session.getUseSoftTabs();\r\n\r\n\t var uncomment = function(line, i) {\r\n\t var m = line.match(regexpStart);\r\n\t if (!m) return;\r\n\t var start = m[1].length, end = m[0].length;\r\n\t if (!shouldInsertSpace(line, start, end) && m[0][end - 1] == \" \")\r\n\t end--;\r\n\t doc.removeInLine(i, start, end);\r\n\t };\r\n\t var commentWithSpace = lineCommentStart + \" \";\r\n\t var comment = function(line, i) {\r\n\t if (!ignoreBlankLines || /\\S/.test(line)) {\r\n\t if (shouldInsertSpace(line, minIndent, minIndent))\r\n\t doc.insertInLine({row: i, column: minIndent}, commentWithSpace);\r\n\t else\r\n\t doc.insertInLine({row: i, column: minIndent}, lineCommentStart);\r\n\t }\r\n\t };\r\n\t var testRemove = function(line, i) {\r\n\t return regexpStart.test(line);\r\n\t };\r\n\t \r\n\t var shouldInsertSpace = function(line, before, after) {\r\n\t var spaces = 0;\r\n\t while (before-- && line.charAt(before) == \" \")\r\n\t spaces++;\r\n\t if (spaces % tabSize != 0)\r\n\t return false;\r\n\t var spaces = 0;\r\n\t while (line.charAt(after++) == \" \")\r\n\t spaces++;\r\n\t if (tabSize > 2)\r\n\t return spaces % tabSize != tabSize - 1;\r\n\t else\r\n\t return spaces % tabSize == 0;\r\n\t return true;\r\n\t };\r\n\t }\r\n\r\n\t function iter(fun) {\r\n\t for (var i = startRow; i <= endRow; i++)\r\n\t fun(doc.getLine(i), i);\r\n\t }\r\n\r\n\r\n\t var minEmptyLength = Infinity;\r\n\t iter(function(line, i) {\r\n\t var indent = line.search(/\\S/);\r\n\t if (indent !== -1) {\r\n\t if (indent < minIndent)\r\n\t minIndent = indent;\r\n\t if (shouldRemove && !testRemove(line, i))\r\n\t shouldRemove = false;\r\n\t } else if (minEmptyLength > line.length) {\r\n\t minEmptyLength = line.length;\r\n\t }\r\n\t });\r\n\r\n\t if (minIndent == Infinity) {\r\n\t minIndent = minEmptyLength;\r\n\t ignoreBlankLines = false;\r\n\t shouldRemove = false;\r\n\t }\r\n\r\n\t if (insertAtTabStop && minIndent % tabSize != 0)\r\n\t minIndent = Math.floor(minIndent / tabSize) * tabSize;\r\n\r\n\t iter(shouldRemove ? uncomment : comment);\r\n\t };\r\n\r\n\t this.toggleBlockComment = function(state, session, range, cursor) {\r\n\t var comment = this.blockComment;\r\n\t if (!comment)\r\n\t return;\r\n\t if (!comment.start && comment[0])\r\n\t comment = comment[0];\r\n\r\n\t var iterator = new TokenIterator(session, cursor.row, cursor.column);\r\n\t var token = iterator.getCurrentToken();\r\n\r\n\t var sel = session.selection;\r\n\t var initialRange = session.selection.toOrientedRange();\r\n\t var startRow, colDiff;\r\n\r\n\t if (token && /comment/.test(token.type)) {\r\n\t var startRange, endRange;\r\n\t while (token && /comment/.test(token.type)) {\r\n\t var i = token.value.indexOf(comment.start);\r\n\t if (i != -1) {\r\n\t var row = iterator.getCurrentTokenRow();\r\n\t var column = iterator.getCurrentTokenColumn() + i;\r\n\t startRange = new Range(row, column, row, column + comment.start.length);\r\n\t break;\r\n\t }\r\n\t token = iterator.stepBackward();\r\n\t }\r\n\r\n\t var iterator = new TokenIterator(session, cursor.row, cursor.column);\r\n\t var token = iterator.getCurrentToken();\r\n\t while (token && /comment/.test(token.type)) {\r\n\t var i = token.value.indexOf(comment.end);\r\n\t if (i != -1) {\r\n\t var row = iterator.getCurrentTokenRow();\r\n\t var column = iterator.getCurrentTokenColumn() + i;\r\n\t endRange = new Range(row, column, row, column + comment.end.length);\r\n\t break;\r\n\t }\r\n\t token = iterator.stepForward();\r\n\t }\r\n\t if (endRange)\r\n\t session.remove(endRange);\r\n\t if (startRange) {\r\n\t session.remove(startRange);\r\n\t startRow = startRange.start.row;\r\n\t colDiff = -comment.start.length;\r\n\t }\r\n\t } else {\r\n\t colDiff = comment.start.length;\r\n\t startRow = range.start.row;\r\n\t session.insert(range.end, comment.end);\r\n\t session.insert(range.start, comment.start);\r\n\t }\r\n\t if (initialRange.start.row == startRow)\r\n\t initialRange.start.column += colDiff;\r\n\t if (initialRange.end.row == startRow)\r\n\t initialRange.end.column += colDiff;\r\n\t session.selection.fromOrientedRange(initialRange);\r\n\t };\r\n\r\n\t this.getNextLineIndent = function(state, line, tab) {\r\n\t return this.$getIndent(line);\r\n\t };\r\n\r\n\t this.checkOutdent = function(state, line, input) {\r\n\t return false;\r\n\t };\r\n\r\n\t this.autoOutdent = function(state, doc, row) {\r\n\t };\r\n\r\n\t this.$getIndent = function(line) {\r\n\t return line.match(/^\\s*/)[0];\r\n\t };\r\n\r\n\t this.createWorker = function(session) {\r\n\t return null;\r\n\t };\r\n\r\n\t this.createModeDelegates = function (mapping) {\r\n\t this.$embeds = [];\r\n\t this.$modes = {};\r\n\t for (var i in mapping) {\r\n\t if (mapping[i]) {\r\n\t this.$embeds.push(i);\r\n\t this.$modes[i] = new mapping[i]();\r\n\t }\r\n\t }\r\n\r\n\t var delegations = [\"toggleBlockComment\", \"toggleCommentLines\", \"getNextLineIndent\", \r\n\t \"checkOutdent\", \"autoOutdent\", \"transformAction\", \"getCompletions\"];\r\n\r\n\t for (var i = 0; i < delegations.length; i++) {\r\n\t (function(scope) {\r\n\t var functionName = delegations[i];\r\n\t var defaultHandler = scope[functionName];\r\n\t scope[delegations[i]] = function() {\r\n\t return this.$delegator(functionName, arguments, defaultHandler);\r\n\t };\r\n\t }(this));\r\n\t }\r\n\t };\r\n\r\n\t this.$delegator = function(method, args, defaultHandler) {\r\n\t var state = args[0];\r\n\t if (typeof state != \"string\")\r\n\t state = state[0];\r\n\t for (var i = 0; i < this.$embeds.length; i++) {\r\n\t if (!this.$modes[this.$embeds[i]]) continue;\r\n\r\n\t var split = state.split(this.$embeds[i]);\r\n\t if (!split[0] && split[1]) {\r\n\t args[0] = split[1];\r\n\t var mode = this.$modes[this.$embeds[i]];\r\n\t return mode[method].apply(mode, args);\r\n\t }\r\n\t }\r\n\t var ret = defaultHandler.apply(this, args);\r\n\t return defaultHandler ? ret : undefined;\r\n\t };\r\n\r\n\t this.transformAction = function(state, action, editor, session, param) {\r\n\t if (this.$behaviour) {\r\n\t var behaviours = this.$behaviour.getBehaviours();\r\n\t for (var key in behaviours) {\r\n\t if (behaviours[key][action]) {\r\n\t var ret = behaviours[key][action].apply(this, arguments);\r\n\t if (ret) {\r\n\t return ret;\r\n\t }\r\n\t }\r\n\t }\r\n\t }\r\n\t };\r\n\t \r\n\t this.getKeywords = function(append) {\r\n\t if (!this.completionKeywords) {\r\n\t var rules = this.$tokenizer.rules;\r\n\t var completionKeywords = [];\r\n\t for (var rule in rules) {\r\n\t var ruleItr = rules[rule];\r\n\t for (var r = 0, l = ruleItr.length; r < l; r++) {\r\n\t if (typeof ruleItr[r].token === \"string\") {\r\n\t if (/keyword|support|storage/.test(ruleItr[r].token))\r\n\t completionKeywords.push(ruleItr[r].regex);\r\n\t }\r\n\t else if (typeof ruleItr[r].token === \"object\") {\r\n\t for (var a = 0, aLength = ruleItr[r].token.length; a < aLength; a++) { \r\n\t if (/keyword|support|storage/.test(ruleItr[r].token[a])) {\r\n\t var rule = ruleItr[r].regex.match(/\\(.+?\\)/g)[a];\r\n\t completionKeywords.push(rule.substr(1, rule.length - 2));\r\n\t }\r\n\t }\r\n\t }\r\n\t }\r\n\t }\r\n\t this.completionKeywords = completionKeywords;\r\n\t }\r\n\t if (!append)\r\n\t return this.$keywordList;\r\n\t return completionKeywords.concat(this.$keywordList || []);\r\n\t };\r\n\t \r\n\t this.$createKeywordList = function() {\r\n\t if (!this.$highlightRules)\r\n\t this.getTokenizer();\r\n\t return this.$keywordList = this.$highlightRules.$keywordList || [];\r\n\t };\r\n\r\n\t this.getCompletions = function(state, session, pos, prefix) {\r\n\t var keywords = this.$keywordList || this.$createKeywordList();\r\n\t return keywords.map(function(word) {\r\n\t return {\r\n\t name: word,\r\n\t value: word,\r\n\t score: 0,\r\n\t meta: \"keyword\"\r\n\t };\r\n\t });\r\n\t };\r\n\r\n\t this.$id = \"ace/mode/text\";\r\n\t}).call(Mode.prototype);\r\n\r\n\texports.Mode = Mode;\r\n\t});\r\n\r\n\tace.define(\"ace/apply_delta\",[\"require\",\"exports\",\"module\"], function(acequire, exports, module) {\r\n\t\"use strict\";\r\n\r\n\tfunction throwDeltaError(delta, errorText){\r\n\t console.log(\"Invalid Delta:\", delta);\r\n\t throw \"Invalid Delta: \" + errorText;\r\n\t}\r\n\r\n\tfunction positionInDocument(docLines, position) {\r\n\t return position.row >= 0 && position.row < docLines.length &&\r\n\t position.column >= 0 && position.column <= docLines[position.row].length;\r\n\t}\r\n\r\n\tfunction validateDelta(docLines, delta) {\r\n\t if (delta.action != \"insert\" && delta.action != \"remove\")\r\n\t throwDeltaError(delta, \"delta.action must be 'insert' or 'remove'\");\r\n\t if (!(delta.lines instanceof Array))\r\n\t throwDeltaError(delta, \"delta.lines must be an Array\");\r\n\t if (!delta.start || !delta.end)\r\n\t throwDeltaError(delta, \"delta.start/end must be an present\");\r\n\t var start = delta.start;\r\n\t if (!positionInDocument(docLines, delta.start))\r\n\t throwDeltaError(delta, \"delta.start must be contained in document\");\r\n\t var end = delta.end;\r\n\t if (delta.action == \"remove\" && !positionInDocument(docLines, end))\r\n\t throwDeltaError(delta, \"delta.end must contained in document for 'remove' actions\");\r\n\t var numRangeRows = end.row - start.row;\r\n\t var numRangeLastLineChars = (end.column - (numRangeRows == 0 ? start.column : 0));\r\n\t if (numRangeRows != delta.lines.length - 1 || delta.lines[numRangeRows].length != numRangeLastLineChars)\r\n\t throwDeltaError(delta, \"delta.range must match delta lines\");\r\n\t}\r\n\r\n\texports.applyDelta = function(docLines, delta, doNotValidate) {\r\n\t \r\n\t var row = delta.start.row;\r\n\t var startColumn = delta.start.column;\r\n\t var line = docLines[row] || \"\";\r\n\t switch (delta.action) {\r\n\t case \"insert\":\r\n\t var lines = delta.lines;\r\n\t if (lines.length === 1) {\r\n\t docLines[row] = line.substring(0, startColumn) + delta.lines[0] + line.substring(startColumn);\r\n\t } else {\r\n\t var args = [row, 1].concat(delta.lines);\r\n\t docLines.splice.apply(docLines, args);\r\n\t docLines[row] = line.substring(0, startColumn) + docLines[row];\r\n\t docLines[row + delta.lines.length - 1] += line.substring(startColumn);\r\n\t }\r\n\t break;\r\n\t case \"remove\":\r\n\t var endColumn = delta.end.column;\r\n\t var endRow = delta.end.row;\r\n\t if (row === endRow) {\r\n\t docLines[row] = line.substring(0, startColumn) + line.substring(endColumn);\r\n\t } else {\r\n\t docLines.splice(\r\n\t row, endRow - row + 1,\r\n\t line.substring(0, startColumn) + docLines[endRow].substring(endColumn)\r\n\t );\r\n\t }\r\n\t break;\r\n\t }\r\n\t}\r\n\t});\r\n\r\n\tace.define(\"ace/anchor\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/event_emitter\"], function(acequire, exports, module) {\r\n\t\"use strict\";\r\n\r\n\tvar oop = acequire(\"./lib/oop\");\r\n\tvar EventEmitter = acequire(\"./lib/event_emitter\").EventEmitter;\r\n\r\n\tvar Anchor = exports.Anchor = function(doc, row, column) {\r\n\t this.$onChange = this.onChange.bind(this);\r\n\t this.attach(doc);\r\n\t \r\n\t if (typeof column == \"undefined\")\r\n\t this.setPosition(row.row, row.column);\r\n\t else\r\n\t this.setPosition(row, column);\r\n\t};\r\n\r\n\t(function() {\r\n\r\n\t oop.implement(this, EventEmitter);\r\n\t this.getPosition = function() {\r\n\t return this.$clipPositionToDocument(this.row, this.column);\r\n\t };\r\n\t this.getDocument = function() {\r\n\t return this.document;\r\n\t };\r\n\t this.$insertRight = false;\r\n\t this.onChange = function(delta) {\r\n\t if (delta.start.row == delta.end.row && delta.start.row != this.row)\r\n\t return;\r\n\r\n\t if (delta.start.row > this.row)\r\n\t return;\r\n\t \r\n\t var point = $getTransformedPoint(delta, {row: this.row, column: this.column}, this.$insertRight);\r\n\t this.setPosition(point.row, point.column, true);\r\n\t };\r\n\t \r\n\t function $pointsInOrder(point1, point2, equalPointsInOrder) {\r\n\t var bColIsAfter = equalPointsInOrder ? point1.column <= point2.column : point1.column < point2.column;\r\n\t return (point1.row < point2.row) || (point1.row == point2.row && bColIsAfter);\r\n\t }\r\n\t \r\n\t function $getTransformedPoint(delta, point, moveIfEqual) {\r\n\t var deltaIsInsert = delta.action == \"insert\";\r\n\t var deltaRowShift = (deltaIsInsert ? 1 : -1) * (delta.end.row - delta.start.row);\r\n\t var deltaColShift = (deltaIsInsert ? 1 : -1) * (delta.end.column - delta.start.column);\r\n\t var deltaStart = delta.start;\r\n\t var deltaEnd = deltaIsInsert ? deltaStart : delta.end; // Collapse insert range.\r\n\t if ($pointsInOrder(point, deltaStart, moveIfEqual)) {\r\n\t return {\r\n\t row: point.row,\r\n\t column: point.column\r\n\t };\r\n\t }\r\n\t if ($pointsInOrder(deltaEnd, point, !moveIfEqual)) {\r\n\t return {\r\n\t row: point.row + deltaRowShift,\r\n\t column: point.column + (point.row == deltaEnd.row ? deltaColShift : 0)\r\n\t };\r\n\t }\r\n\t \r\n\t return {\r\n\t row: deltaStart.row,\r\n\t column: deltaStart.column\r\n\t };\r\n\t }\r\n\t this.setPosition = function(row, column, noClip) {\r\n\t var pos;\r\n\t if (noClip) {\r\n\t pos = {\r\n\t row: row,\r\n\t column: column\r\n\t };\r\n\t } else {\r\n\t pos = this.$clipPositionToDocument(row, column);\r\n\t }\r\n\r\n\t if (this.row == pos.row && this.column == pos.column)\r\n\t return;\r\n\r\n\t var old = {\r\n\t row: this.row,\r\n\t column: this.column\r\n\t };\r\n\r\n\t this.row = pos.row;\r\n\t this.column = pos.column;\r\n\t this._signal(\"change\", {\r\n\t old: old,\r\n\t value: pos\r\n\t });\r\n\t };\r\n\t this.detach = function() {\r\n\t this.document.removeEventListener(\"change\", this.$onChange);\r\n\t };\r\n\t this.attach = function(doc) {\r\n\t this.document = doc || this.document;\r\n\t this.document.on(\"change\", this.$onChange);\r\n\t };\r\n\t this.$clipPositionToDocument = function(row, column) {\r\n\t var pos = {};\r\n\r\n\t if (row >= this.document.getLength()) {\r\n\t pos.row = Math.max(0, this.document.getLength() - 1);\r\n\t pos.column = this.document.getLine(pos.row).length;\r\n\t }\r\n\t else if (row < 0) {\r\n\t pos.row = 0;\r\n\t pos.column = 0;\r\n\t }\r\n\t else {\r\n\t pos.row = row;\r\n\t pos.column = Math.min(this.document.getLine(pos.row).length, Math.max(0, column));\r\n\t }\r\n\r\n\t if (column < 0)\r\n\t pos.column = 0;\r\n\r\n\t return pos;\r\n\t };\r\n\r\n\t}).call(Anchor.prototype);\r\n\r\n\t});\r\n\r\n\tace.define(\"ace/document\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/apply_delta\",\"ace/lib/event_emitter\",\"ace/range\",\"ace/anchor\"], function(acequire, exports, module) {\r\n\t\"use strict\";\r\n\r\n\tvar oop = acequire(\"./lib/oop\");\r\n\tvar applyDelta = acequire(\"./apply_delta\").applyDelta;\r\n\tvar EventEmitter = acequire(\"./lib/event_emitter\").EventEmitter;\r\n\tvar Range = acequire(\"./range\").Range;\r\n\tvar Anchor = acequire(\"./anchor\").Anchor;\r\n\r\n\tvar Document = function(textOrLines) {\r\n\t this.$lines = [\"\"];\r\n\t if (textOrLines.length === 0) {\r\n\t this.$lines = [\"\"];\r\n\t } else if (Array.isArray(textOrLines)) {\r\n\t this.insertMergedLines({row: 0, column: 0}, textOrLines);\r\n\t } else {\r\n\t this.insert({row: 0, column:0}, textOrLines);\r\n\t }\r\n\t};\r\n\r\n\t(function() {\r\n\r\n\t oop.implement(this, EventEmitter);\r\n\t this.setValue = function(text) {\r\n\t var len = this.getLength() - 1;\r\n\t this.remove(new Range(0, 0, len, this.getLine(len).length));\r\n\t this.insert({row: 0, column: 0}, text);\r\n\t };\r\n\t this.getValue = function() {\r\n\t return this.getAllLines().join(this.getNewLineCharacter());\r\n\t };\r\n\t this.createAnchor = function(row, column) {\r\n\t return new Anchor(this, row, column);\r\n\t };\r\n\t if (\"aaa\".split(/a/).length === 0) {\r\n\t this.$split = function(text) {\r\n\t return text.replace(/\\r\\n|\\r/g, \"\\n\").split(\"\\n\");\r\n\t };\r\n\t } else {\r\n\t this.$split = function(text) {\r\n\t return text.split(/\\r\\n|\\r|\\n/);\r\n\t };\r\n\t }\r\n\r\n\r\n\t this.$detectNewLine = function(text) {\r\n\t var match = text.match(/^.*?(\\r\\n|\\r|\\n)/m);\r\n\t this.$autoNewLine = match ? match[1] : \"\\n\";\r\n\t this._signal(\"changeNewLineMode\");\r\n\t };\r\n\t this.getNewLineCharacter = function() {\r\n\t switch (this.$newLineMode) {\r\n\t case \"windows\":\r\n\t return \"\\r\\n\";\r\n\t case \"unix\":\r\n\t return \"\\n\";\r\n\t default:\r\n\t return this.$autoNewLine || \"\\n\";\r\n\t }\r\n\t };\r\n\r\n\t this.$autoNewLine = \"\";\r\n\t this.$newLineMode = \"auto\";\r\n\t this.setNewLineMode = function(newLineMode) {\r\n\t if (this.$newLineMode === newLineMode)\r\n\t return;\r\n\r\n\t this.$newLineMode = newLineMode;\r\n\t this._signal(\"changeNewLineMode\");\r\n\t };\r\n\t this.getNewLineMode = function() {\r\n\t return this.$newLineMode;\r\n\t };\r\n\t this.isNewLine = function(text) {\r\n\t return (text == \"\\r\\n\" || text == \"\\r\" || text == \"\\n\");\r\n\t };\r\n\t this.getLine = function(row) {\r\n\t return this.$lines[row] || \"\";\r\n\t };\r\n\t this.getLines = function(firstRow, lastRow) {\r\n\t return this.$lines.slice(firstRow, lastRow + 1);\r\n\t };\r\n\t this.getAllLines = function() {\r\n\t return this.getLines(0, this.getLength());\r\n\t };\r\n\t this.getLength = function() {\r\n\t return this.$lines.length;\r\n\t };\r\n\t this.getTextRange = function(range) {\r\n\t return this.getLinesForRange(range).join(this.getNewLineCharacter());\r\n\t };\r\n\t this.getLinesForRange = function(range) {\r\n\t var lines;\r\n\t if (range.start.row === range.end.row) {\r\n\t lines = [this.getLine(range.start.row).substring(range.start.column, range.end.column)];\r\n\t } else {\r\n\t lines = this.getLines(range.start.row, range.end.row);\r\n\t lines[0] = (lines[0] || \"\").substring(range.start.column);\r\n\t var l = lines.length - 1;\r\n\t if (range.end.row - range.start.row == l)\r\n\t lines[l] = lines[l].substring(0, range.end.column);\r\n\t }\r\n\t return lines;\r\n\t };\r\n\t this.insertLines = function(row, lines) {\r\n\t console.warn(\"Use of document.insertLines is deprecated. Use the insertFullLines method instead.\");\r\n\t return this.insertFullLines(row, lines);\r\n\t };\r\n\t this.removeLines = function(firstRow, lastRow) {\r\n\t console.warn(\"Use of document.removeLines is deprecated. Use the removeFullLines method instead.\");\r\n\t return this.removeFullLines(firstRow, lastRow);\r\n\t };\r\n\t this.insertNewLine = function(position) {\r\n\t console.warn(\"Use of document.insertNewLine is deprecated. Use insertMergedLines(position, [\\'\\', \\'\\']) instead.\");\r\n\t return this.insertMergedLines(position, [\"\", \"\"]);\r\n\t };\r\n\t this.insert = function(position, text) {\r\n\t if (this.getLength() <= 1)\r\n\t this.$detectNewLine(text);\r\n\t \r\n\t return this.insertMergedLines(position, this.$split(text));\r\n\t };\r\n\t this.insertInLine = function(position, text) {\r\n\t var start = this.clippedPos(position.row, position.column);\r\n\t var end = this.pos(position.row, position.column + text.length);\r\n\t \r\n\t this.applyDelta({\r\n\t start: start,\r\n\t end: end,\r\n\t action: \"insert\",\r\n\t lines: [text]\r\n\t }, true);\r\n\t \r\n\t return this.clonePos(end);\r\n\t };\r\n\t \r\n\t this.clippedPos = function(row, column) {\r\n\t var length = this.getLength();\r\n\t if (row === undefined) {\r\n\t row = length;\r\n\t } else if (row < 0) {\r\n\t row = 0;\r\n\t } else if (row >= length) {\r\n\t row = length - 1;\r\n\t column = undefined;\r\n\t }\r\n\t var line = this.getLine(row);\r\n\t if (column == undefined)\r\n\t column = line.length;\r\n\t column = Math.min(Math.max(column, 0), line.length);\r\n\t return {row: row, column: column};\r\n\t };\r\n\t \r\n\t this.clonePos = function(pos) {\r\n\t return {row: pos.row, column: pos.column};\r\n\t };\r\n\t \r\n\t this.pos = function(row, column) {\r\n\t return {row: row, column: column};\r\n\t };\r\n\t \r\n\t this.$clipPosition = function(position) {\r\n\t var length = this.getLength();\r\n\t if (position.row >= length) {\r\n\t position.row = Math.max(0, length - 1);\r\n\t position.column = this.getLine(length - 1).length;\r\n\t } else {\r\n\t position.row = Math.max(0, position.row);\r\n\t position.column = Math.min(Math.max(position.column, 0), this.getLine(position.row).length);\r\n\t }\r\n\t return position;\r\n\t };\r\n\t this.insertFullLines = function(row, lines) {\r\n\t row = Math.min(Math.max(row, 0), this.getLength());\r\n\t var column = 0;\r\n\t if (row < this.getLength()) {\r\n\t lines = lines.concat([\"\"]);\r\n\t column = 0;\r\n\t } else {\r\n\t lines = [\"\"].concat(lines);\r\n\t row--;\r\n\t column = this.$lines[row].length;\r\n\t }\r\n\t this.insertMergedLines({row: row, column: column}, lines);\r\n\t }; \r\n\t this.insertMergedLines = function(position, lines) {\r\n\t var start = this.clippedPos(position.row, position.column);\r\n\t var end = {\r\n\t row: start.row + lines.length - 1,\r\n\t column: (lines.length == 1 ? start.column : 0) + lines[lines.length - 1].length\r\n\t };\r\n\t \r\n\t this.applyDelta({\r\n\t start: start,\r\n\t end: end,\r\n\t action: \"insert\",\r\n\t lines: lines\r\n\t });\r\n\t \r\n\t return this.clonePos(end);\r\n\t };\r\n\t this.remove = function(range) {\r\n\t var start = this.clippedPos(range.start.row, range.start.column);\r\n\t var end = this.clippedPos(range.end.row, range.end.column);\r\n\t this.applyDelta({\r\n\t start: start,\r\n\t end: end,\r\n\t action: \"remove\",\r\n\t lines: this.getLinesForRange({start: start, end: end})\r\n\t });\r\n\t return this.clonePos(start);\r\n\t };\r\n\t this.removeInLine = function(row, startColumn, endColumn) {\r\n\t var start = this.clippedPos(row, startColumn);\r\n\t var end = this.clippedPos(row, endColumn);\r\n\t \r\n\t this.applyDelta({\r\n\t start: start,\r\n\t end: end,\r\n\t action: \"remove\",\r\n\t lines: this.getLinesForRange({start: start, end: end})\r\n\t }, true);\r\n\t \r\n\t return this.clonePos(start);\r\n\t };\r\n\t this.removeFullLines = function(firstRow, lastRow) {\r\n\t firstRow = Math.min(Math.max(0, firstRow), this.getLength() - 1);\r\n\t lastRow = Math.min(Math.max(0, lastRow ), this.getLength() - 1);\r\n\t var deleteFirstNewLine = lastRow == this.getLength() - 1 && firstRow > 0;\r\n\t var deleteLastNewLine = lastRow < this.getLength() - 1;\r\n\t var startRow = ( deleteFirstNewLine ? firstRow - 1 : firstRow );\r\n\t var startCol = ( deleteFirstNewLine ? this.getLine(startRow).length : 0 );\r\n\t var endRow = ( deleteLastNewLine ? lastRow + 1 : lastRow );\r\n\t var endCol = ( deleteLastNewLine ? 0 : this.getLine(endRow).length ); \r\n\t var range = new Range(startRow, startCol, endRow, endCol);\r\n\t var deletedLines = this.$lines.slice(firstRow, lastRow + 1);\r\n\t \r\n\t this.applyDelta({\r\n\t start: range.start,\r\n\t end: range.end,\r\n\t action: \"remove\",\r\n\t lines: this.getLinesForRange(range)\r\n\t });\r\n\t return deletedLines;\r\n\t };\r\n\t this.removeNewLine = function(row) {\r\n\t if (row < this.getLength() - 1 && row >= 0) {\r\n\t this.applyDelta({\r\n\t start: this.pos(row, this.getLine(row).length),\r\n\t end: this.pos(row + 1, 0),\r\n\t action: \"remove\",\r\n\t lines: [\"\", \"\"]\r\n\t });\r\n\t }\r\n\t };\r\n\t this.replace = function(range, text) {\r\n\t if (!(range instanceof Range))\r\n\t range = Range.fromPoints(range.start, range.end);\r\n\t if (text.length === 0 && range.isEmpty())\r\n\t return range.start;\r\n\t if (text == this.getTextRange(range))\r\n\t return range.end;\r\n\r\n\t this.remove(range);\r\n\t var end;\r\n\t if (text) {\r\n\t end = this.insert(range.start, text);\r\n\t }\r\n\t else {\r\n\t end = range.start;\r\n\t }\r\n\t \r\n\t return end;\r\n\t };\r\n\t this.applyDeltas = function(deltas) {\r\n\t for (var i=0; i=0; i--) {\r\n\t this.revertDelta(deltas[i]);\r\n\t }\r\n\t };\r\n\t this.applyDelta = function(delta, doNotValidate) {\r\n\t var isInsert = delta.action == \"insert\";\r\n\t if (isInsert ? delta.lines.length <= 1 && !delta.lines[0]\r\n\t : !Range.comparePoints(delta.start, delta.end)) {\r\n\t return;\r\n\t }\r\n\t \r\n\t if (isInsert && delta.lines.length > 20000)\r\n\t this.$splitAndapplyLargeDelta(delta, 20000);\r\n\t applyDelta(this.$lines, delta, doNotValidate);\r\n\t this._signal(\"change\", delta);\r\n\t };\r\n\t \r\n\t this.$splitAndapplyLargeDelta = function(delta, MAX) {\r\n\t var lines = delta.lines;\r\n\t var l = lines.length;\r\n\t var row = delta.start.row; \r\n\t var column = delta.start.column;\r\n\t var from = 0, to = 0;\r\n\t do {\r\n\t from = to;\r\n\t to += MAX - 1;\r\n\t var chunk = lines.slice(from, to);\r\n\t if (to > l) {\r\n\t delta.lines = chunk;\r\n\t delta.start.row = row + from;\r\n\t delta.start.column = column;\r\n\t break;\r\n\t }\r\n\t chunk.push(\"\");\r\n\t this.applyDelta({\r\n\t start: this.pos(row + from, column),\r\n\t end: this.pos(row + to, column = 0),\r\n\t action: delta.action,\r\n\t lines: chunk\r\n\t }, true);\r\n\t } while(true);\r\n\t };\r\n\t this.revertDelta = function(delta) {\r\n\t this.applyDelta({\r\n\t start: this.clonePos(delta.start),\r\n\t end: this.clonePos(delta.end),\r\n\t action: (delta.action == \"insert\" ? \"remove\" : \"insert\"),\r\n\t lines: delta.lines.slice()\r\n\t });\r\n\t };\r\n\t this.indexToPosition = function(index, startRow) {\r\n\t var lines = this.$lines || this.getAllLines();\r\n\t var newlineLength = this.getNewLineCharacter().length;\r\n\t for (var i = startRow || 0, l = lines.length; i < l; i++) {\r\n\t index -= lines[i].length + newlineLength;\r\n\t if (index < 0)\r\n\t return {row: i, column: index + lines[i].length + newlineLength};\r\n\t }\r\n\t return {row: l-1, column: lines[l-1].length};\r\n\t };\r\n\t this.positionToIndex = function(pos, startRow) {\r\n\t var lines = this.$lines || this.getAllLines();\r\n\t var newlineLength = this.getNewLineCharacter().length;\r\n\t var index = 0;\r\n\t var row = Math.min(pos.row, lines.length);\r\n\t for (var i = startRow || 0; i < row; ++i)\r\n\t index += lines[i].length + newlineLength;\r\n\r\n\t return index + pos.column;\r\n\t };\r\n\r\n\t}).call(Document.prototype);\r\n\r\n\texports.Document = Document;\r\n\t});\r\n\r\n\tace.define(\"ace/background_tokenizer\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/event_emitter\"], function(acequire, exports, module) {\r\n\t\"use strict\";\r\n\r\n\tvar oop = acequire(\"./lib/oop\");\r\n\tvar EventEmitter = acequire(\"./lib/event_emitter\").EventEmitter;\r\n\r\n\tvar BackgroundTokenizer = function(tokenizer, editor) {\r\n\t this.running = false;\r\n\t this.lines = [];\r\n\t this.states = [];\r\n\t this.currentLine = 0;\r\n\t this.tokenizer = tokenizer;\r\n\r\n\t var self = this;\r\n\r\n\t this.$worker = function() {\r\n\t if (!self.running) { return; }\r\n\r\n\t var workerStart = new Date();\r\n\t var currentLine = self.currentLine;\r\n\t var endLine = -1;\r\n\t var doc = self.doc;\r\n\r\n\t var startLine = currentLine;\r\n\t while (self.lines[currentLine])\r\n\t currentLine++;\r\n\t \r\n\t var len = doc.getLength();\r\n\t var processedLines = 0;\r\n\t self.running = false;\r\n\t while (currentLine < len) {\r\n\t self.$tokenizeRow(currentLine);\r\n\t endLine = currentLine;\r\n\t do {\r\n\t currentLine++;\r\n\t } while (self.lines[currentLine]);\r\n\t processedLines ++;\r\n\t if ((processedLines % 5 === 0) && (new Date() - workerStart) > 20) { \r\n\t self.running = setTimeout(self.$worker, 20);\r\n\t break;\r\n\t }\r\n\t }\r\n\t self.currentLine = currentLine;\r\n\t \r\n\t if (startLine <= endLine)\r\n\t self.fireUpdateEvent(startLine, endLine);\r\n\t };\r\n\t};\r\n\r\n\t(function(){\r\n\r\n\t oop.implement(this, EventEmitter);\r\n\t this.setTokenizer = function(tokenizer) {\r\n\t this.tokenizer = tokenizer;\r\n\t this.lines = [];\r\n\t this.states = [];\r\n\r\n\t this.start(0);\r\n\t };\r\n\t this.setDocument = function(doc) {\r\n\t this.doc = doc;\r\n\t this.lines = [];\r\n\t this.states = [];\r\n\r\n\t this.stop();\r\n\t };\r\n\t this.fireUpdateEvent = function(firstRow, lastRow) {\r\n\t var data = {\r\n\t first: firstRow,\r\n\t last: lastRow\r\n\t };\r\n\t this._signal(\"update\", {data: data});\r\n\t };\r\n\t this.start = function(startRow) {\r\n\t this.currentLine = Math.min(startRow || 0, this.currentLine, this.doc.getLength());\r\n\t this.lines.splice(this.currentLine, this.lines.length);\r\n\t this.states.splice(this.currentLine, this.states.length);\r\n\r\n\t this.stop();\r\n\t this.running = setTimeout(this.$worker, 700);\r\n\t };\r\n\t \r\n\t this.scheduleStart = function() {\r\n\t if (!this.running)\r\n\t this.running = setTimeout(this.$worker, 700);\r\n\t }\r\n\r\n\t this.$updateOnChange = function(delta) {\r\n\t var startRow = delta.start.row;\r\n\t var len = delta.end.row - startRow;\r\n\r\n\t if (len === 0) {\r\n\t this.lines[startRow] = null;\r\n\t } else if (delta.action == \"remove\") {\r\n\t this.lines.splice(startRow, len + 1, null);\r\n\t this.states.splice(startRow, len + 1, null);\r\n\t } else {\r\n\t var args = Array(len + 1);\r\n\t args.unshift(startRow, 1);\r\n\t this.lines.splice.apply(this.lines, args);\r\n\t this.states.splice.apply(this.states, args);\r\n\t }\r\n\r\n\t this.currentLine = Math.min(startRow, this.currentLine, this.doc.getLength());\r\n\r\n\t this.stop();\r\n\t };\r\n\t this.stop = function() {\r\n\t if (this.running)\r\n\t clearTimeout(this.running);\r\n\t this.running = false;\r\n\t };\r\n\t this.getTokens = function(row) {\r\n\t return this.lines[row] || this.$tokenizeRow(row);\r\n\t };\r\n\t this.getState = function(row) {\r\n\t if (this.currentLine == row)\r\n\t this.$tokenizeRow(row);\r\n\t return this.states[row] || \"start\";\r\n\t };\r\n\r\n\t this.$tokenizeRow = function(row) {\r\n\t var line = this.doc.getLine(row);\r\n\t var state = this.states[row - 1];\r\n\r\n\t var data = this.tokenizer.getLineTokens(line, state, row);\r\n\r\n\t if (this.states[row] + \"\" !== data.state + \"\") {\r\n\t this.states[row] = data.state;\r\n\t this.lines[row + 1] = null;\r\n\t if (this.currentLine > row + 1)\r\n\t this.currentLine = row + 1;\r\n\t } else if (this.currentLine == row) {\r\n\t this.currentLine = row + 1;\r\n\t }\r\n\r\n\t return this.lines[row] = data.tokens;\r\n\t };\r\n\r\n\t}).call(BackgroundTokenizer.prototype);\r\n\r\n\texports.BackgroundTokenizer = BackgroundTokenizer;\r\n\t});\r\n\r\n\tace.define(\"ace/search_highlight\",[\"require\",\"exports\",\"module\",\"ace/lib/lang\",\"ace/lib/oop\",\"ace/range\"], function(acequire, exports, module) {\r\n\t\"use strict\";\r\n\r\n\tvar lang = acequire(\"./lib/lang\");\r\n\tvar oop = acequire(\"./lib/oop\");\r\n\tvar Range = acequire(\"./range\").Range;\r\n\r\n\tvar SearchHighlight = function(regExp, clazz, type) {\r\n\t this.setRegexp(regExp);\r\n\t this.clazz = clazz;\r\n\t this.type = type || \"text\";\r\n\t};\r\n\r\n\t(function() {\r\n\t this.MAX_RANGES = 500;\r\n\t \r\n\t this.setRegexp = function(regExp) {\r\n\t if (this.regExp+\"\" == regExp+\"\")\r\n\t return;\r\n\t this.regExp = regExp;\r\n\t this.cache = [];\r\n\t };\r\n\r\n\t this.update = function(html, markerLayer, session, config) {\r\n\t if (!this.regExp)\r\n\t return;\r\n\t var start = config.firstRow, end = config.lastRow;\r\n\r\n\t for (var i = start; i <= end; i++) {\r\n\t var ranges = this.cache[i];\r\n\t if (ranges == null) {\r\n\t ranges = lang.getMatchOffsets(session.getLine(i), this.regExp);\r\n\t if (ranges.length > this.MAX_RANGES)\r\n\t ranges = ranges.slice(0, this.MAX_RANGES);\r\n\t ranges = ranges.map(function(match) {\r\n\t return new Range(i, match.offset, i, match.offset + match.length);\r\n\t });\r\n\t this.cache[i] = ranges.length ? ranges : \"\";\r\n\t }\r\n\r\n\t for (var j = ranges.length; j --; ) {\r\n\t markerLayer.drawSingleLineMarker(\r\n\t html, ranges[j].toScreenRange(session), this.clazz, config);\r\n\t }\r\n\t }\r\n\t };\r\n\r\n\t}).call(SearchHighlight.prototype);\r\n\r\n\texports.SearchHighlight = SearchHighlight;\r\n\t});\r\n\r\n\tace.define(\"ace/edit_session/fold_line\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(acequire, exports, module) {\r\n\t\"use strict\";\r\n\r\n\tvar Range = acequire(\"../range\").Range;\r\n\tfunction FoldLine(foldData, folds) {\r\n\t this.foldData = foldData;\r\n\t if (Array.isArray(folds)) {\r\n\t this.folds = folds;\r\n\t } else {\r\n\t folds = this.folds = [ folds ];\r\n\t }\r\n\r\n\t var last = folds[folds.length - 1];\r\n\t this.range = new Range(folds[0].start.row, folds[0].start.column,\r\n\t last.end.row, last.end.column);\r\n\t this.start = this.range.start;\r\n\t this.end = this.range.end;\r\n\r\n\t this.folds.forEach(function(fold) {\r\n\t fold.setFoldLine(this);\r\n\t }, this);\r\n\t}\r\n\r\n\t(function() {\r\n\t this.shiftRow = function(shift) {\r\n\t this.start.row += shift;\r\n\t this.end.row += shift;\r\n\t this.folds.forEach(function(fold) {\r\n\t fold.start.row += shift;\r\n\t fold.end.row += shift;\r\n\t });\r\n\t };\r\n\r\n\t this.addFold = function(fold) {\r\n\t if (fold.sameRow) {\r\n\t if (fold.start.row < this.startRow || fold.endRow > this.endRow) {\r\n\t throw new Error(\"Can't add a fold to this FoldLine as it has no connection\");\r\n\t }\r\n\t this.folds.push(fold);\r\n\t this.folds.sort(function(a, b) {\r\n\t return -a.range.compareEnd(b.start.row, b.start.column);\r\n\t });\r\n\t if (this.range.compareEnd(fold.start.row, fold.start.column) > 0) {\r\n\t this.end.row = fold.end.row;\r\n\t this.end.column = fold.end.column;\r\n\t } else if (this.range.compareStart(fold.end.row, fold.end.column) < 0) {\r\n\t this.start.row = fold.start.row;\r\n\t this.start.column = fold.start.column;\r\n\t }\r\n\t } else if (fold.start.row == this.end.row) {\r\n\t this.folds.push(fold);\r\n\t this.end.row = fold.end.row;\r\n\t this.end.column = fold.end.column;\r\n\t } else if (fold.end.row == this.start.row) {\r\n\t this.folds.unshift(fold);\r\n\t this.start.row = fold.start.row;\r\n\t this.start.column = fold.start.column;\r\n\t } else {\r\n\t throw new Error(\"Trying to add fold to FoldRow that doesn't have a matching row\");\r\n\t }\r\n\t fold.foldLine = this;\r\n\t };\r\n\r\n\t this.containsRow = function(row) {\r\n\t return row >= this.start.row && row <= this.end.row;\r\n\t };\r\n\r\n\t this.walk = function(callback, endRow, endColumn) {\r\n\t var lastEnd = 0,\r\n\t folds = this.folds,\r\n\t fold,\r\n\t cmp, stop, isNewRow = true;\r\n\r\n\t if (endRow == null) {\r\n\t endRow = this.end.row;\r\n\t endColumn = this.end.column;\r\n\t }\r\n\r\n\t for (var i = 0; i < folds.length; i++) {\r\n\t fold = folds[i];\r\n\r\n\t cmp = fold.range.compareStart(endRow, endColumn);\r\n\t if (cmp == -1) {\r\n\t callback(null, endRow, endColumn, lastEnd, isNewRow);\r\n\t return;\r\n\t }\r\n\r\n\t stop = callback(null, fold.start.row, fold.start.column, lastEnd, isNewRow);\r\n\t stop = !stop && callback(fold.placeholder, fold.start.row, fold.start.column, lastEnd);\r\n\t if (stop || cmp === 0) {\r\n\t return;\r\n\t }\r\n\t isNewRow = !fold.sameRow;\r\n\t lastEnd = fold.end.column;\r\n\t }\r\n\t callback(null, endRow, endColumn, lastEnd, isNewRow);\r\n\t };\r\n\r\n\t this.getNextFoldTo = function(row, column) {\r\n\t var fold, cmp;\r\n\t for (var i = 0; i < this.folds.length; i++) {\r\n\t fold = this.folds[i];\r\n\t cmp = fold.range.compareEnd(row, column);\r\n\t if (cmp == -1) {\r\n\t return {\r\n\t fold: fold,\r\n\t kind: \"after\"\r\n\t };\r\n\t } else if (cmp === 0) {\r\n\t return {\r\n\t fold: fold,\r\n\t kind: \"inside\"\r\n\t };\r\n\t }\r\n\t }\r\n\t return null;\r\n\t };\r\n\r\n\t this.addRemoveChars = function(row, column, len) {\r\n\t var ret = this.getNextFoldTo(row, column),\r\n\t fold, folds;\r\n\t if (ret) {\r\n\t fold = ret.fold;\r\n\t if (ret.kind == \"inside\"\r\n\t && fold.start.column != column\r\n\t && fold.start.row != row)\r\n\t {\r\n\t window.console && window.console.log(row, column, fold);\r\n\t } else if (fold.start.row == row) {\r\n\t folds = this.folds;\r\n\t var i = folds.indexOf(fold);\r\n\t if (i === 0) {\r\n\t this.start.column += len;\r\n\t }\r\n\t for (i; i < folds.length; i++) {\r\n\t fold = folds[i];\r\n\t fold.start.column += len;\r\n\t if (!fold.sameRow) {\r\n\t return;\r\n\t }\r\n\t fold.end.column += len;\r\n\t }\r\n\t this.end.column += len;\r\n\t }\r\n\t }\r\n\t };\r\n\r\n\t this.split = function(row, column) {\r\n\t var pos = this.getNextFoldTo(row, column);\r\n\t \r\n\t if (!pos || pos.kind == \"inside\")\r\n\t return null;\r\n\t \r\n\t var fold = pos.fold;\r\n\t var folds = this.folds;\r\n\t var foldData = this.foldData;\r\n\t \r\n\t var i = folds.indexOf(fold);\r\n\t var foldBefore = folds[i - 1];\r\n\t this.end.row = foldBefore.end.row;\r\n\t this.end.column = foldBefore.end.column;\r\n\t folds = folds.splice(i, folds.length - i);\r\n\r\n\t var newFoldLine = new FoldLine(foldData, folds);\r\n\t foldData.splice(foldData.indexOf(this) + 1, 0, newFoldLine);\r\n\t return newFoldLine;\r\n\t };\r\n\r\n\t this.merge = function(foldLineNext) {\r\n\t var folds = foldLineNext.folds;\r\n\t for (var i = 0; i < folds.length; i++) {\r\n\t this.addFold(folds[i]);\r\n\t }\r\n\t var foldData = this.foldData;\r\n\t foldData.splice(foldData.indexOf(foldLineNext), 1);\r\n\t };\r\n\r\n\t this.toString = function() {\r\n\t var ret = [this.range.toString() + \": [\" ];\r\n\r\n\t this.folds.forEach(function(fold) {\r\n\t ret.push(\" \" + fold.toString());\r\n\t });\r\n\t ret.push(\"]\");\r\n\t return ret.join(\"\\n\");\r\n\t };\r\n\r\n\t this.idxToPosition = function(idx) {\r\n\t var lastFoldEndColumn = 0;\r\n\r\n\t for (var i = 0; i < this.folds.length; i++) {\r\n\t var fold = this.folds[i];\r\n\r\n\t idx -= fold.start.column - lastFoldEndColumn;\r\n\t if (idx < 0) {\r\n\t return {\r\n\t row: fold.start.row,\r\n\t column: fold.start.column + idx\r\n\t };\r\n\t }\r\n\r\n\t idx -= fold.placeholder.length;\r\n\t if (idx < 0) {\r\n\t return fold.start;\r\n\t }\r\n\r\n\t lastFoldEndColumn = fold.end.column;\r\n\t }\r\n\r\n\t return {\r\n\t row: this.end.row,\r\n\t column: this.end.column + idx\r\n\t };\r\n\t };\r\n\t}).call(FoldLine.prototype);\r\n\r\n\texports.FoldLine = FoldLine;\r\n\t});\r\n\r\n\tace.define(\"ace/range_list\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(acequire, exports, module) {\r\n\t\"use strict\";\r\n\tvar Range = acequire(\"./range\").Range;\r\n\tvar comparePoints = Range.comparePoints;\r\n\r\n\tvar RangeList = function() {\r\n\t this.ranges = [];\r\n\t};\r\n\r\n\t(function() {\r\n\t this.comparePoints = comparePoints;\r\n\r\n\t this.pointIndex = function(pos, excludeEdges, startIndex) {\r\n\t var list = this.ranges;\r\n\r\n\t for (var i = startIndex || 0; i < list.length; i++) {\r\n\t var range = list[i];\r\n\t var cmpEnd = comparePoints(pos, range.end);\r\n\t if (cmpEnd > 0)\r\n\t continue;\r\n\t var cmpStart = comparePoints(pos, range.start);\r\n\t if (cmpEnd === 0)\r\n\t return excludeEdges && cmpStart !== 0 ? -i-2 : i;\r\n\t if (cmpStart > 0 || (cmpStart === 0 && !excludeEdges))\r\n\t return i;\r\n\r\n\t return -i-1;\r\n\t }\r\n\t return -i - 1;\r\n\t };\r\n\r\n\t this.add = function(range) {\r\n\t var excludeEdges = !range.isEmpty();\r\n\t var startIndex = this.pointIndex(range.start, excludeEdges);\r\n\t if (startIndex < 0)\r\n\t startIndex = -startIndex - 1;\r\n\r\n\t var endIndex = this.pointIndex(range.end, excludeEdges, startIndex);\r\n\r\n\t if (endIndex < 0)\r\n\t endIndex = -endIndex - 1;\r\n\t else\r\n\t endIndex++;\r\n\t return this.ranges.splice(startIndex, endIndex - startIndex, range);\r\n\t };\r\n\r\n\t this.addList = function(list) {\r\n\t var removed = [];\r\n\t for (var i = list.length; i--; ) {\r\n\t removed.push.apply(removed, this.add(list[i]));\r\n\t }\r\n\t return removed;\r\n\t };\r\n\r\n\t this.substractPoint = function(pos) {\r\n\t var i = this.pointIndex(pos);\r\n\r\n\t if (i >= 0)\r\n\t return this.ranges.splice(i, 1);\r\n\t };\r\n\t this.merge = function() {\r\n\t var removed = [];\r\n\t var list = this.ranges;\r\n\t \r\n\t list = list.sort(function(a, b) {\r\n\t return comparePoints(a.start, b.start);\r\n\t });\r\n\t \r\n\t var next = list[0], range;\r\n\t for (var i = 1; i < list.length; i++) {\r\n\t range = next;\r\n\t next = list[i];\r\n\t var cmp = comparePoints(range.end, next.start);\r\n\t if (cmp < 0)\r\n\t continue;\r\n\r\n\t if (cmp == 0 && !range.isEmpty() && !next.isEmpty())\r\n\t continue;\r\n\r\n\t if (comparePoints(range.end, next.end) < 0) {\r\n\t range.end.row = next.end.row;\r\n\t range.end.column = next.end.column;\r\n\t }\r\n\r\n\t list.splice(i, 1);\r\n\t removed.push(next);\r\n\t next = range;\r\n\t i--;\r\n\t }\r\n\t \r\n\t this.ranges = list;\r\n\r\n\t return removed;\r\n\t };\r\n\r\n\t this.contains = function(row, column) {\r\n\t return this.pointIndex({row: row, column: column}) >= 0;\r\n\t };\r\n\r\n\t this.containsPoint = function(pos) {\r\n\t return this.pointIndex(pos) >= 0;\r\n\t };\r\n\r\n\t this.rangeAtPoint = function(pos) {\r\n\t var i = this.pointIndex(pos);\r\n\t if (i >= 0)\r\n\t return this.ranges[i];\r\n\t };\r\n\r\n\r\n\t this.clipRows = function(startRow, endRow) {\r\n\t var list = this.ranges;\r\n\t if (list[0].start.row > endRow || list[list.length - 1].start.row < startRow)\r\n\t return [];\r\n\r\n\t var startIndex = this.pointIndex({row: startRow, column: 0});\r\n\t if (startIndex < 0)\r\n\t startIndex = -startIndex - 1;\r\n\t var endIndex = this.pointIndex({row: endRow, column: 0}, startIndex);\r\n\t if (endIndex < 0)\r\n\t endIndex = -endIndex - 1;\r\n\r\n\t var clipped = [];\r\n\t for (var i = startIndex; i < endIndex; i++) {\r\n\t clipped.push(list[i]);\r\n\t }\r\n\t return clipped;\r\n\t };\r\n\r\n\t this.removeAll = function() {\r\n\t return this.ranges.splice(0, this.ranges.length);\r\n\t };\r\n\r\n\t this.attach = function(session) {\r\n\t if (this.session)\r\n\t this.detach();\r\n\r\n\t this.session = session;\r\n\t this.onChange = this.$onChange.bind(this);\r\n\r\n\t this.session.on('change', this.onChange);\r\n\t };\r\n\r\n\t this.detach = function() {\r\n\t if (!this.session)\r\n\t return;\r\n\t this.session.removeListener('change', this.onChange);\r\n\t this.session = null;\r\n\t };\r\n\r\n\t this.$onChange = function(delta) {\r\n\t if (delta.action == \"insert\"){\r\n\t var start = delta.start;\r\n\t var end = delta.end;\r\n\t } else {\r\n\t var end = delta.start;\r\n\t var start = delta.end;\r\n\t }\r\n\t var startRow = start.row;\r\n\t var endRow = end.row;\r\n\t var lineDif = endRow - startRow;\r\n\r\n\t var colDiff = -start.column + end.column;\r\n\t var ranges = this.ranges;\r\n\r\n\t for (var i = 0, n = ranges.length; i < n; i++) {\r\n\t var r = ranges[i];\r\n\t if (r.end.row < startRow)\r\n\t continue;\r\n\t if (r.start.row > startRow)\r\n\t break;\r\n\r\n\t if (r.start.row == startRow && r.start.column >= start.column ) {\r\n\t if (r.start.column == start.column && this.$insertRight) {\r\n\t } else {\r\n\t r.start.column += colDiff;\r\n\t r.start.row += lineDif;\r\n\t }\r\n\t }\r\n\t if (r.end.row == startRow && r.end.column >= start.column) {\r\n\t if (r.end.column == start.column && this.$insertRight) {\r\n\t continue;\r\n\t }\r\n\t if (r.end.column == start.column && colDiff > 0 && i < n - 1) { \r\n\t if (r.end.column > r.start.column && r.end.column == ranges[i+1].start.column)\r\n\t r.end.column -= colDiff;\r\n\t }\r\n\t r.end.column += colDiff;\r\n\t r.end.row += lineDif;\r\n\t }\r\n\t }\r\n\r\n\t if (lineDif != 0 && i < n) {\r\n\t for (; i < n; i++) {\r\n\t var r = ranges[i];\r\n\t r.start.row += lineDif;\r\n\t r.end.row += lineDif;\r\n\t }\r\n\t }\r\n\t };\r\n\r\n\t}).call(RangeList.prototype);\r\n\r\n\texports.RangeList = RangeList;\r\n\t});\r\n\r\n\tace.define(\"ace/edit_session/fold\",[\"require\",\"exports\",\"module\",\"ace/range\",\"ace/range_list\",\"ace/lib/oop\"], function(acequire, exports, module) {\r\n\t\"use strict\";\r\n\r\n\tvar Range = acequire(\"../range\").Range;\r\n\tvar RangeList = acequire(\"../range_list\").RangeList;\r\n\tvar oop = acequire(\"../lib/oop\")\r\n\tvar Fold = exports.Fold = function(range, placeholder) {\r\n\t this.foldLine = null;\r\n\t this.placeholder = placeholder;\r\n\t this.range = range;\r\n\t this.start = range.start;\r\n\t this.end = range.end;\r\n\r\n\t this.sameRow = range.start.row == range.end.row;\r\n\t this.subFolds = this.ranges = [];\r\n\t};\r\n\r\n\toop.inherits(Fold, RangeList);\r\n\r\n\t(function() {\r\n\r\n\t this.toString = function() {\r\n\t return '\"' + this.placeholder + '\" ' + this.range.toString();\r\n\t };\r\n\r\n\t this.setFoldLine = function(foldLine) {\r\n\t this.foldLine = foldLine;\r\n\t this.subFolds.forEach(function(fold) {\r\n\t fold.setFoldLine(foldLine);\r\n\t });\r\n\t };\r\n\r\n\t this.clone = function() {\r\n\t var range = this.range.clone();\r\n\t var fold = new Fold(range, this.placeholder);\r\n\t this.subFolds.forEach(function(subFold) {\r\n\t fold.subFolds.push(subFold.clone());\r\n\t });\r\n\t fold.collapseChildren = this.collapseChildren;\r\n\t return fold;\r\n\t };\r\n\r\n\t this.addSubFold = function(fold) {\r\n\t if (this.range.isEqual(fold))\r\n\t return;\r\n\r\n\t if (!this.range.containsRange(fold))\r\n\t throw new Error(\"A fold can't intersect already existing fold\" + fold.range + this.range);\r\n\t consumeRange(fold, this.start);\r\n\r\n\t var row = fold.start.row, column = fold.start.column;\r\n\t for (var i = 0, cmp = -1; i < this.subFolds.length; i++) {\r\n\t cmp = this.subFolds[i].range.compare(row, column);\r\n\t if (cmp != 1)\r\n\t break;\r\n\t }\r\n\t var afterStart = this.subFolds[i];\r\n\r\n\t if (cmp == 0)\r\n\t return afterStart.addSubFold(fold);\r\n\t var row = fold.range.end.row, column = fold.range.end.column;\r\n\t for (var j = i, cmp = -1; j < this.subFolds.length; j++) {\r\n\t cmp = this.subFolds[j].range.compare(row, column);\r\n\t if (cmp != 1)\r\n\t break;\r\n\t }\r\n\t var afterEnd = this.subFolds[j];\r\n\r\n\t if (cmp == 0)\r\n\t throw new Error(\"A fold can't intersect already existing fold\" + fold.range + this.range);\r\n\r\n\t var consumedFolds = this.subFolds.splice(i, j - i, fold);\r\n\t fold.setFoldLine(this.foldLine);\r\n\r\n\t return fold;\r\n\t };\r\n\t \r\n\t this.restoreRange = function(range) {\r\n\t return restoreRange(range, this.start);\r\n\t };\r\n\r\n\t}).call(Fold.prototype);\r\n\r\n\tfunction consumePoint(point, anchor) {\r\n\t point.row -= anchor.row;\r\n\t if (point.row == 0)\r\n\t point.column -= anchor.column;\r\n\t}\r\n\tfunction consumeRange(range, anchor) {\r\n\t consumePoint(range.start, anchor);\r\n\t consumePoint(range.end, anchor);\r\n\t}\r\n\tfunction restorePoint(point, anchor) {\r\n\t if (point.row == 0)\r\n\t point.column += anchor.column;\r\n\t point.row += anchor.row;\r\n\t}\r\n\tfunction restoreRange(range, anchor) {\r\n\t restorePoint(range.start, anchor);\r\n\t restorePoint(range.end, anchor);\r\n\t}\r\n\r\n\t});\r\n\r\n\tace.define(\"ace/edit_session/folding\",[\"require\",\"exports\",\"module\",\"ace/range\",\"ace/edit_session/fold_line\",\"ace/edit_session/fold\",\"ace/token_iterator\"], function(acequire, exports, module) {\r\n\t\"use strict\";\r\n\r\n\tvar Range = acequire(\"../range\").Range;\r\n\tvar FoldLine = acequire(\"./fold_line\").FoldLine;\r\n\tvar Fold = acequire(\"./fold\").Fold;\r\n\tvar TokenIterator = acequire(\"../token_iterator\").TokenIterator;\r\n\r\n\tfunction Folding() {\r\n\t this.getFoldAt = function(row, column, side) {\r\n\t var foldLine = this.getFoldLine(row);\r\n\t if (!foldLine)\r\n\t return null;\r\n\r\n\t var folds = foldLine.folds;\r\n\t for (var i = 0; i < folds.length; i++) {\r\n\t var fold = folds[i];\r\n\t if (fold.range.contains(row, column)) {\r\n\t if (side == 1 && fold.range.isEnd(row, column)) {\r\n\t continue;\r\n\t } else if (side == -1 && fold.range.isStart(row, column)) {\r\n\t continue;\r\n\t }\r\n\t return fold;\r\n\t }\r\n\t }\r\n\t };\r\n\t this.getFoldsInRange = function(range) {\r\n\t var start = range.start;\r\n\t var end = range.end;\r\n\t var foldLines = this.$foldData;\r\n\t var foundFolds = [];\r\n\r\n\t start.column += 1;\r\n\t end.column -= 1;\r\n\r\n\t for (var i = 0; i < foldLines.length; i++) {\r\n\t var cmp = foldLines[i].range.compareRange(range);\r\n\t if (cmp == 2) {\r\n\t continue;\r\n\t }\r\n\t else if (cmp == -2) {\r\n\t break;\r\n\t }\r\n\r\n\t var folds = foldLines[i].folds;\r\n\t for (var j = 0; j < folds.length; j++) {\r\n\t var fold = folds[j];\r\n\t cmp = fold.range.compareRange(range);\r\n\t if (cmp == -2) {\r\n\t break;\r\n\t } else if (cmp == 2) {\r\n\t continue;\r\n\t } else\r\n\t if (cmp == 42) {\r\n\t break;\r\n\t }\r\n\t foundFolds.push(fold);\r\n\t }\r\n\t }\r\n\t start.column -= 1;\r\n\t end.column += 1;\r\n\r\n\t return foundFolds;\r\n\t };\r\n\r\n\t this.getFoldsInRangeList = function(ranges) {\r\n\t if (Array.isArray(ranges)) {\r\n\t var folds = [];\r\n\t ranges.forEach(function(range) {\r\n\t folds = folds.concat(this.getFoldsInRange(range));\r\n\t }, this);\r\n\t } else {\r\n\t var folds = this.getFoldsInRange(ranges);\r\n\t }\r\n\t return folds;\r\n\t };\r\n\t this.getAllFolds = function() {\r\n\t var folds = [];\r\n\t var foldLines = this.$foldData;\r\n\t \r\n\t for (var i = 0; i < foldLines.length; i++)\r\n\t for (var j = 0; j < foldLines[i].folds.length; j++)\r\n\t folds.push(foldLines[i].folds[j]);\r\n\r\n\t return folds;\r\n\t };\r\n\t this.getFoldStringAt = function(row, column, trim, foldLine) {\r\n\t foldLine = foldLine || this.getFoldLine(row);\r\n\t if (!foldLine)\r\n\t return null;\r\n\r\n\t var lastFold = {\r\n\t end: { column: 0 }\r\n\t };\r\n\t var str, fold;\r\n\t for (var i = 0; i < foldLine.folds.length; i++) {\r\n\t fold = foldLine.folds[i];\r\n\t var cmp = fold.range.compareEnd(row, column);\r\n\t if (cmp == -1) {\r\n\t str = this\r\n\t .getLine(fold.start.row)\r\n\t .substring(lastFold.end.column, fold.start.column);\r\n\t break;\r\n\t }\r\n\t else if (cmp === 0) {\r\n\t return null;\r\n\t }\r\n\t lastFold = fold;\r\n\t }\r\n\t if (!str)\r\n\t str = this.getLine(fold.start.row).substring(lastFold.end.column);\r\n\r\n\t if (trim == -1)\r\n\t return str.substring(0, column - lastFold.end.column);\r\n\t else if (trim == 1)\r\n\t return str.substring(column - lastFold.end.column);\r\n\t else\r\n\t return str;\r\n\t };\r\n\r\n\t this.getFoldLine = function(docRow, startFoldLine) {\r\n\t var foldData = this.$foldData;\r\n\t var i = 0;\r\n\t if (startFoldLine)\r\n\t i = foldData.indexOf(startFoldLine);\r\n\t if (i == -1)\r\n\t i = 0;\r\n\t for (i; i < foldData.length; i++) {\r\n\t var foldLine = foldData[i];\r\n\t if (foldLine.start.row <= docRow && foldLine.end.row >= docRow) {\r\n\t return foldLine;\r\n\t } else if (foldLine.end.row > docRow) {\r\n\t return null;\r\n\t }\r\n\t }\r\n\t return null;\r\n\t };\r\n\t this.getNextFoldLine = function(docRow, startFoldLine) {\r\n\t var foldData = this.$foldData;\r\n\t var i = 0;\r\n\t if (startFoldLine)\r\n\t i = foldData.indexOf(startFoldLine);\r\n\t if (i == -1)\r\n\t i = 0;\r\n\t for (i; i < foldData.length; i++) {\r\n\t var foldLine = foldData[i];\r\n\t if (foldLine.end.row >= docRow) {\r\n\t return foldLine;\r\n\t }\r\n\t }\r\n\t return null;\r\n\t };\r\n\r\n\t this.getFoldedRowCount = function(first, last) {\r\n\t var foldData = this.$foldData, rowCount = last-first+1;\r\n\t for (var i = 0; i < foldData.length; i++) {\r\n\t var foldLine = foldData[i],\r\n\t end = foldLine.end.row,\r\n\t start = foldLine.start.row;\r\n\t if (end >= last) {\r\n\t if (start < last) {\r\n\t if (start >= first)\r\n\t rowCount -= last-start;\r\n\t else\r\n\t rowCount = 0; // in one fold\r\n\t }\r\n\t break;\r\n\t } else if (end >= first){\r\n\t if (start >= first) // fold inside range\r\n\t rowCount -= end-start;\r\n\t else\r\n\t rowCount -= end-first+1;\r\n\t }\r\n\t }\r\n\t return rowCount;\r\n\t };\r\n\r\n\t this.$addFoldLine = function(foldLine) {\r\n\t this.$foldData.push(foldLine);\r\n\t this.$foldData.sort(function(a, b) {\r\n\t return a.start.row - b.start.row;\r\n\t });\r\n\t return foldLine;\r\n\t };\r\n\t this.addFold = function(placeholder, range) {\r\n\t var foldData = this.$foldData;\r\n\t var added = false;\r\n\t var fold;\r\n\t \r\n\t if (placeholder instanceof Fold)\r\n\t fold = placeholder;\r\n\t else {\r\n\t fold = new Fold(range, placeholder);\r\n\t fold.collapseChildren = range.collapseChildren;\r\n\t }\r\n\t this.$clipRangeToDocument(fold.range);\r\n\r\n\t var startRow = fold.start.row;\r\n\t var startColumn = fold.start.column;\r\n\t var endRow = fold.end.row;\r\n\t var endColumn = fold.end.column;\r\n\t if (!(startRow < endRow || \r\n\t startRow == endRow && startColumn <= endColumn - 2))\r\n\t throw new Error(\"The range has to be at least 2 characters width\");\r\n\r\n\t var startFold = this.getFoldAt(startRow, startColumn, 1);\r\n\t var endFold = this.getFoldAt(endRow, endColumn, -1);\r\n\t if (startFold && endFold == startFold)\r\n\t return startFold.addSubFold(fold);\r\n\r\n\t if (startFold && !startFold.range.isStart(startRow, startColumn))\r\n\t this.removeFold(startFold);\r\n\t \r\n\t if (endFold && !endFold.range.isEnd(endRow, endColumn))\r\n\t this.removeFold(endFold);\r\n\t var folds = this.getFoldsInRange(fold.range);\r\n\t if (folds.length > 0) {\r\n\t this.removeFolds(folds);\r\n\t folds.forEach(function(subFold) {\r\n\t fold.addSubFold(subFold);\r\n\t });\r\n\t }\r\n\r\n\t for (var i = 0; i < foldData.length; i++) {\r\n\t var foldLine = foldData[i];\r\n\t if (endRow == foldLine.start.row) {\r\n\t foldLine.addFold(fold);\r\n\t added = true;\r\n\t break;\r\n\t } else if (startRow == foldLine.end.row) {\r\n\t foldLine.addFold(fold);\r\n\t added = true;\r\n\t if (!fold.sameRow) {\r\n\t var foldLineNext = foldData[i + 1];\r\n\t if (foldLineNext && foldLineNext.start.row == endRow) {\r\n\t foldLine.merge(foldLineNext);\r\n\t break;\r\n\t }\r\n\t }\r\n\t break;\r\n\t } else if (endRow <= foldLine.start.row) {\r\n\t break;\r\n\t }\r\n\t }\r\n\r\n\t if (!added)\r\n\t foldLine = this.$addFoldLine(new FoldLine(this.$foldData, fold));\r\n\r\n\t if (this.$useWrapMode)\r\n\t this.$updateWrapData(foldLine.start.row, foldLine.start.row);\r\n\t else\r\n\t this.$updateRowLengthCache(foldLine.start.row, foldLine.start.row);\r\n\t this.$modified = true;\r\n\t this._signal(\"changeFold\", { data: fold, action: \"add\" });\r\n\r\n\t return fold;\r\n\t };\r\n\r\n\t this.addFolds = function(folds) {\r\n\t folds.forEach(function(fold) {\r\n\t this.addFold(fold);\r\n\t }, this);\r\n\t };\r\n\r\n\t this.removeFold = function(fold) {\r\n\t var foldLine = fold.foldLine;\r\n\t var startRow = foldLine.start.row;\r\n\t var endRow = foldLine.end.row;\r\n\r\n\t var foldLines = this.$foldData;\r\n\t var folds = foldLine.folds;\r\n\t if (folds.length == 1) {\r\n\t foldLines.splice(foldLines.indexOf(foldLine), 1);\r\n\t } else\r\n\t if (foldLine.range.isEnd(fold.end.row, fold.end.column)) {\r\n\t folds.pop();\r\n\t foldLine.end.row = folds[folds.length - 1].end.row;\r\n\t foldLine.end.column = folds[folds.length - 1].end.column;\r\n\t } else\r\n\t if (foldLine.range.isStart(fold.start.row, fold.start.column)) {\r\n\t folds.shift();\r\n\t foldLine.start.row = folds[0].start.row;\r\n\t foldLine.start.column = folds[0].start.column;\r\n\t } else\r\n\t if (fold.sameRow) {\r\n\t folds.splice(folds.indexOf(fold), 1);\r\n\t } else\r\n\t {\r\n\t var newFoldLine = foldLine.split(fold.start.row, fold.start.column);\r\n\t folds = newFoldLine.folds;\r\n\t folds.shift();\r\n\t newFoldLine.start.row = folds[0].start.row;\r\n\t newFoldLine.start.column = folds[0].start.column;\r\n\t }\r\n\r\n\t if (!this.$updating) {\r\n\t if (this.$useWrapMode)\r\n\t this.$updateWrapData(startRow, endRow);\r\n\t else\r\n\t this.$updateRowLengthCache(startRow, endRow);\r\n\t }\r\n\t this.$modified = true;\r\n\t this._signal(\"changeFold\", { data: fold, action: \"remove\" });\r\n\t };\r\n\r\n\t this.removeFolds = function(folds) {\r\n\t var cloneFolds = [];\r\n\t for (var i = 0; i < folds.length; i++) {\r\n\t cloneFolds.push(folds[i]);\r\n\t }\r\n\r\n\t cloneFolds.forEach(function(fold) {\r\n\t this.removeFold(fold);\r\n\t }, this);\r\n\t this.$modified = true;\r\n\t };\r\n\r\n\t this.expandFold = function(fold) {\r\n\t this.removeFold(fold);\r\n\t fold.subFolds.forEach(function(subFold) {\r\n\t fold.restoreRange(subFold);\r\n\t this.addFold(subFold);\r\n\t }, this);\r\n\t if (fold.collapseChildren > 0) {\r\n\t this.foldAll(fold.start.row+1, fold.end.row, fold.collapseChildren-1);\r\n\t }\r\n\t fold.subFolds = [];\r\n\t };\r\n\r\n\t this.expandFolds = function(folds) {\r\n\t folds.forEach(function(fold) {\r\n\t this.expandFold(fold);\r\n\t }, this);\r\n\t };\r\n\r\n\t this.unfold = function(location, expandInner) {\r\n\t var range, folds;\r\n\t if (location == null) {\r\n\t range = new Range(0, 0, this.getLength(), 0);\r\n\t expandInner = true;\r\n\t } else if (typeof location == \"number\")\r\n\t range = new Range(location, 0, location, this.getLine(location).length);\r\n\t else if (\"row\" in location)\r\n\t range = Range.fromPoints(location, location);\r\n\t else\r\n\t range = location;\r\n\t \r\n\t folds = this.getFoldsInRangeList(range);\r\n\t if (expandInner) {\r\n\t this.removeFolds(folds);\r\n\t } else {\r\n\t var subFolds = folds;\r\n\t while (subFolds.length) {\r\n\t this.expandFolds(subFolds);\r\n\t subFolds = this.getFoldsInRangeList(range);\r\n\t }\r\n\t }\r\n\t if (folds.length)\r\n\t return folds;\r\n\t };\r\n\t this.isRowFolded = function(docRow, startFoldRow) {\r\n\t return !!this.getFoldLine(docRow, startFoldRow);\r\n\t };\r\n\r\n\t this.getRowFoldEnd = function(docRow, startFoldRow) {\r\n\t var foldLine = this.getFoldLine(docRow, startFoldRow);\r\n\t return foldLine ? foldLine.end.row : docRow;\r\n\t };\r\n\r\n\t this.getRowFoldStart = function(docRow, startFoldRow) {\r\n\t var foldLine = this.getFoldLine(docRow, startFoldRow);\r\n\t return foldLine ? foldLine.start.row : docRow;\r\n\t };\r\n\r\n\t this.getFoldDisplayLine = function(foldLine, endRow, endColumn, startRow, startColumn) {\r\n\t if (startRow == null)\r\n\t startRow = foldLine.start.row;\r\n\t if (startColumn == null)\r\n\t startColumn = 0;\r\n\t if (endRow == null)\r\n\t endRow = foldLine.end.row;\r\n\t if (endColumn == null)\r\n\t endColumn = this.getLine(endRow).length;\r\n\t var doc = this.doc;\r\n\t var textLine = \"\";\r\n\r\n\t foldLine.walk(function(placeholder, row, column, lastColumn) {\r\n\t if (row < startRow)\r\n\t return;\r\n\t if (row == startRow) {\r\n\t if (column < startColumn)\r\n\t return;\r\n\t lastColumn = Math.max(startColumn, lastColumn);\r\n\t }\r\n\r\n\t if (placeholder != null) {\r\n\t textLine += placeholder;\r\n\t } else {\r\n\t textLine += doc.getLine(row).substring(lastColumn, column);\r\n\t }\r\n\t }, endRow, endColumn);\r\n\t return textLine;\r\n\t };\r\n\r\n\t this.getDisplayLine = function(row, endColumn, startRow, startColumn) {\r\n\t var foldLine = this.getFoldLine(row);\r\n\r\n\t if (!foldLine) {\r\n\t var line;\r\n\t line = this.doc.getLine(row);\r\n\t return line.substring(startColumn || 0, endColumn || line.length);\r\n\t } else {\r\n\t return this.getFoldDisplayLine(\r\n\t foldLine, row, endColumn, startRow, startColumn);\r\n\t }\r\n\t };\r\n\r\n\t this.$cloneFoldData = function() {\r\n\t var fd = [];\r\n\t fd = this.$foldData.map(function(foldLine) {\r\n\t var folds = foldLine.folds.map(function(fold) {\r\n\t return fold.clone();\r\n\t });\r\n\t return new FoldLine(fd, folds);\r\n\t });\r\n\r\n\t return fd;\r\n\t };\r\n\r\n\t this.toggleFold = function(tryToUnfold) {\r\n\t var selection = this.selection;\r\n\t var range = selection.getRange();\r\n\t var fold;\r\n\t var bracketPos;\r\n\r\n\t if (range.isEmpty()) {\r\n\t var cursor = range.start;\r\n\t fold = this.getFoldAt(cursor.row, cursor.column);\r\n\r\n\t if (fold) {\r\n\t this.expandFold(fold);\r\n\t return;\r\n\t } else if (bracketPos = this.findMatchingBracket(cursor)) {\r\n\t if (range.comparePoint(bracketPos) == 1) {\r\n\t range.end = bracketPos;\r\n\t } else {\r\n\t range.start = bracketPos;\r\n\t range.start.column++;\r\n\t range.end.column--;\r\n\t }\r\n\t } else if (bracketPos = this.findMatchingBracket({row: cursor.row, column: cursor.column + 1})) {\r\n\t if (range.comparePoint(bracketPos) == 1)\r\n\t range.end = bracketPos;\r\n\t else\r\n\t range.start = bracketPos;\r\n\r\n\t range.start.column++;\r\n\t } else {\r\n\t range = this.getCommentFoldRange(cursor.row, cursor.column) || range;\r\n\t }\r\n\t } else {\r\n\t var folds = this.getFoldsInRange(range);\r\n\t if (tryToUnfold && folds.length) {\r\n\t this.expandFolds(folds);\r\n\t return;\r\n\t } else if (folds.length == 1 ) {\r\n\t fold = folds[0];\r\n\t }\r\n\t }\r\n\r\n\t if (!fold)\r\n\t fold = this.getFoldAt(range.start.row, range.start.column);\r\n\r\n\t if (fold && fold.range.toString() == range.toString()) {\r\n\t this.expandFold(fold);\r\n\t return;\r\n\t }\r\n\r\n\t var placeholder = \"...\";\r\n\t if (!range.isMultiLine()) {\r\n\t placeholder = this.getTextRange(range);\r\n\t if (placeholder.length < 4)\r\n\t return;\r\n\t placeholder = placeholder.trim().substring(0, 2) + \"..\";\r\n\t }\r\n\r\n\t this.addFold(placeholder, range);\r\n\t };\r\n\r\n\t this.getCommentFoldRange = function(row, column, dir) {\r\n\t var iterator = new TokenIterator(this, row, column);\r\n\t var token = iterator.getCurrentToken();\r\n\t if (token && /^comment|string/.test(token.type)) {\r\n\t var range = new Range();\r\n\t var re = new RegExp(token.type.replace(/\\..*/, \"\\\\.\"));\r\n\t if (dir != 1) {\r\n\t do {\r\n\t token = iterator.stepBackward();\r\n\t } while (token && re.test(token.type));\r\n\t iterator.stepForward();\r\n\t }\r\n\t \r\n\t range.start.row = iterator.getCurrentTokenRow();\r\n\t range.start.column = iterator.getCurrentTokenColumn() + 2;\r\n\r\n\t iterator = new TokenIterator(this, row, column);\r\n\t \r\n\t if (dir != -1) {\r\n\t do {\r\n\t token = iterator.stepForward();\r\n\t } while (token && re.test(token.type));\r\n\t token = iterator.stepBackward();\r\n\t } else\r\n\t token = iterator.getCurrentToken();\r\n\r\n\t range.end.row = iterator.getCurrentTokenRow();\r\n\t range.end.column = iterator.getCurrentTokenColumn() + token.value.length - 2;\r\n\t return range;\r\n\t }\r\n\t };\r\n\r\n\t this.foldAll = function(startRow, endRow, depth) {\r\n\t if (depth == undefined)\r\n\t depth = 100000; // JSON.stringify doesn't hanle Infinity\r\n\t var foldWidgets = this.foldWidgets;\r\n\t if (!foldWidgets)\r\n\t return; // mode doesn't support folding\r\n\t endRow = endRow || this.getLength();\r\n\t startRow = startRow || 0;\r\n\t for (var row = startRow; row < endRow; row++) {\r\n\t if (foldWidgets[row] == null)\r\n\t foldWidgets[row] = this.getFoldWidget(row);\r\n\t if (foldWidgets[row] != \"start\")\r\n\t continue;\r\n\r\n\t var range = this.getFoldWidgetRange(row);\r\n\t if (range && range.isMultiLine()\r\n\t && range.end.row <= endRow\r\n\t && range.start.row >= startRow\r\n\t ) {\r\n\t row = range.end.row;\r\n\t try {\r\n\t var fold = this.addFold(\"...\", range);\r\n\t if (fold)\r\n\t fold.collapseChildren = depth;\r\n\t } catch(e) {}\r\n\t }\r\n\t }\r\n\t };\r\n\t this.$foldStyles = {\r\n\t \"manual\": 1,\r\n\t \"markbegin\": 1,\r\n\t \"markbeginend\": 1\r\n\t };\r\n\t this.$foldStyle = \"markbegin\";\r\n\t this.setFoldStyle = function(style) {\r\n\t if (!this.$foldStyles[style])\r\n\t throw new Error(\"invalid fold style: \" + style + \"[\" + Object.keys(this.$foldStyles).join(\", \") + \"]\");\r\n\t \r\n\t if (this.$foldStyle == style)\r\n\t return;\r\n\r\n\t this.$foldStyle = style;\r\n\t \r\n\t if (style == \"manual\")\r\n\t this.unfold();\r\n\t var mode = this.$foldMode;\r\n\t this.$setFolding(null);\r\n\t this.$setFolding(mode);\r\n\t };\r\n\r\n\t this.$setFolding = function(foldMode) {\r\n\t if (this.$foldMode == foldMode)\r\n\t return;\r\n\t \r\n\t this.$foldMode = foldMode;\r\n\t \r\n\t this.off('change', this.$updateFoldWidgets);\r\n\t this.off('tokenizerUpdate', this.$tokenizerUpdateFoldWidgets);\r\n\t this._signal(\"changeAnnotation\");\r\n\t \r\n\t if (!foldMode || this.$foldStyle == \"manual\") {\r\n\t this.foldWidgets = null;\r\n\t return;\r\n\t }\r\n\t \r\n\t this.foldWidgets = [];\r\n\t this.getFoldWidget = foldMode.getFoldWidget.bind(foldMode, this, this.$foldStyle);\r\n\t this.getFoldWidgetRange = foldMode.getFoldWidgetRange.bind(foldMode, this, this.$foldStyle);\r\n\t \r\n\t this.$updateFoldWidgets = this.updateFoldWidgets.bind(this);\r\n\t this.$tokenizerUpdateFoldWidgets = this.tokenizerUpdateFoldWidgets.bind(this);\r\n\t this.on('change', this.$updateFoldWidgets);\r\n\t this.on('tokenizerUpdate', this.$tokenizerUpdateFoldWidgets);\r\n\t };\r\n\r\n\t this.getParentFoldRangeData = function (row, ignoreCurrent) {\r\n\t var fw = this.foldWidgets;\r\n\t if (!fw || (ignoreCurrent && fw[row]))\r\n\t return {};\r\n\r\n\t var i = row - 1, firstRange;\r\n\t while (i >= 0) {\r\n\t var c = fw[i];\r\n\t if (c == null)\r\n\t c = fw[i] = this.getFoldWidget(i);\r\n\r\n\t if (c == \"start\") {\r\n\t var range = this.getFoldWidgetRange(i);\r\n\t if (!firstRange)\r\n\t firstRange = range;\r\n\t if (range && range.end.row >= row)\r\n\t break;\r\n\t }\r\n\t i--;\r\n\t }\r\n\r\n\t return {\r\n\t range: i !== -1 && range,\r\n\t firstRange: firstRange\r\n\t };\r\n\t };\r\n\r\n\t this.onFoldWidgetClick = function(row, e) {\r\n\t e = e.domEvent;\r\n\t var options = {\r\n\t children: e.shiftKey,\r\n\t all: e.ctrlKey || e.metaKey,\r\n\t siblings: e.altKey\r\n\t };\r\n\t \r\n\t var range = this.$toggleFoldWidget(row, options);\r\n\t if (!range) {\r\n\t var el = (e.target || e.srcElement);\r\n\t if (el && /ace_fold-widget/.test(el.className))\r\n\t el.className += \" ace_invalid\";\r\n\t }\r\n\t };\r\n\t \r\n\t this.$toggleFoldWidget = function(row, options) {\r\n\t if (!this.getFoldWidget)\r\n\t return;\r\n\t var type = this.getFoldWidget(row);\r\n\t var line = this.getLine(row);\r\n\r\n\t var dir = type === \"end\" ? -1 : 1;\r\n\t var fold = this.getFoldAt(row, dir === -1 ? 0 : line.length, dir);\r\n\r\n\t if (fold) {\r\n\t if (options.children || options.all)\r\n\t this.removeFold(fold);\r\n\t else\r\n\t this.expandFold(fold);\r\n\t return;\r\n\t }\r\n\r\n\t var range = this.getFoldWidgetRange(row, true);\r\n\t if (range && !range.isMultiLine()) {\r\n\t fold = this.getFoldAt(range.start.row, range.start.column, 1);\r\n\t if (fold && range.isEqual(fold.range)) {\r\n\t this.removeFold(fold);\r\n\t return;\r\n\t }\r\n\t }\r\n\t \r\n\t if (options.siblings) {\r\n\t var data = this.getParentFoldRangeData(row);\r\n\t if (data.range) {\r\n\t var startRow = data.range.start.row + 1;\r\n\t var endRow = data.range.end.row;\r\n\t }\r\n\t this.foldAll(startRow, endRow, options.all ? 10000 : 0);\r\n\t } else if (options.children) {\r\n\t endRow = range ? range.end.row : this.getLength();\r\n\t this.foldAll(row + 1, endRow, options.all ? 10000 : 0);\r\n\t } else if (range) {\r\n\t if (options.all) \r\n\t range.collapseChildren = 10000;\r\n\t this.addFold(\"...\", range);\r\n\t }\r\n\t \r\n\t return range;\r\n\t };\r\n\t \r\n\t \r\n\t \r\n\t this.toggleFoldWidget = function(toggleParent) {\r\n\t var row = this.selection.getCursor().row;\r\n\t row = this.getRowFoldStart(row);\r\n\t var range = this.$toggleFoldWidget(row, {});\r\n\t \r\n\t if (range)\r\n\t return;\r\n\t var data = this.getParentFoldRangeData(row, true);\r\n\t range = data.range || data.firstRange;\r\n\t \r\n\t if (range) {\r\n\t row = range.start.row;\r\n\t var fold = this.getFoldAt(row, this.getLine(row).length, 1);\r\n\r\n\t if (fold) {\r\n\t this.removeFold(fold);\r\n\t } else {\r\n\t this.addFold(\"...\", range);\r\n\t }\r\n\t }\r\n\t };\r\n\r\n\t this.updateFoldWidgets = function(delta) {\r\n\t var firstRow = delta.start.row;\r\n\t var len = delta.end.row - firstRow;\r\n\r\n\t if (len === 0) {\r\n\t this.foldWidgets[firstRow] = null;\r\n\t } else if (delta.action == 'remove') {\r\n\t this.foldWidgets.splice(firstRow, len + 1, null);\r\n\t } else {\r\n\t var args = Array(len + 1);\r\n\t args.unshift(firstRow, 1);\r\n\t this.foldWidgets.splice.apply(this.foldWidgets, args);\r\n\t }\r\n\t };\r\n\t this.tokenizerUpdateFoldWidgets = function(e) {\r\n\t var rows = e.data;\r\n\t if (rows.first != rows.last) {\r\n\t if (this.foldWidgets.length > rows.first)\r\n\t this.foldWidgets.splice(rows.first, this.foldWidgets.length);\r\n\t }\r\n\t };\r\n\t}\r\n\r\n\texports.Folding = Folding;\r\n\r\n\t});\r\n\r\n\tace.define(\"ace/edit_session/bracket_match\",[\"require\",\"exports\",\"module\",\"ace/token_iterator\",\"ace/range\"], function(acequire, exports, module) {\r\n\t\"use strict\";\r\n\r\n\tvar TokenIterator = acequire(\"../token_iterator\").TokenIterator;\r\n\tvar Range = acequire(\"../range\").Range;\r\n\r\n\r\n\tfunction BracketMatch() {\r\n\r\n\t this.findMatchingBracket = function(position, chr) {\r\n\t if (position.column == 0) return null;\r\n\r\n\t var charBeforeCursor = chr || this.getLine(position.row).charAt(position.column-1);\r\n\t if (charBeforeCursor == \"\") return null;\r\n\r\n\t var match = charBeforeCursor.match(/([\\(\\[\\{])|([\\)\\]\\}])/);\r\n\t if (!match)\r\n\t return null;\r\n\r\n\t if (match[1])\r\n\t return this.$findClosingBracket(match[1], position);\r\n\t else\r\n\t return this.$findOpeningBracket(match[2], position);\r\n\t };\r\n\t \r\n\t this.getBracketRange = function(pos) {\r\n\t var line = this.getLine(pos.row);\r\n\t var before = true, range;\r\n\r\n\t var chr = line.charAt(pos.column-1);\r\n\t var match = chr && chr.match(/([\\(\\[\\{])|([\\)\\]\\}])/);\r\n\t if (!match) {\r\n\t chr = line.charAt(pos.column);\r\n\t pos = {row: pos.row, column: pos.column + 1};\r\n\t match = chr && chr.match(/([\\(\\[\\{])|([\\)\\]\\}])/);\r\n\t before = false;\r\n\t }\r\n\t if (!match)\r\n\t return null;\r\n\r\n\t if (match[1]) {\r\n\t var bracketPos = this.$findClosingBracket(match[1], pos);\r\n\t if (!bracketPos)\r\n\t return null;\r\n\t range = Range.fromPoints(pos, bracketPos);\r\n\t if (!before) {\r\n\t range.end.column++;\r\n\t range.start.column--;\r\n\t }\r\n\t range.cursor = range.end;\r\n\t } else {\r\n\t var bracketPos = this.$findOpeningBracket(match[2], pos);\r\n\t if (!bracketPos)\r\n\t return null;\r\n\t range = Range.fromPoints(bracketPos, pos);\r\n\t if (!before) {\r\n\t range.start.column++;\r\n\t range.end.column--;\r\n\t }\r\n\t range.cursor = range.start;\r\n\t }\r\n\t \r\n\t return range;\r\n\t };\r\n\r\n\t this.$brackets = {\r\n\t \")\": \"(\",\r\n\t \"(\": \")\",\r\n\t \"]\": \"[\",\r\n\t \"[\": \"]\",\r\n\t \"{\": \"}\",\r\n\t \"}\": \"{\"\r\n\t };\r\n\r\n\t this.$findOpeningBracket = function(bracket, position, typeRe) {\r\n\t var openBracket = this.$brackets[bracket];\r\n\t var depth = 1;\r\n\r\n\t var iterator = new TokenIterator(this, position.row, position.column);\r\n\t var token = iterator.getCurrentToken();\r\n\t if (!token)\r\n\t token = iterator.stepForward();\r\n\t if (!token)\r\n\t return;\r\n\t \r\n\t if (!typeRe){\r\n\t typeRe = new RegExp(\r\n\t \"(\\\\.?\" +\r\n\t token.type.replace(\".\", \"\\\\.\").replace(\"rparen\", \".paren\")\r\n\t .replace(/\\b(?:end)\\b/, \"(?:start|begin|end)\")\r\n\t + \")+\"\r\n\t );\r\n\t }\r\n\t var valueIndex = position.column - iterator.getCurrentTokenColumn() - 2;\r\n\t var value = token.value;\r\n\t \r\n\t while (true) {\r\n\t \r\n\t while (valueIndex >= 0) {\r\n\t var chr = value.charAt(valueIndex);\r\n\t if (chr == openBracket) {\r\n\t depth -= 1;\r\n\t if (depth == 0) {\r\n\t return {row: iterator.getCurrentTokenRow(),\r\n\t column: valueIndex + iterator.getCurrentTokenColumn()};\r\n\t }\r\n\t }\r\n\t else if (chr == bracket) {\r\n\t depth += 1;\r\n\t }\r\n\t valueIndex -= 1;\r\n\t }\r\n\t do {\r\n\t token = iterator.stepBackward();\r\n\t } while (token && !typeRe.test(token.type));\r\n\r\n\t if (token == null)\r\n\t break;\r\n\t \r\n\t value = token.value;\r\n\t valueIndex = value.length - 1;\r\n\t }\r\n\t \r\n\t return null;\r\n\t };\r\n\r\n\t this.$findClosingBracket = function(bracket, position, typeRe) {\r\n\t var closingBracket = this.$brackets[bracket];\r\n\t var depth = 1;\r\n\r\n\t var iterator = new TokenIterator(this, position.row, position.column);\r\n\t var token = iterator.getCurrentToken();\r\n\t if (!token)\r\n\t token = iterator.stepForward();\r\n\t if (!token)\r\n\t return;\r\n\r\n\t if (!typeRe){\r\n\t typeRe = new RegExp(\r\n\t \"(\\\\.?\" +\r\n\t token.type.replace(\".\", \"\\\\.\").replace(\"lparen\", \".paren\")\r\n\t .replace(/\\b(?:start|begin)\\b/, \"(?:start|begin|end)\")\r\n\t + \")+\"\r\n\t );\r\n\t }\r\n\t var valueIndex = position.column - iterator.getCurrentTokenColumn();\r\n\r\n\t while (true) {\r\n\r\n\t var value = token.value;\r\n\t var valueLength = value.length;\r\n\t while (valueIndex < valueLength) {\r\n\t var chr = value.charAt(valueIndex);\r\n\t if (chr == closingBracket) {\r\n\t depth -= 1;\r\n\t if (depth == 0) {\r\n\t return {row: iterator.getCurrentTokenRow(),\r\n\t column: valueIndex + iterator.getCurrentTokenColumn()};\r\n\t }\r\n\t }\r\n\t else if (chr == bracket) {\r\n\t depth += 1;\r\n\t }\r\n\t valueIndex += 1;\r\n\t }\r\n\t do {\r\n\t token = iterator.stepForward();\r\n\t } while (token && !typeRe.test(token.type));\r\n\r\n\t if (token == null)\r\n\t break;\r\n\r\n\t valueIndex = 0;\r\n\t }\r\n\t \r\n\t return null;\r\n\t };\r\n\t}\r\n\texports.BracketMatch = BracketMatch;\r\n\r\n\t});\r\n\r\n\tace.define(\"ace/edit_session\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/config\",\"ace/lib/event_emitter\",\"ace/selection\",\"ace/mode/text\",\"ace/range\",\"ace/document\",\"ace/background_tokenizer\",\"ace/search_highlight\",\"ace/edit_session/folding\",\"ace/edit_session/bracket_match\"], function(acequire, exports, module) {\r\n\t\"use strict\";\r\n\r\n\tvar oop = acequire(\"./lib/oop\");\r\n\tvar lang = acequire(\"./lib/lang\");\r\n\tvar config = acequire(\"./config\");\r\n\tvar EventEmitter = acequire(\"./lib/event_emitter\").EventEmitter;\r\n\tvar Selection = acequire(\"./selection\").Selection;\r\n\tvar TextMode = acequire(\"./mode/text\").Mode;\r\n\tvar Range = acequire(\"./range\").Range;\r\n\tvar Document = acequire(\"./document\").Document;\r\n\tvar BackgroundTokenizer = acequire(\"./background_tokenizer\").BackgroundTokenizer;\r\n\tvar SearchHighlight = acequire(\"./search_highlight\").SearchHighlight;\r\n\r\n\tvar EditSession = function(text, mode) {\r\n\t this.$breakpoints = [];\r\n\t this.$decorations = [];\r\n\t this.$frontMarkers = {};\r\n\t this.$backMarkers = {};\r\n\t this.$markerId = 1;\r\n\t this.$undoSelect = true;\r\n\r\n\t this.$foldData = [];\r\n\t this.$foldData.toString = function() {\r\n\t return this.join(\"\\n\");\r\n\t };\r\n\t this.on(\"changeFold\", this.onChangeFold.bind(this));\r\n\t this.$onChange = this.onChange.bind(this);\r\n\r\n\t if (typeof text != \"object\" || !text.getLine)\r\n\t text = new Document(text);\r\n\r\n\t this.setDocument(text);\r\n\t this.selection = new Selection(this);\r\n\r\n\t config.resetOptions(this);\r\n\t this.setMode(mode);\r\n\t config._signal(\"session\", this);\r\n\t};\r\n\r\n\r\n\t(function() {\r\n\r\n\t oop.implement(this, EventEmitter);\r\n\t this.setDocument = function(doc) {\r\n\t if (this.doc)\r\n\t this.doc.removeListener(\"change\", this.$onChange);\r\n\r\n\t this.doc = doc;\r\n\t doc.on(\"change\", this.$onChange);\r\n\r\n\t if (this.bgTokenizer)\r\n\t this.bgTokenizer.setDocument(this.getDocument());\r\n\r\n\t this.resetCaches();\r\n\t };\r\n\t this.getDocument = function() {\r\n\t return this.doc;\r\n\t };\r\n\t this.$resetRowCache = function(docRow) {\r\n\t if (!docRow) {\r\n\t this.$docRowCache = [];\r\n\t this.$screenRowCache = [];\r\n\t return;\r\n\t }\r\n\t var l = this.$docRowCache.length;\r\n\t var i = this.$getRowCacheIndex(this.$docRowCache, docRow) + 1;\r\n\t if (l > i) {\r\n\t this.$docRowCache.splice(i, l);\r\n\t this.$screenRowCache.splice(i, l);\r\n\t }\r\n\t };\r\n\r\n\t this.$getRowCacheIndex = function(cacheArray, val) {\r\n\t var low = 0;\r\n\t var hi = cacheArray.length - 1;\r\n\r\n\t while (low <= hi) {\r\n\t var mid = (low + hi) >> 1;\r\n\t var c = cacheArray[mid];\r\n\r\n\t if (val > c)\r\n\t low = mid + 1;\r\n\t else if (val < c)\r\n\t hi = mid - 1;\r\n\t else\r\n\t return mid;\r\n\t }\r\n\r\n\t return low -1;\r\n\t };\r\n\r\n\t this.resetCaches = function() {\r\n\t this.$modified = true;\r\n\t this.$wrapData = [];\r\n\t this.$rowLengthCache = [];\r\n\t this.$resetRowCache(0);\r\n\t if (this.bgTokenizer)\r\n\t this.bgTokenizer.start(0);\r\n\t };\r\n\r\n\t this.onChangeFold = function(e) {\r\n\t var fold = e.data;\r\n\t this.$resetRowCache(fold.start.row);\r\n\t };\r\n\r\n\t this.onChange = function(delta) {\r\n\t this.$modified = true;\r\n\r\n\t this.$resetRowCache(delta.start.row);\r\n\r\n\t var removedFolds = this.$updateInternalDataOnChange(delta);\r\n\t if (!this.$fromUndo && this.$undoManager && !delta.ignore) {\r\n\t this.$deltasDoc.push(delta);\r\n\t if (removedFolds && removedFolds.length != 0) {\r\n\t this.$deltasFold.push({\r\n\t action: \"removeFolds\",\r\n\t folds: removedFolds\r\n\t });\r\n\t }\r\n\r\n\t this.$informUndoManager.schedule();\r\n\t }\r\n\r\n\t this.bgTokenizer && this.bgTokenizer.$updateOnChange(delta);\r\n\t this._signal(\"change\", delta);\r\n\t };\r\n\t this.setValue = function(text) {\r\n\t this.doc.setValue(text);\r\n\t this.selection.moveTo(0, 0);\r\n\r\n\t this.$resetRowCache(0);\r\n\t this.$deltas = [];\r\n\t this.$deltasDoc = [];\r\n\t this.$deltasFold = [];\r\n\t this.setUndoManager(this.$undoManager);\r\n\t this.getUndoManager().reset();\r\n\t };\r\n\t this.getValue =\r\n\t this.toString = function() {\r\n\t return this.doc.getValue();\r\n\t };\r\n\t this.getSelection = function() {\r\n\t return this.selection;\r\n\t };\r\n\t this.getState = function(row) {\r\n\t return this.bgTokenizer.getState(row);\r\n\t };\r\n\t this.getTokens = function(row) {\r\n\t return this.bgTokenizer.getTokens(row);\r\n\t };\r\n\t this.getTokenAt = function(row, column) {\r\n\t var tokens = this.bgTokenizer.getTokens(row);\r\n\t var token, c = 0;\r\n\t if (column == null) {\r\n\t i = tokens.length - 1;\r\n\t c = this.getLine(row).length;\r\n\t } else {\r\n\t for (var i = 0; i < tokens.length; i++) {\r\n\t c += tokens[i].value.length;\r\n\t if (c >= column)\r\n\t break;\r\n\t }\r\n\t }\r\n\t token = tokens[i];\r\n\t if (!token)\r\n\t return null;\r\n\t token.index = i;\r\n\t token.start = c - token.value.length;\r\n\t return token;\r\n\t };\r\n\t this.setUndoManager = function(undoManager) {\r\n\t this.$undoManager = undoManager;\r\n\t this.$deltas = [];\r\n\t this.$deltasDoc = [];\r\n\t this.$deltasFold = [];\r\n\r\n\t if (this.$informUndoManager)\r\n\t this.$informUndoManager.cancel();\r\n\r\n\t if (undoManager) {\r\n\t var self = this;\r\n\r\n\t this.$syncInformUndoManager = function() {\r\n\t self.$informUndoManager.cancel();\r\n\r\n\t if (self.$deltasFold.length) {\r\n\t self.$deltas.push({\r\n\t group: \"fold\",\r\n\t deltas: self.$deltasFold\r\n\t });\r\n\t self.$deltasFold = [];\r\n\t }\r\n\r\n\t if (self.$deltasDoc.length) {\r\n\t self.$deltas.push({\r\n\t group: \"doc\",\r\n\t deltas: self.$deltasDoc\r\n\t });\r\n\t self.$deltasDoc = [];\r\n\t }\r\n\r\n\t if (self.$deltas.length > 0) {\r\n\t undoManager.execute({\r\n\t action: \"aceupdate\",\r\n\t args: [self.$deltas, self],\r\n\t merge: self.mergeUndoDeltas\r\n\t });\r\n\t }\r\n\t self.mergeUndoDeltas = false;\r\n\t self.$deltas = [];\r\n\t };\r\n\t this.$informUndoManager = lang.delayedCall(this.$syncInformUndoManager);\r\n\t }\r\n\t };\r\n\t this.markUndoGroup = function() {\r\n\t if (this.$syncInformUndoManager)\r\n\t this.$syncInformUndoManager();\r\n\t };\r\n\t \r\n\t this.$defaultUndoManager = {\r\n\t undo: function() {},\r\n\t redo: function() {},\r\n\t reset: function() {}\r\n\t };\r\n\t this.getUndoManager = function() {\r\n\t return this.$undoManager || this.$defaultUndoManager;\r\n\t };\r\n\t this.getTabString = function() {\r\n\t if (this.getUseSoftTabs()) {\r\n\t return lang.stringRepeat(\" \", this.getTabSize());\r\n\t } else {\r\n\t return \"\\t\";\r\n\t }\r\n\t };\r\n\t this.setUseSoftTabs = function(val) {\r\n\t this.setOption(\"useSoftTabs\", val);\r\n\t };\r\n\t this.getUseSoftTabs = function() {\r\n\t return this.$useSoftTabs && !this.$mode.$indentWithTabs;\r\n\t };\r\n\t this.setTabSize = function(tabSize) {\r\n\t this.setOption(\"tabSize\", tabSize);\r\n\t };\r\n\t this.getTabSize = function() {\r\n\t return this.$tabSize;\r\n\t };\r\n\t this.isTabStop = function(position) {\r\n\t return this.$useSoftTabs && (position.column % this.$tabSize === 0);\r\n\t };\r\n\r\n\t this.$overwrite = false;\r\n\t this.setOverwrite = function(overwrite) {\r\n\t this.setOption(\"overwrite\", overwrite);\r\n\t };\r\n\t this.getOverwrite = function() {\r\n\t return this.$overwrite;\r\n\t };\r\n\t this.toggleOverwrite = function() {\r\n\t this.setOverwrite(!this.$overwrite);\r\n\t };\r\n\t this.addGutterDecoration = function(row, className) {\r\n\t if (!this.$decorations[row])\r\n\t this.$decorations[row] = \"\";\r\n\t this.$decorations[row] += \" \" + className;\r\n\t this._signal(\"changeBreakpoint\", {});\r\n\t };\r\n\t this.removeGutterDecoration = function(row, className) {\r\n\t this.$decorations[row] = (this.$decorations[row] || \"\").replace(\" \" + className, \"\");\r\n\t this._signal(\"changeBreakpoint\", {});\r\n\t };\r\n\t this.getBreakpoints = function() {\r\n\t return this.$breakpoints;\r\n\t };\r\n\t this.setBreakpoints = function(rows) {\r\n\t this.$breakpoints = [];\r\n\t for (var i=0; i 0)\r\n\t inToken = !!line.charAt(column - 1).match(this.tokenRe);\r\n\r\n\t if (!inToken)\r\n\t inToken = !!line.charAt(column).match(this.tokenRe);\r\n\r\n\t if (inToken)\r\n\t var re = this.tokenRe;\r\n\t else if (/^\\s+$/.test(line.slice(column-1, column+1)))\r\n\t var re = /\\s/;\r\n\t else\r\n\t var re = this.nonTokenRe;\r\n\r\n\t var start = column;\r\n\t if (start > 0) {\r\n\t do {\r\n\t start--;\r\n\t }\r\n\t while (start >= 0 && line.charAt(start).match(re));\r\n\t start++;\r\n\t }\r\n\r\n\t var end = column;\r\n\t while (end < line.length && line.charAt(end).match(re)) {\r\n\t end++;\r\n\t }\r\n\r\n\t return new Range(row, start, row, end);\r\n\t };\r\n\t this.getAWordRange = function(row, column) {\r\n\t var wordRange = this.getWordRange(row, column);\r\n\t var line = this.getLine(wordRange.end.row);\r\n\r\n\t while (line.charAt(wordRange.end.column).match(/[ \\t]/)) {\r\n\t wordRange.end.column += 1;\r\n\t }\r\n\t return wordRange;\r\n\t };\r\n\t this.setNewLineMode = function(newLineMode) {\r\n\t this.doc.setNewLineMode(newLineMode);\r\n\t };\r\n\t this.getNewLineMode = function() {\r\n\t return this.doc.getNewLineMode();\r\n\t };\r\n\t this.setUseWorker = function(useWorker) { this.setOption(\"useWorker\", useWorker); };\r\n\t this.getUseWorker = function() { return this.$useWorker; };\r\n\t this.onReloadTokenizer = function(e) {\r\n\t var rows = e.data;\r\n\t this.bgTokenizer.start(rows.first);\r\n\t this._signal(\"tokenizerUpdate\", e);\r\n\t };\r\n\r\n\t this.$modes = {};\r\n\t this.$mode = null;\r\n\t this.$modeId = null;\r\n\t this.setMode = function(mode, cb) {\r\n\t if (mode && typeof mode === \"object\") {\r\n\t if (mode.getTokenizer)\r\n\t return this.$onChangeMode(mode);\r\n\t var options = mode;\r\n\t var path = options.path;\r\n\t } else {\r\n\t path = mode || \"ace/mode/text\";\r\n\t }\r\n\t if (!this.$modes[\"ace/mode/text\"])\r\n\t this.$modes[\"ace/mode/text\"] = new TextMode();\r\n\r\n\t if (this.$modes[path] && !options) {\r\n\t this.$onChangeMode(this.$modes[path]);\r\n\t cb && cb();\r\n\t return;\r\n\t }\r\n\t this.$modeId = path;\r\n\t config.loadModule([\"mode\", path], function(m) {\r\n\t if (this.$modeId !== path)\r\n\t return cb && cb();\r\n\t if (this.$modes[path] && !options) {\r\n\t this.$onChangeMode(this.$modes[path]);\r\n\t } else if (m && m.Mode) {\r\n\t m = new m.Mode(options);\r\n\t if (!options) {\r\n\t this.$modes[path] = m;\r\n\t m.$id = path;\r\n\t }\r\n\t this.$onChangeMode(m);\r\n\t }\r\n\t cb && cb();\r\n\t }.bind(this));\r\n\t if (!this.$mode)\r\n\t this.$onChangeMode(this.$modes[\"ace/mode/text\"], true);\r\n\t };\r\n\r\n\t this.$onChangeMode = function(mode, $isPlaceholder) {\r\n\t if (!$isPlaceholder)\r\n\t this.$modeId = mode.$id;\r\n\t if (this.$mode === mode) \r\n\t return;\r\n\r\n\t this.$mode = mode;\r\n\r\n\t this.$stopWorker();\r\n\r\n\t if (this.$useWorker)\r\n\t this.$startWorker();\r\n\r\n\t var tokenizer = mode.getTokenizer();\r\n\r\n\t if(tokenizer.addEventListener !== undefined) {\r\n\t var onReloadTokenizer = this.onReloadTokenizer.bind(this);\r\n\t tokenizer.addEventListener(\"update\", onReloadTokenizer);\r\n\t }\r\n\r\n\t if (!this.bgTokenizer) {\r\n\t this.bgTokenizer = new BackgroundTokenizer(tokenizer);\r\n\t var _self = this;\r\n\t this.bgTokenizer.addEventListener(\"update\", function(e) {\r\n\t _self._signal(\"tokenizerUpdate\", e);\r\n\t });\r\n\t } else {\r\n\t this.bgTokenizer.setTokenizer(tokenizer);\r\n\t }\r\n\r\n\t this.bgTokenizer.setDocument(this.getDocument());\r\n\r\n\t this.tokenRe = mode.tokenRe;\r\n\t this.nonTokenRe = mode.nonTokenRe;\r\n\r\n\t \r\n\t if (!$isPlaceholder) {\r\n\t if (mode.attachToSession)\r\n\t mode.attachToSession(this);\r\n\t this.$options.wrapMethod.set.call(this, this.$wrapMethod);\r\n\t this.$setFolding(mode.foldingRules);\r\n\t this.bgTokenizer.start(0);\r\n\t this._emit(\"changeMode\");\r\n\t }\r\n\t };\r\n\r\n\t this.$stopWorker = function() {\r\n\t if (this.$worker) {\r\n\t this.$worker.terminate();\r\n\t this.$worker = null;\r\n\t }\r\n\t };\r\n\r\n\t this.$startWorker = function() {\r\n\t try {\r\n\t this.$worker = this.$mode.createWorker(this);\r\n\t } catch (e) {\r\n\t config.warn(\"Could not load worker\", e);\r\n\t this.$worker = null;\r\n\t }\r\n\t };\r\n\t this.getMode = function() {\r\n\t return this.$mode;\r\n\t };\r\n\r\n\t this.$scrollTop = 0;\r\n\t this.setScrollTop = function(scrollTop) {\r\n\t if (this.$scrollTop === scrollTop || isNaN(scrollTop))\r\n\t return;\r\n\r\n\t this.$scrollTop = scrollTop;\r\n\t this._signal(\"changeScrollTop\", scrollTop);\r\n\t };\r\n\t this.getScrollTop = function() {\r\n\t return this.$scrollTop;\r\n\t };\r\n\r\n\t this.$scrollLeft = 0;\r\n\t this.setScrollLeft = function(scrollLeft) {\r\n\t if (this.$scrollLeft === scrollLeft || isNaN(scrollLeft))\r\n\t return;\r\n\r\n\t this.$scrollLeft = scrollLeft;\r\n\t this._signal(\"changeScrollLeft\", scrollLeft);\r\n\t };\r\n\t this.getScrollLeft = function() {\r\n\t return this.$scrollLeft;\r\n\t };\r\n\t this.getScreenWidth = function() {\r\n\t this.$computeWidth();\r\n\t if (this.lineWidgets) \r\n\t return Math.max(this.getLineWidgetMaxWidth(), this.screenWidth);\r\n\t return this.screenWidth;\r\n\t };\r\n\t \r\n\t this.getLineWidgetMaxWidth = function() {\r\n\t if (this.lineWidgetsWidth != null) return this.lineWidgetsWidth;\r\n\t var width = 0;\r\n\t this.lineWidgets.forEach(function(w) {\r\n\t if (w && w.screenWidth > width)\r\n\t width = w.screenWidth;\r\n\t });\r\n\t return this.lineWidgetWidth = width;\r\n\t };\r\n\r\n\t this.$computeWidth = function(force) {\r\n\t if (this.$modified || force) {\r\n\t this.$modified = false;\r\n\r\n\t if (this.$useWrapMode)\r\n\t return this.screenWidth = this.$wrapLimit;\r\n\r\n\t var lines = this.doc.getAllLines();\r\n\t var cache = this.$rowLengthCache;\r\n\t var longestScreenLine = 0;\r\n\t var foldIndex = 0;\r\n\t var foldLine = this.$foldData[foldIndex];\r\n\t var foldStart = foldLine ? foldLine.start.row : Infinity;\r\n\t var len = lines.length;\r\n\r\n\t for (var i = 0; i < len; i++) {\r\n\t if (i > foldStart) {\r\n\t i = foldLine.end.row + 1;\r\n\t if (i >= len)\r\n\t break;\r\n\t foldLine = this.$foldData[foldIndex++];\r\n\t foldStart = foldLine ? foldLine.start.row : Infinity;\r\n\t }\r\n\r\n\t if (cache[i] == null)\r\n\t cache[i] = this.$getStringScreenWidth(lines[i])[0];\r\n\r\n\t if (cache[i] > longestScreenLine)\r\n\t longestScreenLine = cache[i];\r\n\t }\r\n\t this.screenWidth = longestScreenLine;\r\n\t }\r\n\t };\r\n\t this.getLine = function(row) {\r\n\t return this.doc.getLine(row);\r\n\t };\r\n\t this.getLines = function(firstRow, lastRow) {\r\n\t return this.doc.getLines(firstRow, lastRow);\r\n\t };\r\n\t this.getLength = function() {\r\n\t return this.doc.getLength();\r\n\t };\r\n\t this.getTextRange = function(range) {\r\n\t return this.doc.getTextRange(range || this.selection.getRange());\r\n\t };\r\n\t this.insert = function(position, text) {\r\n\t return this.doc.insert(position, text);\r\n\t };\r\n\t this.remove = function(range) {\r\n\t return this.doc.remove(range);\r\n\t };\r\n\t this.removeFullLines = function(firstRow, lastRow){\r\n\t return this.doc.removeFullLines(firstRow, lastRow);\r\n\t };\r\n\t this.undoChanges = function(deltas, dontSelect) {\r\n\t if (!deltas.length)\r\n\t return;\r\n\r\n\t this.$fromUndo = true;\r\n\t var lastUndoRange = null;\r\n\t for (var i = deltas.length - 1; i != -1; i--) {\r\n\t var delta = deltas[i];\r\n\t if (delta.group == \"doc\") {\r\n\t this.doc.revertDeltas(delta.deltas);\r\n\t lastUndoRange =\r\n\t this.$getUndoSelection(delta.deltas, true, lastUndoRange);\r\n\t } else {\r\n\t delta.deltas.forEach(function(foldDelta) {\r\n\t this.addFolds(foldDelta.folds);\r\n\t }, this);\r\n\t }\r\n\t }\r\n\t this.$fromUndo = false;\r\n\t lastUndoRange &&\r\n\t this.$undoSelect &&\r\n\t !dontSelect &&\r\n\t this.selection.setSelectionRange(lastUndoRange);\r\n\t return lastUndoRange;\r\n\t };\r\n\t this.redoChanges = function(deltas, dontSelect) {\r\n\t if (!deltas.length)\r\n\t return;\r\n\r\n\t this.$fromUndo = true;\r\n\t var lastUndoRange = null;\r\n\t for (var i = 0; i < deltas.length; i++) {\r\n\t var delta = deltas[i];\r\n\t if (delta.group == \"doc\") {\r\n\t this.doc.applyDeltas(delta.deltas);\r\n\t lastUndoRange =\r\n\t this.$getUndoSelection(delta.deltas, false, lastUndoRange);\r\n\t }\r\n\t }\r\n\t this.$fromUndo = false;\r\n\t lastUndoRange &&\r\n\t this.$undoSelect &&\r\n\t !dontSelect &&\r\n\t this.selection.setSelectionRange(lastUndoRange);\r\n\t return lastUndoRange;\r\n\t };\r\n\t this.setUndoSelect = function(enable) {\r\n\t this.$undoSelect = enable;\r\n\t };\r\n\r\n\t this.$getUndoSelection = function(deltas, isUndo, lastUndoRange) {\r\n\t function isInsert(delta) {\r\n\t return isUndo ? delta.action !== \"insert\" : delta.action === \"insert\";\r\n\t }\r\n\r\n\t var delta = deltas[0];\r\n\t var range, point;\r\n\t var lastDeltaIsInsert = false;\r\n\t if (isInsert(delta)) {\r\n\t range = Range.fromPoints(delta.start, delta.end);\r\n\t lastDeltaIsInsert = true;\r\n\t } else {\r\n\t range = Range.fromPoints(delta.start, delta.start);\r\n\t lastDeltaIsInsert = false;\r\n\t }\r\n\r\n\t for (var i = 1; i < deltas.length; i++) {\r\n\t delta = deltas[i];\r\n\t if (isInsert(delta)) {\r\n\t point = delta.start;\r\n\t if (range.compare(point.row, point.column) == -1) {\r\n\t range.setStart(point);\r\n\t }\r\n\t point = delta.end;\r\n\t if (range.compare(point.row, point.column) == 1) {\r\n\t range.setEnd(point);\r\n\t }\r\n\t lastDeltaIsInsert = true;\r\n\t } else {\r\n\t point = delta.start;\r\n\t if (range.compare(point.row, point.column) == -1) {\r\n\t range = Range.fromPoints(delta.start, delta.start);\r\n\t }\r\n\t lastDeltaIsInsert = false;\r\n\t }\r\n\t }\r\n\t if (lastUndoRange != null) {\r\n\t if (Range.comparePoints(lastUndoRange.start, range.start) === 0) {\r\n\t lastUndoRange.start.column += range.end.column - range.start.column;\r\n\t lastUndoRange.end.column += range.end.column - range.start.column;\r\n\t }\r\n\r\n\t var cmp = lastUndoRange.compareRange(range);\r\n\t if (cmp == 1) {\r\n\t range.setStart(lastUndoRange.start);\r\n\t } else if (cmp == -1) {\r\n\t range.setEnd(lastUndoRange.end);\r\n\t }\r\n\t }\r\n\r\n\t return range;\r\n\t };\r\n\t this.replace = function(range, text) {\r\n\t return this.doc.replace(range, text);\r\n\t };\r\n\t this.moveText = function(fromRange, toPosition, copy) {\r\n\t var text = this.getTextRange(fromRange);\r\n\t var folds = this.getFoldsInRange(fromRange);\r\n\r\n\t var toRange = Range.fromPoints(toPosition, toPosition);\r\n\t if (!copy) {\r\n\t this.remove(fromRange);\r\n\t var rowDiff = fromRange.start.row - fromRange.end.row;\r\n\t var collDiff = rowDiff ? -fromRange.end.column : fromRange.start.column - fromRange.end.column;\r\n\t if (collDiff) {\r\n\t if (toRange.start.row == fromRange.end.row && toRange.start.column > fromRange.end.column)\r\n\t toRange.start.column += collDiff;\r\n\t if (toRange.end.row == fromRange.end.row && toRange.end.column > fromRange.end.column)\r\n\t toRange.end.column += collDiff;\r\n\t }\r\n\t if (rowDiff && toRange.start.row >= fromRange.end.row) {\r\n\t toRange.start.row += rowDiff;\r\n\t toRange.end.row += rowDiff;\r\n\t }\r\n\t }\r\n\r\n\t toRange.end = this.insert(toRange.start, text);\r\n\t if (folds.length) {\r\n\t var oldStart = fromRange.start;\r\n\t var newStart = toRange.start;\r\n\t var rowDiff = newStart.row - oldStart.row;\r\n\t var collDiff = newStart.column - oldStart.column;\r\n\t this.addFolds(folds.map(function(x) {\r\n\t x = x.clone();\r\n\t if (x.start.row == oldStart.row)\r\n\t x.start.column += collDiff;\r\n\t if (x.end.row == oldStart.row)\r\n\t x.end.column += collDiff;\r\n\t x.start.row += rowDiff;\r\n\t x.end.row += rowDiff;\r\n\t return x;\r\n\t }));\r\n\t }\r\n\r\n\t return toRange;\r\n\t };\r\n\t this.indentRows = function(startRow, endRow, indentString) {\r\n\t indentString = indentString.replace(/\\t/g, this.getTabString());\r\n\t for (var row=startRow; row<=endRow; row++)\r\n\t this.doc.insertInLine({row: row, column: 0}, indentString);\r\n\t };\r\n\t this.outdentRows = function (range) {\r\n\t var rowRange = range.collapseRows();\r\n\t var deleteRange = new Range(0, 0, 0, 0);\r\n\t var size = this.getTabSize();\r\n\r\n\t for (var i = rowRange.start.row; i <= rowRange.end.row; ++i) {\r\n\t var line = this.getLine(i);\r\n\r\n\t deleteRange.start.row = i;\r\n\t deleteRange.end.row = i;\r\n\t for (var j = 0; j < size; ++j)\r\n\t if (line.charAt(j) != ' ')\r\n\t break;\r\n\t if (j < size && line.charAt(j) == '\\t') {\r\n\t deleteRange.start.column = j;\r\n\t deleteRange.end.column = j + 1;\r\n\t } else {\r\n\t deleteRange.start.column = 0;\r\n\t deleteRange.end.column = j;\r\n\t }\r\n\t this.remove(deleteRange);\r\n\t }\r\n\t };\r\n\r\n\t this.$moveLines = function(firstRow, lastRow, dir) {\r\n\t firstRow = this.getRowFoldStart(firstRow);\r\n\t lastRow = this.getRowFoldEnd(lastRow);\r\n\t if (dir < 0) {\r\n\t var row = this.getRowFoldStart(firstRow + dir);\r\n\t if (row < 0) return 0;\r\n\t var diff = row-firstRow;\r\n\t } else if (dir > 0) {\r\n\t var row = this.getRowFoldEnd(lastRow + dir);\r\n\t if (row > this.doc.getLength()-1) return 0;\r\n\t var diff = row-lastRow;\r\n\t } else {\r\n\t firstRow = this.$clipRowToDocument(firstRow);\r\n\t lastRow = this.$clipRowToDocument(lastRow);\r\n\t var diff = lastRow - firstRow + 1;\r\n\t }\r\n\r\n\t var range = new Range(firstRow, 0, lastRow, Number.MAX_VALUE);\r\n\t var folds = this.getFoldsInRange(range).map(function(x){\r\n\t x = x.clone();\r\n\t x.start.row += diff;\r\n\t x.end.row += diff;\r\n\t return x;\r\n\t });\r\n\t \r\n\t var lines = dir == 0\r\n\t ? this.doc.getLines(firstRow, lastRow)\r\n\t : this.doc.removeFullLines(firstRow, lastRow);\r\n\t this.doc.insertFullLines(firstRow+diff, lines);\r\n\t folds.length && this.addFolds(folds);\r\n\t return diff;\r\n\t };\r\n\t this.moveLinesUp = function(firstRow, lastRow) {\r\n\t return this.$moveLines(firstRow, lastRow, -1);\r\n\t };\r\n\t this.moveLinesDown = function(firstRow, lastRow) {\r\n\t return this.$moveLines(firstRow, lastRow, 1);\r\n\t };\r\n\t this.duplicateLines = function(firstRow, lastRow) {\r\n\t return this.$moveLines(firstRow, lastRow, 0);\r\n\t };\r\n\r\n\r\n\t this.$clipRowToDocument = function(row) {\r\n\t return Math.max(0, Math.min(row, this.doc.getLength()-1));\r\n\t };\r\n\r\n\t this.$clipColumnToRow = function(row, column) {\r\n\t if (column < 0)\r\n\t return 0;\r\n\t return Math.min(this.doc.getLine(row).length, column);\r\n\t };\r\n\r\n\r\n\t this.$clipPositionToDocument = function(row, column) {\r\n\t column = Math.max(0, column);\r\n\r\n\t if (row < 0) {\r\n\t row = 0;\r\n\t column = 0;\r\n\t } else {\r\n\t var len = this.doc.getLength();\r\n\t if (row >= len) {\r\n\t row = len - 1;\r\n\t column = this.doc.getLine(len-1).length;\r\n\t } else {\r\n\t column = Math.min(this.doc.getLine(row).length, column);\r\n\t }\r\n\t }\r\n\r\n\t return {\r\n\t row: row,\r\n\t column: column\r\n\t };\r\n\t };\r\n\r\n\t this.$clipRangeToDocument = function(range) {\r\n\t if (range.start.row < 0) {\r\n\t range.start.row = 0;\r\n\t range.start.column = 0;\r\n\t } else {\r\n\t range.start.column = this.$clipColumnToRow(\r\n\t range.start.row,\r\n\t range.start.column\r\n\t );\r\n\t }\r\n\r\n\t var len = this.doc.getLength() - 1;\r\n\t if (range.end.row > len) {\r\n\t range.end.row = len;\r\n\t range.end.column = this.doc.getLine(len).length;\r\n\t } else {\r\n\t range.end.column = this.$clipColumnToRow(\r\n\t range.end.row,\r\n\t range.end.column\r\n\t );\r\n\t }\r\n\t return range;\r\n\t };\r\n\t this.$wrapLimit = 80;\r\n\t this.$useWrapMode = false;\r\n\t this.$wrapLimitRange = {\r\n\t min : null,\r\n\t max : null\r\n\t };\r\n\t this.setUseWrapMode = function(useWrapMode) {\r\n\t if (useWrapMode != this.$useWrapMode) {\r\n\t this.$useWrapMode = useWrapMode;\r\n\t this.$modified = true;\r\n\t this.$resetRowCache(0);\r\n\t if (useWrapMode) {\r\n\t var len = this.getLength();\r\n\t this.$wrapData = Array(len);\r\n\t this.$updateWrapData(0, len - 1);\r\n\t }\r\n\r\n\t this._signal(\"changeWrapMode\");\r\n\t }\r\n\t };\r\n\t this.getUseWrapMode = function() {\r\n\t return this.$useWrapMode;\r\n\t };\r\n\t this.setWrapLimitRange = function(min, max) {\r\n\t if (this.$wrapLimitRange.min !== min || this.$wrapLimitRange.max !== max) {\r\n\t this.$wrapLimitRange = { min: min, max: max };\r\n\t this.$modified = true;\r\n\t if (this.$useWrapMode)\r\n\t this._signal(\"changeWrapMode\");\r\n\t }\r\n\t };\r\n\t this.adjustWrapLimit = function(desiredLimit, $printMargin) {\r\n\t var limits = this.$wrapLimitRange;\r\n\t if (limits.max < 0)\r\n\t limits = {min: $printMargin, max: $printMargin};\r\n\t var wrapLimit = this.$constrainWrapLimit(desiredLimit, limits.min, limits.max);\r\n\t if (wrapLimit != this.$wrapLimit && wrapLimit > 1) {\r\n\t this.$wrapLimit = wrapLimit;\r\n\t this.$modified = true;\r\n\t if (this.$useWrapMode) {\r\n\t this.$updateWrapData(0, this.getLength() - 1);\r\n\t this.$resetRowCache(0);\r\n\t this._signal(\"changeWrapLimit\");\r\n\t }\r\n\t return true;\r\n\t }\r\n\t return false;\r\n\t };\r\n\r\n\t this.$constrainWrapLimit = function(wrapLimit, min, max) {\r\n\t if (min)\r\n\t wrapLimit = Math.max(min, wrapLimit);\r\n\r\n\t if (max)\r\n\t wrapLimit = Math.min(max, wrapLimit);\r\n\r\n\t return wrapLimit;\r\n\t };\r\n\t this.getWrapLimit = function() {\r\n\t return this.$wrapLimit;\r\n\t };\r\n\t this.setWrapLimit = function (limit) {\r\n\t this.setWrapLimitRange(limit, limit);\r\n\t };\r\n\t this.getWrapLimitRange = function() {\r\n\t return {\r\n\t min : this.$wrapLimitRange.min,\r\n\t max : this.$wrapLimitRange.max\r\n\t };\r\n\t };\r\n\r\n\t this.$updateInternalDataOnChange = function(delta) {\r\n\t var useWrapMode = this.$useWrapMode;\r\n\t var action = delta.action;\r\n\t var start = delta.start;\r\n\t var end = delta.end;\r\n\t var firstRow = start.row;\r\n\t var lastRow = end.row;\r\n\t var len = lastRow - firstRow;\r\n\t var removedFolds = null;\r\n\t \r\n\t this.$updating = true;\r\n\t if (len != 0) {\r\n\t if (action === \"remove\") {\r\n\t this[useWrapMode ? \"$wrapData\" : \"$rowLengthCache\"].splice(firstRow, len);\r\n\r\n\t var foldLines = this.$foldData;\r\n\t removedFolds = this.getFoldsInRange(delta);\r\n\t this.removeFolds(removedFolds);\r\n\r\n\t var foldLine = this.getFoldLine(end.row);\r\n\t var idx = 0;\r\n\t if (foldLine) {\r\n\t foldLine.addRemoveChars(end.row, end.column, start.column - end.column);\r\n\t foldLine.shiftRow(-len);\r\n\r\n\t var foldLineBefore = this.getFoldLine(firstRow);\r\n\t if (foldLineBefore && foldLineBefore !== foldLine) {\r\n\t foldLineBefore.merge(foldLine);\r\n\t foldLine = foldLineBefore;\r\n\t }\r\n\t idx = foldLines.indexOf(foldLine) + 1;\r\n\t }\r\n\r\n\t for (idx; idx < foldLines.length; idx++) {\r\n\t var foldLine = foldLines[idx];\r\n\t if (foldLine.start.row >= end.row) {\r\n\t foldLine.shiftRow(-len);\r\n\t }\r\n\t }\r\n\r\n\t lastRow = firstRow;\r\n\t } else {\r\n\t var args = Array(len);\r\n\t args.unshift(firstRow, 0);\r\n\t var arr = useWrapMode ? this.$wrapData : this.$rowLengthCache\r\n\t arr.splice.apply(arr, args);\r\n\t var foldLines = this.$foldData;\r\n\t var foldLine = this.getFoldLine(firstRow);\r\n\t var idx = 0;\r\n\t if (foldLine) {\r\n\t var cmp = foldLine.range.compareInside(start.row, start.column);\r\n\t if (cmp == 0) {\r\n\t foldLine = foldLine.split(start.row, start.column);\r\n\t if (foldLine) {\r\n\t foldLine.shiftRow(len);\r\n\t foldLine.addRemoveChars(lastRow, 0, end.column - start.column);\r\n\t }\r\n\t } else\r\n\t if (cmp == -1) {\r\n\t foldLine.addRemoveChars(firstRow, 0, end.column - start.column);\r\n\t foldLine.shiftRow(len);\r\n\t }\r\n\t idx = foldLines.indexOf(foldLine) + 1;\r\n\t }\r\n\r\n\t for (idx; idx < foldLines.length; idx++) {\r\n\t var foldLine = foldLines[idx];\r\n\t if (foldLine.start.row >= firstRow) {\r\n\t foldLine.shiftRow(len);\r\n\t }\r\n\t }\r\n\t }\r\n\t } else {\r\n\t len = Math.abs(delta.start.column - delta.end.column);\r\n\t if (action === \"remove\") {\r\n\t removedFolds = this.getFoldsInRange(delta);\r\n\t this.removeFolds(removedFolds);\r\n\r\n\t len = -len;\r\n\t }\r\n\t var foldLine = this.getFoldLine(firstRow);\r\n\t if (foldLine) {\r\n\t foldLine.addRemoveChars(firstRow, start.column, len);\r\n\t }\r\n\t }\r\n\r\n\t if (useWrapMode && this.$wrapData.length != this.doc.getLength()) {\r\n\t console.error(\"doc.getLength() and $wrapData.length have to be the same!\");\r\n\t }\r\n\t this.$updating = false;\r\n\r\n\t if (useWrapMode)\r\n\t this.$updateWrapData(firstRow, lastRow);\r\n\t else\r\n\t this.$updateRowLengthCache(firstRow, lastRow);\r\n\r\n\t return removedFolds;\r\n\t };\r\n\r\n\t this.$updateRowLengthCache = function(firstRow, lastRow, b) {\r\n\t this.$rowLengthCache[firstRow] = null;\r\n\t this.$rowLengthCache[lastRow] = null;\r\n\t };\r\n\r\n\t this.$updateWrapData = function(firstRow, lastRow) {\r\n\t var lines = this.doc.getAllLines();\r\n\t var tabSize = this.getTabSize();\r\n\t var wrapData = this.$wrapData;\r\n\t var wrapLimit = this.$wrapLimit;\r\n\t var tokens;\r\n\t var foldLine;\r\n\r\n\t var row = firstRow;\r\n\t lastRow = Math.min(lastRow, lines.length - 1);\r\n\t while (row <= lastRow) {\r\n\t foldLine = this.getFoldLine(row, foldLine);\r\n\t if (!foldLine) {\r\n\t tokens = this.$getDisplayTokens(lines[row]);\r\n\t wrapData[row] = this.$computeWrapSplits(tokens, wrapLimit, tabSize);\r\n\t row ++;\r\n\t } else {\r\n\t tokens = [];\r\n\t foldLine.walk(function(placeholder, row, column, lastColumn) {\r\n\t var walkTokens;\r\n\t if (placeholder != null) {\r\n\t walkTokens = this.$getDisplayTokens(\r\n\t placeholder, tokens.length);\r\n\t walkTokens[0] = PLACEHOLDER_START;\r\n\t for (var i = 1; i < walkTokens.length; i++) {\r\n\t walkTokens[i] = PLACEHOLDER_BODY;\r\n\t }\r\n\t } else {\r\n\t walkTokens = this.$getDisplayTokens(\r\n\t lines[row].substring(lastColumn, column),\r\n\t tokens.length);\r\n\t }\r\n\t tokens = tokens.concat(walkTokens);\r\n\t }.bind(this),\r\n\t foldLine.end.row,\r\n\t lines[foldLine.end.row].length + 1\r\n\t );\r\n\r\n\t wrapData[foldLine.start.row] = this.$computeWrapSplits(tokens, wrapLimit, tabSize);\r\n\t row = foldLine.end.row + 1;\r\n\t }\r\n\t }\r\n\t };\r\n\t var CHAR = 1,\r\n\t CHAR_EXT = 2,\r\n\t PLACEHOLDER_START = 3,\r\n\t PLACEHOLDER_BODY = 4,\r\n\t PUNCTUATION = 9,\r\n\t SPACE = 10,\r\n\t TAB = 11,\r\n\t TAB_SPACE = 12;\r\n\r\n\r\n\t this.$computeWrapSplits = function(tokens, wrapLimit, tabSize) {\r\n\t if (tokens.length == 0) {\r\n\t return [];\r\n\t }\r\n\r\n\t var splits = [];\r\n\t var displayLength = tokens.length;\r\n\t var lastSplit = 0, lastDocSplit = 0;\r\n\r\n\t var isCode = this.$wrapAsCode;\r\n\r\n\t var indentedSoftWrap = this.$indentedSoftWrap;\r\n\t var maxIndent = wrapLimit <= Math.max(2 * tabSize, 8)\r\n\t || indentedSoftWrap === false ? 0 : Math.floor(wrapLimit / 2);\r\n\r\n\t function getWrapIndent() {\r\n\t var indentation = 0;\r\n\t if (maxIndent === 0)\r\n\t return indentation;\r\n\t if (indentedSoftWrap) {\r\n\t for (var i = 0; i < tokens.length; i++) {\r\n\t var token = tokens[i];\r\n\t if (token == SPACE)\r\n\t indentation += 1;\r\n\t else if (token == TAB)\r\n\t indentation += tabSize;\r\n\t else if (token == TAB_SPACE)\r\n\t continue;\r\n\t else\r\n\t break;\r\n\t }\r\n\t }\r\n\t if (isCode && indentedSoftWrap !== false)\r\n\t indentation += tabSize;\r\n\t return Math.min(indentation, maxIndent);\r\n\t }\r\n\t function addSplit(screenPos) {\r\n\t var displayed = tokens.slice(lastSplit, screenPos);\r\n\t var len = displayed.length;\r\n\t displayed.join(\"\")\r\n\t .replace(/12/g, function() {\r\n\t len -= 1;\r\n\t })\r\n\t .replace(/2/g, function() {\r\n\t len -= 1;\r\n\t });\r\n\r\n\t if (!splits.length) {\r\n\t indent = getWrapIndent();\r\n\t splits.indent = indent;\r\n\t }\r\n\t lastDocSplit += len;\r\n\t splits.push(lastDocSplit);\r\n\t lastSplit = screenPos;\r\n\t }\r\n\t var indent = 0;\r\n\t while (displayLength - lastSplit > wrapLimit - indent) {\r\n\t var split = lastSplit + wrapLimit - indent;\r\n\t if (tokens[split - 1] >= SPACE && tokens[split] >= SPACE) {\r\n\t addSplit(split);\r\n\t continue;\r\n\t }\r\n\t if (tokens[split] == PLACEHOLDER_START || tokens[split] == PLACEHOLDER_BODY) {\r\n\t for (split; split != lastSplit - 1; split--) {\r\n\t if (tokens[split] == PLACEHOLDER_START) {\r\n\t break;\r\n\t }\r\n\t }\r\n\t if (split > lastSplit) {\r\n\t addSplit(split);\r\n\t continue;\r\n\t }\r\n\t split = lastSplit + wrapLimit;\r\n\t for (split; split < tokens.length; split++) {\r\n\t if (tokens[split] != PLACEHOLDER_BODY) {\r\n\t break;\r\n\t }\r\n\t }\r\n\t if (split == tokens.length) {\r\n\t break; // Breaks the while-loop.\r\n\t }\r\n\t addSplit(split);\r\n\t continue;\r\n\t }\r\n\t var minSplit = Math.max(split - (wrapLimit -(wrapLimit>>2)), lastSplit - 1);\r\n\t while (split > minSplit && tokens[split] < PLACEHOLDER_START) {\r\n\t split --;\r\n\t }\r\n\t if (isCode) {\r\n\t while (split > minSplit && tokens[split] < PLACEHOLDER_START) {\r\n\t split --;\r\n\t }\r\n\t while (split > minSplit && tokens[split] == PUNCTUATION) {\r\n\t split --;\r\n\t }\r\n\t } else {\r\n\t while (split > minSplit && tokens[split] < SPACE) {\r\n\t split --;\r\n\t }\r\n\t }\r\n\t if (split > minSplit) {\r\n\t addSplit(++split);\r\n\t continue;\r\n\t }\r\n\t split = lastSplit + wrapLimit;\r\n\t if (tokens[split] == CHAR_EXT)\r\n\t split--;\r\n\t addSplit(split - indent);\r\n\t }\r\n\t return splits;\r\n\t };\r\n\t this.$getDisplayTokens = function(str, offset) {\r\n\t var arr = [];\r\n\t var tabSize;\r\n\t offset = offset || 0;\r\n\r\n\t for (var i = 0; i < str.length; i++) {\r\n\t var c = str.charCodeAt(i);\r\n\t if (c == 9) {\r\n\t tabSize = this.getScreenTabSize(arr.length + offset);\r\n\t arr.push(TAB);\r\n\t for (var n = 1; n < tabSize; n++) {\r\n\t arr.push(TAB_SPACE);\r\n\t }\r\n\t }\r\n\t else if (c == 32) {\r\n\t arr.push(SPACE);\r\n\t } else if((c > 39 && c < 48) || (c > 57 && c < 64)) {\r\n\t arr.push(PUNCTUATION);\r\n\t }\r\n\t else if (c >= 0x1100 && isFullWidth(c)) {\r\n\t arr.push(CHAR, CHAR_EXT);\r\n\t } else {\r\n\t arr.push(CHAR);\r\n\t }\r\n\t }\r\n\t return arr;\r\n\t };\r\n\t this.$getStringScreenWidth = function(str, maxScreenColumn, screenColumn) {\r\n\t if (maxScreenColumn == 0)\r\n\t return [0, 0];\r\n\t if (maxScreenColumn == null)\r\n\t maxScreenColumn = Infinity;\r\n\t screenColumn = screenColumn || 0;\r\n\r\n\t var c, column;\r\n\t for (column = 0; column < str.length; column++) {\r\n\t c = str.charCodeAt(column);\r\n\t if (c == 9) {\r\n\t screenColumn += this.getScreenTabSize(screenColumn);\r\n\t }\r\n\t else if (c >= 0x1100 && isFullWidth(c)) {\r\n\t screenColumn += 2;\r\n\t } else {\r\n\t screenColumn += 1;\r\n\t }\r\n\t if (screenColumn > maxScreenColumn) {\r\n\t break;\r\n\t }\r\n\t }\r\n\r\n\t return [screenColumn, column];\r\n\t };\r\n\r\n\t this.lineWidgets = null;\r\n\t this.getRowLength = function(row) {\r\n\t if (this.lineWidgets)\r\n\t var h = this.lineWidgets[row] && this.lineWidgets[row].rowCount || 0;\r\n\t else \r\n\t h = 0\r\n\t if (!this.$useWrapMode || !this.$wrapData[row]) {\r\n\t return 1 + h;\r\n\t } else {\r\n\t return this.$wrapData[row].length + 1 + h;\r\n\t }\r\n\t };\r\n\t this.getRowLineCount = function(row) {\r\n\t if (!this.$useWrapMode || !this.$wrapData[row]) {\r\n\t return 1;\r\n\t } else {\r\n\t return this.$wrapData[row].length + 1;\r\n\t }\r\n\t };\r\n\r\n\t this.getRowWrapIndent = function(screenRow) {\r\n\t if (this.$useWrapMode) {\r\n\t var pos = this.screenToDocumentPosition(screenRow, Number.MAX_VALUE);\r\n\t var splits = this.$wrapData[pos.row];\r\n\t return splits.length && splits[0] < pos.column ? splits.indent : 0;\r\n\t } else {\r\n\t return 0;\r\n\t }\r\n\t }\r\n\t this.getScreenLastRowColumn = function(screenRow) {\r\n\t var pos = this.screenToDocumentPosition(screenRow, Number.MAX_VALUE);\r\n\t return this.documentToScreenColumn(pos.row, pos.column);\r\n\t };\r\n\t this.getDocumentLastRowColumn = function(docRow, docColumn) {\r\n\t var screenRow = this.documentToScreenRow(docRow, docColumn);\r\n\t return this.getScreenLastRowColumn(screenRow);\r\n\t };\r\n\t this.getDocumentLastRowColumnPosition = function(docRow, docColumn) {\r\n\t var screenRow = this.documentToScreenRow(docRow, docColumn);\r\n\t return this.screenToDocumentPosition(screenRow, Number.MAX_VALUE / 10);\r\n\t };\r\n\t this.getRowSplitData = function(row) {\r\n\t if (!this.$useWrapMode) {\r\n\t return undefined;\r\n\t } else {\r\n\t return this.$wrapData[row];\r\n\t }\r\n\t };\r\n\t this.getScreenTabSize = function(screenColumn) {\r\n\t return this.$tabSize - screenColumn % this.$tabSize;\r\n\t };\r\n\r\n\r\n\t this.screenToDocumentRow = function(screenRow, screenColumn) {\r\n\t return this.screenToDocumentPosition(screenRow, screenColumn).row;\r\n\t };\r\n\r\n\r\n\t this.screenToDocumentColumn = function(screenRow, screenColumn) {\r\n\t return this.screenToDocumentPosition(screenRow, screenColumn).column;\r\n\t };\r\n\t this.screenToDocumentPosition = function(screenRow, screenColumn) {\r\n\t if (screenRow < 0)\r\n\t return {row: 0, column: 0};\r\n\r\n\t var line;\r\n\t var docRow = 0;\r\n\t var docColumn = 0;\r\n\t var column;\r\n\t var row = 0;\r\n\t var rowLength = 0;\r\n\r\n\t var rowCache = this.$screenRowCache;\r\n\t var i = this.$getRowCacheIndex(rowCache, screenRow);\r\n\t var l = rowCache.length;\r\n\t if (l && i >= 0) {\r\n\t var row = rowCache[i];\r\n\t var docRow = this.$docRowCache[i];\r\n\t var doCache = screenRow > rowCache[l - 1];\r\n\t } else {\r\n\t var doCache = !l;\r\n\t }\r\n\r\n\t var maxRow = this.getLength() - 1;\r\n\t var foldLine = this.getNextFoldLine(docRow);\r\n\t var foldStart = foldLine ? foldLine.start.row : Infinity;\r\n\r\n\t while (row <= screenRow) {\r\n\t rowLength = this.getRowLength(docRow);\r\n\t if (row + rowLength > screenRow || docRow >= maxRow) {\r\n\t break;\r\n\t } else {\r\n\t row += rowLength;\r\n\t docRow++;\r\n\t if (docRow > foldStart) {\r\n\t docRow = foldLine.end.row+1;\r\n\t foldLine = this.getNextFoldLine(docRow, foldLine);\r\n\t foldStart = foldLine ? foldLine.start.row : Infinity;\r\n\t }\r\n\t }\r\n\r\n\t if (doCache) {\r\n\t this.$docRowCache.push(docRow);\r\n\t this.$screenRowCache.push(row);\r\n\t }\r\n\t }\r\n\r\n\t if (foldLine && foldLine.start.row <= docRow) {\r\n\t line = this.getFoldDisplayLine(foldLine);\r\n\t docRow = foldLine.start.row;\r\n\t } else if (row + rowLength <= screenRow || docRow > maxRow) {\r\n\t return {\r\n\t row: maxRow,\r\n\t column: this.getLine(maxRow).length\r\n\t };\r\n\t } else {\r\n\t line = this.getLine(docRow);\r\n\t foldLine = null;\r\n\t }\r\n\t var wrapIndent = 0;\r\n\t if (this.$useWrapMode) {\r\n\t var splits = this.$wrapData[docRow];\r\n\t if (splits) {\r\n\t var splitIndex = Math.floor(screenRow - row);\r\n\t column = splits[splitIndex];\r\n\t if(splitIndex > 0 && splits.length) {\r\n\t wrapIndent = splits.indent;\r\n\t docColumn = splits[splitIndex - 1] || splits[splits.length - 1];\r\n\t line = line.substring(docColumn);\r\n\t }\r\n\t }\r\n\t }\r\n\r\n\t docColumn += this.$getStringScreenWidth(line, screenColumn - wrapIndent)[1];\r\n\t if (this.$useWrapMode && docColumn >= column)\r\n\t docColumn = column - 1;\r\n\r\n\t if (foldLine)\r\n\t return foldLine.idxToPosition(docColumn);\r\n\r\n\t return {row: docRow, column: docColumn};\r\n\t };\r\n\t this.documentToScreenPosition = function(docRow, docColumn) {\r\n\t if (typeof docColumn === \"undefined\")\r\n\t var pos = this.$clipPositionToDocument(docRow.row, docRow.column);\r\n\t else\r\n\t pos = this.$clipPositionToDocument(docRow, docColumn);\r\n\r\n\t docRow = pos.row;\r\n\t docColumn = pos.column;\r\n\r\n\t var screenRow = 0;\r\n\t var foldStartRow = null;\r\n\t var fold = null;\r\n\t fold = this.getFoldAt(docRow, docColumn, 1);\r\n\t if (fold) {\r\n\t docRow = fold.start.row;\r\n\t docColumn = fold.start.column;\r\n\t }\r\n\r\n\t var rowEnd, row = 0;\r\n\r\n\r\n\t var rowCache = this.$docRowCache;\r\n\t var i = this.$getRowCacheIndex(rowCache, docRow);\r\n\t var l = rowCache.length;\r\n\t if (l && i >= 0) {\r\n\t var row = rowCache[i];\r\n\t var screenRow = this.$screenRowCache[i];\r\n\t var doCache = docRow > rowCache[l - 1];\r\n\t } else {\r\n\t var doCache = !l;\r\n\t }\r\n\r\n\t var foldLine = this.getNextFoldLine(row);\r\n\t var foldStart = foldLine ?foldLine.start.row :Infinity;\r\n\r\n\t while (row < docRow) {\r\n\t if (row >= foldStart) {\r\n\t rowEnd = foldLine.end.row + 1;\r\n\t if (rowEnd > docRow)\r\n\t break;\r\n\t foldLine = this.getNextFoldLine(rowEnd, foldLine);\r\n\t foldStart = foldLine ?foldLine.start.row :Infinity;\r\n\t }\r\n\t else {\r\n\t rowEnd = row + 1;\r\n\t }\r\n\r\n\t screenRow += this.getRowLength(row);\r\n\t row = rowEnd;\r\n\r\n\t if (doCache) {\r\n\t this.$docRowCache.push(row);\r\n\t this.$screenRowCache.push(screenRow);\r\n\t }\r\n\t }\r\n\t var textLine = \"\";\r\n\t if (foldLine && row >= foldStart) {\r\n\t textLine = this.getFoldDisplayLine(foldLine, docRow, docColumn);\r\n\t foldStartRow = foldLine.start.row;\r\n\t } else {\r\n\t textLine = this.getLine(docRow).substring(0, docColumn);\r\n\t foldStartRow = docRow;\r\n\t }\r\n\t var wrapIndent = 0;\r\n\t if (this.$useWrapMode) {\r\n\t var wrapRow = this.$wrapData[foldStartRow];\r\n\t if (wrapRow) {\r\n\t var screenRowOffset = 0;\r\n\t while (textLine.length >= wrapRow[screenRowOffset]) {\r\n\t screenRow ++;\r\n\t screenRowOffset++;\r\n\t }\r\n\t textLine = textLine.substring(\r\n\t wrapRow[screenRowOffset - 1] || 0, textLine.length\r\n\t );\r\n\t wrapIndent = screenRowOffset > 0 ? wrapRow.indent : 0;\r\n\t }\r\n\t }\r\n\r\n\t return {\r\n\t row: screenRow,\r\n\t column: wrapIndent + this.$getStringScreenWidth(textLine)[0]\r\n\t };\r\n\t };\r\n\t this.documentToScreenColumn = function(row, docColumn) {\r\n\t return this.documentToScreenPosition(row, docColumn).column;\r\n\t };\r\n\t this.documentToScreenRow = function(docRow, docColumn) {\r\n\t return this.documentToScreenPosition(docRow, docColumn).row;\r\n\t };\r\n\t this.getScreenLength = function() {\r\n\t var screenRows = 0;\r\n\t var fold = null;\r\n\t if (!this.$useWrapMode) {\r\n\t screenRows = this.getLength();\r\n\t var foldData = this.$foldData;\r\n\t for (var i = 0; i < foldData.length; i++) {\r\n\t fold = foldData[i];\r\n\t screenRows -= fold.end.row - fold.start.row;\r\n\t }\r\n\t } else {\r\n\t var lastRow = this.$wrapData.length;\r\n\t var row = 0, i = 0;\r\n\t var fold = this.$foldData[i++];\r\n\t var foldStart = fold ? fold.start.row :Infinity;\r\n\r\n\t while (row < lastRow) {\r\n\t var splits = this.$wrapData[row];\r\n\t screenRows += splits ? splits.length + 1 : 1;\r\n\t row ++;\r\n\t if (row > foldStart) {\r\n\t row = fold.end.row+1;\r\n\t fold = this.$foldData[i++];\r\n\t foldStart = fold ?fold.start.row :Infinity;\r\n\t }\r\n\t }\r\n\t }\r\n\t if (this.lineWidgets)\r\n\t screenRows += this.$getWidgetScreenLength();\r\n\r\n\t return screenRows;\r\n\t };\r\n\t this.$setFontMetrics = function(fm) {\r\n\t if (!this.$enableVarChar) return;\r\n\t this.$getStringScreenWidth = function(str, maxScreenColumn, screenColumn) {\r\n\t if (maxScreenColumn === 0)\r\n\t return [0, 0];\r\n\t if (!maxScreenColumn)\r\n\t maxScreenColumn = Infinity;\r\n\t screenColumn = screenColumn || 0;\r\n\t \r\n\t var c, column;\r\n\t for (column = 0; column < str.length; column++) {\r\n\t c = str.charAt(column);\r\n\t if (c === \"\\t\") {\r\n\t screenColumn += this.getScreenTabSize(screenColumn);\r\n\t } else {\r\n\t screenColumn += fm.getCharacterWidth(c);\r\n\t }\r\n\t if (screenColumn > maxScreenColumn) {\r\n\t break;\r\n\t }\r\n\t }\r\n\t \r\n\t return [screenColumn, column];\r\n\t };\r\n\t };\r\n\t \r\n\t this.destroy = function() {\r\n\t if (this.bgTokenizer) {\r\n\t this.bgTokenizer.setDocument(null);\r\n\t this.bgTokenizer = null;\r\n\t }\r\n\t this.$stopWorker();\r\n\t };\r\n\t function isFullWidth(c) {\r\n\t if (c < 0x1100)\r\n\t return false;\r\n\t return c >= 0x1100 && c <= 0x115F ||\r\n\t c >= 0x11A3 && c <= 0x11A7 ||\r\n\t c >= 0x11FA && c <= 0x11FF ||\r\n\t c >= 0x2329 && c <= 0x232A ||\r\n\t c >= 0x2E80 && c <= 0x2E99 ||\r\n\t c >= 0x2E9B && c <= 0x2EF3 ||\r\n\t c >= 0x2F00 && c <= 0x2FD5 ||\r\n\t c >= 0x2FF0 && c <= 0x2FFB ||\r\n\t c >= 0x3000 && c <= 0x303E ||\r\n\t c >= 0x3041 && c <= 0x3096 ||\r\n\t c >= 0x3099 && c <= 0x30FF ||\r\n\t c >= 0x3105 && c <= 0x312D ||\r\n\t c >= 0x3131 && c <= 0x318E ||\r\n\t c >= 0x3190 && c <= 0x31BA ||\r\n\t c >= 0x31C0 && c <= 0x31E3 ||\r\n\t c >= 0x31F0 && c <= 0x321E ||\r\n\t c >= 0x3220 && c <= 0x3247 ||\r\n\t c >= 0x3250 && c <= 0x32FE ||\r\n\t c >= 0x3300 && c <= 0x4DBF ||\r\n\t c >= 0x4E00 && c <= 0xA48C ||\r\n\t c >= 0xA490 && c <= 0xA4C6 ||\r\n\t c >= 0xA960 && c <= 0xA97C ||\r\n\t c >= 0xAC00 && c <= 0xD7A3 ||\r\n\t c >= 0xD7B0 && c <= 0xD7C6 ||\r\n\t c >= 0xD7CB && c <= 0xD7FB ||\r\n\t c >= 0xF900 && c <= 0xFAFF ||\r\n\t c >= 0xFE10 && c <= 0xFE19 ||\r\n\t c >= 0xFE30 && c <= 0xFE52 ||\r\n\t c >= 0xFE54 && c <= 0xFE66 ||\r\n\t c >= 0xFE68 && c <= 0xFE6B ||\r\n\t c >= 0xFF01 && c <= 0xFF60 ||\r\n\t c >= 0xFFE0 && c <= 0xFFE6;\r\n\t }\r\n\r\n\t}).call(EditSession.prototype);\r\n\r\n\tacequire(\"./edit_session/folding\").Folding.call(EditSession.prototype);\r\n\tacequire(\"./edit_session/bracket_match\").BracketMatch.call(EditSession.prototype);\r\n\r\n\r\n\tconfig.defineOptions(EditSession.prototype, \"session\", {\r\n\t wrap: {\r\n\t set: function(value) {\r\n\t if (!value || value == \"off\")\r\n\t value = false;\r\n\t else if (value == \"free\")\r\n\t value = true;\r\n\t else if (value == \"printMargin\")\r\n\t value = -1;\r\n\t else if (typeof value == \"string\")\r\n\t value = parseInt(value, 10) || false;\r\n\r\n\t if (this.$wrap == value)\r\n\t return;\r\n\t this.$wrap = value;\r\n\t if (!value) {\r\n\t this.setUseWrapMode(false);\r\n\t } else {\r\n\t var col = typeof value == \"number\" ? value : null;\r\n\t this.setWrapLimitRange(col, col);\r\n\t this.setUseWrapMode(true);\r\n\t }\r\n\t },\r\n\t get: function() {\r\n\t if (this.getUseWrapMode()) {\r\n\t if (this.$wrap == -1)\r\n\t return \"printMargin\";\r\n\t if (!this.getWrapLimitRange().min)\r\n\t return \"free\";\r\n\t return this.$wrap;\r\n\t }\r\n\t return \"off\";\r\n\t },\r\n\t handlesSet: true\r\n\t }, \r\n\t wrapMethod: {\r\n\t set: function(val) {\r\n\t val = val == \"auto\"\r\n\t ? this.$mode.type != \"text\"\r\n\t : val != \"text\";\r\n\t if (val != this.$wrapAsCode) {\r\n\t this.$wrapAsCode = val;\r\n\t if (this.$useWrapMode) {\r\n\t this.$modified = true;\r\n\t this.$resetRowCache(0);\r\n\t this.$updateWrapData(0, this.getLength() - 1);\r\n\t }\r\n\t }\r\n\t },\r\n\t initialValue: \"auto\"\r\n\t },\r\n\t indentedSoftWrap: { initialValue: true },\r\n\t firstLineNumber: {\r\n\t set: function() {this._signal(\"changeBreakpoint\");},\r\n\t initialValue: 1\r\n\t },\r\n\t useWorker: {\r\n\t set: function(useWorker) {\r\n\t this.$useWorker = useWorker;\r\n\r\n\t this.$stopWorker();\r\n\t if (useWorker)\r\n\t this.$startWorker();\r\n\t },\r\n\t initialValue: true\r\n\t },\r\n\t useSoftTabs: {initialValue: true},\r\n\t tabSize: {\r\n\t set: function(tabSize) {\r\n\t if (isNaN(tabSize) || this.$tabSize === tabSize) return;\r\n\r\n\t this.$modified = true;\r\n\t this.$rowLengthCache = [];\r\n\t this.$tabSize = tabSize;\r\n\t this._signal(\"changeTabSize\");\r\n\t },\r\n\t initialValue: 4,\r\n\t handlesSet: true\r\n\t },\r\n\t overwrite: {\r\n\t set: function(val) {this._signal(\"changeOverwrite\");},\r\n\t initialValue: false\r\n\t },\r\n\t newLineMode: {\r\n\t set: function(val) {this.doc.setNewLineMode(val)},\r\n\t get: function() {return this.doc.getNewLineMode()},\r\n\t handlesSet: true\r\n\t },\r\n\t mode: {\r\n\t set: function(val) { this.setMode(val) },\r\n\t get: function() { return this.$modeId }\r\n\t }\r\n\t});\r\n\r\n\texports.EditSession = EditSession;\r\n\t});\r\n\r\n\tace.define(\"ace/search\",[\"require\",\"exports\",\"module\",\"ace/lib/lang\",\"ace/lib/oop\",\"ace/range\"], function(acequire, exports, module) {\r\n\t\"use strict\";\r\n\r\n\tvar lang = acequire(\"./lib/lang\");\r\n\tvar oop = acequire(\"./lib/oop\");\r\n\tvar Range = acequire(\"./range\").Range;\r\n\r\n\tvar Search = function() {\r\n\t this.$options = {};\r\n\t};\r\n\r\n\t(function() {\r\n\t this.set = function(options) {\r\n\t oop.mixin(this.$options, options);\r\n\t return this;\r\n\t };\r\n\t this.getOptions = function() {\r\n\t return lang.copyObject(this.$options);\r\n\t };\r\n\t this.setOptions = function(options) {\r\n\t this.$options = options;\r\n\t };\r\n\t this.find = function(session) {\r\n\t var options = this.$options;\r\n\t var iterator = this.$matchIterator(session, options);\r\n\t if (!iterator)\r\n\t return false;\r\n\r\n\t var firstRange = null;\r\n\t iterator.forEach(function(range, row, offset) {\r\n\t if (!range.start) {\r\n\t var column = range.offset + (offset || 0);\r\n\t firstRange = new Range(row, column, row, column + range.length);\r\n\t if (!range.length && options.start && options.start.start\r\n\t && options.skipCurrent != false && firstRange.isEqual(options.start)\r\n\t ) {\r\n\t firstRange = null;\r\n\t return false;\r\n\t }\r\n\t } else\r\n\t firstRange = range;\r\n\t return true;\r\n\t });\r\n\r\n\t return firstRange;\r\n\t };\r\n\t this.findAll = function(session) {\r\n\t var options = this.$options;\r\n\t if (!options.needle)\r\n\t return [];\r\n\t this.$assembleRegExp(options);\r\n\r\n\t var range = options.range;\r\n\t var lines = range\r\n\t ? session.getLines(range.start.row, range.end.row)\r\n\t : session.doc.getAllLines();\r\n\r\n\t var ranges = [];\r\n\t var re = options.re;\r\n\t if (options.$isMultiLine) {\r\n\t var len = re.length;\r\n\t var maxRow = lines.length - len;\r\n\t var prevRange;\r\n\t outer: for (var row = re.offset || 0; row <= maxRow; row++) {\r\n\t for (var j = 0; j < len; j++)\r\n\t if (lines[row + j].search(re[j]) == -1)\r\n\t continue outer;\r\n\t \r\n\t var startLine = lines[row];\r\n\t var line = lines[row + len - 1];\r\n\t var startIndex = startLine.length - startLine.match(re[0])[0].length;\r\n\t var endIndex = line.match(re[len - 1])[0].length;\r\n\t \r\n\t if (prevRange && prevRange.end.row === row &&\r\n\t prevRange.end.column > startIndex\r\n\t ) {\r\n\t continue;\r\n\t }\r\n\t ranges.push(prevRange = new Range(\r\n\t row, startIndex, row + len - 1, endIndex\r\n\t ));\r\n\t if (len > 2)\r\n\t row = row + len - 2;\r\n\t }\r\n\t } else {\r\n\t for (var i = 0; i < lines.length; i++) {\r\n\t var matches = lang.getMatchOffsets(lines[i], re);\r\n\t for (var j = 0; j < matches.length; j++) {\r\n\t var match = matches[j];\r\n\t ranges.push(new Range(i, match.offset, i, match.offset + match.length));\r\n\t }\r\n\t }\r\n\t }\r\n\r\n\t if (range) {\r\n\t var startColumn = range.start.column;\r\n\t var endColumn = range.start.column;\r\n\t var i = 0, j = ranges.length - 1;\r\n\t while (i < j && ranges[i].start.column < startColumn && ranges[i].start.row == range.start.row)\r\n\t i++;\r\n\r\n\t while (i < j && ranges[j].end.column > endColumn && ranges[j].end.row == range.end.row)\r\n\t j--;\r\n\t \r\n\t ranges = ranges.slice(i, j + 1);\r\n\t for (i = 0, j = ranges.length; i < j; i++) {\r\n\t ranges[i].start.row += range.start.row;\r\n\t ranges[i].end.row += range.start.row;\r\n\t }\r\n\t }\r\n\r\n\t return ranges;\r\n\t };\r\n\t this.replace = function(input, replacement) {\r\n\t var options = this.$options;\r\n\r\n\t var re = this.$assembleRegExp(options);\r\n\t if (options.$isMultiLine)\r\n\t return replacement;\r\n\r\n\t if (!re)\r\n\t return;\r\n\r\n\t var match = re.exec(input);\r\n\t if (!match || match[0].length != input.length)\r\n\t return null;\r\n\t \r\n\t replacement = input.replace(re, replacement);\r\n\t if (options.preserveCase) {\r\n\t replacement = replacement.split(\"\");\r\n\t for (var i = Math.min(input.length, input.length); i--; ) {\r\n\t var ch = input[i];\r\n\t if (ch && ch.toLowerCase() != ch)\r\n\t replacement[i] = replacement[i].toUpperCase();\r\n\t else\r\n\t replacement[i] = replacement[i].toLowerCase();\r\n\t }\r\n\t replacement = replacement.join(\"\");\r\n\t }\r\n\t \r\n\t return replacement;\r\n\t };\r\n\r\n\t this.$matchIterator = function(session, options) {\r\n\t var re = this.$assembleRegExp(options);\r\n\t if (!re)\r\n\t return false;\r\n\r\n\t var callback;\r\n\t if (options.$isMultiLine) {\r\n\t var len = re.length;\r\n\t var matchIterator = function(line, row, offset) {\r\n\t var startIndex = line.search(re[0]);\r\n\t if (startIndex == -1)\r\n\t return;\r\n\t for (var i = 1; i < len; i++) {\r\n\t line = session.getLine(row + i);\r\n\t if (line.search(re[i]) == -1)\r\n\t return;\r\n\t }\r\n\r\n\t var endIndex = line.match(re[len - 1])[0].length;\r\n\r\n\t var range = new Range(row, startIndex, row + len - 1, endIndex);\r\n\t if (re.offset == 1) {\r\n\t range.start.row--;\r\n\t range.start.column = Number.MAX_VALUE;\r\n\t } else if (offset)\r\n\t range.start.column += offset;\r\n\r\n\t if (callback(range))\r\n\t return true;\r\n\t };\r\n\t } else if (options.backwards) {\r\n\t var matchIterator = function(line, row, startIndex) {\r\n\t var matches = lang.getMatchOffsets(line, re);\r\n\t for (var i = matches.length-1; i >= 0; i--)\r\n\t if (callback(matches[i], row, startIndex))\r\n\t return true;\r\n\t };\r\n\t } else {\r\n\t var matchIterator = function(line, row, startIndex) {\r\n\t var matches = lang.getMatchOffsets(line, re);\r\n\t for (var i = 0; i < matches.length; i++)\r\n\t if (callback(matches[i], row, startIndex))\r\n\t return true;\r\n\t };\r\n\t }\r\n\t \r\n\t var lineIterator = this.$lineIterator(session, options);\r\n\r\n\t return {\r\n\t forEach: function(_callback) {\r\n\t callback = _callback;\r\n\t lineIterator.forEach(matchIterator);\r\n\t }\r\n\t };\r\n\t };\r\n\r\n\t this.$assembleRegExp = function(options, $disableFakeMultiline) {\r\n\t if (options.needle instanceof RegExp)\r\n\t return options.re = options.needle;\r\n\r\n\t var needle = options.needle;\r\n\r\n\t if (!options.needle)\r\n\t return options.re = false;\r\n\r\n\t if (!options.regExp)\r\n\t needle = lang.escapeRegExp(needle);\r\n\r\n\t if (options.wholeWord)\r\n\t needle = \"\\\\b\" + needle + \"\\\\b\";\r\n\r\n\t var modifier = options.caseSensitive ? \"gm\" : \"gmi\";\r\n\r\n\t options.$isMultiLine = !$disableFakeMultiline && /[\\n\\r]/.test(needle);\r\n\t if (options.$isMultiLine)\r\n\t return options.re = this.$assembleMultilineRegExp(needle, modifier);\r\n\r\n\t try {\r\n\t var re = new RegExp(needle, modifier);\r\n\t } catch(e) {\r\n\t re = false;\r\n\t }\r\n\t return options.re = re;\r\n\t };\r\n\r\n\t this.$assembleMultilineRegExp = function(needle, modifier) {\r\n\t var parts = needle.replace(/\\r\\n|\\r|\\n/g, \"$\\n^\").split(\"\\n\");\r\n\t var re = [];\r\n\t for (var i = 0; i < parts.length; i++) try {\r\n\t re.push(new RegExp(parts[i], modifier));\r\n\t } catch(e) {\r\n\t return false;\r\n\t }\r\n\t if (parts[0] == \"\") {\r\n\t re.shift();\r\n\t re.offset = 1;\r\n\t } else {\r\n\t re.offset = 0;\r\n\t }\r\n\t return re;\r\n\t };\r\n\r\n\t this.$lineIterator = function(session, options) {\r\n\t var backwards = options.backwards == true;\r\n\t var skipCurrent = options.skipCurrent != false;\r\n\r\n\t var range = options.range;\r\n\t var start = options.start;\r\n\t if (!start)\r\n\t start = range ? range[backwards ? \"end\" : \"start\"] : session.selection.getRange();\r\n\t \r\n\t if (start.start)\r\n\t start = start[skipCurrent != backwards ? \"end\" : \"start\"];\r\n\r\n\t var firstRow = range ? range.start.row : 0;\r\n\t var lastRow = range ? range.end.row : session.getLength() - 1;\r\n\r\n\t var forEach = backwards ? function(callback) {\r\n\t var row = start.row;\r\n\r\n\t var line = session.getLine(row).substring(0, start.column);\r\n\t if (callback(line, row))\r\n\t return;\r\n\r\n\t for (row--; row >= firstRow; row--)\r\n\t if (callback(session.getLine(row), row))\r\n\t return;\r\n\r\n\t if (options.wrap == false)\r\n\t return;\r\n\r\n\t for (row = lastRow, firstRow = start.row; row >= firstRow; row--)\r\n\t if (callback(session.getLine(row), row))\r\n\t return;\r\n\t } : function(callback) {\r\n\t var row = start.row;\r\n\r\n\t var line = session.getLine(row).substr(start.column);\r\n\t if (callback(line, row, start.column))\r\n\t return;\r\n\r\n\t for (row = row+1; row <= lastRow; row++)\r\n\t if (callback(session.getLine(row), row))\r\n\t return;\r\n\r\n\t if (options.wrap == false)\r\n\t return;\r\n\r\n\t for (row = firstRow, lastRow = start.row; row <= lastRow; row++)\r\n\t if (callback(session.getLine(row), row))\r\n\t return;\r\n\t };\r\n\t \r\n\t return {forEach: forEach};\r\n\t };\r\n\r\n\t}).call(Search.prototype);\r\n\r\n\texports.Search = Search;\r\n\t});\r\n\r\n\tace.define(\"ace/keyboard/hash_handler\",[\"require\",\"exports\",\"module\",\"ace/lib/keys\",\"ace/lib/useragent\"], function(acequire, exports, module) {\r\n\t\"use strict\";\r\n\r\n\tvar keyUtil = acequire(\"../lib/keys\");\r\n\tvar useragent = acequire(\"../lib/useragent\");\r\n\tvar KEY_MODS = keyUtil.KEY_MODS;\r\n\r\n\tfunction HashHandler(config, platform) {\r\n\t this.platform = platform || (useragent.isMac ? \"mac\" : \"win\");\r\n\t this.commands = {};\r\n\t this.commandKeyBinding = {};\r\n\t this.addCommands(config);\r\n\t this.$singleCommand = true;\r\n\t}\r\n\r\n\tfunction MultiHashHandler(config, platform) {\r\n\t HashHandler.call(this, config, platform);\r\n\t this.$singleCommand = false;\r\n\t}\r\n\r\n\tMultiHashHandler.prototype = HashHandler.prototype;\r\n\r\n\t(function() {\r\n\t \r\n\r\n\t this.addCommand = function(command) {\r\n\t if (this.commands[command.name])\r\n\t this.removeCommand(command);\r\n\r\n\t this.commands[command.name] = command;\r\n\r\n\t if (command.bindKey)\r\n\t this._buildKeyHash(command);\r\n\t };\r\n\r\n\t this.removeCommand = function(command, keepCommand) {\r\n\t var name = command && (typeof command === 'string' ? command : command.name);\r\n\t command = this.commands[name];\r\n\t if (!keepCommand)\r\n\t delete this.commands[name];\r\n\t var ckb = this.commandKeyBinding;\r\n\t for (var keyId in ckb) {\r\n\t var cmdGroup = ckb[keyId];\r\n\t if (cmdGroup == command) {\r\n\t delete ckb[keyId];\r\n\t } else if (Array.isArray(cmdGroup)) {\r\n\t var i = cmdGroup.indexOf(command);\r\n\t if (i != -1) {\r\n\t cmdGroup.splice(i, 1);\r\n\t if (cmdGroup.length == 1)\r\n\t ckb[keyId] = cmdGroup[0];\r\n\t }\r\n\t }\r\n\t }\r\n\t };\r\n\r\n\t this.bindKey = function(key, command, position) {\r\n\t if (typeof key == \"object\" && key) {\r\n\t if (position == undefined)\r\n\t position = key.position;\r\n\t key = key[this.platform];\r\n\t }\r\n\t if (!key)\r\n\t return;\r\n\t if (typeof command == \"function\")\r\n\t return this.addCommand({exec: command, bindKey: key, name: command.name || key});\r\n\t \r\n\t key.split(\"|\").forEach(function(keyPart) {\r\n\t var chain = \"\";\r\n\t if (keyPart.indexOf(\" \") != -1) {\r\n\t var parts = keyPart.split(/\\s+/);\r\n\t keyPart = parts.pop();\r\n\t parts.forEach(function(keyPart) {\r\n\t var binding = this.parseKeys(keyPart);\r\n\t var id = KEY_MODS[binding.hashId] + binding.key;\r\n\t chain += (chain ? \" \" : \"\") + id;\r\n\t this._addCommandToBinding(chain, \"chainKeys\");\r\n\t }, this);\r\n\t chain += \" \";\r\n\t }\r\n\t var binding = this.parseKeys(keyPart);\r\n\t var id = KEY_MODS[binding.hashId] + binding.key;\r\n\t this._addCommandToBinding(chain + id, command, position);\r\n\t }, this);\r\n\t };\r\n\t \r\n\t function getPosition(command) {\r\n\t return typeof command == \"object\" && command.bindKey\r\n\t && command.bindKey.position || 0;\r\n\t }\r\n\t this._addCommandToBinding = function(keyId, command, position) {\r\n\t var ckb = this.commandKeyBinding, i;\r\n\t if (!command) {\r\n\t delete ckb[keyId];\r\n\t } else if (!ckb[keyId] || this.$singleCommand) {\r\n\t ckb[keyId] = command;\r\n\t } else {\r\n\t if (!Array.isArray(ckb[keyId])) {\r\n\t ckb[keyId] = [ckb[keyId]];\r\n\t } else if ((i = ckb[keyId].indexOf(command)) != -1) {\r\n\t ckb[keyId].splice(i, 1);\r\n\t }\r\n\r\n\t if (typeof position != \"number\") {\r\n\t if (position || command.isDefault)\r\n\t position = -100;\r\n\t else\r\n\t position = getPosition(command);\r\n\t }\r\n\t var commands = ckb[keyId];\r\n\t for (i = 0; i < commands.length; i++) {\r\n\t var other = commands[i];\r\n\t var otherPos = getPosition(other);\r\n\t if (otherPos > position)\r\n\t break;\r\n\t }\r\n\t commands.splice(i, 0, command);\r\n\t }\r\n\t };\r\n\r\n\t this.addCommands = function(commands) {\r\n\t commands && Object.keys(commands).forEach(function(name) {\r\n\t var command = commands[name];\r\n\t if (!command)\r\n\t return;\r\n\t \r\n\t if (typeof command === \"string\")\r\n\t return this.bindKey(command, name);\r\n\r\n\t if (typeof command === \"function\")\r\n\t command = { exec: command };\r\n\r\n\t if (typeof command !== \"object\")\r\n\t return;\r\n\r\n\t if (!command.name)\r\n\t command.name = name;\r\n\r\n\t this.addCommand(command);\r\n\t }, this);\r\n\t };\r\n\r\n\t this.removeCommands = function(commands) {\r\n\t Object.keys(commands).forEach(function(name) {\r\n\t this.removeCommand(commands[name]);\r\n\t }, this);\r\n\t };\r\n\r\n\t this.bindKeys = function(keyList) {\r\n\t Object.keys(keyList).forEach(function(key) {\r\n\t this.bindKey(key, keyList[key]);\r\n\t }, this);\r\n\t };\r\n\r\n\t this._buildKeyHash = function(command) {\r\n\t this.bindKey(command.bindKey, command);\r\n\t };\r\n\t this.parseKeys = function(keys) {\r\n\t var parts = keys.toLowerCase().split(/[\\-\\+]([\\-\\+])?/).filter(function(x){return x});\r\n\t var key = parts.pop();\r\n\r\n\t var keyCode = keyUtil[key];\r\n\t if (keyUtil.FUNCTION_KEYS[keyCode])\r\n\t key = keyUtil.FUNCTION_KEYS[keyCode].toLowerCase();\r\n\t else if (!parts.length)\r\n\t return {key: key, hashId: -1};\r\n\t else if (parts.length == 1 && parts[0] == \"shift\")\r\n\t return {key: key.toUpperCase(), hashId: -1};\r\n\r\n\t var hashId = 0;\r\n\t for (var i = parts.length; i--;) {\r\n\t var modifier = keyUtil.KEY_MODS[parts[i]];\r\n\t if (modifier == null) {\r\n\t if (typeof console != \"undefined\")\r\n\t console.error(\"invalid modifier \" + parts[i] + \" in \" + keys);\r\n\t return false;\r\n\t }\r\n\t hashId |= modifier;\r\n\t }\r\n\t return {key: key, hashId: hashId};\r\n\t };\r\n\r\n\t this.findKeyCommand = function findKeyCommand(hashId, keyString) {\r\n\t var key = KEY_MODS[hashId] + keyString;\r\n\t return this.commandKeyBinding[key];\r\n\t };\r\n\r\n\t this.handleKeyboard = function(data, hashId, keyString, keyCode) {\r\n\t if (keyCode < 0) return;\r\n\t var key = KEY_MODS[hashId] + keyString;\r\n\t var command = this.commandKeyBinding[key];\r\n\t if (data.$keyChain) {\r\n\t data.$keyChain += \" \" + key;\r\n\t command = this.commandKeyBinding[data.$keyChain] || command;\r\n\t }\r\n\t \r\n\t if (command) {\r\n\t if (command == \"chainKeys\" || command[command.length - 1] == \"chainKeys\") {\r\n\t data.$keyChain = data.$keyChain || key;\r\n\t return {command: \"null\"};\r\n\t }\r\n\t }\r\n\t \r\n\t if (data.$keyChain) {\r\n\t if ((!hashId || hashId == 4) && keyString.length == 1)\r\n\t data.$keyChain = data.$keyChain.slice(0, -key.length - 1); // wait for input\r\n\t else if (hashId == -1 || keyCode > 0)\r\n\t data.$keyChain = \"\"; // reset keyChain\r\n\t }\r\n\t return {command: command};\r\n\t };\r\n\t \r\n\t this.getStatusText = function(editor, data) {\r\n\t return data.$keyChain || \"\";\r\n\t };\r\n\r\n\t}).call(HashHandler.prototype);\r\n\r\n\texports.HashHandler = HashHandler;\r\n\texports.MultiHashHandler = MultiHashHandler;\r\n\t});\r\n\r\n\tace.define(\"ace/commands/command_manager\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/keyboard/hash_handler\",\"ace/lib/event_emitter\"], function(acequire, exports, module) {\r\n\t\"use strict\";\r\n\r\n\tvar oop = acequire(\"../lib/oop\");\r\n\tvar MultiHashHandler = acequire(\"../keyboard/hash_handler\").MultiHashHandler;\r\n\tvar EventEmitter = acequire(\"../lib/event_emitter\").EventEmitter;\r\n\r\n\tvar CommandManager = function(platform, commands) {\r\n\t MultiHashHandler.call(this, commands, platform);\r\n\t this.byName = this.commands;\r\n\t this.setDefaultHandler(\"exec\", function(e) {\r\n\t return e.command.exec(e.editor, e.args || {});\r\n\t });\r\n\t};\r\n\r\n\toop.inherits(CommandManager, MultiHashHandler);\r\n\r\n\t(function() {\r\n\r\n\t oop.implement(this, EventEmitter);\r\n\r\n\t this.exec = function(command, editor, args) {\r\n\t if (Array.isArray(command)) {\r\n\t for (var i = command.length; i--; ) {\r\n\t if (this.exec(command[i], editor, args)) return true;\r\n\t }\r\n\t return false;\r\n\t }\r\n\t \r\n\t if (typeof command === \"string\")\r\n\t command = this.commands[command];\r\n\r\n\t if (!command)\r\n\t return false;\r\n\r\n\t if (editor && editor.$readOnly && !command.readOnly)\r\n\t return false;\r\n\r\n\t var e = {editor: editor, command: command, args: args};\r\n\t e.returnValue = this._emit(\"exec\", e);\r\n\t this._signal(\"afterExec\", e);\r\n\r\n\t return e.returnValue === false ? false : true;\r\n\t };\r\n\r\n\t this.toggleRecording = function(editor) {\r\n\t if (this.$inReplay)\r\n\t return;\r\n\r\n\t editor && editor._emit(\"changeStatus\");\r\n\t if (this.recording) {\r\n\t this.macro.pop();\r\n\t this.removeEventListener(\"exec\", this.$addCommandToMacro);\r\n\r\n\t if (!this.macro.length)\r\n\t this.macro = this.oldMacro;\r\n\r\n\t return this.recording = false;\r\n\t }\r\n\t if (!this.$addCommandToMacro) {\r\n\t this.$addCommandToMacro = function(e) {\r\n\t this.macro.push([e.command, e.args]);\r\n\t }.bind(this);\r\n\t }\r\n\r\n\t this.oldMacro = this.macro;\r\n\t this.macro = [];\r\n\t this.on(\"exec\", this.$addCommandToMacro);\r\n\t return this.recording = true;\r\n\t };\r\n\r\n\t this.replay = function(editor) {\r\n\t if (this.$inReplay || !this.macro)\r\n\t return;\r\n\r\n\t if (this.recording)\r\n\t return this.toggleRecording(editor);\r\n\r\n\t try {\r\n\t this.$inReplay = true;\r\n\t this.macro.forEach(function(x) {\r\n\t if (typeof x == \"string\")\r\n\t this.exec(x, editor);\r\n\t else\r\n\t this.exec(x[0], editor, x[1]);\r\n\t }, this);\r\n\t } finally {\r\n\t this.$inReplay = false;\r\n\t }\r\n\t };\r\n\r\n\t this.trimMacro = function(m) {\r\n\t return m.map(function(x){\r\n\t if (typeof x[0] != \"string\")\r\n\t x[0] = x[0].name;\r\n\t if (!x[1])\r\n\t x = x[0];\r\n\t return x;\r\n\t });\r\n\t };\r\n\r\n\t}).call(CommandManager.prototype);\r\n\r\n\texports.CommandManager = CommandManager;\r\n\r\n\t});\r\n\r\n\tace.define(\"ace/commands/default_commands\",[\"require\",\"exports\",\"module\",\"ace/lib/lang\",\"ace/config\",\"ace/range\"], function(acequire, exports, module) {\r\n\t\"use strict\";\r\n\r\n\tvar lang = acequire(\"../lib/lang\");\r\n\tvar config = acequire(\"../config\");\r\n\tvar Range = acequire(\"../range\").Range;\r\n\r\n\tfunction bindKey(win, mac) {\r\n\t return {win: win, mac: mac};\r\n\t}\r\n\texports.commands = [{\r\n\t name: \"showSettingsMenu\",\r\n\t bindKey: bindKey(\"Ctrl-,\", \"Command-,\"),\r\n\t exec: function(editor) {\r\n\t config.loadModule(\"ace/ext/settings_menu\", function(module) {\r\n\t module.init(editor);\r\n\t editor.showSettingsMenu();\r\n\t });\r\n\t },\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"goToNextError\",\r\n\t bindKey: bindKey(\"Alt-E\", \"Ctrl-E\"),\r\n\t exec: function(editor) {\r\n\t config.loadModule(\"ace/ext/error_marker\", function(module) {\r\n\t module.showErrorMarker(editor, 1);\r\n\t });\r\n\t },\r\n\t scrollIntoView: \"animate\",\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"goToPreviousError\",\r\n\t bindKey: bindKey(\"Alt-Shift-E\", \"Ctrl-Shift-E\"),\r\n\t exec: function(editor) {\r\n\t config.loadModule(\"ace/ext/error_marker\", function(module) {\r\n\t module.showErrorMarker(editor, -1);\r\n\t });\r\n\t },\r\n\t scrollIntoView: \"animate\",\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"selectall\",\r\n\t bindKey: bindKey(\"Ctrl-A\", \"Command-A\"),\r\n\t exec: function(editor) { editor.selectAll(); },\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"centerselection\",\r\n\t bindKey: bindKey(null, \"Ctrl-L\"),\r\n\t exec: function(editor) { editor.centerSelection(); },\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"gotoline\",\r\n\t bindKey: bindKey(\"Ctrl-L\", \"Command-L\"),\r\n\t exec: function(editor) {\r\n\t var line = parseInt(prompt(\"Enter line number:\"), 10);\r\n\t if (!isNaN(line)) {\r\n\t editor.gotoLine(line);\r\n\t }\r\n\t },\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"fold\",\r\n\t bindKey: bindKey(\"Alt-L|Ctrl-F1\", \"Command-Alt-L|Command-F1\"),\r\n\t exec: function(editor) { editor.session.toggleFold(false); },\r\n\t multiSelectAction: \"forEach\",\r\n\t scrollIntoView: \"center\",\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"unfold\",\r\n\t bindKey: bindKey(\"Alt-Shift-L|Ctrl-Shift-F1\", \"Command-Alt-Shift-L|Command-Shift-F1\"),\r\n\t exec: function(editor) { editor.session.toggleFold(true); },\r\n\t multiSelectAction: \"forEach\",\r\n\t scrollIntoView: \"center\",\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"toggleFoldWidget\",\r\n\t bindKey: bindKey(\"F2\", \"F2\"),\r\n\t exec: function(editor) { editor.session.toggleFoldWidget(); },\r\n\t multiSelectAction: \"forEach\",\r\n\t scrollIntoView: \"center\",\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"toggleParentFoldWidget\",\r\n\t bindKey: bindKey(\"Alt-F2\", \"Alt-F2\"),\r\n\t exec: function(editor) { editor.session.toggleFoldWidget(true); },\r\n\t multiSelectAction: \"forEach\",\r\n\t scrollIntoView: \"center\",\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"foldall\",\r\n\t bindKey: bindKey(null, \"Ctrl-Command-Option-0\"),\r\n\t exec: function(editor) { editor.session.foldAll(); },\r\n\t scrollIntoView: \"center\",\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"foldOther\",\r\n\t bindKey: bindKey(\"Alt-0\", \"Command-Option-0\"),\r\n\t exec: function(editor) { \r\n\t editor.session.foldAll();\r\n\t editor.session.unfold(editor.selection.getAllRanges());\r\n\t },\r\n\t scrollIntoView: \"center\",\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"unfoldall\",\r\n\t bindKey: bindKey(\"Alt-Shift-0\", \"Command-Option-Shift-0\"),\r\n\t exec: function(editor) { editor.session.unfold(); },\r\n\t scrollIntoView: \"center\",\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"findnext\",\r\n\t bindKey: bindKey(\"Ctrl-K\", \"Command-G\"),\r\n\t exec: function(editor) { editor.findNext(); },\r\n\t multiSelectAction: \"forEach\",\r\n\t scrollIntoView: \"center\",\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"findprevious\",\r\n\t bindKey: bindKey(\"Ctrl-Shift-K\", \"Command-Shift-G\"),\r\n\t exec: function(editor) { editor.findPrevious(); },\r\n\t multiSelectAction: \"forEach\",\r\n\t scrollIntoView: \"center\",\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"selectOrFindNext\",\r\n\t bindKey: bindKey(\"Alt-K\", \"Ctrl-G\"),\r\n\t exec: function(editor) {\r\n\t if (editor.selection.isEmpty())\r\n\t editor.selection.selectWord();\r\n\t else\r\n\t editor.findNext(); \r\n\t },\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"selectOrFindPrevious\",\r\n\t bindKey: bindKey(\"Alt-Shift-K\", \"Ctrl-Shift-G\"),\r\n\t exec: function(editor) { \r\n\t if (editor.selection.isEmpty())\r\n\t editor.selection.selectWord();\r\n\t else\r\n\t editor.findPrevious();\r\n\t },\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"find\",\r\n\t bindKey: bindKey(\"Ctrl-F\", \"Command-F\"),\r\n\t exec: function(editor) {\r\n\t config.loadModule(\"ace/ext/searchbox\", function(e) {e.Search(editor)});\r\n\t },\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"overwrite\",\r\n\t bindKey: \"Insert\",\r\n\t exec: function(editor) { editor.toggleOverwrite(); },\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"selecttostart\",\r\n\t bindKey: bindKey(\"Ctrl-Shift-Home\", \"Command-Shift-Up\"),\r\n\t exec: function(editor) { editor.getSelection().selectFileStart(); },\r\n\t multiSelectAction: \"forEach\",\r\n\t readOnly: true,\r\n\t scrollIntoView: \"animate\",\r\n\t aceCommandGroup: \"fileJump\"\r\n\t}, {\r\n\t name: \"gotostart\",\r\n\t bindKey: bindKey(\"Ctrl-Home\", \"Command-Home|Command-Up\"),\r\n\t exec: function(editor) { editor.navigateFileStart(); },\r\n\t multiSelectAction: \"forEach\",\r\n\t readOnly: true,\r\n\t scrollIntoView: \"animate\",\r\n\t aceCommandGroup: \"fileJump\"\r\n\t}, {\r\n\t name: \"selectup\",\r\n\t bindKey: bindKey(\"Shift-Up\", \"Shift-Up\"),\r\n\t exec: function(editor) { editor.getSelection().selectUp(); },\r\n\t multiSelectAction: \"forEach\",\r\n\t scrollIntoView: \"cursor\",\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"golineup\",\r\n\t bindKey: bindKey(\"Up\", \"Up|Ctrl-P\"),\r\n\t exec: function(editor, args) { editor.navigateUp(args.times); },\r\n\t multiSelectAction: \"forEach\",\r\n\t scrollIntoView: \"cursor\",\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"selecttoend\",\r\n\t bindKey: bindKey(\"Ctrl-Shift-End\", \"Command-Shift-Down\"),\r\n\t exec: function(editor) { editor.getSelection().selectFileEnd(); },\r\n\t multiSelectAction: \"forEach\",\r\n\t readOnly: true,\r\n\t scrollIntoView: \"animate\",\r\n\t aceCommandGroup: \"fileJump\"\r\n\t}, {\r\n\t name: \"gotoend\",\r\n\t bindKey: bindKey(\"Ctrl-End\", \"Command-End|Command-Down\"),\r\n\t exec: function(editor) { editor.navigateFileEnd(); },\r\n\t multiSelectAction: \"forEach\",\r\n\t readOnly: true,\r\n\t scrollIntoView: \"animate\",\r\n\t aceCommandGroup: \"fileJump\"\r\n\t}, {\r\n\t name: \"selectdown\",\r\n\t bindKey: bindKey(\"Shift-Down\", \"Shift-Down\"),\r\n\t exec: function(editor) { editor.getSelection().selectDown(); },\r\n\t multiSelectAction: \"forEach\",\r\n\t scrollIntoView: \"cursor\",\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"golinedown\",\r\n\t bindKey: bindKey(\"Down\", \"Down|Ctrl-N\"),\r\n\t exec: function(editor, args) { editor.navigateDown(args.times); },\r\n\t multiSelectAction: \"forEach\",\r\n\t scrollIntoView: \"cursor\",\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"selectwordleft\",\r\n\t bindKey: bindKey(\"Ctrl-Shift-Left\", \"Option-Shift-Left\"),\r\n\t exec: function(editor) { editor.getSelection().selectWordLeft(); },\r\n\t multiSelectAction: \"forEach\",\r\n\t scrollIntoView: \"cursor\",\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"gotowordleft\",\r\n\t bindKey: bindKey(\"Ctrl-Left\", \"Option-Left\"),\r\n\t exec: function(editor) { editor.navigateWordLeft(); },\r\n\t multiSelectAction: \"forEach\",\r\n\t scrollIntoView: \"cursor\",\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"selecttolinestart\",\r\n\t bindKey: bindKey(\"Alt-Shift-Left\", \"Command-Shift-Left\"),\r\n\t exec: function(editor) { editor.getSelection().selectLineStart(); },\r\n\t multiSelectAction: \"forEach\",\r\n\t scrollIntoView: \"cursor\",\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"gotolinestart\",\r\n\t bindKey: bindKey(\"Alt-Left|Home\", \"Command-Left|Home|Ctrl-A\"),\r\n\t exec: function(editor) { editor.navigateLineStart(); },\r\n\t multiSelectAction: \"forEach\",\r\n\t scrollIntoView: \"cursor\",\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"selectleft\",\r\n\t bindKey: bindKey(\"Shift-Left\", \"Shift-Left\"),\r\n\t exec: function(editor) { editor.getSelection().selectLeft(); },\r\n\t multiSelectAction: \"forEach\",\r\n\t scrollIntoView: \"cursor\",\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"gotoleft\",\r\n\t bindKey: bindKey(\"Left\", \"Left|Ctrl-B\"),\r\n\t exec: function(editor, args) { editor.navigateLeft(args.times); },\r\n\t multiSelectAction: \"forEach\",\r\n\t scrollIntoView: \"cursor\",\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"selectwordright\",\r\n\t bindKey: bindKey(\"Ctrl-Shift-Right\", \"Option-Shift-Right\"),\r\n\t exec: function(editor) { editor.getSelection().selectWordRight(); },\r\n\t multiSelectAction: \"forEach\",\r\n\t scrollIntoView: \"cursor\",\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"gotowordright\",\r\n\t bindKey: bindKey(\"Ctrl-Right\", \"Option-Right\"),\r\n\t exec: function(editor) { editor.navigateWordRight(); },\r\n\t multiSelectAction: \"forEach\",\r\n\t scrollIntoView: \"cursor\",\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"selecttolineend\",\r\n\t bindKey: bindKey(\"Alt-Shift-Right\", \"Command-Shift-Right\"),\r\n\t exec: function(editor) { editor.getSelection().selectLineEnd(); },\r\n\t multiSelectAction: \"forEach\",\r\n\t scrollIntoView: \"cursor\",\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"gotolineend\",\r\n\t bindKey: bindKey(\"Alt-Right|End\", \"Command-Right|End|Ctrl-E\"),\r\n\t exec: function(editor) { editor.navigateLineEnd(); },\r\n\t multiSelectAction: \"forEach\",\r\n\t scrollIntoView: \"cursor\",\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"selectright\",\r\n\t bindKey: bindKey(\"Shift-Right\", \"Shift-Right\"),\r\n\t exec: function(editor) { editor.getSelection().selectRight(); },\r\n\t multiSelectAction: \"forEach\",\r\n\t scrollIntoView: \"cursor\",\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"gotoright\",\r\n\t bindKey: bindKey(\"Right\", \"Right|Ctrl-F\"),\r\n\t exec: function(editor, args) { editor.navigateRight(args.times); },\r\n\t multiSelectAction: \"forEach\",\r\n\t scrollIntoView: \"cursor\",\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"selectpagedown\",\r\n\t bindKey: \"Shift-PageDown\",\r\n\t exec: function(editor) { editor.selectPageDown(); },\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"pagedown\",\r\n\t bindKey: bindKey(null, \"Option-PageDown\"),\r\n\t exec: function(editor) { editor.scrollPageDown(); },\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"gotopagedown\",\r\n\t bindKey: bindKey(\"PageDown\", \"PageDown|Ctrl-V\"),\r\n\t exec: function(editor) { editor.gotoPageDown(); },\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"selectpageup\",\r\n\t bindKey: \"Shift-PageUp\",\r\n\t exec: function(editor) { editor.selectPageUp(); },\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"pageup\",\r\n\t bindKey: bindKey(null, \"Option-PageUp\"),\r\n\t exec: function(editor) { editor.scrollPageUp(); },\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"gotopageup\",\r\n\t bindKey: \"PageUp\",\r\n\t exec: function(editor) { editor.gotoPageUp(); },\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"scrollup\",\r\n\t bindKey: bindKey(\"Ctrl-Up\", null),\r\n\t exec: function(e) { e.renderer.scrollBy(0, -2 * e.renderer.layerConfig.lineHeight); },\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"scrolldown\",\r\n\t bindKey: bindKey(\"Ctrl-Down\", null),\r\n\t exec: function(e) { e.renderer.scrollBy(0, 2 * e.renderer.layerConfig.lineHeight); },\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"selectlinestart\",\r\n\t bindKey: \"Shift-Home\",\r\n\t exec: function(editor) { editor.getSelection().selectLineStart(); },\r\n\t multiSelectAction: \"forEach\",\r\n\t scrollIntoView: \"cursor\",\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"selectlineend\",\r\n\t bindKey: \"Shift-End\",\r\n\t exec: function(editor) { editor.getSelection().selectLineEnd(); },\r\n\t multiSelectAction: \"forEach\",\r\n\t scrollIntoView: \"cursor\",\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"togglerecording\",\r\n\t bindKey: bindKey(\"Ctrl-Alt-E\", \"Command-Option-E\"),\r\n\t exec: function(editor) { editor.commands.toggleRecording(editor); },\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"replaymacro\",\r\n\t bindKey: bindKey(\"Ctrl-Shift-E\", \"Command-Shift-E\"),\r\n\t exec: function(editor) { editor.commands.replay(editor); },\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"jumptomatching\",\r\n\t bindKey: bindKey(\"Ctrl-P\", \"Ctrl-P\"),\r\n\t exec: function(editor) { editor.jumpToMatching(); },\r\n\t multiSelectAction: \"forEach\",\r\n\t scrollIntoView: \"animate\",\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"selecttomatching\",\r\n\t bindKey: bindKey(\"Ctrl-Shift-P\", \"Ctrl-Shift-P\"),\r\n\t exec: function(editor) { editor.jumpToMatching(true); },\r\n\t multiSelectAction: \"forEach\",\r\n\t scrollIntoView: \"animate\",\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"expandToMatching\",\r\n\t bindKey: bindKey(\"Ctrl-Shift-M\", \"Ctrl-Shift-M\"),\r\n\t exec: function(editor) { editor.jumpToMatching(true, true); },\r\n\t multiSelectAction: \"forEach\",\r\n\t scrollIntoView: \"animate\",\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"passKeysToBrowser\",\r\n\t bindKey: bindKey(null, null),\r\n\t exec: function() {},\r\n\t passEvent: true,\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"copy\",\r\n\t exec: function(editor) {\r\n\t },\r\n\t readOnly: true\r\n\t},\r\n\t{\r\n\t name: \"cut\",\r\n\t exec: function(editor) {\r\n\t var range = editor.getSelectionRange();\r\n\t editor._emit(\"cut\", range);\r\n\r\n\t if (!editor.selection.isEmpty()) {\r\n\t editor.session.remove(range);\r\n\t editor.clearSelection();\r\n\t }\r\n\t },\r\n\t scrollIntoView: \"cursor\",\r\n\t multiSelectAction: \"forEach\"\r\n\t}, {\r\n\t name: \"paste\",\r\n\t exec: function(editor, args) {\r\n\t editor.$handlePaste(args);\r\n\t },\r\n\t scrollIntoView: \"cursor\"\r\n\t}, {\r\n\t name: \"removeline\",\r\n\t bindKey: bindKey(\"Ctrl-D\", \"Command-D\"),\r\n\t exec: function(editor) { editor.removeLines(); },\r\n\t scrollIntoView: \"cursor\",\r\n\t multiSelectAction: \"forEachLine\"\r\n\t}, {\r\n\t name: \"duplicateSelection\",\r\n\t bindKey: bindKey(\"Ctrl-Shift-D\", \"Command-Shift-D\"),\r\n\t exec: function(editor) { editor.duplicateSelection(); },\r\n\t scrollIntoView: \"cursor\",\r\n\t multiSelectAction: \"forEach\"\r\n\t}, {\r\n\t name: \"sortlines\",\r\n\t bindKey: bindKey(\"Ctrl-Alt-S\", \"Command-Alt-S\"),\r\n\t exec: function(editor) { editor.sortLines(); },\r\n\t scrollIntoView: \"selection\",\r\n\t multiSelectAction: \"forEachLine\"\r\n\t}, {\r\n\t name: \"togglecomment\",\r\n\t bindKey: bindKey(\"Ctrl-/\", \"Command-/\"),\r\n\t exec: function(editor) { editor.toggleCommentLines(); },\r\n\t multiSelectAction: \"forEachLine\",\r\n\t scrollIntoView: \"selectionPart\"\r\n\t}, {\r\n\t name: \"toggleBlockComment\",\r\n\t bindKey: bindKey(\"Ctrl-Shift-/\", \"Command-Shift-/\"),\r\n\t exec: function(editor) { editor.toggleBlockComment(); },\r\n\t multiSelectAction: \"forEach\",\r\n\t scrollIntoView: \"selectionPart\"\r\n\t}, {\r\n\t name: \"modifyNumberUp\",\r\n\t bindKey: bindKey(\"Ctrl-Shift-Up\", \"Alt-Shift-Up\"),\r\n\t exec: function(editor) { editor.modifyNumber(1); },\r\n\t scrollIntoView: \"cursor\",\r\n\t multiSelectAction: \"forEach\"\r\n\t}, {\r\n\t name: \"modifyNumberDown\",\r\n\t bindKey: bindKey(\"Ctrl-Shift-Down\", \"Alt-Shift-Down\"),\r\n\t exec: function(editor) { editor.modifyNumber(-1); },\r\n\t scrollIntoView: \"cursor\",\r\n\t multiSelectAction: \"forEach\"\r\n\t}, {\r\n\t name: \"replace\",\r\n\t bindKey: bindKey(\"Ctrl-H\", \"Command-Option-F\"),\r\n\t exec: function(editor) {\r\n\t config.loadModule(\"ace/ext/searchbox\", function(e) {e.Search(editor, true)});\r\n\t }\r\n\t}, {\r\n\t name: \"undo\",\r\n\t bindKey: bindKey(\"Ctrl-Z\", \"Command-Z\"),\r\n\t exec: function(editor) { editor.undo(); }\r\n\t}, {\r\n\t name: \"redo\",\r\n\t bindKey: bindKey(\"Ctrl-Shift-Z|Ctrl-Y\", \"Command-Shift-Z|Command-Y\"),\r\n\t exec: function(editor) { editor.redo(); }\r\n\t}, {\r\n\t name: \"copylinesup\",\r\n\t bindKey: bindKey(\"Alt-Shift-Up\", \"Command-Option-Up\"),\r\n\t exec: function(editor) { editor.copyLinesUp(); },\r\n\t scrollIntoView: \"cursor\"\r\n\t}, {\r\n\t name: \"movelinesup\",\r\n\t bindKey: bindKey(\"Alt-Up\", \"Option-Up\"),\r\n\t exec: function(editor) { editor.moveLinesUp(); },\r\n\t scrollIntoView: \"cursor\"\r\n\t}, {\r\n\t name: \"copylinesdown\",\r\n\t bindKey: bindKey(\"Alt-Shift-Down\", \"Command-Option-Down\"),\r\n\t exec: function(editor) { editor.copyLinesDown(); },\r\n\t scrollIntoView: \"cursor\"\r\n\t}, {\r\n\t name: \"movelinesdown\",\r\n\t bindKey: bindKey(\"Alt-Down\", \"Option-Down\"),\r\n\t exec: function(editor) { editor.moveLinesDown(); },\r\n\t scrollIntoView: \"cursor\"\r\n\t}, {\r\n\t name: \"del\",\r\n\t bindKey: bindKey(\"Delete\", \"Delete|Ctrl-D|Shift-Delete\"),\r\n\t exec: function(editor) { editor.remove(\"right\"); },\r\n\t multiSelectAction: \"forEach\",\r\n\t scrollIntoView: \"cursor\"\r\n\t}, {\r\n\t name: \"backspace\",\r\n\t bindKey: bindKey(\r\n\t \"Shift-Backspace|Backspace\",\r\n\t \"Ctrl-Backspace|Shift-Backspace|Backspace|Ctrl-H\"\r\n\t ),\r\n\t exec: function(editor) { editor.remove(\"left\"); },\r\n\t multiSelectAction: \"forEach\",\r\n\t scrollIntoView: \"cursor\"\r\n\t}, {\r\n\t name: \"cut_or_delete\",\r\n\t bindKey: bindKey(\"Shift-Delete\", null),\r\n\t exec: function(editor) { \r\n\t if (editor.selection.isEmpty()) {\r\n\t editor.remove(\"left\");\r\n\t } else {\r\n\t return false;\r\n\t }\r\n\t },\r\n\t multiSelectAction: \"forEach\",\r\n\t scrollIntoView: \"cursor\"\r\n\t}, {\r\n\t name: \"removetolinestart\",\r\n\t bindKey: bindKey(\"Alt-Backspace\", \"Command-Backspace\"),\r\n\t exec: function(editor) { editor.removeToLineStart(); },\r\n\t multiSelectAction: \"forEach\",\r\n\t scrollIntoView: \"cursor\"\r\n\t}, {\r\n\t name: \"removetolineend\",\r\n\t bindKey: bindKey(\"Alt-Delete\", \"Ctrl-K\"),\r\n\t exec: function(editor) { editor.removeToLineEnd(); },\r\n\t multiSelectAction: \"forEach\",\r\n\t scrollIntoView: \"cursor\"\r\n\t}, {\r\n\t name: \"removewordleft\",\r\n\t bindKey: bindKey(\"Ctrl-Backspace\", \"Alt-Backspace|Ctrl-Alt-Backspace\"),\r\n\t exec: function(editor) { editor.removeWordLeft(); },\r\n\t multiSelectAction: \"forEach\",\r\n\t scrollIntoView: \"cursor\"\r\n\t}, {\r\n\t name: \"removewordright\",\r\n\t bindKey: bindKey(\"Ctrl-Delete\", \"Alt-Delete\"),\r\n\t exec: function(editor) { editor.removeWordRight(); },\r\n\t multiSelectAction: \"forEach\",\r\n\t scrollIntoView: \"cursor\"\r\n\t}, {\r\n\t name: \"outdent\",\r\n\t bindKey: bindKey(\"Shift-Tab\", \"Shift-Tab\"),\r\n\t exec: function(editor) { editor.blockOutdent(); },\r\n\t multiSelectAction: \"forEach\",\r\n\t scrollIntoView: \"selectionPart\"\r\n\t}, {\r\n\t name: \"indent\",\r\n\t bindKey: bindKey(\"Tab\", \"Tab\"),\r\n\t exec: function(editor) { editor.indent(); },\r\n\t multiSelectAction: \"forEach\",\r\n\t scrollIntoView: \"selectionPart\"\r\n\t}, {\r\n\t name: \"blockoutdent\",\r\n\t bindKey: bindKey(\"Ctrl-[\", \"Ctrl-[\"),\r\n\t exec: function(editor) { editor.blockOutdent(); },\r\n\t multiSelectAction: \"forEachLine\",\r\n\t scrollIntoView: \"selectionPart\"\r\n\t}, {\r\n\t name: \"blockindent\",\r\n\t bindKey: bindKey(\"Ctrl-]\", \"Ctrl-]\"),\r\n\t exec: function(editor) { editor.blockIndent(); },\r\n\t multiSelectAction: \"forEachLine\",\r\n\t scrollIntoView: \"selectionPart\"\r\n\t}, {\r\n\t name: \"insertstring\",\r\n\t exec: function(editor, str) { editor.insert(str); },\r\n\t multiSelectAction: \"forEach\",\r\n\t scrollIntoView: \"cursor\"\r\n\t}, {\r\n\t name: \"inserttext\",\r\n\t exec: function(editor, args) {\r\n\t editor.insert(lang.stringRepeat(args.text || \"\", args.times || 1));\r\n\t },\r\n\t multiSelectAction: \"forEach\",\r\n\t scrollIntoView: \"cursor\"\r\n\t}, {\r\n\t name: \"splitline\",\r\n\t bindKey: bindKey(null, \"Ctrl-O\"),\r\n\t exec: function(editor) { editor.splitLine(); },\r\n\t multiSelectAction: \"forEach\",\r\n\t scrollIntoView: \"cursor\"\r\n\t}, {\r\n\t name: \"transposeletters\",\r\n\t bindKey: bindKey(\"Ctrl-T\", \"Ctrl-T\"),\r\n\t exec: function(editor) { editor.transposeLetters(); },\r\n\t multiSelectAction: function(editor) {editor.transposeSelections(1); },\r\n\t scrollIntoView: \"cursor\"\r\n\t}, {\r\n\t name: \"touppercase\",\r\n\t bindKey: bindKey(\"Ctrl-U\", \"Ctrl-U\"),\r\n\t exec: function(editor) { editor.toUpperCase(); },\r\n\t multiSelectAction: \"forEach\",\r\n\t scrollIntoView: \"cursor\"\r\n\t}, {\r\n\t name: \"tolowercase\",\r\n\t bindKey: bindKey(\"Ctrl-Shift-U\", \"Ctrl-Shift-U\"),\r\n\t exec: function(editor) { editor.toLowerCase(); },\r\n\t multiSelectAction: \"forEach\",\r\n\t scrollIntoView: \"cursor\"\r\n\t}, {\r\n\t name: \"expandtoline\",\r\n\t bindKey: bindKey(\"Ctrl-Shift-L\", \"Command-Shift-L\"),\r\n\t exec: function(editor) {\r\n\t var range = editor.selection.getRange();\r\n\r\n\t range.start.column = range.end.column = 0;\r\n\t range.end.row++;\r\n\t editor.selection.setRange(range, false);\r\n\t },\r\n\t multiSelectAction: \"forEach\",\r\n\t scrollIntoView: \"cursor\",\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"joinlines\",\r\n\t bindKey: bindKey(null, null),\r\n\t exec: function(editor) {\r\n\t var isBackwards = editor.selection.isBackwards();\r\n\t var selectionStart = isBackwards ? editor.selection.getSelectionLead() : editor.selection.getSelectionAnchor();\r\n\t var selectionEnd = isBackwards ? editor.selection.getSelectionAnchor() : editor.selection.getSelectionLead();\r\n\t var firstLineEndCol = editor.session.doc.getLine(selectionStart.row).length;\r\n\t var selectedText = editor.session.doc.getTextRange(editor.selection.getRange());\r\n\t var selectedCount = selectedText.replace(/\\n\\s*/, \" \").length;\r\n\t var insertLine = editor.session.doc.getLine(selectionStart.row);\r\n\r\n\t for (var i = selectionStart.row + 1; i <= selectionEnd.row + 1; i++) {\r\n\t var curLine = lang.stringTrimLeft(lang.stringTrimRight(editor.session.doc.getLine(i)));\r\n\t if (curLine.length !== 0) {\r\n\t curLine = \" \" + curLine;\r\n\t }\r\n\t insertLine += curLine;\r\n\t }\r\n\r\n\t if (selectionEnd.row + 1 < (editor.session.doc.getLength() - 1)) {\r\n\t insertLine += editor.session.doc.getNewLineCharacter();\r\n\t }\r\n\r\n\t editor.clearSelection();\r\n\t editor.session.doc.replace(new Range(selectionStart.row, 0, selectionEnd.row + 2, 0), insertLine);\r\n\r\n\t if (selectedCount > 0) {\r\n\t editor.selection.moveCursorTo(selectionStart.row, selectionStart.column);\r\n\t editor.selection.selectTo(selectionStart.row, selectionStart.column + selectedCount);\r\n\t } else {\r\n\t firstLineEndCol = editor.session.doc.getLine(selectionStart.row).length > firstLineEndCol ? (firstLineEndCol + 1) : firstLineEndCol;\r\n\t editor.selection.moveCursorTo(selectionStart.row, firstLineEndCol);\r\n\t }\r\n\t },\r\n\t multiSelectAction: \"forEach\",\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"invertSelection\",\r\n\t bindKey: bindKey(null, null),\r\n\t exec: function(editor) {\r\n\t var endRow = editor.session.doc.getLength() - 1;\r\n\t var endCol = editor.session.doc.getLine(endRow).length;\r\n\t var ranges = editor.selection.rangeList.ranges;\r\n\t var newRanges = [];\r\n\t if (ranges.length < 1) {\r\n\t ranges = [editor.selection.getRange()];\r\n\t }\r\n\r\n\t for (var i = 0; i < ranges.length; i++) {\r\n\t if (i == (ranges.length - 1)) {\r\n\t if (!(ranges[i].end.row === endRow && ranges[i].end.column === endCol)) {\r\n\t newRanges.push(new Range(ranges[i].end.row, ranges[i].end.column, endRow, endCol));\r\n\t }\r\n\t }\r\n\r\n\t if (i === 0) {\r\n\t if (!(ranges[i].start.row === 0 && ranges[i].start.column === 0)) {\r\n\t newRanges.push(new Range(0, 0, ranges[i].start.row, ranges[i].start.column));\r\n\t }\r\n\t } else {\r\n\t newRanges.push(new Range(ranges[i-1].end.row, ranges[i-1].end.column, ranges[i].start.row, ranges[i].start.column));\r\n\t }\r\n\t }\r\n\r\n\t editor.exitMultiSelectMode();\r\n\t editor.clearSelection();\r\n\r\n\t for(var i = 0; i < newRanges.length; i++) {\r\n\t editor.selection.addRange(newRanges[i], false);\r\n\t }\r\n\t },\r\n\t readOnly: true,\r\n\t scrollIntoView: \"none\"\r\n\t}];\r\n\r\n\t});\r\n\r\n\tace.define(\"ace/editor\",[\"require\",\"exports\",\"module\",\"ace/lib/fixoldbrowsers\",\"ace/lib/oop\",\"ace/lib/dom\",\"ace/lib/lang\",\"ace/lib/useragent\",\"ace/keyboard/textinput\",\"ace/mouse/mouse_handler\",\"ace/mouse/fold_handler\",\"ace/keyboard/keybinding\",\"ace/edit_session\",\"ace/search\",\"ace/range\",\"ace/lib/event_emitter\",\"ace/commands/command_manager\",\"ace/commands/default_commands\",\"ace/config\",\"ace/token_iterator\"], function(acequire, exports, module) {\r\n\t\"use strict\";\r\n\r\n\tacequire(\"./lib/fixoldbrowsers\");\r\n\r\n\tvar oop = acequire(\"./lib/oop\");\r\n\tvar dom = acequire(\"./lib/dom\");\r\n\tvar lang = acequire(\"./lib/lang\");\r\n\tvar useragent = acequire(\"./lib/useragent\");\r\n\tvar TextInput = acequire(\"./keyboard/textinput\").TextInput;\r\n\tvar MouseHandler = acequire(\"./mouse/mouse_handler\").MouseHandler;\r\n\tvar FoldHandler = acequire(\"./mouse/fold_handler\").FoldHandler;\r\n\tvar KeyBinding = acequire(\"./keyboard/keybinding\").KeyBinding;\r\n\tvar EditSession = acequire(\"./edit_session\").EditSession;\r\n\tvar Search = acequire(\"./search\").Search;\r\n\tvar Range = acequire(\"./range\").Range;\r\n\tvar EventEmitter = acequire(\"./lib/event_emitter\").EventEmitter;\r\n\tvar CommandManager = acequire(\"./commands/command_manager\").CommandManager;\r\n\tvar defaultCommands = acequire(\"./commands/default_commands\").commands;\r\n\tvar config = acequire(\"./config\");\r\n\tvar TokenIterator = acequire(\"./token_iterator\").TokenIterator;\r\n\tvar Editor = function(renderer, session) {\r\n\t var container = renderer.getContainerElement();\r\n\t this.container = container;\r\n\t this.renderer = renderer;\r\n\r\n\t this.commands = new CommandManager(useragent.isMac ? \"mac\" : \"win\", defaultCommands);\r\n\t this.textInput = new TextInput(renderer.getTextAreaContainer(), this);\r\n\t this.renderer.textarea = this.textInput.getElement();\r\n\t this.keyBinding = new KeyBinding(this);\r\n\t this.$mouseHandler = new MouseHandler(this);\r\n\t new FoldHandler(this);\r\n\r\n\t this.$blockScrolling = 0;\r\n\t this.$search = new Search().set({\r\n\t wrap: true\r\n\t });\r\n\r\n\t this.$historyTracker = this.$historyTracker.bind(this);\r\n\t this.commands.on(\"exec\", this.$historyTracker);\r\n\r\n\t this.$initOperationListeners();\r\n\t \r\n\t this._$emitInputEvent = lang.delayedCall(function() {\r\n\t this._signal(\"input\", {});\r\n\t if (this.session && this.session.bgTokenizer)\r\n\t this.session.bgTokenizer.scheduleStart();\r\n\t }.bind(this));\r\n\t \r\n\t this.on(\"change\", function(_, _self) {\r\n\t _self._$emitInputEvent.schedule(31);\r\n\t });\r\n\r\n\t this.setSession(session || new EditSession(\"\"));\r\n\t config.resetOptions(this);\r\n\t config._signal(\"editor\", this);\r\n\t};\r\n\r\n\t(function(){\r\n\r\n\t oop.implement(this, EventEmitter);\r\n\r\n\t this.$initOperationListeners = function() {\r\n\t function last(a) {return a[a.length - 1]}\r\n\r\n\t this.selections = [];\r\n\t this.commands.on(\"exec\", this.startOperation.bind(this), true);\r\n\t this.commands.on(\"afterExec\", this.endOperation.bind(this), true);\r\n\r\n\t this.$opResetTimer = lang.delayedCall(this.endOperation.bind(this));\r\n\r\n\t this.on(\"change\", function() {\r\n\t this.curOp || this.startOperation();\r\n\t this.curOp.docChanged = true;\r\n\t }.bind(this), true);\r\n\r\n\t this.on(\"changeSelection\", function() {\r\n\t this.curOp || this.startOperation();\r\n\t this.curOp.selectionChanged = true;\r\n\t }.bind(this), true);\r\n\t };\r\n\r\n\t this.curOp = null;\r\n\t this.prevOp = {};\r\n\t this.startOperation = function(commadEvent) {\r\n\t if (this.curOp) {\r\n\t if (!commadEvent || this.curOp.command)\r\n\t return;\r\n\t this.prevOp = this.curOp;\r\n\t }\r\n\t if (!commadEvent) {\r\n\t this.previousCommand = null;\r\n\t commadEvent = {};\r\n\t }\r\n\r\n\t this.$opResetTimer.schedule();\r\n\t this.curOp = {\r\n\t command: commadEvent.command || {},\r\n\t args: commadEvent.args,\r\n\t scrollTop: this.renderer.scrollTop\r\n\t };\r\n\t if (this.curOp.command.name && this.curOp.command.scrollIntoView !== undefined)\r\n\t this.$blockScrolling++;\r\n\t };\r\n\r\n\t this.endOperation = function(e) {\r\n\t if (this.curOp) {\r\n\t if (e && e.returnValue === false)\r\n\t return this.curOp = null;\r\n\t this._signal(\"beforeEndOperation\");\r\n\t var command = this.curOp.command;\r\n\t if (command.name && this.$blockScrolling > 0)\r\n\t this.$blockScrolling--;\r\n\t var scrollIntoView = command && command.scrollIntoView;\r\n\t if (scrollIntoView) {\r\n\t switch (scrollIntoView) {\r\n\t case \"center-animate\":\r\n\t scrollIntoView = \"animate\";\r\n\t case \"center\":\r\n\t this.renderer.scrollCursorIntoView(null, 0.5);\r\n\t break;\r\n\t case \"animate\":\r\n\t case \"cursor\":\r\n\t this.renderer.scrollCursorIntoView();\r\n\t break;\r\n\t case \"selectionPart\":\r\n\t var range = this.selection.getRange();\r\n\t var config = this.renderer.layerConfig;\r\n\t if (range.start.row >= config.lastRow || range.end.row <= config.firstRow) {\r\n\t this.renderer.scrollSelectionIntoView(this.selection.anchor, this.selection.lead);\r\n\t }\r\n\t break;\r\n\t default:\r\n\t break;\r\n\t }\r\n\t if (scrollIntoView == \"animate\")\r\n\t this.renderer.animateScrolling(this.curOp.scrollTop);\r\n\t }\r\n\t \r\n\t this.prevOp = this.curOp;\r\n\t this.curOp = null;\r\n\t }\r\n\t };\r\n\t this.$mergeableCommands = [\"backspace\", \"del\", \"insertstring\"];\r\n\t this.$historyTracker = function(e) {\r\n\t if (!this.$mergeUndoDeltas)\r\n\t return;\r\n\r\n\t var prev = this.prevOp;\r\n\t var mergeableCommands = this.$mergeableCommands;\r\n\t var shouldMerge = prev.command && (e.command.name == prev.command.name);\r\n\t if (e.command.name == \"insertstring\") {\r\n\t var text = e.args;\r\n\t if (this.mergeNextCommand === undefined)\r\n\t this.mergeNextCommand = true;\r\n\r\n\t shouldMerge = shouldMerge\r\n\t && this.mergeNextCommand // previous command allows to coalesce with\r\n\t && (!/\\s/.test(text) || /\\s/.test(prev.args)); // previous insertion was of same type\r\n\r\n\t this.mergeNextCommand = true;\r\n\t } else {\r\n\t shouldMerge = shouldMerge\r\n\t && mergeableCommands.indexOf(e.command.name) !== -1; // the command is mergeable\r\n\t }\r\n\r\n\t if (\r\n\t this.$mergeUndoDeltas != \"always\"\r\n\t && Date.now() - this.sequenceStartTime > 2000\r\n\t ) {\r\n\t shouldMerge = false; // the sequence is too long\r\n\t }\r\n\r\n\t if (shouldMerge)\r\n\t this.session.mergeUndoDeltas = true;\r\n\t else if (mergeableCommands.indexOf(e.command.name) !== -1)\r\n\t this.sequenceStartTime = Date.now();\r\n\t };\r\n\t this.setKeyboardHandler = function(keyboardHandler, cb) {\r\n\t if (keyboardHandler && typeof keyboardHandler === \"string\") {\r\n\t this.$keybindingId = keyboardHandler;\r\n\t var _self = this;\r\n\t config.loadModule([\"keybinding\", keyboardHandler], function(module) {\r\n\t if (_self.$keybindingId == keyboardHandler)\r\n\t _self.keyBinding.setKeyboardHandler(module && module.handler);\r\n\t cb && cb();\r\n\t });\r\n\t } else {\r\n\t this.$keybindingId = null;\r\n\t this.keyBinding.setKeyboardHandler(keyboardHandler);\r\n\t cb && cb();\r\n\t }\r\n\t };\r\n\t this.getKeyboardHandler = function() {\r\n\t return this.keyBinding.getKeyboardHandler();\r\n\t };\r\n\t this.setSession = function(session) {\r\n\t if (this.session == session)\r\n\t return;\r\n\t if (this.curOp) this.endOperation();\r\n\t this.curOp = {};\r\n\r\n\t var oldSession = this.session;\r\n\t if (oldSession) {\r\n\t this.session.off(\"change\", this.$onDocumentChange);\r\n\t this.session.off(\"changeMode\", this.$onChangeMode);\r\n\t this.session.off(\"tokenizerUpdate\", this.$onTokenizerUpdate);\r\n\t this.session.off(\"changeTabSize\", this.$onChangeTabSize);\r\n\t this.session.off(\"changeWrapLimit\", this.$onChangeWrapLimit);\r\n\t this.session.off(\"changeWrapMode\", this.$onChangeWrapMode);\r\n\t this.session.off(\"changeFold\", this.$onChangeFold);\r\n\t this.session.off(\"changeFrontMarker\", this.$onChangeFrontMarker);\r\n\t this.session.off(\"changeBackMarker\", this.$onChangeBackMarker);\r\n\t this.session.off(\"changeBreakpoint\", this.$onChangeBreakpoint);\r\n\t this.session.off(\"changeAnnotation\", this.$onChangeAnnotation);\r\n\t this.session.off(\"changeOverwrite\", this.$onCursorChange);\r\n\t this.session.off(\"changeScrollTop\", this.$onScrollTopChange);\r\n\t this.session.off(\"changeScrollLeft\", this.$onScrollLeftChange);\r\n\r\n\t var selection = this.session.getSelection();\r\n\t selection.off(\"changeCursor\", this.$onCursorChange);\r\n\t selection.off(\"changeSelection\", this.$onSelectionChange);\r\n\t }\r\n\r\n\t this.session = session;\r\n\t if (session) {\r\n\t this.$onDocumentChange = this.onDocumentChange.bind(this);\r\n\t session.on(\"change\", this.$onDocumentChange);\r\n\t this.renderer.setSession(session);\r\n\t \r\n\t this.$onChangeMode = this.onChangeMode.bind(this);\r\n\t session.on(\"changeMode\", this.$onChangeMode);\r\n\t \r\n\t this.$onTokenizerUpdate = this.onTokenizerUpdate.bind(this);\r\n\t session.on(\"tokenizerUpdate\", this.$onTokenizerUpdate);\r\n\t \r\n\t this.$onChangeTabSize = this.renderer.onChangeTabSize.bind(this.renderer);\r\n\t session.on(\"changeTabSize\", this.$onChangeTabSize);\r\n\t \r\n\t this.$onChangeWrapLimit = this.onChangeWrapLimit.bind(this);\r\n\t session.on(\"changeWrapLimit\", this.$onChangeWrapLimit);\r\n\t \r\n\t this.$onChangeWrapMode = this.onChangeWrapMode.bind(this);\r\n\t session.on(\"changeWrapMode\", this.$onChangeWrapMode);\r\n\t \r\n\t this.$onChangeFold = this.onChangeFold.bind(this);\r\n\t session.on(\"changeFold\", this.$onChangeFold);\r\n\t \r\n\t this.$onChangeFrontMarker = this.onChangeFrontMarker.bind(this);\r\n\t this.session.on(\"changeFrontMarker\", this.$onChangeFrontMarker);\r\n\t \r\n\t this.$onChangeBackMarker = this.onChangeBackMarker.bind(this);\r\n\t this.session.on(\"changeBackMarker\", this.$onChangeBackMarker);\r\n\t \r\n\t this.$onChangeBreakpoint = this.onChangeBreakpoint.bind(this);\r\n\t this.session.on(\"changeBreakpoint\", this.$onChangeBreakpoint);\r\n\t \r\n\t this.$onChangeAnnotation = this.onChangeAnnotation.bind(this);\r\n\t this.session.on(\"changeAnnotation\", this.$onChangeAnnotation);\r\n\t \r\n\t this.$onCursorChange = this.onCursorChange.bind(this);\r\n\t this.session.on(\"changeOverwrite\", this.$onCursorChange);\r\n\t \r\n\t this.$onScrollTopChange = this.onScrollTopChange.bind(this);\r\n\t this.session.on(\"changeScrollTop\", this.$onScrollTopChange);\r\n\t \r\n\t this.$onScrollLeftChange = this.onScrollLeftChange.bind(this);\r\n\t this.session.on(\"changeScrollLeft\", this.$onScrollLeftChange);\r\n\t \r\n\t this.selection = session.getSelection();\r\n\t this.selection.on(\"changeCursor\", this.$onCursorChange);\r\n\t \r\n\t this.$onSelectionChange = this.onSelectionChange.bind(this);\r\n\t this.selection.on(\"changeSelection\", this.$onSelectionChange);\r\n\t \r\n\t this.onChangeMode();\r\n\t \r\n\t this.$blockScrolling += 1;\r\n\t this.onCursorChange();\r\n\t this.$blockScrolling -= 1;\r\n\t \r\n\t this.onScrollTopChange();\r\n\t this.onScrollLeftChange();\r\n\t this.onSelectionChange();\r\n\t this.onChangeFrontMarker();\r\n\t this.onChangeBackMarker();\r\n\t this.onChangeBreakpoint();\r\n\t this.onChangeAnnotation();\r\n\t this.session.getUseWrapMode() && this.renderer.adjustWrapLimit();\r\n\t this.renderer.updateFull();\r\n\t } else {\r\n\t this.selection = null;\r\n\t this.renderer.setSession(session);\r\n\t }\r\n\r\n\t this._signal(\"changeSession\", {\r\n\t session: session,\r\n\t oldSession: oldSession\r\n\t });\r\n\t \r\n\t this.curOp = null;\r\n\t \r\n\t oldSession && oldSession._signal(\"changeEditor\", {oldEditor: this});\r\n\t session && session._signal(\"changeEditor\", {editor: this});\r\n\t };\r\n\t this.getSession = function() {\r\n\t return this.session;\r\n\t };\r\n\t this.setValue = function(val, cursorPos) {\r\n\t this.session.doc.setValue(val);\r\n\r\n\t if (!cursorPos)\r\n\t this.selectAll();\r\n\t else if (cursorPos == 1)\r\n\t this.navigateFileEnd();\r\n\t else if (cursorPos == -1)\r\n\t this.navigateFileStart();\r\n\r\n\t return val;\r\n\t };\r\n\t this.getValue = function() {\r\n\t return this.session.getValue();\r\n\t };\r\n\t this.getSelection = function() {\r\n\t return this.selection;\r\n\t };\r\n\t this.resize = function(force) {\r\n\t this.renderer.onResize(force);\r\n\t };\r\n\t this.setTheme = function(theme, cb) {\r\n\t this.renderer.setTheme(theme, cb);\r\n\t };\r\n\t this.getTheme = function() {\r\n\t return this.renderer.getTheme();\r\n\t };\r\n\t this.setStyle = function(style) {\r\n\t this.renderer.setStyle(style);\r\n\t };\r\n\t this.unsetStyle = function(style) {\r\n\t this.renderer.unsetStyle(style);\r\n\t };\r\n\t this.getFontSize = function () {\r\n\t return this.getOption(\"fontSize\") ||\r\n\t dom.computedStyle(this.container, \"fontSize\");\r\n\t };\r\n\t this.setFontSize = function(size) {\r\n\t this.setOption(\"fontSize\", size);\r\n\t };\r\n\r\n\t this.$highlightBrackets = function() {\r\n\t if (this.session.$bracketHighlight) {\r\n\t this.session.removeMarker(this.session.$bracketHighlight);\r\n\t this.session.$bracketHighlight = null;\r\n\t }\r\n\r\n\t if (this.$highlightPending) {\r\n\t return;\r\n\t }\r\n\t var self = this;\r\n\t this.$highlightPending = true;\r\n\t setTimeout(function() {\r\n\t self.$highlightPending = false;\r\n\t var session = self.session;\r\n\t if (!session || !session.bgTokenizer) return;\r\n\t var pos = session.findMatchingBracket(self.getCursorPosition());\r\n\t if (pos) {\r\n\t var range = new Range(pos.row, pos.column, pos.row, pos.column + 1);\r\n\t } else if (session.$mode.getMatching) {\r\n\t var range = session.$mode.getMatching(self.session);\r\n\t }\r\n\t if (range)\r\n\t session.$bracketHighlight = session.addMarker(range, \"ace_bracket\", \"text\");\r\n\t }, 50);\r\n\t };\r\n\t this.$highlightTags = function() {\r\n\t if (this.$highlightTagPending)\r\n\t return;\r\n\t var self = this;\r\n\t this.$highlightTagPending = true;\r\n\t setTimeout(function() {\r\n\t self.$highlightTagPending = false;\r\n\t \r\n\t var session = self.session;\r\n\t if (!session || !session.bgTokenizer) return;\r\n\t \r\n\t var pos = self.getCursorPosition();\r\n\t var iterator = new TokenIterator(self.session, pos.row, pos.column);\r\n\t var token = iterator.getCurrentToken();\r\n\t \r\n\t if (!token || !/\\b(?:tag-open|tag-name)/.test(token.type)) {\r\n\t session.removeMarker(session.$tagHighlight);\r\n\t session.$tagHighlight = null;\r\n\t return;\r\n\t }\r\n\t \r\n\t if (token.type.indexOf(\"tag-open\") != -1) {\r\n\t token = iterator.stepForward();\r\n\t if (!token)\r\n\t return;\r\n\t }\r\n\t \r\n\t var tag = token.value;\r\n\t var depth = 0;\r\n\t var prevToken = iterator.stepBackward();\r\n\t \r\n\t if (prevToken.value == '<'){\r\n\t do {\r\n\t prevToken = token;\r\n\t token = iterator.stepForward();\r\n\t \r\n\t if (token && token.value === tag && token.type.indexOf('tag-name') !== -1) {\r\n\t if (prevToken.value === '<'){\r\n\t depth++;\r\n\t } else if (prevToken.value === '= 0);\r\n\t } else {\r\n\t do {\r\n\t token = prevToken;\r\n\t prevToken = iterator.stepBackward();\r\n\t \r\n\t if (token && token.value === tag && token.type.indexOf('tag-name') !== -1) {\r\n\t if (prevToken.value === '<') {\r\n\t depth++;\r\n\t } else if (prevToken.value === ' 1))\r\n\t highlight = false;\r\n\t }\r\n\r\n\t if (session.$highlightLineMarker && !highlight) {\r\n\t session.removeMarker(session.$highlightLineMarker.id);\r\n\t session.$highlightLineMarker = null;\r\n\t } else if (!session.$highlightLineMarker && highlight) {\r\n\t var range = new Range(highlight.row, highlight.column, highlight.row, Infinity);\r\n\t range.id = session.addMarker(range, \"ace_active-line\", \"screenLine\");\r\n\t session.$highlightLineMarker = range;\r\n\t } else if (highlight) {\r\n\t session.$highlightLineMarker.start.row = highlight.row;\r\n\t session.$highlightLineMarker.end.row = highlight.row;\r\n\t session.$highlightLineMarker.start.column = highlight.column;\r\n\t session._signal(\"changeBackMarker\");\r\n\t }\r\n\t };\r\n\r\n\t this.onSelectionChange = function(e) {\r\n\t var session = this.session;\r\n\r\n\t if (session.$selectionMarker) {\r\n\t session.removeMarker(session.$selectionMarker);\r\n\t }\r\n\t session.$selectionMarker = null;\r\n\r\n\t if (!this.selection.isEmpty()) {\r\n\t var range = this.selection.getRange();\r\n\t var style = this.getSelectionStyle();\r\n\t session.$selectionMarker = session.addMarker(range, \"ace_selection\", style);\r\n\t } else {\r\n\t this.$updateHighlightActiveLine();\r\n\t }\r\n\r\n\t var re = this.$highlightSelectedWord && this.$getSelectionHighLightRegexp();\r\n\t this.session.highlight(re);\r\n\r\n\t this._signal(\"changeSelection\");\r\n\t };\r\n\r\n\t this.$getSelectionHighLightRegexp = function() {\r\n\t var session = this.session;\r\n\r\n\t var selection = this.getSelectionRange();\r\n\t if (selection.isEmpty() || selection.isMultiLine())\r\n\t return;\r\n\r\n\t var startOuter = selection.start.column - 1;\r\n\t var endOuter = selection.end.column + 1;\r\n\t var line = session.getLine(selection.start.row);\r\n\t var lineCols = line.length;\r\n\t var needle = line.substring(Math.max(startOuter, 0),\r\n\t Math.min(endOuter, lineCols));\r\n\t if ((startOuter >= 0 && /^[\\w\\d]/.test(needle)) ||\r\n\t (endOuter <= lineCols && /[\\w\\d]$/.test(needle)))\r\n\t return;\r\n\r\n\t needle = line.substring(selection.start.column, selection.end.column);\r\n\t if (!/^[\\w\\d]+$/.test(needle))\r\n\t return;\r\n\r\n\t var re = this.$search.$assembleRegExp({\r\n\t wholeWord: true,\r\n\t caseSensitive: true,\r\n\t needle: needle\r\n\t });\r\n\r\n\t return re;\r\n\t };\r\n\r\n\r\n\t this.onChangeFrontMarker = function() {\r\n\t this.renderer.updateFrontMarkers();\r\n\t };\r\n\r\n\t this.onChangeBackMarker = function() {\r\n\t this.renderer.updateBackMarkers();\r\n\t };\r\n\r\n\r\n\t this.onChangeBreakpoint = function() {\r\n\t this.renderer.updateBreakpoints();\r\n\t };\r\n\r\n\t this.onChangeAnnotation = function() {\r\n\t this.renderer.setAnnotations(this.session.getAnnotations());\r\n\t };\r\n\r\n\r\n\t this.onChangeMode = function(e) {\r\n\t this.renderer.updateText();\r\n\t this._emit(\"changeMode\", e);\r\n\t };\r\n\r\n\r\n\t this.onChangeWrapLimit = function() {\r\n\t this.renderer.updateFull();\r\n\t };\r\n\r\n\t this.onChangeWrapMode = function() {\r\n\t this.renderer.onResize(true);\r\n\t };\r\n\r\n\r\n\t this.onChangeFold = function() {\r\n\t this.$updateHighlightActiveLine();\r\n\t this.renderer.updateFull();\r\n\t };\r\n\t this.getSelectedText = function() {\r\n\t return this.session.getTextRange(this.getSelectionRange());\r\n\t };\r\n\t this.getCopyText = function() {\r\n\t var text = this.getSelectedText();\r\n\t this._signal(\"copy\", text);\r\n\t return text;\r\n\t };\r\n\t this.onCopy = function() {\r\n\t this.commands.exec(\"copy\", this);\r\n\t };\r\n\t this.onCut = function() {\r\n\t this.commands.exec(\"cut\", this);\r\n\t };\r\n\t this.onPaste = function(text, event) {\r\n\t var e = {text: text, event: event};\r\n\t this.commands.exec(\"paste\", this, e);\r\n\t };\r\n\t \r\n\t this.$handlePaste = function(e) {\r\n\t if (typeof e == \"string\") \r\n\t e = {text: e};\r\n\t this._signal(\"paste\", e);\r\n\t var text = e.text;\r\n\t if (!this.inMultiSelectMode || this.inVirtualSelectionMode) {\r\n\t this.insert(text);\r\n\t } else {\r\n\t var lines = text.split(/\\r\\n|\\r|\\n/);\r\n\t var ranges = this.selection.rangeList.ranges;\r\n\t \r\n\t if (lines.length > ranges.length || lines.length < 2 || !lines[1])\r\n\t return this.commands.exec(\"insertstring\", this, text);\r\n\t \r\n\t for (var i = ranges.length; i--;) {\r\n\t var range = ranges[i];\r\n\t if (!range.isEmpty())\r\n\t this.session.remove(range);\r\n\t \r\n\t this.session.insert(range.start, lines[i]);\r\n\t }\r\n\t }\r\n\t };\r\n\r\n\t this.execCommand = function(command, args) {\r\n\t return this.commands.exec(command, this, args);\r\n\t };\r\n\t this.insert = function(text, pasted) {\r\n\t var session = this.session;\r\n\t var mode = session.getMode();\r\n\t var cursor = this.getCursorPosition();\r\n\r\n\t if (this.getBehavioursEnabled() && !pasted) {\r\n\t var transform = mode.transformAction(session.getState(cursor.row), 'insertion', this, session, text);\r\n\t if (transform) {\r\n\t if (text !== transform.text) {\r\n\t this.session.mergeUndoDeltas = false;\r\n\t this.$mergeNextCommand = false;\r\n\t }\r\n\t text = transform.text;\r\n\r\n\t }\r\n\t }\r\n\t \r\n\t if (text == \"\\t\")\r\n\t text = this.session.getTabString();\r\n\t if (!this.selection.isEmpty()) {\r\n\t var range = this.getSelectionRange();\r\n\t cursor = this.session.remove(range);\r\n\t this.clearSelection();\r\n\t }\r\n\t else if (this.session.getOverwrite()) {\r\n\t var range = new Range.fromPoints(cursor, cursor);\r\n\t range.end.column += text.length;\r\n\t this.session.remove(range);\r\n\t }\r\n\r\n\t if (text == \"\\n\" || text == \"\\r\\n\") {\r\n\t var line = session.getLine(cursor.row);\r\n\t if (cursor.column > line.search(/\\S|$/)) {\r\n\t var d = line.substr(cursor.column).search(/\\S|$/);\r\n\t session.doc.removeInLine(cursor.row, cursor.column, cursor.column + d);\r\n\t }\r\n\t }\r\n\t this.clearSelection();\r\n\r\n\t var start = cursor.column;\r\n\t var lineState = session.getState(cursor.row);\r\n\t var line = session.getLine(cursor.row);\r\n\t var shouldOutdent = mode.checkOutdent(lineState, line, text);\r\n\t var end = session.insert(cursor, text);\r\n\r\n\t if (transform && transform.selection) {\r\n\t if (transform.selection.length == 2) { // Transform relative to the current column\r\n\t this.selection.setSelectionRange(\r\n\t new Range(cursor.row, start + transform.selection[0],\r\n\t cursor.row, start + transform.selection[1]));\r\n\t } else { // Transform relative to the current row.\r\n\t this.selection.setSelectionRange(\r\n\t new Range(cursor.row + transform.selection[0],\r\n\t transform.selection[1],\r\n\t cursor.row + transform.selection[2],\r\n\t transform.selection[3]));\r\n\t }\r\n\t }\r\n\r\n\t if (session.getDocument().isNewLine(text)) {\r\n\t var lineIndent = mode.getNextLineIndent(lineState, line.slice(0, cursor.column), session.getTabString());\r\n\r\n\t session.insert({row: cursor.row+1, column: 0}, lineIndent);\r\n\t }\r\n\t if (shouldOutdent)\r\n\t mode.autoOutdent(lineState, session, cursor.row);\r\n\t };\r\n\r\n\t this.onTextInput = function(text) {\r\n\t this.keyBinding.onTextInput(text);\r\n\t };\r\n\r\n\t this.onCommandKey = function(e, hashId, keyCode) {\r\n\t this.keyBinding.onCommandKey(e, hashId, keyCode);\r\n\t };\r\n\t this.setOverwrite = function(overwrite) {\r\n\t this.session.setOverwrite(overwrite);\r\n\t };\r\n\t this.getOverwrite = function() {\r\n\t return this.session.getOverwrite();\r\n\t };\r\n\t this.toggleOverwrite = function() {\r\n\t this.session.toggleOverwrite();\r\n\t };\r\n\t this.setScrollSpeed = function(speed) {\r\n\t this.setOption(\"scrollSpeed\", speed);\r\n\t };\r\n\t this.getScrollSpeed = function() {\r\n\t return this.getOption(\"scrollSpeed\");\r\n\t };\r\n\t this.setDragDelay = function(dragDelay) {\r\n\t this.setOption(\"dragDelay\", dragDelay);\r\n\t };\r\n\t this.getDragDelay = function() {\r\n\t return this.getOption(\"dragDelay\");\r\n\t };\r\n\t this.setSelectionStyle = function(val) {\r\n\t this.setOption(\"selectionStyle\", val);\r\n\t };\r\n\t this.getSelectionStyle = function() {\r\n\t return this.getOption(\"selectionStyle\");\r\n\t };\r\n\t this.setHighlightActiveLine = function(shouldHighlight) {\r\n\t this.setOption(\"highlightActiveLine\", shouldHighlight);\r\n\t };\r\n\t this.getHighlightActiveLine = function() {\r\n\t return this.getOption(\"highlightActiveLine\");\r\n\t };\r\n\t this.setHighlightGutterLine = function(shouldHighlight) {\r\n\t this.setOption(\"highlightGutterLine\", shouldHighlight);\r\n\t };\r\n\r\n\t this.getHighlightGutterLine = function() {\r\n\t return this.getOption(\"highlightGutterLine\");\r\n\t };\r\n\t this.setHighlightSelectedWord = function(shouldHighlight) {\r\n\t this.setOption(\"highlightSelectedWord\", shouldHighlight);\r\n\t };\r\n\t this.getHighlightSelectedWord = function() {\r\n\t return this.$highlightSelectedWord;\r\n\t };\r\n\r\n\t this.setAnimatedScroll = function(shouldAnimate){\r\n\t this.renderer.setAnimatedScroll(shouldAnimate);\r\n\t };\r\n\r\n\t this.getAnimatedScroll = function(){\r\n\t return this.renderer.getAnimatedScroll();\r\n\t };\r\n\t this.setShowInvisibles = function(showInvisibles) {\r\n\t this.renderer.setShowInvisibles(showInvisibles);\r\n\t };\r\n\t this.getShowInvisibles = function() {\r\n\t return this.renderer.getShowInvisibles();\r\n\t };\r\n\r\n\t this.setDisplayIndentGuides = function(display) {\r\n\t this.renderer.setDisplayIndentGuides(display);\r\n\t };\r\n\r\n\t this.getDisplayIndentGuides = function() {\r\n\t return this.renderer.getDisplayIndentGuides();\r\n\t };\r\n\t this.setShowPrintMargin = function(showPrintMargin) {\r\n\t this.renderer.setShowPrintMargin(showPrintMargin);\r\n\t };\r\n\t this.getShowPrintMargin = function() {\r\n\t return this.renderer.getShowPrintMargin();\r\n\t };\r\n\t this.setPrintMarginColumn = function(showPrintMargin) {\r\n\t this.renderer.setPrintMarginColumn(showPrintMargin);\r\n\t };\r\n\t this.getPrintMarginColumn = function() {\r\n\t return this.renderer.getPrintMarginColumn();\r\n\t };\r\n\t this.setReadOnly = function(readOnly) {\r\n\t this.setOption(\"readOnly\", readOnly);\r\n\t };\r\n\t this.getReadOnly = function() {\r\n\t return this.getOption(\"readOnly\");\r\n\t };\r\n\t this.setBehavioursEnabled = function (enabled) {\r\n\t this.setOption(\"behavioursEnabled\", enabled);\r\n\t };\r\n\t this.getBehavioursEnabled = function () {\r\n\t return this.getOption(\"behavioursEnabled\");\r\n\t };\r\n\t this.setWrapBehavioursEnabled = function (enabled) {\r\n\t this.setOption(\"wrapBehavioursEnabled\", enabled);\r\n\t };\r\n\t this.getWrapBehavioursEnabled = function () {\r\n\t return this.getOption(\"wrapBehavioursEnabled\");\r\n\t };\r\n\t this.setShowFoldWidgets = function(show) {\r\n\t this.setOption(\"showFoldWidgets\", show);\r\n\r\n\t };\r\n\t this.getShowFoldWidgets = function() {\r\n\t return this.getOption(\"showFoldWidgets\");\r\n\t };\r\n\r\n\t this.setFadeFoldWidgets = function(fade) {\r\n\t this.setOption(\"fadeFoldWidgets\", fade);\r\n\t };\r\n\r\n\t this.getFadeFoldWidgets = function() {\r\n\t return this.getOption(\"fadeFoldWidgets\");\r\n\t };\r\n\t this.remove = function(dir) {\r\n\t if (this.selection.isEmpty()){\r\n\t if (dir == \"left\")\r\n\t this.selection.selectLeft();\r\n\t else\r\n\t this.selection.selectRight();\r\n\t }\r\n\r\n\t var range = this.getSelectionRange();\r\n\t if (this.getBehavioursEnabled()) {\r\n\t var session = this.session;\r\n\t var state = session.getState(range.start.row);\r\n\t var new_range = session.getMode().transformAction(state, 'deletion', this, session, range);\r\n\r\n\t if (range.end.column === 0) {\r\n\t var text = session.getTextRange(range);\r\n\t if (text[text.length - 1] == \"\\n\") {\r\n\t var line = session.getLine(range.end.row);\r\n\t if (/^\\s+$/.test(line)) {\r\n\t range.end.column = line.length;\r\n\t }\r\n\t }\r\n\t }\r\n\t if (new_range)\r\n\t range = new_range;\r\n\t }\r\n\r\n\t this.session.remove(range);\r\n\t this.clearSelection();\r\n\t };\r\n\t this.removeWordRight = function() {\r\n\t if (this.selection.isEmpty())\r\n\t this.selection.selectWordRight();\r\n\r\n\t this.session.remove(this.getSelectionRange());\r\n\t this.clearSelection();\r\n\t };\r\n\t this.removeWordLeft = function() {\r\n\t if (this.selection.isEmpty())\r\n\t this.selection.selectWordLeft();\r\n\r\n\t this.session.remove(this.getSelectionRange());\r\n\t this.clearSelection();\r\n\t };\r\n\t this.removeToLineStart = function() {\r\n\t if (this.selection.isEmpty())\r\n\t this.selection.selectLineStart();\r\n\r\n\t this.session.remove(this.getSelectionRange());\r\n\t this.clearSelection();\r\n\t };\r\n\t this.removeToLineEnd = function() {\r\n\t if (this.selection.isEmpty())\r\n\t this.selection.selectLineEnd();\r\n\r\n\t var range = this.getSelectionRange();\r\n\t if (range.start.column == range.end.column && range.start.row == range.end.row) {\r\n\t range.end.column = 0;\r\n\t range.end.row++;\r\n\t }\r\n\r\n\t this.session.remove(range);\r\n\t this.clearSelection();\r\n\t };\r\n\t this.splitLine = function() {\r\n\t if (!this.selection.isEmpty()) {\r\n\t this.session.remove(this.getSelectionRange());\r\n\t this.clearSelection();\r\n\t }\r\n\r\n\t var cursor = this.getCursorPosition();\r\n\t this.insert(\"\\n\");\r\n\t this.moveCursorToPosition(cursor);\r\n\t };\r\n\t this.transposeLetters = function() {\r\n\t if (!this.selection.isEmpty()) {\r\n\t return;\r\n\t }\r\n\r\n\t var cursor = this.getCursorPosition();\r\n\t var column = cursor.column;\r\n\t if (column === 0)\r\n\t return;\r\n\r\n\t var line = this.session.getLine(cursor.row);\r\n\t var swap, range;\r\n\t if (column < line.length) {\r\n\t swap = line.charAt(column) + line.charAt(column-1);\r\n\t range = new Range(cursor.row, column-1, cursor.row, column+1);\r\n\t }\r\n\t else {\r\n\t swap = line.charAt(column-1) + line.charAt(column-2);\r\n\t range = new Range(cursor.row, column-2, cursor.row, column);\r\n\t }\r\n\t this.session.replace(range, swap);\r\n\t };\r\n\t this.toLowerCase = function() {\r\n\t var originalRange = this.getSelectionRange();\r\n\t if (this.selection.isEmpty()) {\r\n\t this.selection.selectWord();\r\n\t }\r\n\r\n\t var range = this.getSelectionRange();\r\n\t var text = this.session.getTextRange(range);\r\n\t this.session.replace(range, text.toLowerCase());\r\n\t this.selection.setSelectionRange(originalRange);\r\n\t };\r\n\t this.toUpperCase = function() {\r\n\t var originalRange = this.getSelectionRange();\r\n\t if (this.selection.isEmpty()) {\r\n\t this.selection.selectWord();\r\n\t }\r\n\r\n\t var range = this.getSelectionRange();\r\n\t var text = this.session.getTextRange(range);\r\n\t this.session.replace(range, text.toUpperCase());\r\n\t this.selection.setSelectionRange(originalRange);\r\n\t };\r\n\t this.indent = function() {\r\n\t var session = this.session;\r\n\t var range = this.getSelectionRange();\r\n\r\n\t if (range.start.row < range.end.row) {\r\n\t var rows = this.$getSelectedRows();\r\n\t session.indentRows(rows.first, rows.last, \"\\t\");\r\n\t return;\r\n\t } else if (range.start.column < range.end.column) {\r\n\t var text = session.getTextRange(range);\r\n\t if (!/^\\s+$/.test(text)) {\r\n\t var rows = this.$getSelectedRows();\r\n\t session.indentRows(rows.first, rows.last, \"\\t\");\r\n\t return;\r\n\t }\r\n\t }\r\n\t \r\n\t var line = session.getLine(range.start.row);\r\n\t var position = range.start;\r\n\t var size = session.getTabSize();\r\n\t var column = session.documentToScreenColumn(position.row, position.column);\r\n\r\n\t if (this.session.getUseSoftTabs()) {\r\n\t var count = (size - column % size);\r\n\t var indentString = lang.stringRepeat(\" \", count);\r\n\t } else {\r\n\t var count = column % size;\r\n\t while (line[range.start.column] == \" \" && count) {\r\n\t range.start.column--;\r\n\t count--;\r\n\t }\r\n\t this.selection.setSelectionRange(range);\r\n\t indentString = \"\\t\";\r\n\t }\r\n\t return this.insert(indentString);\r\n\t };\r\n\t this.blockIndent = function() {\r\n\t var rows = this.$getSelectedRows();\r\n\t this.session.indentRows(rows.first, rows.last, \"\\t\");\r\n\t };\r\n\t this.blockOutdent = function() {\r\n\t var selection = this.session.getSelection();\r\n\t this.session.outdentRows(selection.getRange());\r\n\t };\r\n\t this.sortLines = function() {\r\n\t var rows = this.$getSelectedRows();\r\n\t var session = this.session;\r\n\r\n\t var lines = [];\r\n\t for (i = rows.first; i <= rows.last; i++)\r\n\t lines.push(session.getLine(i));\r\n\r\n\t lines.sort(function(a, b) {\r\n\t if (a.toLowerCase() < b.toLowerCase()) return -1;\r\n\t if (a.toLowerCase() > b.toLowerCase()) return 1;\r\n\t return 0;\r\n\t });\r\n\r\n\t var deleteRange = new Range(0, 0, 0, 0);\r\n\t for (var i = rows.first; i <= rows.last; i++) {\r\n\t var line = session.getLine(i);\r\n\t deleteRange.start.row = i;\r\n\t deleteRange.end.row = i;\r\n\t deleteRange.end.column = line.length;\r\n\t session.replace(deleteRange, lines[i-rows.first]);\r\n\t }\r\n\t };\r\n\t this.toggleCommentLines = function() {\r\n\t var state = this.session.getState(this.getCursorPosition().row);\r\n\t var rows = this.$getSelectedRows();\r\n\t this.session.getMode().toggleCommentLines(state, this.session, rows.first, rows.last);\r\n\t };\r\n\r\n\t this.toggleBlockComment = function() {\r\n\t var cursor = this.getCursorPosition();\r\n\t var state = this.session.getState(cursor.row);\r\n\t var range = this.getSelectionRange();\r\n\t this.session.getMode().toggleBlockComment(state, this.session, range, cursor);\r\n\t };\r\n\t this.getNumberAt = function(row, column) {\r\n\t var _numberRx = /[\\-]?[0-9]+(?:\\.[0-9]+)?/g;\r\n\t _numberRx.lastIndex = 0;\r\n\r\n\t var s = this.session.getLine(row);\r\n\t while (_numberRx.lastIndex < column) {\r\n\t var m = _numberRx.exec(s);\r\n\t if(m.index <= column && m.index+m[0].length >= column){\r\n\t var number = {\r\n\t value: m[0],\r\n\t start: m.index,\r\n\t end: m.index+m[0].length\r\n\t };\r\n\t return number;\r\n\t }\r\n\t }\r\n\t return null;\r\n\t };\r\n\t this.modifyNumber = function(amount) {\r\n\t var row = this.selection.getCursor().row;\r\n\t var column = this.selection.getCursor().column;\r\n\t var charRange = new Range(row, column-1, row, column);\r\n\r\n\t var c = this.session.getTextRange(charRange);\r\n\t if (!isNaN(parseFloat(c)) && isFinite(c)) {\r\n\t var nr = this.getNumberAt(row, column);\r\n\t if (nr) {\r\n\t var fp = nr.value.indexOf(\".\") >= 0 ? nr.start + nr.value.indexOf(\".\") + 1 : nr.end;\r\n\t var decimals = nr.start + nr.value.length - fp;\r\n\r\n\t var t = parseFloat(nr.value);\r\n\t t *= Math.pow(10, decimals);\r\n\r\n\r\n\t if(fp !== nr.end && column < fp){\r\n\t amount *= Math.pow(10, nr.end - column - 1);\r\n\t } else {\r\n\t amount *= Math.pow(10, nr.end - column);\r\n\t }\r\n\r\n\t t += amount;\r\n\t t /= Math.pow(10, decimals);\r\n\t var nnr = t.toFixed(decimals);\r\n\t var replaceRange = new Range(row, nr.start, row, nr.end);\r\n\t this.session.replace(replaceRange, nnr);\r\n\t this.moveCursorTo(row, Math.max(nr.start +1, column + nnr.length - nr.value.length));\r\n\r\n\t }\r\n\t }\r\n\t };\r\n\t this.removeLines = function() {\r\n\t var rows = this.$getSelectedRows();\r\n\t this.session.removeFullLines(rows.first, rows.last);\r\n\t this.clearSelection();\r\n\t };\r\n\r\n\t this.duplicateSelection = function() {\r\n\t var sel = this.selection;\r\n\t var doc = this.session;\r\n\t var range = sel.getRange();\r\n\t var reverse = sel.isBackwards();\r\n\t if (range.isEmpty()) {\r\n\t var row = range.start.row;\r\n\t doc.duplicateLines(row, row);\r\n\t } else {\r\n\t var point = reverse ? range.start : range.end;\r\n\t var endPoint = doc.insert(point, doc.getTextRange(range), false);\r\n\t range.start = point;\r\n\t range.end = endPoint;\r\n\r\n\t sel.setSelectionRange(range, reverse);\r\n\t }\r\n\t };\r\n\t this.moveLinesDown = function() {\r\n\t this.$moveLines(1, false);\r\n\t };\r\n\t this.moveLinesUp = function() {\r\n\t this.$moveLines(-1, false);\r\n\t };\r\n\t this.moveText = function(range, toPosition, copy) {\r\n\t return this.session.moveText(range, toPosition, copy);\r\n\t };\r\n\t this.copyLinesUp = function() {\r\n\t this.$moveLines(-1, true);\r\n\t };\r\n\t this.copyLinesDown = function() {\r\n\t this.$moveLines(1, true);\r\n\t };\r\n\t this.$moveLines = function(dir, copy) {\r\n\t var rows, moved;\r\n\t var selection = this.selection;\r\n\t if (!selection.inMultiSelectMode || this.inVirtualSelectionMode) {\r\n\t var range = selection.toOrientedRange();\r\n\t rows = this.$getSelectedRows(range);\r\n\t moved = this.session.$moveLines(rows.first, rows.last, copy ? 0 : dir);\r\n\t if (copy && dir == -1) moved = 0;\r\n\t range.moveBy(moved, 0);\r\n\t selection.fromOrientedRange(range);\r\n\t } else {\r\n\t var ranges = selection.rangeList.ranges;\r\n\t selection.rangeList.detach(this.session);\r\n\t this.inVirtualSelectionMode = true;\r\n\t \r\n\t var diff = 0;\r\n\t var totalDiff = 0;\r\n\t var l = ranges.length;\r\n\t for (var i = 0; i < l; i++) {\r\n\t var rangeIndex = i;\r\n\t ranges[i].moveBy(diff, 0);\r\n\t rows = this.$getSelectedRows(ranges[i]);\r\n\t var first = rows.first;\r\n\t var last = rows.last;\r\n\t while (++i < l) {\r\n\t if (totalDiff) ranges[i].moveBy(totalDiff, 0);\r\n\t var subRows = this.$getSelectedRows(ranges[i]);\r\n\t if (copy && subRows.first != last)\r\n\t break;\r\n\t else if (!copy && subRows.first > last + 1)\r\n\t break;\r\n\t last = subRows.last;\r\n\t }\r\n\t i--;\r\n\t diff = this.session.$moveLines(first, last, copy ? 0 : dir);\r\n\t if (copy && dir == -1) rangeIndex = i + 1;\r\n\t while (rangeIndex <= i) {\r\n\t ranges[rangeIndex].moveBy(diff, 0);\r\n\t rangeIndex++;\r\n\t }\r\n\t if (!copy) diff = 0;\r\n\t totalDiff += diff;\r\n\t }\r\n\t \r\n\t selection.fromOrientedRange(selection.ranges[0]);\r\n\t selection.rangeList.attach(this.session);\r\n\t this.inVirtualSelectionMode = false;\r\n\t }\r\n\t };\r\n\t this.$getSelectedRows = function(range) {\r\n\t range = (range || this.getSelectionRange()).collapseRows();\r\n\r\n\t return {\r\n\t first: this.session.getRowFoldStart(range.start.row),\r\n\t last: this.session.getRowFoldEnd(range.end.row)\r\n\t };\r\n\t };\r\n\r\n\t this.onCompositionStart = function(text) {\r\n\t this.renderer.showComposition(this.getCursorPosition());\r\n\t };\r\n\r\n\t this.onCompositionUpdate = function(text) {\r\n\t this.renderer.setCompositionText(text);\r\n\t };\r\n\r\n\t this.onCompositionEnd = function() {\r\n\t this.renderer.hideComposition();\r\n\t };\r\n\t this.getFirstVisibleRow = function() {\r\n\t return this.renderer.getFirstVisibleRow();\r\n\t };\r\n\t this.getLastVisibleRow = function() {\r\n\t return this.renderer.getLastVisibleRow();\r\n\t };\r\n\t this.isRowVisible = function(row) {\r\n\t return (row >= this.getFirstVisibleRow() && row <= this.getLastVisibleRow());\r\n\t };\r\n\t this.isRowFullyVisible = function(row) {\r\n\t return (row >= this.renderer.getFirstFullyVisibleRow() && row <= this.renderer.getLastFullyVisibleRow());\r\n\t };\r\n\t this.$getVisibleRowCount = function() {\r\n\t return this.renderer.getScrollBottomRow() - this.renderer.getScrollTopRow() + 1;\r\n\t };\r\n\r\n\t this.$moveByPage = function(dir, select) {\r\n\t var renderer = this.renderer;\r\n\t var config = this.renderer.layerConfig;\r\n\t var rows = dir * Math.floor(config.height / config.lineHeight);\r\n\r\n\t this.$blockScrolling++;\r\n\t if (select === true) {\r\n\t this.selection.$moveSelection(function(){\r\n\t this.moveCursorBy(rows, 0);\r\n\t });\r\n\t } else if (select === false) {\r\n\t this.selection.moveCursorBy(rows, 0);\r\n\t this.selection.clearSelection();\r\n\t }\r\n\t this.$blockScrolling--;\r\n\r\n\t var scrollTop = renderer.scrollTop;\r\n\r\n\t renderer.scrollBy(0, rows * config.lineHeight);\r\n\t if (select != null)\r\n\t renderer.scrollCursorIntoView(null, 0.5);\r\n\r\n\t renderer.animateScrolling(scrollTop);\r\n\t };\r\n\t this.selectPageDown = function() {\r\n\t this.$moveByPage(1, true);\r\n\t };\r\n\t this.selectPageUp = function() {\r\n\t this.$moveByPage(-1, true);\r\n\t };\r\n\t this.gotoPageDown = function() {\r\n\t this.$moveByPage(1, false);\r\n\t };\r\n\t this.gotoPageUp = function() {\r\n\t this.$moveByPage(-1, false);\r\n\t };\r\n\t this.scrollPageDown = function() {\r\n\t this.$moveByPage(1);\r\n\t };\r\n\t this.scrollPageUp = function() {\r\n\t this.$moveByPage(-1);\r\n\t };\r\n\t this.scrollToRow = function(row) {\r\n\t this.renderer.scrollToRow(row);\r\n\t };\r\n\t this.scrollToLine = function(line, center, animate, callback) {\r\n\t this.renderer.scrollToLine(line, center, animate, callback);\r\n\t };\r\n\t this.centerSelection = function() {\r\n\t var range = this.getSelectionRange();\r\n\t var pos = {\r\n\t row: Math.floor(range.start.row + (range.end.row - range.start.row) / 2),\r\n\t column: Math.floor(range.start.column + (range.end.column - range.start.column) / 2)\r\n\t };\r\n\t this.renderer.alignCursor(pos, 0.5);\r\n\t };\r\n\t this.getCursorPosition = function() {\r\n\t return this.selection.getCursor();\r\n\t };\r\n\t this.getCursorPositionScreen = function() {\r\n\t return this.session.documentToScreenPosition(this.getCursorPosition());\r\n\t };\r\n\t this.getSelectionRange = function() {\r\n\t return this.selection.getRange();\r\n\t };\r\n\t this.selectAll = function() {\r\n\t this.$blockScrolling += 1;\r\n\t this.selection.selectAll();\r\n\t this.$blockScrolling -= 1;\r\n\t };\r\n\t this.clearSelection = function() {\r\n\t this.selection.clearSelection();\r\n\t };\r\n\t this.moveCursorTo = function(row, column) {\r\n\t this.selection.moveCursorTo(row, column);\r\n\t };\r\n\t this.moveCursorToPosition = function(pos) {\r\n\t this.selection.moveCursorToPosition(pos);\r\n\t };\r\n\t this.jumpToMatching = function(select, expand) {\r\n\t var cursor = this.getCursorPosition();\r\n\t var iterator = new TokenIterator(this.session, cursor.row, cursor.column);\r\n\t var prevToken = iterator.getCurrentToken();\r\n\t var token = prevToken || iterator.stepForward();\r\n\r\n\t if (!token) return;\r\n\t var matchType;\r\n\t var found = false;\r\n\t var depth = {};\r\n\t var i = cursor.column - token.start;\r\n\t var bracketType;\r\n\t var brackets = {\r\n\t \")\": \"(\",\r\n\t \"(\": \"(\",\r\n\t \"]\": \"[\",\r\n\t \"[\": \"[\",\r\n\t \"{\": \"{\",\r\n\t \"}\": \"{\"\r\n\t };\r\n\t \r\n\t do {\r\n\t if (token.value.match(/[{}()\\[\\]]/g)) {\r\n\t for (; i < token.value.length && !found; i++) {\r\n\t if (!brackets[token.value[i]]) {\r\n\t continue;\r\n\t }\r\n\r\n\t bracketType = brackets[token.value[i]] + '.' + token.type.replace(\"rparen\", \"lparen\");\r\n\r\n\t if (isNaN(depth[bracketType])) {\r\n\t depth[bracketType] = 0;\r\n\t }\r\n\r\n\t switch (token.value[i]) {\r\n\t case '(':\r\n\t case '[':\r\n\t case '{':\r\n\t depth[bracketType]++;\r\n\t break;\r\n\t case ')':\r\n\t case ']':\r\n\t case '}':\r\n\t depth[bracketType]--;\r\n\r\n\t if (depth[bracketType] === -1) {\r\n\t matchType = 'bracket';\r\n\t found = true;\r\n\t }\r\n\t break;\r\n\t }\r\n\t }\r\n\t }\r\n\t else if (token && token.type.indexOf('tag-name') !== -1) {\r\n\t if (isNaN(depth[token.value])) {\r\n\t depth[token.value] = 0;\r\n\t }\r\n\t \r\n\t if (prevToken.value === '<') {\r\n\t depth[token.value]++;\r\n\t }\r\n\t else if (prevToken.value === '= 0; --i) {\r\n\t if(this.$tryReplace(ranges[i], replacement)) {\r\n\t replaced++;\r\n\t }\r\n\t }\r\n\r\n\t this.selection.setSelectionRange(selection);\r\n\t this.$blockScrolling -= 1;\r\n\r\n\t return replaced;\r\n\t };\r\n\r\n\t this.$tryReplace = function(range, replacement) {\r\n\t var input = this.session.getTextRange(range);\r\n\t replacement = this.$search.replace(input, replacement);\r\n\t if (replacement !== null) {\r\n\t range.end = this.session.replace(range, replacement);\r\n\t return range;\r\n\t } else {\r\n\t return null;\r\n\t }\r\n\t };\r\n\t this.getLastSearchOptions = function() {\r\n\t return this.$search.getOptions();\r\n\t };\r\n\t this.find = function(needle, options, animate) {\r\n\t if (!options)\r\n\t options = {};\r\n\r\n\t if (typeof needle == \"string\" || needle instanceof RegExp)\r\n\t options.needle = needle;\r\n\t else if (typeof needle == \"object\")\r\n\t oop.mixin(options, needle);\r\n\r\n\t var range = this.selection.getRange();\r\n\t if (options.needle == null) {\r\n\t needle = this.session.getTextRange(range)\r\n\t || this.$search.$options.needle;\r\n\t if (!needle) {\r\n\t range = this.session.getWordRange(range.start.row, range.start.column);\r\n\t needle = this.session.getTextRange(range);\r\n\t }\r\n\t this.$search.set({needle: needle});\r\n\t }\r\n\r\n\t this.$search.set(options);\r\n\t if (!options.start)\r\n\t this.$search.set({start: range});\r\n\r\n\t var newRange = this.$search.find(this.session);\r\n\t if (options.preventScroll)\r\n\t return newRange;\r\n\t if (newRange) {\r\n\t this.revealRange(newRange, animate);\r\n\t return newRange;\r\n\t }\r\n\t if (options.backwards)\r\n\t range.start = range.end;\r\n\t else\r\n\t range.end = range.start;\r\n\t this.selection.setRange(range);\r\n\t };\r\n\t this.findNext = function(options, animate) {\r\n\t this.find({skipCurrent: true, backwards: false}, options, animate);\r\n\t };\r\n\t this.findPrevious = function(options, animate) {\r\n\t this.find(options, {skipCurrent: true, backwards: true}, animate);\r\n\t };\r\n\r\n\t this.revealRange = function(range, animate) {\r\n\t this.$blockScrolling += 1;\r\n\t this.session.unfold(range);\r\n\t this.selection.setSelectionRange(range);\r\n\t this.$blockScrolling -= 1;\r\n\r\n\t var scrollTop = this.renderer.scrollTop;\r\n\t this.renderer.scrollSelectionIntoView(range.start, range.end, 0.5);\r\n\t if (animate !== false)\r\n\t this.renderer.animateScrolling(scrollTop);\r\n\t };\r\n\t this.undo = function() {\r\n\t this.$blockScrolling++;\r\n\t this.session.getUndoManager().undo();\r\n\t this.$blockScrolling--;\r\n\t this.renderer.scrollCursorIntoView(null, 0.5);\r\n\t };\r\n\t this.redo = function() {\r\n\t this.$blockScrolling++;\r\n\t this.session.getUndoManager().redo();\r\n\t this.$blockScrolling--;\r\n\t this.renderer.scrollCursorIntoView(null, 0.5);\r\n\t };\r\n\t this.destroy = function() {\r\n\t this.renderer.destroy();\r\n\t this._signal(\"destroy\", this);\r\n\t if (this.session) {\r\n\t this.session.destroy();\r\n\t }\r\n\t };\r\n\t this.setAutoScrollEditorIntoView = function(enable) {\r\n\t if (!enable)\r\n\t return;\r\n\t var rect;\r\n\t var self = this;\r\n\t var shouldScroll = false;\r\n\t if (!this.$scrollAnchor)\r\n\t this.$scrollAnchor = document.createElement(\"div\");\r\n\t var scrollAnchor = this.$scrollAnchor;\r\n\t scrollAnchor.style.cssText = \"position:absolute\";\r\n\t this.container.insertBefore(scrollAnchor, this.container.firstChild);\r\n\t var onChangeSelection = this.on(\"changeSelection\", function() {\r\n\t shouldScroll = true;\r\n\t });\r\n\t var onBeforeRender = this.renderer.on(\"beforeRender\", function() {\r\n\t if (shouldScroll)\r\n\t rect = self.renderer.container.getBoundingClientRect();\r\n\t });\r\n\t var onAfterRender = this.renderer.on(\"afterRender\", function() {\r\n\t if (shouldScroll && rect && (self.isFocused()\r\n\t || self.searchBox && self.searchBox.isFocused())\r\n\t ) {\r\n\t var renderer = self.renderer;\r\n\t var pos = renderer.$cursorLayer.$pixelPos;\r\n\t var config = renderer.layerConfig;\r\n\t var top = pos.top - config.offset;\r\n\t if (pos.top >= 0 && top + rect.top < 0) {\r\n\t shouldScroll = true;\r\n\t } else if (pos.top < config.height &&\r\n\t pos.top + rect.top + config.lineHeight > window.innerHeight) {\r\n\t shouldScroll = false;\r\n\t } else {\r\n\t shouldScroll = null;\r\n\t }\r\n\t if (shouldScroll != null) {\r\n\t scrollAnchor.style.top = top + \"px\";\r\n\t scrollAnchor.style.left = pos.left + \"px\";\r\n\t scrollAnchor.style.height = config.lineHeight + \"px\";\r\n\t scrollAnchor.scrollIntoView(shouldScroll);\r\n\t }\r\n\t shouldScroll = rect = null;\r\n\t }\r\n\t });\r\n\t this.setAutoScrollEditorIntoView = function(enable) {\r\n\t if (enable)\r\n\t return;\r\n\t delete this.setAutoScrollEditorIntoView;\r\n\t this.off(\"changeSelection\", onChangeSelection);\r\n\t this.renderer.off(\"afterRender\", onAfterRender);\r\n\t this.renderer.off(\"beforeRender\", onBeforeRender);\r\n\t };\r\n\t };\r\n\r\n\r\n\t this.$resetCursorStyle = function() {\r\n\t var style = this.$cursorStyle || \"ace\";\r\n\t var cursorLayer = this.renderer.$cursorLayer;\r\n\t if (!cursorLayer)\r\n\t return;\r\n\t cursorLayer.setSmoothBlinking(/smooth/.test(style));\r\n\t cursorLayer.isBlinking = !this.$readOnly && style != \"wide\";\r\n\t dom.setCssClass(cursorLayer.element, \"ace_slim-cursors\", /slim/.test(style));\r\n\t };\r\n\r\n\t}).call(Editor.prototype);\r\n\r\n\r\n\r\n\tconfig.defineOptions(Editor.prototype, \"editor\", {\r\n\t selectionStyle: {\r\n\t set: function(style) {\r\n\t this.onSelectionChange();\r\n\t this._signal(\"changeSelectionStyle\", {data: style});\r\n\t },\r\n\t initialValue: \"line\"\r\n\t },\r\n\t highlightActiveLine: {\r\n\t set: function() {this.$updateHighlightActiveLine();},\r\n\t initialValue: true\r\n\t },\r\n\t highlightSelectedWord: {\r\n\t set: function(shouldHighlight) {this.$onSelectionChange();},\r\n\t initialValue: true\r\n\t },\r\n\t readOnly: {\r\n\t set: function(readOnly) {\r\n\t this.$resetCursorStyle(); \r\n\t },\r\n\t initialValue: false\r\n\t },\r\n\t cursorStyle: {\r\n\t set: function(val) { this.$resetCursorStyle(); },\r\n\t values: [\"ace\", \"slim\", \"smooth\", \"wide\"],\r\n\t initialValue: \"ace\"\r\n\t },\r\n\t mergeUndoDeltas: {\r\n\t values: [false, true, \"always\"],\r\n\t initialValue: true\r\n\t },\r\n\t behavioursEnabled: {initialValue: true},\r\n\t wrapBehavioursEnabled: {initialValue: true},\r\n\t autoScrollEditorIntoView: {\r\n\t set: function(val) {this.setAutoScrollEditorIntoView(val)}\r\n\t },\r\n\t keyboardHandler: {\r\n\t set: function(val) { this.setKeyboardHandler(val); },\r\n\t get: function() { return this.keybindingId; },\r\n\t handlesSet: true\r\n\t },\r\n\r\n\t hScrollBarAlwaysVisible: \"renderer\",\r\n\t vScrollBarAlwaysVisible: \"renderer\",\r\n\t highlightGutterLine: \"renderer\",\r\n\t animatedScroll: \"renderer\",\r\n\t showInvisibles: \"renderer\",\r\n\t showPrintMargin: \"renderer\",\r\n\t printMarginColumn: \"renderer\",\r\n\t printMargin: \"renderer\",\r\n\t fadeFoldWidgets: \"renderer\",\r\n\t showFoldWidgets: \"renderer\",\r\n\t showLineNumbers: \"renderer\",\r\n\t showGutter: \"renderer\",\r\n\t displayIndentGuides: \"renderer\",\r\n\t fontSize: \"renderer\",\r\n\t fontFamily: \"renderer\",\r\n\t maxLines: \"renderer\",\r\n\t minLines: \"renderer\",\r\n\t scrollPastEnd: \"renderer\",\r\n\t fixedWidthGutter: \"renderer\",\r\n\t theme: \"renderer\",\r\n\r\n\t scrollSpeed: \"$mouseHandler\",\r\n\t dragDelay: \"$mouseHandler\",\r\n\t dragEnabled: \"$mouseHandler\",\r\n\t focusTimout: \"$mouseHandler\",\r\n\t tooltipFollowsMouse: \"$mouseHandler\",\r\n\r\n\t firstLineNumber: \"session\",\r\n\t overwrite: \"session\",\r\n\t newLineMode: \"session\",\r\n\t useWorker: \"session\",\r\n\t useSoftTabs: \"session\",\r\n\t tabSize: \"session\",\r\n\t wrap: \"session\",\r\n\t indentedSoftWrap: \"session\",\r\n\t foldStyle: \"session\",\r\n\t mode: \"session\"\r\n\t});\r\n\r\n\texports.Editor = Editor;\r\n\t});\r\n\r\n\tace.define(\"ace/undomanager\",[\"require\",\"exports\",\"module\"], function(acequire, exports, module) {\r\n\t\"use strict\";\r\n\tvar UndoManager = function() {\r\n\t this.reset();\r\n\t};\r\n\r\n\t(function() {\r\n\t this.execute = function(options) {\r\n\t var deltaSets = options.args[0];\r\n\t this.$doc = options.args[1];\r\n\t if (options.merge && this.hasUndo()){\r\n\t this.dirtyCounter--;\r\n\t deltaSets = this.$undoStack.pop().concat(deltaSets);\r\n\t }\r\n\t this.$undoStack.push(deltaSets);\r\n\t this.$redoStack = [];\r\n\t if (this.dirtyCounter < 0) {\r\n\t this.dirtyCounter = NaN;\r\n\t }\r\n\t this.dirtyCounter++;\r\n\t };\r\n\t this.undo = function(dontSelect) {\r\n\t var deltaSets = this.$undoStack.pop();\r\n\t var undoSelectionRange = null;\r\n\t if (deltaSets) {\r\n\t undoSelectionRange = this.$doc.undoChanges(deltaSets, dontSelect);\r\n\t this.$redoStack.push(deltaSets);\r\n\t this.dirtyCounter--;\r\n\t }\r\n\r\n\t return undoSelectionRange;\r\n\t };\r\n\t this.redo = function(dontSelect) {\r\n\t var deltaSets = this.$redoStack.pop();\r\n\t var redoSelectionRange = null;\r\n\t if (deltaSets) {\r\n\t redoSelectionRange =\r\n\t this.$doc.redoChanges(this.$deserializeDeltas(deltaSets), dontSelect);\r\n\t this.$undoStack.push(deltaSets);\r\n\t this.dirtyCounter++;\r\n\t }\r\n\t return redoSelectionRange;\r\n\t };\r\n\t this.reset = function() {\r\n\t this.$undoStack = [];\r\n\t this.$redoStack = [];\r\n\t this.dirtyCounter = 0;\r\n\t };\r\n\t this.hasUndo = function() {\r\n\t return this.$undoStack.length > 0;\r\n\t };\r\n\t this.hasRedo = function() {\r\n\t return this.$redoStack.length > 0;\r\n\t };\r\n\t this.markClean = function() {\r\n\t this.dirtyCounter = 0;\r\n\t };\r\n\t this.isClean = function() {\r\n\t return this.dirtyCounter === 0;\r\n\t };\r\n\t this.$serializeDeltas = function(deltaSets) {\r\n\t return cloneDeltaSetsObj(deltaSets, $serializeDelta);\r\n\t };\r\n\t this.$deserializeDeltas = function(deltaSets) {\r\n\t return cloneDeltaSetsObj(deltaSets, $deserializeDelta);\r\n\t };\r\n\t \r\n\t function $serializeDelta(delta){\r\n\t return {\r\n\t action: delta.action,\r\n\t start: delta.start,\r\n\t end: delta.end,\r\n\t lines: delta.lines.length == 1 ? null : delta.lines,\r\n\t text: delta.lines.length == 1 ? delta.lines[0] : null\r\n\t };\r\n\t }\r\n\t \r\n\t function $deserializeDelta(delta) {\r\n\t return {\r\n\t action: delta.action,\r\n\t start: delta.start,\r\n\t end: delta.end,\r\n\t lines: delta.lines || [delta.text]\r\n\t };\r\n\t }\r\n\t \r\n\t function cloneDeltaSetsObj(deltaSets_old, fnGetModifiedDelta) {\r\n\t var deltaSets_new = new Array(deltaSets_old.length);\r\n\t for (var i = 0; i < deltaSets_old.length; i++) {\r\n\t var deltaSet_old = deltaSets_old[i];\r\n\t var deltaSet_new = { group: deltaSet_old.group, deltas: new Array(deltaSet_old.length)};\r\n\t \r\n\t for (var j = 0; j < deltaSet_old.deltas.length; j++) {\r\n\t var delta_old = deltaSet_old.deltas[j];\r\n\t deltaSet_new.deltas[j] = fnGetModifiedDelta(delta_old);\r\n\t }\r\n\t \r\n\t deltaSets_new[i] = deltaSet_new;\r\n\t }\r\n\t return deltaSets_new;\r\n\t }\r\n\t \r\n\t}).call(UndoManager.prototype);\r\n\r\n\texports.UndoManager = UndoManager;\r\n\t});\r\n\r\n\tace.define(\"ace/layer/gutter\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/lib/event_emitter\"], function(acequire, exports, module) {\r\n\t\"use strict\";\r\n\r\n\tvar dom = acequire(\"../lib/dom\");\r\n\tvar oop = acequire(\"../lib/oop\");\r\n\tvar lang = acequire(\"../lib/lang\");\r\n\tvar EventEmitter = acequire(\"../lib/event_emitter\").EventEmitter;\r\n\r\n\tvar Gutter = function(parentEl) {\r\n\t this.element = dom.createElement(\"div\");\r\n\t this.element.className = \"ace_layer ace_gutter-layer\";\r\n\t parentEl.appendChild(this.element);\r\n\t this.setShowFoldWidgets(this.$showFoldWidgets);\r\n\t \r\n\t this.gutterWidth = 0;\r\n\r\n\t this.$annotations = [];\r\n\t this.$updateAnnotations = this.$updateAnnotations.bind(this);\r\n\r\n\t this.$cells = [];\r\n\t};\r\n\r\n\t(function() {\r\n\r\n\t oop.implement(this, EventEmitter);\r\n\r\n\t this.setSession = function(session) {\r\n\t if (this.session)\r\n\t this.session.removeEventListener(\"change\", this.$updateAnnotations);\r\n\t this.session = session;\r\n\t if (session)\r\n\t session.on(\"change\", this.$updateAnnotations);\r\n\t };\r\n\r\n\t this.addGutterDecoration = function(row, className){\r\n\t if (window.console)\r\n\t console.warn && console.warn(\"deprecated use session.addGutterDecoration\");\r\n\t this.session.addGutterDecoration(row, className);\r\n\t };\r\n\r\n\t this.removeGutterDecoration = function(row, className){\r\n\t if (window.console)\r\n\t console.warn && console.warn(\"deprecated use session.removeGutterDecoration\");\r\n\t this.session.removeGutterDecoration(row, className);\r\n\t };\r\n\r\n\t this.setAnnotations = function(annotations) {\r\n\t this.$annotations = [];\r\n\t for (var i = 0; i < annotations.length; i++) {\r\n\t var annotation = annotations[i];\r\n\t var row = annotation.row;\r\n\t var rowInfo = this.$annotations[row];\r\n\t if (!rowInfo)\r\n\t rowInfo = this.$annotations[row] = {text: []};\r\n\t \r\n\t var annoText = annotation.text;\r\n\t annoText = annoText ? lang.escapeHTML(annoText) : annotation.html || \"\";\r\n\r\n\t if (rowInfo.text.indexOf(annoText) === -1)\r\n\t rowInfo.text.push(annoText);\r\n\r\n\t var type = annotation.type;\r\n\t if (type == \"error\")\r\n\t rowInfo.className = \" ace_error\";\r\n\t else if (type == \"warning\" && rowInfo.className != \" ace_error\")\r\n\t rowInfo.className = \" ace_warning\";\r\n\t else if (type == \"info\" && (!rowInfo.className))\r\n\t rowInfo.className = \" ace_info\";\r\n\t }\r\n\t };\r\n\r\n\t this.$updateAnnotations = function (delta) {\r\n\t if (!this.$annotations.length)\r\n\t return;\r\n\t var firstRow = delta.start.row;\r\n\t var len = delta.end.row - firstRow;\r\n\t if (len === 0) {\r\n\t } else if (delta.action == 'remove') {\r\n\t this.$annotations.splice(firstRow, len + 1, null);\r\n\t } else {\r\n\t var args = new Array(len + 1);\r\n\t args.unshift(firstRow, 1);\r\n\t this.$annotations.splice.apply(this.$annotations, args);\r\n\t }\r\n\t };\r\n\r\n\t this.update = function(config) {\r\n\t var session = this.session;\r\n\t var firstRow = config.firstRow;\r\n\t var lastRow = Math.min(config.lastRow + config.gutterOffset, // needed to compensate for hor scollbar\r\n\t session.getLength() - 1);\r\n\t var fold = session.getNextFoldLine(firstRow);\r\n\t var foldStart = fold ? fold.start.row : Infinity;\r\n\t var foldWidgets = this.$showFoldWidgets && session.foldWidgets;\r\n\t var breakpoints = session.$breakpoints;\r\n\t var decorations = session.$decorations;\r\n\t var firstLineNumber = session.$firstLineNumber;\r\n\t var lastLineNumber = 0;\r\n\t \r\n\t var gutterRenderer = session.gutterRenderer || this.$renderer;\r\n\r\n\t var cell = null;\r\n\t var index = -1;\r\n\t var row = firstRow;\r\n\t while (true) {\r\n\t if (row > foldStart) {\r\n\t row = fold.end.row + 1;\r\n\t fold = session.getNextFoldLine(row, fold);\r\n\t foldStart = fold ? fold.start.row : Infinity;\r\n\t }\r\n\t if (row > lastRow) {\r\n\t while (this.$cells.length > index + 1) {\r\n\t cell = this.$cells.pop();\r\n\t this.element.removeChild(cell.element);\r\n\t }\r\n\t break;\r\n\t }\r\n\r\n\t cell = this.$cells[++index];\r\n\t if (!cell) {\r\n\t cell = {element: null, textNode: null, foldWidget: null};\r\n\t cell.element = dom.createElement(\"div\");\r\n\t cell.textNode = document.createTextNode('');\r\n\t cell.element.appendChild(cell.textNode);\r\n\t this.element.appendChild(cell.element);\r\n\t this.$cells[index] = cell;\r\n\t }\r\n\r\n\t var className = \"ace_gutter-cell \";\r\n\t if (breakpoints[row])\r\n\t className += breakpoints[row];\r\n\t if (decorations[row])\r\n\t className += decorations[row];\r\n\t if (this.$annotations[row])\r\n\t className += this.$annotations[row].className;\r\n\t if (cell.element.className != className)\r\n\t cell.element.className = className;\r\n\r\n\t var height = session.getRowLength(row) * config.lineHeight + \"px\";\r\n\t if (height != cell.element.style.height)\r\n\t cell.element.style.height = height;\r\n\r\n\t if (foldWidgets) {\r\n\t var c = foldWidgets[row];\r\n\t if (c == null)\r\n\t c = foldWidgets[row] = session.getFoldWidget(row);\r\n\t }\r\n\r\n\t if (c) {\r\n\t if (!cell.foldWidget) {\r\n\t cell.foldWidget = dom.createElement(\"span\");\r\n\t cell.element.appendChild(cell.foldWidget);\r\n\t }\r\n\t var className = \"ace_fold-widget ace_\" + c;\r\n\t if (c == \"start\" && row == foldStart && row < fold.end.row)\r\n\t className += \" ace_closed\";\r\n\t else\r\n\t className += \" ace_open\";\r\n\t if (cell.foldWidget.className != className)\r\n\t cell.foldWidget.className = className;\r\n\r\n\t var height = config.lineHeight + \"px\";\r\n\t if (cell.foldWidget.style.height != height)\r\n\t cell.foldWidget.style.height = height;\r\n\t } else {\r\n\t if (cell.foldWidget) {\r\n\t cell.element.removeChild(cell.foldWidget);\r\n\t cell.foldWidget = null;\r\n\t }\r\n\t }\r\n\t \r\n\t var text = lastLineNumber = gutterRenderer\r\n\t ? gutterRenderer.getText(session, row)\r\n\t : row + firstLineNumber;\r\n\t if (text != cell.textNode.data)\r\n\t cell.textNode.data = text;\r\n\r\n\t row++;\r\n\t }\r\n\r\n\t this.element.style.height = config.minHeight + \"px\";\r\n\r\n\t if (this.$fixedWidth || session.$useWrapMode)\r\n\t lastLineNumber = session.getLength() + firstLineNumber;\r\n\r\n\t var gutterWidth = gutterRenderer \r\n\t ? gutterRenderer.getWidth(session, lastLineNumber, config)\r\n\t : lastLineNumber.toString().length * config.characterWidth;\r\n\t \r\n\t var padding = this.$padding || this.$computePadding();\r\n\t gutterWidth += padding.left + padding.right;\r\n\t if (gutterWidth !== this.gutterWidth && !isNaN(gutterWidth)) {\r\n\t this.gutterWidth = gutterWidth;\r\n\t this.element.style.width = Math.ceil(this.gutterWidth) + \"px\";\r\n\t this._emit(\"changeGutterWidth\", gutterWidth);\r\n\t }\r\n\t };\r\n\r\n\t this.$fixedWidth = false;\r\n\t \r\n\t this.$showLineNumbers = true;\r\n\t this.$renderer = \"\";\r\n\t this.setShowLineNumbers = function(show) {\r\n\t this.$renderer = !show && {\r\n\t getWidth: function() {return \"\"},\r\n\t getText: function() {return \"\"}\r\n\t };\r\n\t };\r\n\t \r\n\t this.getShowLineNumbers = function() {\r\n\t return this.$showLineNumbers;\r\n\t };\r\n\t \r\n\t this.$showFoldWidgets = true;\r\n\t this.setShowFoldWidgets = function(show) {\r\n\t if (show)\r\n\t dom.addCssClass(this.element, \"ace_folding-enabled\");\r\n\t else\r\n\t dom.removeCssClass(this.element, \"ace_folding-enabled\");\r\n\r\n\t this.$showFoldWidgets = show;\r\n\t this.$padding = null;\r\n\t };\r\n\t \r\n\t this.getShowFoldWidgets = function() {\r\n\t return this.$showFoldWidgets;\r\n\t };\r\n\r\n\t this.$computePadding = function() {\r\n\t if (!this.element.firstChild)\r\n\t return {left: 0, right: 0};\r\n\t var style = dom.computedStyle(this.element.firstChild);\r\n\t this.$padding = {};\r\n\t this.$padding.left = parseInt(style.paddingLeft) + 1 || 0;\r\n\t this.$padding.right = parseInt(style.paddingRight) || 0;\r\n\t return this.$padding;\r\n\t };\r\n\r\n\t this.getRegion = function(point) {\r\n\t var padding = this.$padding || this.$computePadding();\r\n\t var rect = this.element.getBoundingClientRect();\r\n\t if (point.x < padding.left + rect.left)\r\n\t return \"markers\";\r\n\t if (this.$showFoldWidgets && point.x > rect.right - padding.right)\r\n\t return \"foldWidgets\";\r\n\t };\r\n\r\n\t}).call(Gutter.prototype);\r\n\r\n\texports.Gutter = Gutter;\r\n\r\n\t});\r\n\r\n\tace.define(\"ace/layer/marker\",[\"require\",\"exports\",\"module\",\"ace/range\",\"ace/lib/dom\"], function(acequire, exports, module) {\r\n\t\"use strict\";\r\n\r\n\tvar Range = acequire(\"../range\").Range;\r\n\tvar dom = acequire(\"../lib/dom\");\r\n\r\n\tvar Marker = function(parentEl) {\r\n\t this.element = dom.createElement(\"div\");\r\n\t this.element.className = \"ace_layer ace_marker-layer\";\r\n\t parentEl.appendChild(this.element);\r\n\t};\r\n\r\n\t(function() {\r\n\r\n\t this.$padding = 0;\r\n\r\n\t this.setPadding = function(padding) {\r\n\t this.$padding = padding;\r\n\t };\r\n\t this.setSession = function(session) {\r\n\t this.session = session;\r\n\t };\r\n\t \r\n\t this.setMarkers = function(markers) {\r\n\t this.markers = markers;\r\n\t };\r\n\r\n\t this.update = function(config) {\r\n\t var config = config || this.config;\r\n\t if (!config)\r\n\t return;\r\n\r\n\t this.config = config;\r\n\r\n\r\n\t var html = [];\r\n\t for (var key in this.markers) {\r\n\t var marker = this.markers[key];\r\n\r\n\t if (!marker.range) {\r\n\t marker.update(html, this, this.session, config);\r\n\t continue;\r\n\t }\r\n\r\n\t var range = marker.range.clipRows(config.firstRow, config.lastRow);\r\n\t if (range.isEmpty()) continue;\r\n\r\n\t range = range.toScreenRange(this.session);\r\n\t if (marker.renderer) {\r\n\t var top = this.$getTop(range.start.row, config);\r\n\t var left = this.$padding + range.start.column * config.characterWidth;\r\n\t marker.renderer(html, range, left, top, config);\r\n\t } else if (marker.type == \"fullLine\") {\r\n\t this.drawFullLineMarker(html, range, marker.clazz, config);\r\n\t } else if (marker.type == \"screenLine\") {\r\n\t this.drawScreenLineMarker(html, range, marker.clazz, config);\r\n\t } else if (range.isMultiLine()) {\r\n\t if (marker.type == \"text\")\r\n\t this.drawTextMarker(html, range, marker.clazz, config);\r\n\t else\r\n\t this.drawMultiLineMarker(html, range, marker.clazz, config);\r\n\t } else {\r\n\t this.drawSingleLineMarker(html, range, marker.clazz + \" ace_start\" + \" ace_br15\", config);\r\n\t }\r\n\t }\r\n\t this.element.innerHTML = html.join(\"\");\r\n\t };\r\n\r\n\t this.$getTop = function(row, layerConfig) {\r\n\t return (row - layerConfig.firstRowScreen) * layerConfig.lineHeight;\r\n\t };\r\n\r\n\t function getBorderClass(tl, tr, br, bl) {\r\n\t return (tl ? 1 : 0) | (tr ? 2 : 0) | (br ? 4 : 0) | (bl ? 8 : 0);\r\n\t }\r\n\t this.drawTextMarker = function(stringBuilder, range, clazz, layerConfig, extraStyle) {\r\n\t var session = this.session;\r\n\t var start = range.start.row;\r\n\t var end = range.end.row;\r\n\t var row = start;\r\n\t var prev = 0; \r\n\t var curr = 0;\r\n\t var next = session.getScreenLastRowColumn(row);\r\n\t var lineRange = new Range(row, range.start.column, row, curr);\r\n\t for (; row <= end; row++) {\r\n\t lineRange.start.row = lineRange.end.row = row;\r\n\t lineRange.start.column = row == start ? range.start.column : session.getRowWrapIndent(row);\r\n\t lineRange.end.column = next;\r\n\t prev = curr;\r\n\t curr = next;\r\n\t next = row + 1 < end ? session.getScreenLastRowColumn(row + 1) : row == end ? 0 : range.end.column;\r\n\t this.drawSingleLineMarker(stringBuilder, lineRange, \r\n\t clazz + (row == start ? \" ace_start\" : \"\") + \" ace_br\"\r\n\t + getBorderClass(row == start || row == start + 1 && range.start.column, prev < curr, curr > next, row == end),\r\n\t layerConfig, row == end ? 0 : 1, extraStyle);\r\n\t }\r\n\t };\r\n\t this.drawMultiLineMarker = function(stringBuilder, range, clazz, config, extraStyle) {\r\n\t var padding = this.$padding;\r\n\t var height = config.lineHeight;\r\n\t var top = this.$getTop(range.start.row, config);\r\n\t var left = padding + range.start.column * config.characterWidth;\r\n\t extraStyle = extraStyle || \"\";\r\n\r\n\t stringBuilder.push(\r\n\t \"
\"\r\n\t );\r\n\t top = this.$getTop(range.end.row, config);\r\n\t var width = range.end.column * config.characterWidth;\r\n\r\n\t stringBuilder.push(\r\n\t \"
\"\r\n\t );\r\n\t height = (range.end.row - range.start.row - 1) * config.lineHeight;\r\n\t if (height <= 0)\r\n\t return;\r\n\t top = this.$getTop(range.start.row + 1, config);\r\n\t \r\n\t var radiusClass = (range.start.column ? 1 : 0) | (range.end.column ? 0 : 8);\r\n\r\n\t stringBuilder.push(\r\n\t \"
\"\r\n\t );\r\n\t };\r\n\t this.drawSingleLineMarker = function(stringBuilder, range, clazz, config, extraLength, extraStyle) {\r\n\t var height = config.lineHeight;\r\n\t var width = (range.end.column + (extraLength || 0) - range.start.column) * config.characterWidth;\r\n\r\n\t var top = this.$getTop(range.start.row, config);\r\n\t var left = this.$padding + range.start.column * config.characterWidth;\r\n\r\n\t stringBuilder.push(\r\n\t \"
\"\r\n\t );\r\n\t };\r\n\r\n\t this.drawFullLineMarker = function(stringBuilder, range, clazz, config, extraStyle) {\r\n\t var top = this.$getTop(range.start.row, config);\r\n\t var height = config.lineHeight;\r\n\t if (range.start.row != range.end.row)\r\n\t height += this.$getTop(range.end.row, config) - top;\r\n\r\n\t stringBuilder.push(\r\n\t \"
\"\r\n\t );\r\n\t };\r\n\t \r\n\t this.drawScreenLineMarker = function(stringBuilder, range, clazz, config, extraStyle) {\r\n\t var top = this.$getTop(range.start.row, config);\r\n\t var height = config.lineHeight;\r\n\r\n\t stringBuilder.push(\r\n\t \"
\"\r\n\t );\r\n\t };\r\n\r\n\t}).call(Marker.prototype);\r\n\r\n\texports.Marker = Marker;\r\n\r\n\t});\r\n\r\n\tace.define(\"ace/layer/text\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/dom\",\"ace/lib/lang\",\"ace/lib/useragent\",\"ace/lib/event_emitter\"], function(acequire, exports, module) {\r\n\t\"use strict\";\r\n\r\n\tvar oop = acequire(\"../lib/oop\");\r\n\tvar dom = acequire(\"../lib/dom\");\r\n\tvar lang = acequire(\"../lib/lang\");\r\n\tvar useragent = acequire(\"../lib/useragent\");\r\n\tvar EventEmitter = acequire(\"../lib/event_emitter\").EventEmitter;\r\n\r\n\tvar Text = function(parentEl) {\r\n\t this.element = dom.createElement(\"div\");\r\n\t this.element.className = \"ace_layer ace_text-layer\";\r\n\t parentEl.appendChild(this.element);\r\n\t this.$updateEolChar = this.$updateEolChar.bind(this);\r\n\t};\r\n\r\n\t(function() {\r\n\r\n\t oop.implement(this, EventEmitter);\r\n\r\n\t this.EOF_CHAR = \"\\xB6\";\r\n\t this.EOL_CHAR_LF = \"\\xAC\";\r\n\t this.EOL_CHAR_CRLF = \"\\xa4\";\r\n\t this.EOL_CHAR = this.EOL_CHAR_LF;\r\n\t this.TAB_CHAR = \"\\u2014\"; //\"\\u21E5\";\r\n\t this.SPACE_CHAR = \"\\xB7\";\r\n\t this.$padding = 0;\r\n\r\n\t this.$updateEolChar = function() {\r\n\t var EOL_CHAR = this.session.doc.getNewLineCharacter() == \"\\n\"\r\n\t ? this.EOL_CHAR_LF\r\n\t : this.EOL_CHAR_CRLF;\r\n\t if (this.EOL_CHAR != EOL_CHAR) {\r\n\t this.EOL_CHAR = EOL_CHAR;\r\n\t return true;\r\n\t }\r\n\t }\r\n\r\n\t this.setPadding = function(padding) {\r\n\t this.$padding = padding;\r\n\t this.element.style.padding = \"0 \" + padding + \"px\";\r\n\t };\r\n\r\n\t this.getLineHeight = function() {\r\n\t return this.$fontMetrics.$characterSize.height || 0;\r\n\t };\r\n\r\n\t this.getCharacterWidth = function() {\r\n\t return this.$fontMetrics.$characterSize.width || 0;\r\n\t };\r\n\t \r\n\t this.$setFontMetrics = function(measure) {\r\n\t this.$fontMetrics = measure;\r\n\t this.$fontMetrics.on(\"changeCharacterSize\", function(e) {\r\n\t this._signal(\"changeCharacterSize\", e);\r\n\t }.bind(this));\r\n\t this.$pollSizeChanges();\r\n\t }\r\n\r\n\t this.checkForSizeChanges = function() {\r\n\t this.$fontMetrics.checkForSizeChanges();\r\n\t };\r\n\t this.$pollSizeChanges = function() {\r\n\t return this.$pollSizeChangesTimer = this.$fontMetrics.$pollSizeChanges();\r\n\t };\r\n\t this.setSession = function(session) {\r\n\t this.session = session;\r\n\t if (session)\r\n\t this.$computeTabString();\r\n\t };\r\n\r\n\t this.showInvisibles = false;\r\n\t this.setShowInvisibles = function(showInvisibles) {\r\n\t if (this.showInvisibles == showInvisibles)\r\n\t return false;\r\n\r\n\t this.showInvisibles = showInvisibles;\r\n\t this.$computeTabString();\r\n\t return true;\r\n\t };\r\n\r\n\t this.displayIndentGuides = true;\r\n\t this.setDisplayIndentGuides = function(display) {\r\n\t if (this.displayIndentGuides == display)\r\n\t return false;\r\n\r\n\t this.displayIndentGuides = display;\r\n\t this.$computeTabString();\r\n\t return true;\r\n\t };\r\n\r\n\t this.$tabStrings = [];\r\n\t this.onChangeTabSize =\r\n\t this.$computeTabString = function() {\r\n\t var tabSize = this.session.getTabSize();\r\n\t this.tabSize = tabSize;\r\n\t var tabStr = this.$tabStrings = [0];\r\n\t for (var i = 1; i < tabSize + 1; i++) {\r\n\t if (this.showInvisibles) {\r\n\t tabStr.push(\"\"\r\n\t + lang.stringRepeat(this.TAB_CHAR, i)\r\n\t + \"\");\r\n\t } else {\r\n\t tabStr.push(lang.stringRepeat(\" \", i));\r\n\t }\r\n\t }\r\n\t if (this.displayIndentGuides) {\r\n\t this.$indentGuideRe = /\\s\\S| \\t|\\t |\\s$/;\r\n\t var className = \"ace_indent-guide\";\r\n\t var spaceClass = \"\";\r\n\t var tabClass = \"\";\r\n\t if (this.showInvisibles) {\r\n\t className += \" ace_invisible\";\r\n\t spaceClass = \" ace_invisible_space\";\r\n\t tabClass = \" ace_invisible_tab\";\r\n\t var spaceContent = lang.stringRepeat(this.SPACE_CHAR, this.tabSize);\r\n\t var tabContent = lang.stringRepeat(this.TAB_CHAR, this.tabSize);\r\n\t } else{\r\n\t var spaceContent = lang.stringRepeat(\" \", this.tabSize);\r\n\t var tabContent = spaceContent;\r\n\t }\r\n\r\n\t this.$tabStrings[\" \"] = \"\" + spaceContent + \"\";\r\n\t this.$tabStrings[\"\\t\"] = \"\" + tabContent + \"\";\r\n\t }\r\n\t };\r\n\r\n\t this.updateLines = function(config, firstRow, lastRow) {\r\n\t if (this.config.lastRow != config.lastRow ||\r\n\t this.config.firstRow != config.firstRow) {\r\n\t this.scrollLines(config);\r\n\t }\r\n\t this.config = config;\r\n\r\n\t var first = Math.max(firstRow, config.firstRow);\r\n\t var last = Math.min(lastRow, config.lastRow);\r\n\r\n\t var lineElements = this.element.childNodes;\r\n\t var lineElementsIdx = 0;\r\n\r\n\t for (var row = config.firstRow; row < first; row++) {\r\n\t var foldLine = this.session.getFoldLine(row);\r\n\t if (foldLine) {\r\n\t if (foldLine.containsRow(first)) {\r\n\t first = foldLine.start.row;\r\n\t break;\r\n\t } else {\r\n\t row = foldLine.end.row;\r\n\t }\r\n\t }\r\n\t lineElementsIdx ++;\r\n\t }\r\n\r\n\t var row = first;\r\n\t var foldLine = this.session.getNextFoldLine(row);\r\n\t var foldStart = foldLine ? foldLine.start.row : Infinity;\r\n\r\n\t while (true) {\r\n\t if (row > foldStart) {\r\n\t row = foldLine.end.row+1;\r\n\t foldLine = this.session.getNextFoldLine(row, foldLine);\r\n\t foldStart = foldLine ? foldLine.start.row :Infinity;\r\n\t }\r\n\t if (row > last)\r\n\t break;\r\n\r\n\t var lineElement = lineElements[lineElementsIdx++];\r\n\t if (lineElement) {\r\n\t var html = [];\r\n\t this.$renderLine(\r\n\t html, row, !this.$useLineGroups(), row == foldStart ? foldLine : false\r\n\t );\r\n\t lineElement.style.height = config.lineHeight * this.session.getRowLength(row) + \"px\";\r\n\t lineElement.innerHTML = html.join(\"\");\r\n\t }\r\n\t row++;\r\n\t }\r\n\t };\r\n\r\n\t this.scrollLines = function(config) {\r\n\t var oldConfig = this.config;\r\n\t this.config = config;\r\n\r\n\t if (!oldConfig || oldConfig.lastRow < config.firstRow)\r\n\t return this.update(config);\r\n\r\n\t if (config.lastRow < oldConfig.firstRow)\r\n\t return this.update(config);\r\n\r\n\t var el = this.element;\r\n\t if (oldConfig.firstRow < config.firstRow)\r\n\t for (var row=this.session.getFoldedRowCount(oldConfig.firstRow, config.firstRow - 1); row>0; row--)\r\n\t el.removeChild(el.firstChild);\r\n\r\n\t if (oldConfig.lastRow > config.lastRow)\r\n\t for (var row=this.session.getFoldedRowCount(config.lastRow + 1, oldConfig.lastRow); row>0; row--)\r\n\t el.removeChild(el.lastChild);\r\n\r\n\t if (config.firstRow < oldConfig.firstRow) {\r\n\t var fragment = this.$renderLinesFragment(config, config.firstRow, oldConfig.firstRow - 1);\r\n\t if (el.firstChild)\r\n\t el.insertBefore(fragment, el.firstChild);\r\n\t else\r\n\t el.appendChild(fragment);\r\n\t }\r\n\r\n\t if (config.lastRow > oldConfig.lastRow) {\r\n\t var fragment = this.$renderLinesFragment(config, oldConfig.lastRow + 1, config.lastRow);\r\n\t el.appendChild(fragment);\r\n\t }\r\n\t };\r\n\r\n\t this.$renderLinesFragment = function(config, firstRow, lastRow) {\r\n\t var fragment = this.element.ownerDocument.createDocumentFragment();\r\n\t var row = firstRow;\r\n\t var foldLine = this.session.getNextFoldLine(row);\r\n\t var foldStart = foldLine ? foldLine.start.row : Infinity;\r\n\r\n\t while (true) {\r\n\t if (row > foldStart) {\r\n\t row = foldLine.end.row+1;\r\n\t foldLine = this.session.getNextFoldLine(row, foldLine);\r\n\t foldStart = foldLine ? foldLine.start.row : Infinity;\r\n\t }\r\n\t if (row > lastRow)\r\n\t break;\r\n\r\n\t var container = dom.createElement(\"div\");\r\n\r\n\t var html = [];\r\n\t this.$renderLine(html, row, false, row == foldStart ? foldLine : false);\r\n\t container.innerHTML = html.join(\"\");\r\n\t if (this.$useLineGroups()) {\r\n\t container.className = 'ace_line_group';\r\n\t fragment.appendChild(container);\r\n\t container.style.height = config.lineHeight * this.session.getRowLength(row) + \"px\";\r\n\r\n\t } else {\r\n\t while(container.firstChild)\r\n\t fragment.appendChild(container.firstChild);\r\n\t }\r\n\r\n\t row++;\r\n\t }\r\n\t return fragment;\r\n\t };\r\n\r\n\t this.update = function(config) {\r\n\t this.config = config;\r\n\r\n\t var html = [];\r\n\t var firstRow = config.firstRow, lastRow = config.lastRow;\r\n\r\n\t var row = firstRow;\r\n\t var foldLine = this.session.getNextFoldLine(row);\r\n\t var foldStart = foldLine ? foldLine.start.row : Infinity;\r\n\r\n\t while (true) {\r\n\t if (row > foldStart) {\r\n\t row = foldLine.end.row+1;\r\n\t foldLine = this.session.getNextFoldLine(row, foldLine);\r\n\t foldStart = foldLine ? foldLine.start.row :Infinity;\r\n\t }\r\n\t if (row > lastRow)\r\n\t break;\r\n\r\n\t if (this.$useLineGroups())\r\n\t html.push(\"
\")\r\n\r\n\t this.$renderLine(html, row, false, row == foldStart ? foldLine : false);\r\n\r\n\t if (this.$useLineGroups())\r\n\t html.push(\"
\"); // end the line group\r\n\r\n\t row++;\r\n\t }\r\n\t this.element.innerHTML = html.join(\"\");\r\n\t };\r\n\r\n\t this.$textToken = {\r\n\t \"text\": true,\r\n\t \"rparen\": true,\r\n\t \"lparen\": true\r\n\t };\r\n\r\n\t this.$renderToken = function(stringBuilder, screenColumn, token, value) {\r\n\t var self = this;\r\n\t var replaceReg = /\\t|&|<|>|( +)|([\\x00-\\x1f\\x80-\\xa0\\xad\\u1680\\u180E\\u2000-\\u200f\\u2028\\u2029\\u202F\\u205F\\u3000\\uFEFF\\uFFF9-\\uFFFC])|[\\u1100-\\u115F\\u11A3-\\u11A7\\u11FA-\\u11FF\\u2329-\\u232A\\u2E80-\\u2E99\\u2E9B-\\u2EF3\\u2F00-\\u2FD5\\u2FF0-\\u2FFB\\u3000-\\u303E\\u3041-\\u3096\\u3099-\\u30FF\\u3105-\\u312D\\u3131-\\u318E\\u3190-\\u31BA\\u31C0-\\u31E3\\u31F0-\\u321E\\u3220-\\u3247\\u3250-\\u32FE\\u3300-\\u4DBF\\u4E00-\\uA48C\\uA490-\\uA4C6\\uA960-\\uA97C\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFAFF\\uFE10-\\uFE19\\uFE30-\\uFE52\\uFE54-\\uFE66\\uFE68-\\uFE6B\\uFF01-\\uFF60\\uFFE0-\\uFFE6]/g;\r\n\t var replaceFunc = function(c, a, b, tabIdx, idx4) {\r\n\t if (a) {\r\n\t return self.showInvisibles\r\n\t ? \"\" + lang.stringRepeat(self.SPACE_CHAR, c.length) + \"\"\r\n\t : c;\r\n\t } else if (c == \"&\") {\r\n\t return \"&\";\r\n\t } else if (c == \"<\") {\r\n\t return \"<\";\r\n\t } else if (c == \">\") {\r\n\t return \">\";\r\n\t } else if (c == \"\\t\") {\r\n\t var tabSize = self.session.getScreenTabSize(screenColumn + tabIdx);\r\n\t screenColumn += tabSize - 1;\r\n\t return self.$tabStrings[tabSize];\r\n\t } else if (c == \"\\u3000\") {\r\n\t var classToUse = self.showInvisibles ? \"ace_cjk ace_invisible ace_invisible_space\" : \"ace_cjk\";\r\n\t var space = self.showInvisibles ? self.SPACE_CHAR : \"\";\r\n\t screenColumn += 1;\r\n\t return \"\" + space + \"\";\r\n\t } else if (b) {\r\n\t return \"\" + self.SPACE_CHAR + \"\";\r\n\t } else {\r\n\t screenColumn += 1;\r\n\t return \"\" + c + \"\";\r\n\t }\r\n\t };\r\n\r\n\t var output = value.replace(replaceReg, replaceFunc);\r\n\r\n\t if (!this.$textToken[token.type]) {\r\n\t var classes = \"ace_\" + token.type.replace(/\\./g, \" ace_\");\r\n\t var style = \"\";\r\n\t if (token.type == \"fold\")\r\n\t style = \" style='width:\" + (token.value.length * this.config.characterWidth) + \"px;' \";\r\n\t stringBuilder.push(\"\", output, \"\");\r\n\t }\r\n\t else {\r\n\t stringBuilder.push(output);\r\n\t }\r\n\t return screenColumn + value.length;\r\n\t };\r\n\r\n\t this.renderIndentGuide = function(stringBuilder, value, max) {\r\n\t var cols = value.search(this.$indentGuideRe);\r\n\t if (cols <= 0 || cols >= max)\r\n\t return value;\r\n\t if (value[0] == \" \") {\r\n\t cols -= cols % this.tabSize;\r\n\t stringBuilder.push(lang.stringRepeat(this.$tabStrings[\" \"], cols/this.tabSize));\r\n\t return value.substr(cols);\r\n\t } else if (value[0] == \"\\t\") {\r\n\t stringBuilder.push(lang.stringRepeat(this.$tabStrings[\"\\t\"], cols));\r\n\t return value.substr(cols);\r\n\t }\r\n\t return value;\r\n\t };\r\n\r\n\t this.$renderWrappedLine = function(stringBuilder, tokens, splits, onlyContents) {\r\n\t var chars = 0;\r\n\t var split = 0;\r\n\t var splitChars = splits[0];\r\n\t var screenColumn = 0;\r\n\r\n\t for (var i = 0; i < tokens.length; i++) {\r\n\t var token = tokens[i];\r\n\t var value = token.value;\r\n\t if (i == 0 && this.displayIndentGuides) {\r\n\t chars = value.length;\r\n\t value = this.renderIndentGuide(stringBuilder, value, splitChars);\r\n\t if (!value)\r\n\t continue;\r\n\t chars -= value.length;\r\n\t }\r\n\r\n\t if (chars + value.length < splitChars) {\r\n\t screenColumn = this.$renderToken(stringBuilder, screenColumn, token, value);\r\n\t chars += value.length;\r\n\t } else {\r\n\t while (chars + value.length >= splitChars) {\r\n\t screenColumn = this.$renderToken(\r\n\t stringBuilder, screenColumn,\r\n\t token, value.substring(0, splitChars - chars)\r\n\t );\r\n\t value = value.substring(splitChars - chars);\r\n\t chars = splitChars;\r\n\r\n\t if (!onlyContents) {\r\n\t stringBuilder.push(\"
\",\r\n\t \"
\"\r\n\t );\r\n\t }\r\n\r\n\t stringBuilder.push(lang.stringRepeat(\"\\xa0\", splits.indent));\r\n\r\n\t split ++;\r\n\t screenColumn = 0;\r\n\t splitChars = splits[split] || Number.MAX_VALUE;\r\n\t }\r\n\t if (value.length != 0) {\r\n\t chars += value.length;\r\n\t screenColumn = this.$renderToken(\r\n\t stringBuilder, screenColumn, token, value\r\n\t );\r\n\t }\r\n\t }\r\n\t }\r\n\t };\r\n\r\n\t this.$renderSimpleLine = function(stringBuilder, tokens) {\r\n\t var screenColumn = 0;\r\n\t var token = tokens[0];\r\n\t var value = token.value;\r\n\t if (this.displayIndentGuides)\r\n\t value = this.renderIndentGuide(stringBuilder, value);\r\n\t if (value)\r\n\t screenColumn = this.$renderToken(stringBuilder, screenColumn, token, value);\r\n\t for (var i = 1; i < tokens.length; i++) {\r\n\t token = tokens[i];\r\n\t value = token.value;\r\n\t screenColumn = this.$renderToken(stringBuilder, screenColumn, token, value);\r\n\t }\r\n\t };\r\n\t this.$renderLine = function(stringBuilder, row, onlyContents, foldLine) {\r\n\t if (!foldLine && foldLine != false)\r\n\t foldLine = this.session.getFoldLine(row);\r\n\r\n\t if (foldLine)\r\n\t var tokens = this.$getFoldLineTokens(row, foldLine);\r\n\t else\r\n\t var tokens = this.session.getTokens(row);\r\n\r\n\r\n\t if (!onlyContents) {\r\n\t stringBuilder.push(\r\n\t \"
\"\r\n\t );\r\n\t }\r\n\r\n\t if (tokens.length) {\r\n\t var splits = this.session.getRowSplitData(row);\r\n\t if (splits && splits.length)\r\n\t this.$renderWrappedLine(stringBuilder, tokens, splits, onlyContents);\r\n\t else\r\n\t this.$renderSimpleLine(stringBuilder, tokens);\r\n\t }\r\n\r\n\t if (this.showInvisibles) {\r\n\t if (foldLine)\r\n\t row = foldLine.end.row\r\n\r\n\t stringBuilder.push(\r\n\t \"\",\r\n\t row == this.session.getLength() - 1 ? this.EOF_CHAR : this.EOL_CHAR,\r\n\t \"\"\r\n\t );\r\n\t }\r\n\t if (!onlyContents)\r\n\t stringBuilder.push(\"
\");\r\n\t };\r\n\r\n\t this.$getFoldLineTokens = function(row, foldLine) {\r\n\t var session = this.session;\r\n\t var renderTokens = [];\r\n\r\n\t function addTokens(tokens, from, to) {\r\n\t var idx = 0, col = 0;\r\n\t while ((col + tokens[idx].value.length) < from) {\r\n\t col += tokens[idx].value.length;\r\n\t idx++;\r\n\r\n\t if (idx == tokens.length)\r\n\t return;\r\n\t }\r\n\t if (col != from) {\r\n\t var value = tokens[idx].value.substring(from - col);\r\n\t if (value.length > (to - from))\r\n\t value = value.substring(0, to - from);\r\n\r\n\t renderTokens.push({\r\n\t type: tokens[idx].type,\r\n\t value: value\r\n\t });\r\n\r\n\t col = from + value.length;\r\n\t idx += 1;\r\n\t }\r\n\r\n\t while (col < to && idx < tokens.length) {\r\n\t var value = tokens[idx].value;\r\n\t if (value.length + col > to) {\r\n\t renderTokens.push({\r\n\t type: tokens[idx].type,\r\n\t value: value.substring(0, to - col)\r\n\t });\r\n\t } else\r\n\t renderTokens.push(tokens[idx]);\r\n\t col += value.length;\r\n\t idx += 1;\r\n\t }\r\n\t }\r\n\r\n\t var tokens = session.getTokens(row);\r\n\t foldLine.walk(function(placeholder, row, column, lastColumn, isNewRow) {\r\n\t if (placeholder != null) {\r\n\t renderTokens.push({\r\n\t type: \"fold\",\r\n\t value: placeholder\r\n\t });\r\n\t } else {\r\n\t if (isNewRow)\r\n\t tokens = session.getTokens(row);\r\n\r\n\t if (tokens.length)\r\n\t addTokens(tokens, lastColumn, column);\r\n\t }\r\n\t }, foldLine.end.row, this.session.getLine(foldLine.end.row).length);\r\n\r\n\t return renderTokens;\r\n\t };\r\n\r\n\t this.$useLineGroups = function() {\r\n\t return this.session.getUseWrapMode();\r\n\t };\r\n\r\n\t this.destroy = function() {\r\n\t clearInterval(this.$pollSizeChangesTimer);\r\n\t if (this.$measureNode)\r\n\t this.$measureNode.parentNode.removeChild(this.$measureNode);\r\n\t delete this.$measureNode;\r\n\t };\r\n\r\n\t}).call(Text.prototype);\r\n\r\n\texports.Text = Text;\r\n\r\n\t});\r\n\r\n\tace.define(\"ace/layer/cursor\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(acequire, exports, module) {\r\n\t\"use strict\";\r\n\r\n\tvar dom = acequire(\"../lib/dom\");\r\n\tvar isIE8;\r\n\r\n\tvar Cursor = function(parentEl) {\r\n\t this.element = dom.createElement(\"div\");\r\n\t this.element.className = \"ace_layer ace_cursor-layer\";\r\n\t parentEl.appendChild(this.element);\r\n\t \r\n\t if (isIE8 === undefined)\r\n\t isIE8 = !(\"opacity\" in this.element.style);\r\n\r\n\t this.isVisible = false;\r\n\t this.isBlinking = true;\r\n\t this.blinkInterval = 1000;\r\n\t this.smoothBlinking = false;\r\n\r\n\t this.cursors = [];\r\n\t this.cursor = this.addCursor();\r\n\t dom.addCssClass(this.element, \"ace_hidden-cursors\");\r\n\t this.$updateCursors = (isIE8\r\n\t ? this.$updateVisibility\r\n\t : this.$updateOpacity).bind(this);\r\n\t};\r\n\r\n\t(function() {\r\n\t \r\n\t this.$updateVisibility = function(val) {\r\n\t var cursors = this.cursors;\r\n\t for (var i = cursors.length; i--; )\r\n\t cursors[i].style.visibility = val ? \"\" : \"hidden\";\r\n\t };\r\n\t this.$updateOpacity = function(val) {\r\n\t var cursors = this.cursors;\r\n\t for (var i = cursors.length; i--; )\r\n\t cursors[i].style.opacity = val ? \"\" : \"0\";\r\n\t };\r\n\t \r\n\r\n\t this.$padding = 0;\r\n\t this.setPadding = function(padding) {\r\n\t this.$padding = padding;\r\n\t };\r\n\r\n\t this.setSession = function(session) {\r\n\t this.session = session;\r\n\t };\r\n\r\n\t this.setBlinking = function(blinking) {\r\n\t if (blinking != this.isBlinking){\r\n\t this.isBlinking = blinking;\r\n\t this.restartTimer();\r\n\t }\r\n\t };\r\n\r\n\t this.setBlinkInterval = function(blinkInterval) {\r\n\t if (blinkInterval != this.blinkInterval){\r\n\t this.blinkInterval = blinkInterval;\r\n\t this.restartTimer();\r\n\t }\r\n\t };\r\n\r\n\t this.setSmoothBlinking = function(smoothBlinking) {\r\n\t if (smoothBlinking != this.smoothBlinking && !isIE8) {\r\n\t this.smoothBlinking = smoothBlinking;\r\n\t dom.setCssClass(this.element, \"ace_smooth-blinking\", smoothBlinking);\r\n\t this.$updateCursors(true);\r\n\t this.$updateCursors = (this.$updateOpacity).bind(this);\r\n\t this.restartTimer();\r\n\t }\r\n\t };\r\n\r\n\t this.addCursor = function() {\r\n\t var el = dom.createElement(\"div\");\r\n\t el.className = \"ace_cursor\";\r\n\t this.element.appendChild(el);\r\n\t this.cursors.push(el);\r\n\t return el;\r\n\t };\r\n\r\n\t this.removeCursor = function() {\r\n\t if (this.cursors.length > 1) {\r\n\t var el = this.cursors.pop();\r\n\t el.parentNode.removeChild(el);\r\n\t return el;\r\n\t }\r\n\t };\r\n\r\n\t this.hideCursor = function() {\r\n\t this.isVisible = false;\r\n\t dom.addCssClass(this.element, \"ace_hidden-cursors\");\r\n\t this.restartTimer();\r\n\t };\r\n\r\n\t this.showCursor = function() {\r\n\t this.isVisible = true;\r\n\t dom.removeCssClass(this.element, \"ace_hidden-cursors\");\r\n\t this.restartTimer();\r\n\t };\r\n\r\n\t this.restartTimer = function() {\r\n\t var update = this.$updateCursors;\r\n\t clearInterval(this.intervalId);\r\n\t clearTimeout(this.timeoutId);\r\n\t if (this.smoothBlinking) {\r\n\t dom.removeCssClass(this.element, \"ace_smooth-blinking\");\r\n\t }\r\n\t \r\n\t update(true);\r\n\r\n\t if (!this.isBlinking || !this.blinkInterval || !this.isVisible)\r\n\t return;\r\n\r\n\t if (this.smoothBlinking) {\r\n\t setTimeout(function(){\r\n\t dom.addCssClass(this.element, \"ace_smooth-blinking\");\r\n\t }.bind(this));\r\n\t }\r\n\t \r\n\t var blink = function(){\r\n\t this.timeoutId = setTimeout(function() {\r\n\t update(false);\r\n\t }, 0.6 * this.blinkInterval);\r\n\t }.bind(this);\r\n\r\n\t this.intervalId = setInterval(function() {\r\n\t update(true);\r\n\t blink();\r\n\t }, this.blinkInterval);\r\n\r\n\t blink();\r\n\t };\r\n\r\n\t this.getPixelPosition = function(position, onScreen) {\r\n\t if (!this.config || !this.session)\r\n\t return {left : 0, top : 0};\r\n\r\n\t if (!position)\r\n\t position = this.session.selection.getCursor();\r\n\t var pos = this.session.documentToScreenPosition(position);\r\n\t var cursorLeft = this.$padding + pos.column * this.config.characterWidth;\r\n\t var cursorTop = (pos.row - (onScreen ? this.config.firstRowScreen : 0)) *\r\n\t this.config.lineHeight;\r\n\r\n\t return {left : cursorLeft, top : cursorTop};\r\n\t };\r\n\r\n\t this.update = function(config) {\r\n\t this.config = config;\r\n\r\n\t var selections = this.session.$selectionMarkers;\r\n\t var i = 0, cursorIndex = 0;\r\n\r\n\t if (selections === undefined || selections.length === 0){\r\n\t selections = [{cursor: null}];\r\n\t }\r\n\r\n\t for (var i = 0, n = selections.length; i < n; i++) {\r\n\t var pixelPos = this.getPixelPosition(selections[i].cursor, true);\r\n\t if ((pixelPos.top > config.height + config.offset ||\r\n\t pixelPos.top < 0) && i > 1) {\r\n\t continue;\r\n\t }\r\n\r\n\t var style = (this.cursors[cursorIndex++] || this.addCursor()).style;\r\n\t \r\n\t if (!this.drawCursor) {\r\n\t style.left = pixelPos.left + \"px\";\r\n\t style.top = pixelPos.top + \"px\";\r\n\t style.width = config.characterWidth + \"px\";\r\n\t style.height = config.lineHeight + \"px\";\r\n\t } else {\r\n\t this.drawCursor(style, pixelPos, config, selections[i], this.session);\r\n\t }\r\n\t }\r\n\t while (this.cursors.length > cursorIndex)\r\n\t this.removeCursor();\r\n\r\n\t var overwrite = this.session.getOverwrite();\r\n\t this.$setOverwrite(overwrite);\r\n\t this.$pixelPos = pixelPos;\r\n\t this.restartTimer();\r\n\t };\r\n\t \r\n\t this.drawCursor = null;\r\n\r\n\t this.$setOverwrite = function(overwrite) {\r\n\t if (overwrite != this.overwrite) {\r\n\t this.overwrite = overwrite;\r\n\t if (overwrite)\r\n\t dom.addCssClass(this.element, \"ace_overwrite-cursors\");\r\n\t else\r\n\t dom.removeCssClass(this.element, \"ace_overwrite-cursors\");\r\n\t }\r\n\t };\r\n\r\n\t this.destroy = function() {\r\n\t clearInterval(this.intervalId);\r\n\t clearTimeout(this.timeoutId);\r\n\t };\r\n\r\n\t}).call(Cursor.prototype);\r\n\r\n\texports.Cursor = Cursor;\r\n\r\n\t});\r\n\r\n\tace.define(\"ace/scrollbar\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/dom\",\"ace/lib/event\",\"ace/lib/event_emitter\"], function(acequire, exports, module) {\r\n\t\"use strict\";\r\n\r\n\tvar oop = acequire(\"./lib/oop\");\r\n\tvar dom = acequire(\"./lib/dom\");\r\n\tvar event = acequire(\"./lib/event\");\r\n\tvar EventEmitter = acequire(\"./lib/event_emitter\").EventEmitter;\r\n\tvar ScrollBar = function(parent) {\r\n\t this.element = dom.createElement(\"div\");\r\n\t this.element.className = \"ace_scrollbar ace_scrollbar\" + this.classSuffix;\r\n\r\n\t this.inner = dom.createElement(\"div\");\r\n\t this.inner.className = \"ace_scrollbar-inner\";\r\n\t this.element.appendChild(this.inner);\r\n\r\n\t parent.appendChild(this.element);\r\n\r\n\t this.setVisible(false);\r\n\t this.skipEvent = false;\r\n\r\n\t event.addListener(this.element, \"scroll\", this.onScroll.bind(this));\r\n\t event.addListener(this.element, \"mousedown\", event.preventDefault);\r\n\t};\r\n\r\n\t(function() {\r\n\t oop.implement(this, EventEmitter);\r\n\r\n\t this.setVisible = function(isVisible) {\r\n\t this.element.style.display = isVisible ? \"\" : \"none\";\r\n\t this.isVisible = isVisible;\r\n\t };\r\n\t}).call(ScrollBar.prototype);\r\n\tvar VScrollBar = function(parent, renderer) {\r\n\t ScrollBar.call(this, parent);\r\n\t this.scrollTop = 0;\r\n\t renderer.$scrollbarWidth = \r\n\t this.width = dom.scrollbarWidth(parent.ownerDocument);\r\n\t this.inner.style.width =\r\n\t this.element.style.width = (this.width || 15) + 5 + \"px\";\r\n\t};\r\n\r\n\toop.inherits(VScrollBar, ScrollBar);\r\n\r\n\t(function() {\r\n\r\n\t this.classSuffix = '-v';\r\n\t this.onScroll = function() {\r\n\t if (!this.skipEvent) {\r\n\t this.scrollTop = this.element.scrollTop;\r\n\t this._emit(\"scroll\", {data: this.scrollTop});\r\n\t }\r\n\t this.skipEvent = false;\r\n\t };\r\n\t this.getWidth = function() {\r\n\t return this.isVisible ? this.width : 0;\r\n\t };\r\n\t this.setHeight = function(height) {\r\n\t this.element.style.height = height + \"px\";\r\n\t };\r\n\t this.setInnerHeight = function(height) {\r\n\t this.inner.style.height = height + \"px\";\r\n\t };\r\n\t this.setScrollHeight = function(height) {\r\n\t this.inner.style.height = height + \"px\";\r\n\t };\r\n\t this.setScrollTop = function(scrollTop) {\r\n\t if (this.scrollTop != scrollTop) {\r\n\t this.skipEvent = true;\r\n\t this.scrollTop = this.element.scrollTop = scrollTop;\r\n\t }\r\n\t };\r\n\r\n\t}).call(VScrollBar.prototype);\r\n\tvar HScrollBar = function(parent, renderer) {\r\n\t ScrollBar.call(this, parent);\r\n\t this.scrollLeft = 0;\r\n\t this.height = renderer.$scrollbarWidth;\r\n\t this.inner.style.height =\r\n\t this.element.style.height = (this.height || 15) + 5 + \"px\";\r\n\t};\r\n\r\n\toop.inherits(HScrollBar, ScrollBar);\r\n\r\n\t(function() {\r\n\r\n\t this.classSuffix = '-h';\r\n\t this.onScroll = function() {\r\n\t if (!this.skipEvent) {\r\n\t this.scrollLeft = this.element.scrollLeft;\r\n\t this._emit(\"scroll\", {data: this.scrollLeft});\r\n\t }\r\n\t this.skipEvent = false;\r\n\t };\r\n\t this.getHeight = function() {\r\n\t return this.isVisible ? this.height : 0;\r\n\t };\r\n\t this.setWidth = function(width) {\r\n\t this.element.style.width = width + \"px\";\r\n\t };\r\n\t this.setInnerWidth = function(width) {\r\n\t this.inner.style.width = width + \"px\";\r\n\t };\r\n\t this.setScrollWidth = function(width) {\r\n\t this.inner.style.width = width + \"px\";\r\n\t };\r\n\t this.setScrollLeft = function(scrollLeft) {\r\n\t if (this.scrollLeft != scrollLeft) {\r\n\t this.skipEvent = true;\r\n\t this.scrollLeft = this.element.scrollLeft = scrollLeft;\r\n\t }\r\n\t };\r\n\r\n\t}).call(HScrollBar.prototype);\r\n\r\n\r\n\texports.ScrollBar = VScrollBar; // backward compatibility\r\n\texports.ScrollBarV = VScrollBar; // backward compatibility\r\n\texports.ScrollBarH = HScrollBar; // backward compatibility\r\n\r\n\texports.VScrollBar = VScrollBar;\r\n\texports.HScrollBar = HScrollBar;\r\n\t});\r\n\r\n\tace.define(\"ace/renderloop\",[\"require\",\"exports\",\"module\",\"ace/lib/event\"], function(acequire, exports, module) {\r\n\t\"use strict\";\r\n\r\n\tvar event = acequire(\"./lib/event\");\r\n\r\n\r\n\tvar RenderLoop = function(onRender, win) {\r\n\t this.onRender = onRender;\r\n\t this.pending = false;\r\n\t this.changes = 0;\r\n\t this.window = win || window;\r\n\t};\r\n\r\n\t(function() {\r\n\r\n\r\n\t this.schedule = function(change) {\r\n\t this.changes = this.changes | change;\r\n\t if (!this.pending && this.changes) {\r\n\t this.pending = true;\r\n\t var _self = this;\r\n\t event.nextFrame(function() {\r\n\t _self.pending = false;\r\n\t var changes;\r\n\t while (changes = _self.changes) {\r\n\t _self.changes = 0;\r\n\t _self.onRender(changes);\r\n\t }\r\n\t }, this.window);\r\n\t }\r\n\t };\r\n\r\n\t}).call(RenderLoop.prototype);\r\n\r\n\texports.RenderLoop = RenderLoop;\r\n\t});\r\n\r\n\tace.define(\"ace/layer/font_metrics\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/dom\",\"ace/lib/lang\",\"ace/lib/useragent\",\"ace/lib/event_emitter\"], function(acequire, exports, module) {\r\n\r\n\tvar oop = acequire(\"../lib/oop\");\r\n\tvar dom = acequire(\"../lib/dom\");\r\n\tvar lang = acequire(\"../lib/lang\");\r\n\tvar useragent = acequire(\"../lib/useragent\");\r\n\tvar EventEmitter = acequire(\"../lib/event_emitter\").EventEmitter;\r\n\r\n\tvar CHAR_COUNT = 0;\r\n\r\n\tvar FontMetrics = exports.FontMetrics = function(parentEl) {\r\n\t this.el = dom.createElement(\"div\");\r\n\t this.$setMeasureNodeStyles(this.el.style, true);\r\n\t \r\n\t this.$main = dom.createElement(\"div\");\r\n\t this.$setMeasureNodeStyles(this.$main.style);\r\n\t \r\n\t this.$measureNode = dom.createElement(\"div\");\r\n\t this.$setMeasureNodeStyles(this.$measureNode.style);\r\n\t \r\n\t \r\n\t this.el.appendChild(this.$main);\r\n\t this.el.appendChild(this.$measureNode);\r\n\t parentEl.appendChild(this.el);\r\n\t \r\n\t if (!CHAR_COUNT)\r\n\t this.$testFractionalRect();\r\n\t this.$measureNode.innerHTML = lang.stringRepeat(\"X\", CHAR_COUNT);\r\n\t \r\n\t this.$characterSize = {width: 0, height: 0};\r\n\t this.checkForSizeChanges();\r\n\t};\r\n\r\n\t(function() {\r\n\r\n\t oop.implement(this, EventEmitter);\r\n\t \r\n\t this.$characterSize = {width: 0, height: 0};\r\n\t \r\n\t this.$testFractionalRect = function() {\r\n\t var el = dom.createElement(\"div\");\r\n\t this.$setMeasureNodeStyles(el.style);\r\n\t el.style.width = \"0.2px\";\r\n\t document.documentElement.appendChild(el);\r\n\t var w = el.getBoundingClientRect().width;\r\n\t if (w > 0 && w < 1)\r\n\t CHAR_COUNT = 50;\r\n\t else\r\n\t CHAR_COUNT = 100;\r\n\t el.parentNode.removeChild(el);\r\n\t };\r\n\t \r\n\t this.$setMeasureNodeStyles = function(style, isRoot) {\r\n\t style.width = style.height = \"auto\";\r\n\t style.left = style.top = \"0px\";\r\n\t style.visibility = \"hidden\";\r\n\t style.position = \"absolute\";\r\n\t style.whiteSpace = \"pre\";\r\n\r\n\t if (useragent.isIE < 8) {\r\n\t style[\"font-family\"] = \"inherit\";\r\n\t } else {\r\n\t style.font = \"inherit\";\r\n\t }\r\n\t style.overflow = isRoot ? \"hidden\" : \"visible\";\r\n\t };\r\n\r\n\t this.checkForSizeChanges = function() {\r\n\t var size = this.$measureSizes();\r\n\t if (size && (this.$characterSize.width !== size.width || this.$characterSize.height !== size.height)) {\r\n\t this.$measureNode.style.fontWeight = \"bold\";\r\n\t var boldSize = this.$measureSizes();\r\n\t this.$measureNode.style.fontWeight = \"\";\r\n\t this.$characterSize = size;\r\n\t this.charSizes = Object.create(null);\r\n\t this.allowBoldFonts = boldSize && boldSize.width === size.width && boldSize.height === size.height;\r\n\t this._emit(\"changeCharacterSize\", {data: size});\r\n\t }\r\n\t };\r\n\r\n\t this.$pollSizeChanges = function() {\r\n\t if (this.$pollSizeChangesTimer)\r\n\t return this.$pollSizeChangesTimer;\r\n\t var self = this;\r\n\t return this.$pollSizeChangesTimer = setInterval(function() {\r\n\t self.checkForSizeChanges();\r\n\t }, 500);\r\n\t };\r\n\t \r\n\t this.setPolling = function(val) {\r\n\t if (val) {\r\n\t this.$pollSizeChanges();\r\n\t } else if (this.$pollSizeChangesTimer) {\r\n\t clearInterval(this.$pollSizeChangesTimer);\r\n\t this.$pollSizeChangesTimer = 0;\r\n\t }\r\n\t };\r\n\r\n\t this.$measureSizes = function() {\r\n\t if (CHAR_COUNT === 50) {\r\n\t var rect = null;\r\n\t try { \r\n\t rect = this.$measureNode.getBoundingClientRect();\r\n\t } catch(e) {\r\n\t rect = {width: 0, height:0 };\r\n\t }\r\n\t var size = {\r\n\t height: rect.height,\r\n\t width: rect.width / CHAR_COUNT\r\n\t };\r\n\t } else {\r\n\t var size = {\r\n\t height: this.$measureNode.clientHeight,\r\n\t width: this.$measureNode.clientWidth / CHAR_COUNT\r\n\t };\r\n\t }\r\n\t if (size.width === 0 || size.height === 0)\r\n\t return null;\r\n\t return size;\r\n\t };\r\n\r\n\t this.$measureCharWidth = function(ch) {\r\n\t this.$main.innerHTML = lang.stringRepeat(ch, CHAR_COUNT);\r\n\t var rect = this.$main.getBoundingClientRect();\r\n\t return rect.width / CHAR_COUNT;\r\n\t };\r\n\t \r\n\t this.getCharacterWidth = function(ch) {\r\n\t var w = this.charSizes[ch];\r\n\t if (w === undefined) {\r\n\t w = this.charSizes[ch] = this.$measureCharWidth(ch) / this.$characterSize.width;\r\n\t }\r\n\t return w;\r\n\t };\r\n\r\n\t this.destroy = function() {\r\n\t clearInterval(this.$pollSizeChangesTimer);\r\n\t if (this.el && this.el.parentNode)\r\n\t this.el.parentNode.removeChild(this.el);\r\n\t };\r\n\r\n\t}).call(FontMetrics.prototype);\r\n\r\n\t});\r\n\r\n\tace.define(\"ace/virtual_renderer\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/dom\",\"ace/config\",\"ace/lib/useragent\",\"ace/layer/gutter\",\"ace/layer/marker\",\"ace/layer/text\",\"ace/layer/cursor\",\"ace/scrollbar\",\"ace/scrollbar\",\"ace/renderloop\",\"ace/layer/font_metrics\",\"ace/lib/event_emitter\"], function(acequire, exports, module) {\r\n\t\"use strict\";\r\n\r\n\tvar oop = acequire(\"./lib/oop\");\r\n\tvar dom = acequire(\"./lib/dom\");\r\n\tvar config = acequire(\"./config\");\r\n\tvar useragent = acequire(\"./lib/useragent\");\r\n\tvar GutterLayer = acequire(\"./layer/gutter\").Gutter;\r\n\tvar MarkerLayer = acequire(\"./layer/marker\").Marker;\r\n\tvar TextLayer = acequire(\"./layer/text\").Text;\r\n\tvar CursorLayer = acequire(\"./layer/cursor\").Cursor;\r\n\tvar HScrollBar = acequire(\"./scrollbar\").HScrollBar;\r\n\tvar VScrollBar = acequire(\"./scrollbar\").VScrollBar;\r\n\tvar RenderLoop = acequire(\"./renderloop\").RenderLoop;\r\n\tvar FontMetrics = acequire(\"./layer/font_metrics\").FontMetrics;\r\n\tvar EventEmitter = acequire(\"./lib/event_emitter\").EventEmitter;\r\n\tvar editorCss = \".ace_editor {\\\r\n\tposition: relative;\\\r\n\toverflow: hidden;\\\r\n\tfont: 12px/normal 'Monaco', 'Menlo', 'Ubuntu Mono', 'Consolas', 'source-code-pro', monospace;\\\r\n\tdirection: ltr;\\\r\n\t}\\\r\n\t.ace_scroller {\\\r\n\tposition: absolute;\\\r\n\toverflow: hidden;\\\r\n\ttop: 0;\\\r\n\tbottom: 0;\\\r\n\tbackground-color: inherit;\\\r\n\t-ms-user-select: none;\\\r\n\t-moz-user-select: none;\\\r\n\t-webkit-user-select: none;\\\r\n\tuser-select: none;\\\r\n\tcursor: text;\\\r\n\t}\\\r\n\t.ace_content {\\\r\n\tposition: absolute;\\\r\n\t-moz-box-sizing: border-box;\\\r\n\t-webkit-box-sizing: border-box;\\\r\n\tbox-sizing: border-box;\\\r\n\tmin-width: 100%;\\\r\n\t}\\\r\n\t.ace_dragging .ace_scroller:before{\\\r\n\tposition: absolute;\\\r\n\ttop: 0;\\\r\n\tleft: 0;\\\r\n\tright: 0;\\\r\n\tbottom: 0;\\\r\n\tcontent: '';\\\r\n\tbackground: rgba(250, 250, 250, 0.01);\\\r\n\tz-index: 1000;\\\r\n\t}\\\r\n\t.ace_dragging.ace_dark .ace_scroller:before{\\\r\n\tbackground: rgba(0, 0, 0, 0.01);\\\r\n\t}\\\r\n\t.ace_selecting, .ace_selecting * {\\\r\n\tcursor: text !important;\\\r\n\t}\\\r\n\t.ace_gutter {\\\r\n\tposition: absolute;\\\r\n\toverflow : hidden;\\\r\n\twidth: auto;\\\r\n\ttop: 0;\\\r\n\tbottom: 0;\\\r\n\tleft: 0;\\\r\n\tcursor: default;\\\r\n\tz-index: 4;\\\r\n\t-ms-user-select: none;\\\r\n\t-moz-user-select: none;\\\r\n\t-webkit-user-select: none;\\\r\n\tuser-select: none;\\\r\n\t}\\\r\n\t.ace_gutter-active-line {\\\r\n\tposition: absolute;\\\r\n\tleft: 0;\\\r\n\tright: 0;\\\r\n\t}\\\r\n\t.ace_scroller.ace_scroll-left {\\\r\n\tbox-shadow: 17px 0 16px -16px rgba(0, 0, 0, 0.4) inset;\\\r\n\t}\\\r\n\t.ace_gutter-cell {\\\r\n\tpadding-left: 19px;\\\r\n\tpadding-right: 6px;\\\r\n\tbackground-repeat: no-repeat;\\\r\n\t}\\\r\n\t.ace_gutter-cell.ace_error {\\\r\n\tbackground-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAABOFBMVEX/////////QRswFAb/Ui4wFAYwFAYwFAaWGAfDRymzOSH/PxswFAb/SiUwFAYwFAbUPRvjQiDllog5HhHdRybsTi3/Tyv9Tir+Syj/UC3////XurebMBIwFAb/RSHbPx/gUzfdwL3kzMivKBAwFAbbvbnhPx66NhowFAYwFAaZJg8wFAaxKBDZurf/RB6mMxb/SCMwFAYwFAbxQB3+RB4wFAb/Qhy4Oh+4QifbNRcwFAYwFAYwFAb/QRzdNhgwFAYwFAbav7v/Uy7oaE68MBK5LxLewr/r2NXewLswFAaxJw4wFAbkPRy2PyYwFAaxKhLm1tMwFAazPiQwFAaUGAb/QBrfOx3bvrv/VC/maE4wFAbRPBq6MRO8Qynew8Dp2tjfwb0wFAbx6eju5+by6uns4uH9/f36+vr/GkHjAAAAYnRSTlMAGt+64rnWu/bo8eAA4InH3+DwoN7j4eLi4xP99Nfg4+b+/u9B/eDs1MD1mO7+4PHg2MXa347g7vDizMLN4eG+Pv7i5evs/v79yu7S3/DV7/498Yv24eH+4ufQ3Ozu/v7+y13sRqwAAADLSURBVHjaZc/XDsFgGIBhtDrshlitmk2IrbHFqL2pvXf/+78DPokj7+Fz9qpU/9UXJIlhmPaTaQ6QPaz0mm+5gwkgovcV6GZzd5JtCQwgsxoHOvJO15kleRLAnMgHFIESUEPmawB9ngmelTtipwwfASilxOLyiV5UVUyVAfbG0cCPHig+GBkzAENHS0AstVF6bacZIOzgLmxsHbt2OecNgJC83JERmePUYq8ARGkJx6XtFsdddBQgZE2nPR6CICZhawjA4Fb/chv+399kfR+MMMDGOQAAAABJRU5ErkJggg==\\\");\\\r\n\tbackground-repeat: no-repeat;\\\r\n\tbackground-position: 2px center;\\\r\n\t}\\\r\n\t.ace_gutter-cell.ace_warning {\\\r\n\tbackground-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAmVBMVEX///8AAAD///8AAAAAAABPSzb/5sAAAAB/blH/73z/ulkAAAAAAAD85pkAAAAAAAACAgP/vGz/rkDerGbGrV7/pkQICAf////e0IsAAAD/oED/qTvhrnUAAAD/yHD/njcAAADuv2r/nz//oTj/p064oGf/zHAAAAA9Nir/tFIAAAD/tlTiuWf/tkIAAACynXEAAAAAAAAtIRW7zBpBAAAAM3RSTlMAABR1m7RXO8Ln31Z36zT+neXe5OzooRDfn+TZ4p3h2hTf4t3k3ucyrN1K5+Xaks52Sfs9CXgrAAAAjklEQVR42o3PbQ+CIBQFYEwboPhSYgoYunIqqLn6/z8uYdH8Vmdnu9vz4WwXgN/xTPRD2+sgOcZjsge/whXZgUaYYvT8QnuJaUrjrHUQreGczuEafQCO/SJTufTbroWsPgsllVhq3wJEk2jUSzX3CUEDJC84707djRc5MTAQxoLgupWRwW6UB5fS++NV8AbOZgnsC7BpEAAAAABJRU5ErkJggg==\\\");\\\r\n\tbackground-position: 2px center;\\\r\n\t}\\\r\n\t.ace_gutter-cell.ace_info {\\\r\n\tbackground-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAAAAAA6mKC9AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAAJ0Uk5TAAB2k804AAAAPklEQVQY02NgIB68QuO3tiLznjAwpKTgNyDbMegwisCHZUETUZV0ZqOquBpXj2rtnpSJT1AEnnRmL2OgGgAAIKkRQap2htgAAAAASUVORK5CYII=\\\");\\\r\n\tbackground-position: 2px center;\\\r\n\t}\\\r\n\t.ace_dark .ace_gutter-cell.ace_info {\\\r\n\tbackground-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAJFBMVEUAAAChoaGAgIAqKiq+vr6tra1ZWVmUlJSbm5s8PDxubm56enrdgzg3AAAAAXRSTlMAQObYZgAAAClJREFUeNpjYMAPdsMYHegyJZFQBlsUlMFVCWUYKkAZMxZAGdxlDMQBAG+TBP4B6RyJAAAAAElFTkSuQmCC\\\");\\\r\n\t}\\\r\n\t.ace_scrollbar {\\\r\n\tposition: absolute;\\\r\n\tright: 0;\\\r\n\tbottom: 0;\\\r\n\tz-index: 6;\\\r\n\t}\\\r\n\t.ace_scrollbar-inner {\\\r\n\tposition: absolute;\\\r\n\tcursor: text;\\\r\n\tleft: 0;\\\r\n\ttop: 0;\\\r\n\t}\\\r\n\t.ace_scrollbar-v{\\\r\n\toverflow-x: hidden;\\\r\n\toverflow-y: scroll;\\\r\n\ttop: 0;\\\r\n\t}\\\r\n\t.ace_scrollbar-h {\\\r\n\toverflow-x: scroll;\\\r\n\toverflow-y: hidden;\\\r\n\tleft: 0;\\\r\n\t}\\\r\n\t.ace_print-margin {\\\r\n\tposition: absolute;\\\r\n\theight: 100%;\\\r\n\t}\\\r\n\t.ace_text-input {\\\r\n\tposition: absolute;\\\r\n\tz-index: 0;\\\r\n\twidth: 0.5em;\\\r\n\theight: 1em;\\\r\n\topacity: 0;\\\r\n\tbackground: transparent;\\\r\n\t-moz-appearance: none;\\\r\n\tappearance: none;\\\r\n\tborder: none;\\\r\n\tresize: none;\\\r\n\toutline: none;\\\r\n\toverflow: hidden;\\\r\n\tfont: inherit;\\\r\n\tpadding: 0 1px;\\\r\n\tmargin: 0 -1px;\\\r\n\ttext-indent: -1em;\\\r\n\t-ms-user-select: text;\\\r\n\t-moz-user-select: text;\\\r\n\t-webkit-user-select: text;\\\r\n\tuser-select: text;\\\r\n\twhite-space: pre!important;\\\r\n\t}\\\r\n\t.ace_text-input.ace_composition {\\\r\n\tbackground: inherit;\\\r\n\tcolor: inherit;\\\r\n\tz-index: 1000;\\\r\n\topacity: 1;\\\r\n\ttext-indent: 0;\\\r\n\t}\\\r\n\t.ace_layer {\\\r\n\tz-index: 1;\\\r\n\tposition: absolute;\\\r\n\toverflow: hidden;\\\r\n\tword-wrap: normal;\\\r\n\twhite-space: pre;\\\r\n\theight: 100%;\\\r\n\twidth: 100%;\\\r\n\t-moz-box-sizing: border-box;\\\r\n\t-webkit-box-sizing: border-box;\\\r\n\tbox-sizing: border-box;\\\r\n\tpointer-events: none;\\\r\n\t}\\\r\n\t.ace_gutter-layer {\\\r\n\tposition: relative;\\\r\n\twidth: auto;\\\r\n\ttext-align: right;\\\r\n\tpointer-events: auto;\\\r\n\t}\\\r\n\t.ace_text-layer {\\\r\n\tfont: inherit !important;\\\r\n\t}\\\r\n\t.ace_cjk {\\\r\n\tdisplay: inline-block;\\\r\n\ttext-align: center;\\\r\n\t}\\\r\n\t.ace_cursor-layer {\\\r\n\tz-index: 4;\\\r\n\t}\\\r\n\t.ace_cursor {\\\r\n\tz-index: 4;\\\r\n\tposition: absolute;\\\r\n\t-moz-box-sizing: border-box;\\\r\n\t-webkit-box-sizing: border-box;\\\r\n\tbox-sizing: border-box;\\\r\n\tborder-left: 2px solid;\\\r\n\ttransform: translatez(0);\\\r\n\t}\\\r\n\t.ace_slim-cursors .ace_cursor {\\\r\n\tborder-left-width: 1px;\\\r\n\t}\\\r\n\t.ace_overwrite-cursors .ace_cursor {\\\r\n\tborder-left-width: 0;\\\r\n\tborder-bottom: 1px solid;\\\r\n\t}\\\r\n\t.ace_hidden-cursors .ace_cursor {\\\r\n\topacity: 0.2;\\\r\n\t}\\\r\n\t.ace_smooth-blinking .ace_cursor {\\\r\n\t-webkit-transition: opacity 0.18s;\\\r\n\ttransition: opacity 0.18s;\\\r\n\t}\\\r\n\t.ace_editor.ace_multiselect .ace_cursor {\\\r\n\tborder-left-width: 1px;\\\r\n\t}\\\r\n\t.ace_marker-layer .ace_step, .ace_marker-layer .ace_stack {\\\r\n\tposition: absolute;\\\r\n\tz-index: 3;\\\r\n\t}\\\r\n\t.ace_marker-layer .ace_selection {\\\r\n\tposition: absolute;\\\r\n\tz-index: 5;\\\r\n\t}\\\r\n\t.ace_marker-layer .ace_bracket {\\\r\n\tposition: absolute;\\\r\n\tz-index: 6;\\\r\n\t}\\\r\n\t.ace_marker-layer .ace_active-line {\\\r\n\tposition: absolute;\\\r\n\tz-index: 2;\\\r\n\t}\\\r\n\t.ace_marker-layer .ace_selected-word {\\\r\n\tposition: absolute;\\\r\n\tz-index: 4;\\\r\n\t-moz-box-sizing: border-box;\\\r\n\t-webkit-box-sizing: border-box;\\\r\n\tbox-sizing: border-box;\\\r\n\t}\\\r\n\t.ace_line .ace_fold {\\\r\n\t-moz-box-sizing: border-box;\\\r\n\t-webkit-box-sizing: border-box;\\\r\n\tbox-sizing: border-box;\\\r\n\tdisplay: inline-block;\\\r\n\theight: 11px;\\\r\n\tmargin-top: -2px;\\\r\n\tvertical-align: middle;\\\r\n\tbackground-image:\\\r\n\turl(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAAJCAYAAADU6McMAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAJpJREFUeNpi/P//PwOlgAXGYGRklAVSokD8GmjwY1wasKljQpYACtpCFeADcHVQfQyMQAwzwAZI3wJKvCLkfKBaMSClBlR7BOQikCFGQEErIH0VqkabiGCAqwUadAzZJRxQr/0gwiXIal8zQQPnNVTgJ1TdawL0T5gBIP1MUJNhBv2HKoQHHjqNrA4WO4zY0glyNKLT2KIfIMAAQsdgGiXvgnYAAAAASUVORK5CYII=\\\"),\\\r\n\turl(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAA3CAYAAADNNiA5AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACJJREFUeNpi+P//fxgTAwPDBxDxD078RSX+YeEyDFMCIMAAI3INmXiwf2YAAAAASUVORK5CYII=\\\");\\\r\n\tbackground-repeat: no-repeat, repeat-x;\\\r\n\tbackground-position: center center, top left;\\\r\n\tcolor: transparent;\\\r\n\tborder: 1px solid black;\\\r\n\tborder-radius: 2px;\\\r\n\tcursor: pointer;\\\r\n\tpointer-events: auto;\\\r\n\t}\\\r\n\t.ace_dark .ace_fold {\\\r\n\t}\\\r\n\t.ace_fold:hover{\\\r\n\tbackground-image:\\\r\n\turl(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAAJCAYAAADU6McMAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAJpJREFUeNpi/P//PwOlgAXGYGRklAVSokD8GmjwY1wasKljQpYACtpCFeADcHVQfQyMQAwzwAZI3wJKvCLkfKBaMSClBlR7BOQikCFGQEErIH0VqkabiGCAqwUadAzZJRxQr/0gwiXIal8zQQPnNVTgJ1TdawL0T5gBIP1MUJNhBv2HKoQHHjqNrA4WO4zY0glyNKLT2KIfIMAAQsdgGiXvgnYAAAAASUVORK5CYII=\\\"),\\\r\n\turl(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAA3CAYAAADNNiA5AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACBJREFUeNpi+P//fz4TAwPDZxDxD5X4i5fLMEwJgAADAEPVDbjNw87ZAAAAAElFTkSuQmCC\\\");\\\r\n\t}\\\r\n\t.ace_tooltip {\\\r\n\tbackground-color: #FFF;\\\r\n\tbackground-image: -webkit-linear-gradient(top, transparent, rgba(0, 0, 0, 0.1));\\\r\n\tbackground-image: linear-gradient(to bottom, transparent, rgba(0, 0, 0, 0.1));\\\r\n\tborder: 1px solid gray;\\\r\n\tborder-radius: 1px;\\\r\n\tbox-shadow: 0 1px 2px rgba(0, 0, 0, 0.3);\\\r\n\tcolor: black;\\\r\n\tmax-width: 100%;\\\r\n\tpadding: 3px 4px;\\\r\n\tposition: fixed;\\\r\n\tz-index: 999999;\\\r\n\t-moz-box-sizing: border-box;\\\r\n\t-webkit-box-sizing: border-box;\\\r\n\tbox-sizing: border-box;\\\r\n\tcursor: default;\\\r\n\twhite-space: pre;\\\r\n\tword-wrap: break-word;\\\r\n\tline-height: normal;\\\r\n\tfont-style: normal;\\\r\n\tfont-weight: normal;\\\r\n\tletter-spacing: normal;\\\r\n\tpointer-events: none;\\\r\n\t}\\\r\n\t.ace_folding-enabled > .ace_gutter-cell {\\\r\n\tpadding-right: 13px;\\\r\n\t}\\\r\n\t.ace_fold-widget {\\\r\n\t-moz-box-sizing: border-box;\\\r\n\t-webkit-box-sizing: border-box;\\\r\n\tbox-sizing: border-box;\\\r\n\tmargin: 0 -12px 0 1px;\\\r\n\tdisplay: none;\\\r\n\twidth: 11px;\\\r\n\tvertical-align: top;\\\r\n\tbackground-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAANElEQVR42mWKsQ0AMAzC8ixLlrzQjzmBiEjp0A6WwBCSPgKAXoLkqSot7nN3yMwR7pZ32NzpKkVoDBUxKAAAAABJRU5ErkJggg==\\\");\\\r\n\tbackground-repeat: no-repeat;\\\r\n\tbackground-position: center;\\\r\n\tborder-radius: 3px;\\\r\n\tborder: 1px solid transparent;\\\r\n\tcursor: pointer;\\\r\n\t}\\\r\n\t.ace_folding-enabled .ace_fold-widget {\\\r\n\tdisplay: inline-block; \\\r\n\t}\\\r\n\t.ace_fold-widget.ace_end {\\\r\n\tbackground-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAANElEQVR42m3HwQkAMAhD0YzsRchFKI7sAikeWkrxwScEB0nh5e7KTPWimZki4tYfVbX+MNl4pyZXejUO1QAAAABJRU5ErkJggg==\\\");\\\r\n\t}\\\r\n\t.ace_fold-widget.ace_closed {\\\r\n\tbackground-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAGCAYAAAAG5SQMAAAAOUlEQVR42jXKwQkAMAgDwKwqKD4EwQ26sSOkVWjgIIHAzPiCgaqiqnJHZnKICBERHN194O5b9vbLuAVRL+l0YWnZAAAAAElFTkSuQmCCXA==\\\");\\\r\n\t}\\\r\n\t.ace_fold-widget:hover {\\\r\n\tborder: 1px solid rgba(0, 0, 0, 0.3);\\\r\n\tbackground-color: rgba(255, 255, 255, 0.2);\\\r\n\tbox-shadow: 0 1px 1px rgba(255, 255, 255, 0.7);\\\r\n\t}\\\r\n\t.ace_fold-widget:active {\\\r\n\tborder: 1px solid rgba(0, 0, 0, 0.4);\\\r\n\tbackground-color: rgba(0, 0, 0, 0.05);\\\r\n\tbox-shadow: 0 1px 1px rgba(255, 255, 255, 0.8);\\\r\n\t}\\\r\n\t.ace_dark .ace_fold-widget {\\\r\n\tbackground-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHklEQVQIW2P4//8/AzoGEQ7oGCaLLAhWiSwB146BAQCSTPYocqT0AAAAAElFTkSuQmCC\\\");\\\r\n\t}\\\r\n\t.ace_dark .ace_fold-widget.ace_end {\\\r\n\tbackground-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAH0lEQVQIW2P4//8/AxQ7wNjIAjDMgC4AxjCVKBirIAAF0kz2rlhxpAAAAABJRU5ErkJggg==\\\");\\\r\n\t}\\\r\n\t.ace_dark .ace_fold-widget.ace_closed {\\\r\n\tbackground-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAFCAYAAACAcVaiAAAAHElEQVQIW2P4//+/AxAzgDADlOOAznHAKgPWAwARji8UIDTfQQAAAABJRU5ErkJggg==\\\");\\\r\n\t}\\\r\n\t.ace_dark .ace_fold-widget:hover {\\\r\n\tbox-shadow: 0 1px 1px rgba(255, 255, 255, 0.2);\\\r\n\tbackground-color: rgba(255, 255, 255, 0.1);\\\r\n\t}\\\r\n\t.ace_dark .ace_fold-widget:active {\\\r\n\tbox-shadow: 0 1px 1px rgba(255, 255, 255, 0.2);\\\r\n\t}\\\r\n\t.ace_fold-widget.ace_invalid {\\\r\n\tbackground-color: #FFB4B4;\\\r\n\tborder-color: #DE5555;\\\r\n\t}\\\r\n\t.ace_fade-fold-widgets .ace_fold-widget {\\\r\n\t-webkit-transition: opacity 0.4s ease 0.05s;\\\r\n\ttransition: opacity 0.4s ease 0.05s;\\\r\n\topacity: 0;\\\r\n\t}\\\r\n\t.ace_fade-fold-widgets:hover .ace_fold-widget {\\\r\n\t-webkit-transition: opacity 0.05s ease 0.05s;\\\r\n\ttransition: opacity 0.05s ease 0.05s;\\\r\n\topacity:1;\\\r\n\t}\\\r\n\t.ace_underline {\\\r\n\ttext-decoration: underline;\\\r\n\t}\\\r\n\t.ace_bold {\\\r\n\tfont-weight: bold;\\\r\n\t}\\\r\n\t.ace_nobold .ace_bold {\\\r\n\tfont-weight: normal;\\\r\n\t}\\\r\n\t.ace_italic {\\\r\n\tfont-style: italic;\\\r\n\t}\\\r\n\t.ace_error-marker {\\\r\n\tbackground-color: rgba(255, 0, 0,0.2);\\\r\n\tposition: absolute;\\\r\n\tz-index: 9;\\\r\n\t}\\\r\n\t.ace_highlight-marker {\\\r\n\tbackground-color: rgba(255, 255, 0,0.2);\\\r\n\tposition: absolute;\\\r\n\tz-index: 8;\\\r\n\t}\\\r\n\t.ace_br1 {border-top-left-radius : 3px;}\\\r\n\t.ace_br2 {border-top-right-radius : 3px;}\\\r\n\t.ace_br3 {border-top-left-radius : 3px; border-top-right-radius: 3px;}\\\r\n\t.ace_br4 {border-bottom-right-radius: 3px;}\\\r\n\t.ace_br5 {border-top-left-radius : 3px; border-bottom-right-radius: 3px;}\\\r\n\t.ace_br6 {border-top-right-radius : 3px; border-bottom-right-radius: 3px;}\\\r\n\t.ace_br7 {border-top-left-radius : 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px;}\\\r\n\t.ace_br8 {border-bottom-left-radius : 3px;}\\\r\n\t.ace_br9 {border-top-left-radius : 3px; border-bottom-left-radius: 3px;}\\\r\n\t.ace_br10{border-top-right-radius : 3px; border-bottom-left-radius: 3px;}\\\r\n\t.ace_br11{border-top-left-radius : 3px; border-top-right-radius: 3px; border-bottom-left-radius: 3px;}\\\r\n\t.ace_br12{border-bottom-right-radius: 3px; border-bottom-left-radius: 3px;}\\\r\n\t.ace_br13{border-top-left-radius : 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px;}\\\r\n\t.ace_br14{border-top-right-radius : 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px;}\\\r\n\t.ace_br15{border-top-left-radius : 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px;}\\\r\n\t\";\r\n\r\n\tdom.importCssString(editorCss, \"ace_editor.css\");\r\n\r\n\tvar VirtualRenderer = function(container, theme) {\r\n\t var _self = this;\r\n\r\n\t this.container = container || dom.createElement(\"div\");\r\n\t this.$keepTextAreaAtCursor = !useragent.isOldIE;\r\n\r\n\t dom.addCssClass(this.container, \"ace_editor\");\r\n\r\n\t this.setTheme(theme);\r\n\r\n\t this.$gutter = dom.createElement(\"div\");\r\n\t this.$gutter.className = \"ace_gutter\";\r\n\t this.container.appendChild(this.$gutter);\r\n\r\n\t this.scroller = dom.createElement(\"div\");\r\n\t this.scroller.className = \"ace_scroller\";\r\n\t this.container.appendChild(this.scroller);\r\n\r\n\t this.content = dom.createElement(\"div\");\r\n\t this.content.className = \"ace_content\";\r\n\t this.scroller.appendChild(this.content);\r\n\r\n\t this.$gutterLayer = new GutterLayer(this.$gutter);\r\n\t this.$gutterLayer.on(\"changeGutterWidth\", this.onGutterResize.bind(this));\r\n\r\n\t this.$markerBack = new MarkerLayer(this.content);\r\n\r\n\t var textLayer = this.$textLayer = new TextLayer(this.content);\r\n\t this.canvas = textLayer.element;\r\n\r\n\t this.$markerFront = new MarkerLayer(this.content);\r\n\r\n\t this.$cursorLayer = new CursorLayer(this.content);\r\n\t this.$horizScroll = false;\r\n\t this.$vScroll = false;\r\n\r\n\t this.scrollBar = \r\n\t this.scrollBarV = new VScrollBar(this.container, this);\r\n\t this.scrollBarH = new HScrollBar(this.container, this);\r\n\t this.scrollBarV.addEventListener(\"scroll\", function(e) {\r\n\t if (!_self.$scrollAnimation)\r\n\t _self.session.setScrollTop(e.data - _self.scrollMargin.top);\r\n\t });\r\n\t this.scrollBarH.addEventListener(\"scroll\", function(e) {\r\n\t if (!_self.$scrollAnimation)\r\n\t _self.session.setScrollLeft(e.data - _self.scrollMargin.left);\r\n\t });\r\n\r\n\t this.scrollTop = 0;\r\n\t this.scrollLeft = 0;\r\n\r\n\t this.cursorPos = {\r\n\t row : 0,\r\n\t column : 0\r\n\t };\r\n\r\n\t this.$fontMetrics = new FontMetrics(this.container);\r\n\t this.$textLayer.$setFontMetrics(this.$fontMetrics);\r\n\t this.$textLayer.addEventListener(\"changeCharacterSize\", function(e) {\r\n\t _self.updateCharacterSize();\r\n\t _self.onResize(true, _self.gutterWidth, _self.$size.width, _self.$size.height);\r\n\t _self._signal(\"changeCharacterSize\", e);\r\n\t });\r\n\r\n\t this.$size = {\r\n\t width: 0,\r\n\t height: 0,\r\n\t scrollerHeight: 0,\r\n\t scrollerWidth: 0,\r\n\t $dirty: true\r\n\t };\r\n\r\n\t this.layerConfig = {\r\n\t width : 1,\r\n\t padding : 0,\r\n\t firstRow : 0,\r\n\t firstRowScreen: 0,\r\n\t lastRow : 0,\r\n\t lineHeight : 0,\r\n\t characterWidth : 0,\r\n\t minHeight : 1,\r\n\t maxHeight : 1,\r\n\t offset : 0,\r\n\t height : 1,\r\n\t gutterOffset: 1\r\n\t };\r\n\t \r\n\t this.scrollMargin = {\r\n\t left: 0,\r\n\t right: 0,\r\n\t top: 0,\r\n\t bottom: 0,\r\n\t v: 0,\r\n\t h: 0\r\n\t };\r\n\r\n\t this.$loop = new RenderLoop(\r\n\t this.$renderChanges.bind(this),\r\n\t this.container.ownerDocument.defaultView\r\n\t );\r\n\t this.$loop.schedule(this.CHANGE_FULL);\r\n\r\n\t this.updateCharacterSize();\r\n\t this.setPadding(4);\r\n\t config.resetOptions(this);\r\n\t config._emit(\"renderer\", this);\r\n\t};\r\n\r\n\t(function() {\r\n\r\n\t this.CHANGE_CURSOR = 1;\r\n\t this.CHANGE_MARKER = 2;\r\n\t this.CHANGE_GUTTER = 4;\r\n\t this.CHANGE_SCROLL = 8;\r\n\t this.CHANGE_LINES = 16;\r\n\t this.CHANGE_TEXT = 32;\r\n\t this.CHANGE_SIZE = 64;\r\n\t this.CHANGE_MARKER_BACK = 128;\r\n\t this.CHANGE_MARKER_FRONT = 256;\r\n\t this.CHANGE_FULL = 512;\r\n\t this.CHANGE_H_SCROLL = 1024;\r\n\r\n\t oop.implement(this, EventEmitter);\r\n\r\n\t this.updateCharacterSize = function() {\r\n\t if (this.$textLayer.allowBoldFonts != this.$allowBoldFonts) {\r\n\t this.$allowBoldFonts = this.$textLayer.allowBoldFonts;\r\n\t this.setStyle(\"ace_nobold\", !this.$allowBoldFonts);\r\n\t }\r\n\r\n\t this.layerConfig.characterWidth =\r\n\t this.characterWidth = this.$textLayer.getCharacterWidth();\r\n\t this.layerConfig.lineHeight =\r\n\t this.lineHeight = this.$textLayer.getLineHeight();\r\n\t this.$updatePrintMargin();\r\n\t };\r\n\t this.setSession = function(session) {\r\n\t if (this.session)\r\n\t this.session.doc.off(\"changeNewLineMode\", this.onChangeNewLineMode);\r\n\t \r\n\t this.session = session;\r\n\t if (session && this.scrollMargin.top && session.getScrollTop() <= 0)\r\n\t session.setScrollTop(-this.scrollMargin.top);\r\n\r\n\t this.$cursorLayer.setSession(session);\r\n\t this.$markerBack.setSession(session);\r\n\t this.$markerFront.setSession(session);\r\n\t this.$gutterLayer.setSession(session);\r\n\t this.$textLayer.setSession(session);\r\n\t if (!session)\r\n\t return;\r\n\t \r\n\t this.$loop.schedule(this.CHANGE_FULL);\r\n\t this.session.$setFontMetrics(this.$fontMetrics);\r\n\t \r\n\t this.onChangeNewLineMode = this.onChangeNewLineMode.bind(this);\r\n\t this.onChangeNewLineMode()\r\n\t this.session.doc.on(\"changeNewLineMode\", this.onChangeNewLineMode);\r\n\t };\r\n\t this.updateLines = function(firstRow, lastRow, force) {\r\n\t if (lastRow === undefined)\r\n\t lastRow = Infinity;\r\n\r\n\t if (!this.$changedLines) {\r\n\t this.$changedLines = {\r\n\t firstRow: firstRow,\r\n\t lastRow: lastRow\r\n\t };\r\n\t }\r\n\t else {\r\n\t if (this.$changedLines.firstRow > firstRow)\r\n\t this.$changedLines.firstRow = firstRow;\r\n\r\n\t if (this.$changedLines.lastRow < lastRow)\r\n\t this.$changedLines.lastRow = lastRow;\r\n\t }\r\n\t if (this.$changedLines.lastRow < this.layerConfig.firstRow) {\r\n\t if (force)\r\n\t this.$changedLines.lastRow = this.layerConfig.lastRow;\r\n\t else\r\n\t return;\r\n\t }\r\n\t if (this.$changedLines.firstRow > this.layerConfig.lastRow)\r\n\t return;\r\n\t this.$loop.schedule(this.CHANGE_LINES);\r\n\t };\r\n\r\n\t this.onChangeNewLineMode = function() {\r\n\t this.$loop.schedule(this.CHANGE_TEXT);\r\n\t this.$textLayer.$updateEolChar();\r\n\t };\r\n\t \r\n\t this.onChangeTabSize = function() {\r\n\t this.$loop.schedule(this.CHANGE_TEXT | this.CHANGE_MARKER);\r\n\t this.$textLayer.onChangeTabSize();\r\n\t };\r\n\t this.updateText = function() {\r\n\t this.$loop.schedule(this.CHANGE_TEXT);\r\n\t };\r\n\t this.updateFull = function(force) {\r\n\t if (force)\r\n\t this.$renderChanges(this.CHANGE_FULL, true);\r\n\t else\r\n\t this.$loop.schedule(this.CHANGE_FULL);\r\n\t };\r\n\t this.updateFontSize = function() {\r\n\t this.$textLayer.checkForSizeChanges();\r\n\t };\r\n\r\n\t this.$changes = 0;\r\n\t this.$updateSizeAsync = function() {\r\n\t if (this.$loop.pending)\r\n\t this.$size.$dirty = true;\r\n\t else\r\n\t this.onResize();\r\n\t };\r\n\t this.onResize = function(force, gutterWidth, width, height) {\r\n\t if (this.resizing > 2)\r\n\t return;\r\n\t else if (this.resizing > 0)\r\n\t this.resizing++;\r\n\t else\r\n\t this.resizing = force ? 1 : 0;\r\n\t var el = this.container;\r\n\t if (!height)\r\n\t height = el.clientHeight || el.scrollHeight;\r\n\t if (!width)\r\n\t width = el.clientWidth || el.scrollWidth;\r\n\t var changes = this.$updateCachedSize(force, gutterWidth, width, height);\r\n\r\n\t \r\n\t if (!this.$size.scrollerHeight || (!width && !height))\r\n\t return this.resizing = 0;\r\n\r\n\t if (force)\r\n\t this.$gutterLayer.$padding = null;\r\n\r\n\t if (force)\r\n\t this.$renderChanges(changes | this.$changes, true);\r\n\t else\r\n\t this.$loop.schedule(changes | this.$changes);\r\n\r\n\t if (this.resizing)\r\n\t this.resizing = 0;\r\n\t this.scrollBarV.scrollLeft = this.scrollBarV.scrollTop = null;\r\n\t };\r\n\t \r\n\t this.$updateCachedSize = function(force, gutterWidth, width, height) {\r\n\t height -= (this.$extraHeight || 0);\r\n\t var changes = 0;\r\n\t var size = this.$size;\r\n\t var oldSize = {\r\n\t width: size.width,\r\n\t height: size.height,\r\n\t scrollerHeight: size.scrollerHeight,\r\n\t scrollerWidth: size.scrollerWidth\r\n\t };\r\n\t if (height && (force || size.height != height)) {\r\n\t size.height = height;\r\n\t changes |= this.CHANGE_SIZE;\r\n\r\n\t size.scrollerHeight = size.height;\r\n\t if (this.$horizScroll)\r\n\t size.scrollerHeight -= this.scrollBarH.getHeight();\r\n\t this.scrollBarV.element.style.bottom = this.scrollBarH.getHeight() + \"px\";\r\n\r\n\t changes = changes | this.CHANGE_SCROLL;\r\n\t }\r\n\r\n\t if (width && (force || size.width != width)) {\r\n\t changes |= this.CHANGE_SIZE;\r\n\t size.width = width;\r\n\t \r\n\t if (gutterWidth == null)\r\n\t gutterWidth = this.$showGutter ? this.$gutter.offsetWidth : 0;\r\n\t \r\n\t this.gutterWidth = gutterWidth;\r\n\t \r\n\t this.scrollBarH.element.style.left = \r\n\t this.scroller.style.left = gutterWidth + \"px\";\r\n\t size.scrollerWidth = Math.max(0, width - gutterWidth - this.scrollBarV.getWidth()); \r\n\t \r\n\t this.scrollBarH.element.style.right = \r\n\t this.scroller.style.right = this.scrollBarV.getWidth() + \"px\";\r\n\t this.scroller.style.bottom = this.scrollBarH.getHeight() + \"px\";\r\n\r\n\t if (this.session && this.session.getUseWrapMode() && this.adjustWrapLimit() || force)\r\n\t changes |= this.CHANGE_FULL;\r\n\t }\r\n\t \r\n\t size.$dirty = !width || !height;\r\n\r\n\t if (changes)\r\n\t this._signal(\"resize\", oldSize);\r\n\r\n\t return changes;\r\n\t };\r\n\r\n\t this.onGutterResize = function() {\r\n\t var gutterWidth = this.$showGutter ? this.$gutter.offsetWidth : 0;\r\n\t if (gutterWidth != this.gutterWidth)\r\n\t this.$changes |= this.$updateCachedSize(true, gutterWidth, this.$size.width, this.$size.height);\r\n\r\n\t if (this.session.getUseWrapMode() && this.adjustWrapLimit()) {\r\n\t this.$loop.schedule(this.CHANGE_FULL);\r\n\t } else if (this.$size.$dirty) {\r\n\t this.$loop.schedule(this.CHANGE_FULL);\r\n\t } else {\r\n\t this.$computeLayerConfig();\r\n\t this.$loop.schedule(this.CHANGE_MARKER);\r\n\t }\r\n\t };\r\n\t this.adjustWrapLimit = function() {\r\n\t var availableWidth = this.$size.scrollerWidth - this.$padding * 2;\r\n\t var limit = Math.floor(availableWidth / this.characterWidth);\r\n\t return this.session.adjustWrapLimit(limit, this.$showPrintMargin && this.$printMarginColumn);\r\n\t };\r\n\t this.setAnimatedScroll = function(shouldAnimate){\r\n\t this.setOption(\"animatedScroll\", shouldAnimate);\r\n\t };\r\n\t this.getAnimatedScroll = function() {\r\n\t return this.$animatedScroll;\r\n\t };\r\n\t this.setShowInvisibles = function(showInvisibles) {\r\n\t this.setOption(\"showInvisibles\", showInvisibles);\r\n\t };\r\n\t this.getShowInvisibles = function() {\r\n\t return this.getOption(\"showInvisibles\");\r\n\t };\r\n\t this.getDisplayIndentGuides = function() {\r\n\t return this.getOption(\"displayIndentGuides\");\r\n\t };\r\n\r\n\t this.setDisplayIndentGuides = function(display) {\r\n\t this.setOption(\"displayIndentGuides\", display);\r\n\t };\r\n\t this.setShowPrintMargin = function(showPrintMargin) {\r\n\t this.setOption(\"showPrintMargin\", showPrintMargin);\r\n\t };\r\n\t this.getShowPrintMargin = function() {\r\n\t return this.getOption(\"showPrintMargin\");\r\n\t };\r\n\t this.setPrintMarginColumn = function(showPrintMargin) {\r\n\t this.setOption(\"printMarginColumn\", showPrintMargin);\r\n\t };\r\n\t this.getPrintMarginColumn = function() {\r\n\t return this.getOption(\"printMarginColumn\");\r\n\t };\r\n\t this.getShowGutter = function(){\r\n\t return this.getOption(\"showGutter\");\r\n\t };\r\n\t this.setShowGutter = function(show){\r\n\t return this.setOption(\"showGutter\", show);\r\n\t };\r\n\r\n\t this.getFadeFoldWidgets = function(){\r\n\t return this.getOption(\"fadeFoldWidgets\")\r\n\t };\r\n\r\n\t this.setFadeFoldWidgets = function(show) {\r\n\t this.setOption(\"fadeFoldWidgets\", show);\r\n\t };\r\n\r\n\t this.setHighlightGutterLine = function(shouldHighlight) {\r\n\t this.setOption(\"highlightGutterLine\", shouldHighlight);\r\n\t };\r\n\r\n\t this.getHighlightGutterLine = function() {\r\n\t return this.getOption(\"highlightGutterLine\");\r\n\t };\r\n\r\n\t this.$updateGutterLineHighlight = function() {\r\n\t var pos = this.$cursorLayer.$pixelPos;\r\n\t var height = this.layerConfig.lineHeight;\r\n\t if (this.session.getUseWrapMode()) {\r\n\t var cursor = this.session.selection.getCursor();\r\n\t cursor.column = 0;\r\n\t pos = this.$cursorLayer.getPixelPosition(cursor, true);\r\n\t height *= this.session.getRowLength(cursor.row);\r\n\t }\r\n\t this.$gutterLineHighlight.style.top = pos.top - this.layerConfig.offset + \"px\";\r\n\t this.$gutterLineHighlight.style.height = height + \"px\";\r\n\t };\r\n\r\n\t this.$updatePrintMargin = function() {\r\n\t if (!this.$showPrintMargin && !this.$printMarginEl)\r\n\t return;\r\n\r\n\t if (!this.$printMarginEl) {\r\n\t var containerEl = dom.createElement(\"div\");\r\n\t containerEl.className = \"ace_layer ace_print-margin-layer\";\r\n\t this.$printMarginEl = dom.createElement(\"div\");\r\n\t this.$printMarginEl.className = \"ace_print-margin\";\r\n\t containerEl.appendChild(this.$printMarginEl);\r\n\t this.content.insertBefore(containerEl, this.content.firstChild);\r\n\t }\r\n\r\n\t var style = this.$printMarginEl.style;\r\n\t style.left = ((this.characterWidth * this.$printMarginColumn) + this.$padding) + \"px\";\r\n\t style.visibility = this.$showPrintMargin ? \"visible\" : \"hidden\";\r\n\t \r\n\t if (this.session && this.session.$wrap == -1)\r\n\t this.adjustWrapLimit();\r\n\t };\r\n\t this.getContainerElement = function() {\r\n\t return this.container;\r\n\t };\r\n\t this.getMouseEventTarget = function() {\r\n\t return this.scroller;\r\n\t };\r\n\t this.getTextAreaContainer = function() {\r\n\t return this.container;\r\n\t };\r\n\t this.$moveTextAreaToCursor = function() {\r\n\t if (!this.$keepTextAreaAtCursor)\r\n\t return;\r\n\t var config = this.layerConfig;\r\n\t var posTop = this.$cursorLayer.$pixelPos.top;\r\n\t var posLeft = this.$cursorLayer.$pixelPos.left;\r\n\t posTop -= config.offset;\r\n\r\n\t var style = this.textarea.style;\r\n\t var h = this.lineHeight;\r\n\t if (posTop < 0 || posTop > config.height - h) {\r\n\t style.top = style.left = \"0\";\r\n\t return;\r\n\t }\r\n\r\n\t var w = this.characterWidth;\r\n\t if (this.$composition) {\r\n\t var val = this.textarea.value.replace(/^\\x01+/, \"\");\r\n\t w *= (this.session.$getStringScreenWidth(val)[0]+2);\r\n\t h += 2;\r\n\t }\r\n\t posLeft -= this.scrollLeft;\r\n\t if (posLeft > this.$size.scrollerWidth - w)\r\n\t posLeft = this.$size.scrollerWidth - w;\r\n\r\n\t posLeft += this.gutterWidth;\r\n\t style.height = h + \"px\";\r\n\t style.width = w + \"px\";\r\n\t style.left = Math.min(posLeft, this.$size.scrollerWidth - w) + \"px\";\r\n\t style.top = Math.min(posTop, this.$size.height - h) + \"px\";\r\n\t };\r\n\t this.getFirstVisibleRow = function() {\r\n\t return this.layerConfig.firstRow;\r\n\t };\r\n\t this.getFirstFullyVisibleRow = function() {\r\n\t return this.layerConfig.firstRow + (this.layerConfig.offset === 0 ? 0 : 1);\r\n\t };\r\n\t this.getLastFullyVisibleRow = function() {\r\n\t var config = this.layerConfig;\r\n\t var lastRow = config.lastRow\r\n\t var top = this.session.documentToScreenRow(lastRow, 0) * config.lineHeight;\r\n\t if (top - this.session.getScrollTop() > config.height - config.lineHeight)\r\n\t return lastRow - 1;\r\n\t return lastRow;\r\n\t };\r\n\t this.getLastVisibleRow = function() {\r\n\t return this.layerConfig.lastRow;\r\n\t };\r\n\r\n\t this.$padding = null;\r\n\t this.setPadding = function(padding) {\r\n\t this.$padding = padding;\r\n\t this.$textLayer.setPadding(padding);\r\n\t this.$cursorLayer.setPadding(padding);\r\n\t this.$markerFront.setPadding(padding);\r\n\t this.$markerBack.setPadding(padding);\r\n\t this.$loop.schedule(this.CHANGE_FULL);\r\n\t this.$updatePrintMargin();\r\n\t };\r\n\t \r\n\t this.setScrollMargin = function(top, bottom, left, right) {\r\n\t var sm = this.scrollMargin;\r\n\t sm.top = top|0;\r\n\t sm.bottom = bottom|0;\r\n\t sm.right = right|0;\r\n\t sm.left = left|0;\r\n\t sm.v = sm.top + sm.bottom;\r\n\t sm.h = sm.left + sm.right;\r\n\t if (sm.top && this.scrollTop <= 0 && this.session)\r\n\t this.session.setScrollTop(-sm.top);\r\n\t this.updateFull();\r\n\t };\r\n\t this.getHScrollBarAlwaysVisible = function() {\r\n\t return this.$hScrollBarAlwaysVisible;\r\n\t };\r\n\t this.setHScrollBarAlwaysVisible = function(alwaysVisible) {\r\n\t this.setOption(\"hScrollBarAlwaysVisible\", alwaysVisible);\r\n\t };\r\n\t this.getVScrollBarAlwaysVisible = function() {\r\n\t return this.$vScrollBarAlwaysVisible;\r\n\t };\r\n\t this.setVScrollBarAlwaysVisible = function(alwaysVisible) {\r\n\t this.setOption(\"vScrollBarAlwaysVisible\", alwaysVisible);\r\n\t };\r\n\r\n\t this.$updateScrollBarV = function() {\r\n\t var scrollHeight = this.layerConfig.maxHeight;\r\n\t var scrollerHeight = this.$size.scrollerHeight;\r\n\t if (!this.$maxLines && this.$scrollPastEnd) {\r\n\t scrollHeight -= (scrollerHeight - this.lineHeight) * this.$scrollPastEnd;\r\n\t if (this.scrollTop > scrollHeight - scrollerHeight) {\r\n\t scrollHeight = this.scrollTop + scrollerHeight;\r\n\t this.scrollBarV.scrollTop = null;\r\n\t }\r\n\t }\r\n\t this.scrollBarV.setScrollHeight(scrollHeight + this.scrollMargin.v);\r\n\t this.scrollBarV.setScrollTop(this.scrollTop + this.scrollMargin.top);\r\n\t };\r\n\t this.$updateScrollBarH = function() {\r\n\t this.scrollBarH.setScrollWidth(this.layerConfig.width + 2 * this.$padding + this.scrollMargin.h);\r\n\t this.scrollBarH.setScrollLeft(this.scrollLeft + this.scrollMargin.left);\r\n\t };\r\n\t \r\n\t this.$frozen = false;\r\n\t this.freeze = function() {\r\n\t this.$frozen = true;\r\n\t };\r\n\t \r\n\t this.unfreeze = function() {\r\n\t this.$frozen = false;\r\n\t };\r\n\r\n\t this.$renderChanges = function(changes, force) {\r\n\t if (this.$changes) {\r\n\t changes |= this.$changes;\r\n\t this.$changes = 0;\r\n\t }\r\n\t if ((!this.session || !this.container.offsetWidth || this.$frozen) || (!changes && !force)) {\r\n\t this.$changes |= changes;\r\n\t return; \r\n\t } \r\n\t if (this.$size.$dirty) {\r\n\t this.$changes |= changes;\r\n\t return this.onResize(true);\r\n\t }\r\n\t if (!this.lineHeight) {\r\n\t this.$textLayer.checkForSizeChanges();\r\n\t }\r\n\t \r\n\t this._signal(\"beforeRender\");\r\n\t var config = this.layerConfig;\r\n\t if (changes & this.CHANGE_FULL ||\r\n\t changes & this.CHANGE_SIZE ||\r\n\t changes & this.CHANGE_TEXT ||\r\n\t changes & this.CHANGE_LINES ||\r\n\t changes & this.CHANGE_SCROLL ||\r\n\t changes & this.CHANGE_H_SCROLL\r\n\t ) {\r\n\t changes |= this.$computeLayerConfig();\r\n\t if (config.firstRow != this.layerConfig.firstRow && config.firstRowScreen == this.layerConfig.firstRowScreen) {\r\n\t var st = this.scrollTop + (config.firstRow - this.layerConfig.firstRow) * this.lineHeight;\r\n\t if (st > 0) {\r\n\t this.scrollTop = st;\r\n\t changes = changes | this.CHANGE_SCROLL;\r\n\t changes |= this.$computeLayerConfig();\r\n\t }\r\n\t }\r\n\t config = this.layerConfig;\r\n\t this.$updateScrollBarV();\r\n\t if (changes & this.CHANGE_H_SCROLL)\r\n\t this.$updateScrollBarH();\r\n\t this.$gutterLayer.element.style.marginTop = (-config.offset) + \"px\";\r\n\t this.content.style.marginTop = (-config.offset) + \"px\";\r\n\t this.content.style.width = config.width + 2 * this.$padding + \"px\";\r\n\t this.content.style.height = config.minHeight + \"px\";\r\n\t }\r\n\t if (changes & this.CHANGE_H_SCROLL) {\r\n\t this.content.style.marginLeft = -this.scrollLeft + \"px\";\r\n\t this.scroller.className = this.scrollLeft <= 0 ? \"ace_scroller\" : \"ace_scroller ace_scroll-left\";\r\n\t }\r\n\t if (changes & this.CHANGE_FULL) {\r\n\t this.$textLayer.update(config);\r\n\t if (this.$showGutter)\r\n\t this.$gutterLayer.update(config);\r\n\t this.$markerBack.update(config);\r\n\t this.$markerFront.update(config);\r\n\t this.$cursorLayer.update(config);\r\n\t this.$moveTextAreaToCursor();\r\n\t this.$highlightGutterLine && this.$updateGutterLineHighlight();\r\n\t this._signal(\"afterRender\");\r\n\t return;\r\n\t }\r\n\t if (changes & this.CHANGE_SCROLL) {\r\n\t if (changes & this.CHANGE_TEXT || changes & this.CHANGE_LINES)\r\n\t this.$textLayer.update(config);\r\n\t else\r\n\t this.$textLayer.scrollLines(config);\r\n\r\n\t if (this.$showGutter)\r\n\t this.$gutterLayer.update(config);\r\n\t this.$markerBack.update(config);\r\n\t this.$markerFront.update(config);\r\n\t this.$cursorLayer.update(config);\r\n\t this.$highlightGutterLine && this.$updateGutterLineHighlight();\r\n\t this.$moveTextAreaToCursor();\r\n\t this._signal(\"afterRender\");\r\n\t return;\r\n\t }\r\n\r\n\t if (changes & this.CHANGE_TEXT) {\r\n\t this.$textLayer.update(config);\r\n\t if (this.$showGutter)\r\n\t this.$gutterLayer.update(config);\r\n\t }\r\n\t else if (changes & this.CHANGE_LINES) {\r\n\t if (this.$updateLines() || (changes & this.CHANGE_GUTTER) && this.$showGutter)\r\n\t this.$gutterLayer.update(config);\r\n\t }\r\n\t else if (changes & this.CHANGE_TEXT || changes & this.CHANGE_GUTTER) {\r\n\t if (this.$showGutter)\r\n\t this.$gutterLayer.update(config);\r\n\t }\r\n\r\n\t if (changes & this.CHANGE_CURSOR) {\r\n\t this.$cursorLayer.update(config);\r\n\t this.$moveTextAreaToCursor();\r\n\t this.$highlightGutterLine && this.$updateGutterLineHighlight();\r\n\t }\r\n\r\n\t if (changes & (this.CHANGE_MARKER | this.CHANGE_MARKER_FRONT)) {\r\n\t this.$markerFront.update(config);\r\n\t }\r\n\r\n\t if (changes & (this.CHANGE_MARKER | this.CHANGE_MARKER_BACK)) {\r\n\t this.$markerBack.update(config);\r\n\t }\r\n\r\n\t this._signal(\"afterRender\");\r\n\t };\r\n\r\n\t \r\n\t this.$autosize = function() {\r\n\t var height = this.session.getScreenLength() * this.lineHeight;\r\n\t var maxHeight = this.$maxLines * this.lineHeight;\r\n\t var desiredHeight = Math.max(\r\n\t (this.$minLines||1) * this.lineHeight,\r\n\t Math.min(maxHeight, height)\r\n\t ) + this.scrollMargin.v + (this.$extraHeight || 0);\r\n\t if (this.$horizScroll)\r\n\t desiredHeight += this.scrollBarH.getHeight();\r\n\t var vScroll = height > maxHeight;\r\n\t \r\n\t if (desiredHeight != this.desiredHeight ||\r\n\t this.$size.height != this.desiredHeight || vScroll != this.$vScroll) {\r\n\t if (vScroll != this.$vScroll) {\r\n\t this.$vScroll = vScroll;\r\n\t this.scrollBarV.setVisible(vScroll);\r\n\t }\r\n\t \r\n\t var w = this.container.clientWidth;\r\n\t this.container.style.height = desiredHeight + \"px\";\r\n\t this.$updateCachedSize(true, this.$gutterWidth, w, desiredHeight);\r\n\t this.desiredHeight = desiredHeight;\r\n\t \r\n\t this._signal(\"autosize\");\r\n\t }\r\n\t };\r\n\t \r\n\t this.$computeLayerConfig = function() {\r\n\t var session = this.session;\r\n\t var size = this.$size;\r\n\t \r\n\t var hideScrollbars = size.height <= 2 * this.lineHeight;\r\n\t var screenLines = this.session.getScreenLength();\r\n\t var maxHeight = screenLines * this.lineHeight;\r\n\r\n\t var longestLine = this.$getLongestLine();\r\n\t \r\n\t var horizScroll = !hideScrollbars && (this.$hScrollBarAlwaysVisible ||\r\n\t size.scrollerWidth - longestLine - 2 * this.$padding < 0);\r\n\r\n\t var hScrollChanged = this.$horizScroll !== horizScroll;\r\n\t if (hScrollChanged) {\r\n\t this.$horizScroll = horizScroll;\r\n\t this.scrollBarH.setVisible(horizScroll);\r\n\t }\r\n\t var vScrollBefore = this.$vScroll; // autosize can change vscroll value in which case we need to update longestLine\r\n\t if (this.$maxLines && this.lineHeight > 1)\r\n\t this.$autosize();\r\n\r\n\t var offset = this.scrollTop % this.lineHeight;\r\n\t var minHeight = size.scrollerHeight + this.lineHeight;\r\n\t \r\n\t var scrollPastEnd = !this.$maxLines && this.$scrollPastEnd\r\n\t ? (size.scrollerHeight - this.lineHeight) * this.$scrollPastEnd\r\n\t : 0;\r\n\t maxHeight += scrollPastEnd;\r\n\t \r\n\t var sm = this.scrollMargin;\r\n\t this.session.setScrollTop(Math.max(-sm.top,\r\n\t Math.min(this.scrollTop, maxHeight - size.scrollerHeight + sm.bottom)));\r\n\r\n\t this.session.setScrollLeft(Math.max(-sm.left, Math.min(this.scrollLeft, \r\n\t longestLine + 2 * this.$padding - size.scrollerWidth + sm.right)));\r\n\t \r\n\t var vScroll = !hideScrollbars && (this.$vScrollBarAlwaysVisible ||\r\n\t size.scrollerHeight - maxHeight + scrollPastEnd < 0 || this.scrollTop > sm.top);\r\n\t var vScrollChanged = vScrollBefore !== vScroll;\r\n\t if (vScrollChanged) {\r\n\t this.$vScroll = vScroll;\r\n\t this.scrollBarV.setVisible(vScroll);\r\n\t }\r\n\r\n\t var lineCount = Math.ceil(minHeight / this.lineHeight) - 1;\r\n\t var firstRow = Math.max(0, Math.round((this.scrollTop - offset) / this.lineHeight));\r\n\t var lastRow = firstRow + lineCount;\r\n\t var firstRowScreen, firstRowHeight;\r\n\t var lineHeight = this.lineHeight;\r\n\t firstRow = session.screenToDocumentRow(firstRow, 0);\r\n\t var foldLine = session.getFoldLine(firstRow);\r\n\t if (foldLine) {\r\n\t firstRow = foldLine.start.row;\r\n\t }\r\n\r\n\t firstRowScreen = session.documentToScreenRow(firstRow, 0);\r\n\t firstRowHeight = session.getRowLength(firstRow) * lineHeight;\r\n\r\n\t lastRow = Math.min(session.screenToDocumentRow(lastRow, 0), session.getLength() - 1);\r\n\t minHeight = size.scrollerHeight + session.getRowLength(lastRow) * lineHeight +\r\n\t firstRowHeight;\r\n\r\n\t offset = this.scrollTop - firstRowScreen * lineHeight;\r\n\r\n\t var changes = 0;\r\n\t if (this.layerConfig.width != longestLine) \r\n\t changes = this.CHANGE_H_SCROLL;\r\n\t if (hScrollChanged || vScrollChanged) {\r\n\t changes = this.$updateCachedSize(true, this.gutterWidth, size.width, size.height);\r\n\t this._signal(\"scrollbarVisibilityChanged\");\r\n\t if (vScrollChanged)\r\n\t longestLine = this.$getLongestLine();\r\n\t }\r\n\t \r\n\t this.layerConfig = {\r\n\t width : longestLine,\r\n\t padding : this.$padding,\r\n\t firstRow : firstRow,\r\n\t firstRowScreen: firstRowScreen,\r\n\t lastRow : lastRow,\r\n\t lineHeight : lineHeight,\r\n\t characterWidth : this.characterWidth,\r\n\t minHeight : minHeight,\r\n\t maxHeight : maxHeight,\r\n\t offset : offset,\r\n\t gutterOffset : Math.max(0, Math.ceil((offset + size.height - size.scrollerHeight) / lineHeight)),\r\n\t height : this.$size.scrollerHeight\r\n\t };\r\n\r\n\t return changes;\r\n\t };\r\n\r\n\t this.$updateLines = function() {\r\n\t var firstRow = this.$changedLines.firstRow;\r\n\t var lastRow = this.$changedLines.lastRow;\r\n\t this.$changedLines = null;\r\n\r\n\t var layerConfig = this.layerConfig;\r\n\r\n\t if (firstRow > layerConfig.lastRow + 1) { return; }\r\n\t if (lastRow < layerConfig.firstRow) { return; }\r\n\t if (lastRow === Infinity) {\r\n\t if (this.$showGutter)\r\n\t this.$gutterLayer.update(layerConfig);\r\n\t this.$textLayer.update(layerConfig);\r\n\t return;\r\n\t }\r\n\t this.$textLayer.updateLines(layerConfig, firstRow, lastRow);\r\n\t return true;\r\n\t };\r\n\r\n\t this.$getLongestLine = function() {\r\n\t var charCount = this.session.getScreenWidth();\r\n\t if (this.showInvisibles && !this.session.$useWrapMode)\r\n\t charCount += 1;\r\n\r\n\t return Math.max(this.$size.scrollerWidth - 2 * this.$padding, Math.round(charCount * this.characterWidth));\r\n\t };\r\n\t this.updateFrontMarkers = function() {\r\n\t this.$markerFront.setMarkers(this.session.getMarkers(true));\r\n\t this.$loop.schedule(this.CHANGE_MARKER_FRONT);\r\n\t };\r\n\t this.updateBackMarkers = function() {\r\n\t this.$markerBack.setMarkers(this.session.getMarkers());\r\n\t this.$loop.schedule(this.CHANGE_MARKER_BACK);\r\n\t };\r\n\t this.addGutterDecoration = function(row, className){\r\n\t this.$gutterLayer.addGutterDecoration(row, className);\r\n\t };\r\n\t this.removeGutterDecoration = function(row, className){\r\n\t this.$gutterLayer.removeGutterDecoration(row, className);\r\n\t };\r\n\t this.updateBreakpoints = function(rows) {\r\n\t this.$loop.schedule(this.CHANGE_GUTTER);\r\n\t };\r\n\t this.setAnnotations = function(annotations) {\r\n\t this.$gutterLayer.setAnnotations(annotations);\r\n\t this.$loop.schedule(this.CHANGE_GUTTER);\r\n\t };\r\n\t this.updateCursor = function() {\r\n\t this.$loop.schedule(this.CHANGE_CURSOR);\r\n\t };\r\n\t this.hideCursor = function() {\r\n\t this.$cursorLayer.hideCursor();\r\n\t };\r\n\t this.showCursor = function() {\r\n\t this.$cursorLayer.showCursor();\r\n\t };\r\n\r\n\t this.scrollSelectionIntoView = function(anchor, lead, offset) {\r\n\t this.scrollCursorIntoView(anchor, offset);\r\n\t this.scrollCursorIntoView(lead, offset);\r\n\t };\r\n\t this.scrollCursorIntoView = function(cursor, offset, $viewMargin) {\r\n\t if (this.$size.scrollerHeight === 0)\r\n\t return;\r\n\r\n\t var pos = this.$cursorLayer.getPixelPosition(cursor);\r\n\r\n\t var left = pos.left;\r\n\t var top = pos.top;\r\n\t \r\n\t var topMargin = $viewMargin && $viewMargin.top || 0;\r\n\t var bottomMargin = $viewMargin && $viewMargin.bottom || 0;\r\n\t \r\n\t var scrollTop = this.$scrollAnimation ? this.session.getScrollTop() : this.scrollTop;\r\n\t \r\n\t if (scrollTop + topMargin > top) {\r\n\t if (offset && scrollTop + topMargin > top + this.lineHeight)\r\n\t top -= offset * this.$size.scrollerHeight;\r\n\t if (top === 0)\r\n\t top = -this.scrollMargin.top;\r\n\t this.session.setScrollTop(top);\r\n\t } else if (scrollTop + this.$size.scrollerHeight - bottomMargin < top + this.lineHeight) {\r\n\t if (offset && scrollTop + this.$size.scrollerHeight - bottomMargin < top - this.lineHeight)\r\n\t top += offset * this.$size.scrollerHeight;\r\n\t this.session.setScrollTop(top + this.lineHeight - this.$size.scrollerHeight);\r\n\t }\r\n\r\n\t var scrollLeft = this.scrollLeft;\r\n\r\n\t if (scrollLeft > left) {\r\n\t if (left < this.$padding + 2 * this.layerConfig.characterWidth)\r\n\t left = -this.scrollMargin.left;\r\n\t this.session.setScrollLeft(left);\r\n\t } else if (scrollLeft + this.$size.scrollerWidth < left + this.characterWidth) {\r\n\t this.session.setScrollLeft(Math.round(left + this.characterWidth - this.$size.scrollerWidth));\r\n\t } else if (scrollLeft <= this.$padding && left - scrollLeft < this.characterWidth) {\r\n\t this.session.setScrollLeft(0);\r\n\t }\r\n\t };\r\n\t this.getScrollTop = function() {\r\n\t return this.session.getScrollTop();\r\n\t };\r\n\t this.getScrollLeft = function() {\r\n\t return this.session.getScrollLeft();\r\n\t };\r\n\t this.getScrollTopRow = function() {\r\n\t return this.scrollTop / this.lineHeight;\r\n\t };\r\n\t this.getScrollBottomRow = function() {\r\n\t return Math.max(0, Math.floor((this.scrollTop + this.$size.scrollerHeight) / this.lineHeight) - 1);\r\n\t };\r\n\t this.scrollToRow = function(row) {\r\n\t this.session.setScrollTop(row * this.lineHeight);\r\n\t };\r\n\r\n\t this.alignCursor = function(cursor, alignment) {\r\n\t if (typeof cursor == \"number\")\r\n\t cursor = {row: cursor, column: 0};\r\n\r\n\t var pos = this.$cursorLayer.getPixelPosition(cursor);\r\n\t var h = this.$size.scrollerHeight - this.lineHeight;\r\n\t var offset = pos.top - h * (alignment || 0);\r\n\r\n\t this.session.setScrollTop(offset);\r\n\t return offset;\r\n\t };\r\n\r\n\t this.STEPS = 8;\r\n\t this.$calcSteps = function(fromValue, toValue){\r\n\t var i = 0;\r\n\t var l = this.STEPS;\r\n\t var steps = [];\r\n\r\n\t var func = function(t, x_min, dx) {\r\n\t return dx * (Math.pow(t - 1, 3) + 1) + x_min;\r\n\t };\r\n\r\n\t for (i = 0; i < l; ++i)\r\n\t steps.push(func(i / this.STEPS, fromValue, toValue - fromValue));\r\n\r\n\t return steps;\r\n\t };\r\n\t this.scrollToLine = function(line, center, animate, callback) {\r\n\t var pos = this.$cursorLayer.getPixelPosition({row: line, column: 0});\r\n\t var offset = pos.top;\r\n\t if (center)\r\n\t offset -= this.$size.scrollerHeight / 2;\r\n\r\n\t var initialScroll = this.scrollTop;\r\n\t this.session.setScrollTop(offset);\r\n\t if (animate !== false)\r\n\t this.animateScrolling(initialScroll, callback);\r\n\t };\r\n\r\n\t this.animateScrolling = function(fromValue, callback) {\r\n\t var toValue = this.scrollTop;\r\n\t if (!this.$animatedScroll)\r\n\t return;\r\n\t var _self = this;\r\n\t \r\n\t if (fromValue == toValue)\r\n\t return;\r\n\t \r\n\t if (this.$scrollAnimation) {\r\n\t var oldSteps = this.$scrollAnimation.steps;\r\n\t if (oldSteps.length) {\r\n\t fromValue = oldSteps[0];\r\n\t if (fromValue == toValue)\r\n\t return;\r\n\t }\r\n\t }\r\n\t \r\n\t var steps = _self.$calcSteps(fromValue, toValue);\r\n\t this.$scrollAnimation = {from: fromValue, to: toValue, steps: steps};\r\n\r\n\t clearInterval(this.$timer);\r\n\r\n\t _self.session.setScrollTop(steps.shift());\r\n\t _self.session.$scrollTop = toValue;\r\n\t this.$timer = setInterval(function() {\r\n\t if (steps.length) {\r\n\t _self.session.setScrollTop(steps.shift());\r\n\t _self.session.$scrollTop = toValue;\r\n\t } else if (toValue != null) {\r\n\t _self.session.$scrollTop = -1;\r\n\t _self.session.setScrollTop(toValue);\r\n\t toValue = null;\r\n\t } else {\r\n\t _self.$timer = clearInterval(_self.$timer);\r\n\t _self.$scrollAnimation = null;\r\n\t callback && callback();\r\n\t }\r\n\t }, 10);\r\n\t };\r\n\t this.scrollToY = function(scrollTop) {\r\n\t if (this.scrollTop !== scrollTop) {\r\n\t this.$loop.schedule(this.CHANGE_SCROLL);\r\n\t this.scrollTop = scrollTop;\r\n\t }\r\n\t };\r\n\t this.scrollToX = function(scrollLeft) {\r\n\t if (this.scrollLeft !== scrollLeft)\r\n\t this.scrollLeft = scrollLeft;\r\n\t this.$loop.schedule(this.CHANGE_H_SCROLL);\r\n\t };\r\n\t this.scrollTo = function(x, y) {\r\n\t this.session.setScrollTop(y);\r\n\t this.session.setScrollLeft(y);\r\n\t };\r\n\t this.scrollBy = function(deltaX, deltaY) {\r\n\t deltaY && this.session.setScrollTop(this.session.getScrollTop() + deltaY);\r\n\t deltaX && this.session.setScrollLeft(this.session.getScrollLeft() + deltaX);\r\n\t };\r\n\t this.isScrollableBy = function(deltaX, deltaY) {\r\n\t if (deltaY < 0 && this.session.getScrollTop() >= 1 - this.scrollMargin.top)\r\n\t return true;\r\n\t if (deltaY > 0 && this.session.getScrollTop() + this.$size.scrollerHeight\r\n\t - this.layerConfig.maxHeight < -1 + this.scrollMargin.bottom)\r\n\t return true;\r\n\t if (deltaX < 0 && this.session.getScrollLeft() >= 1 - this.scrollMargin.left)\r\n\t return true;\r\n\t if (deltaX > 0 && this.session.getScrollLeft() + this.$size.scrollerWidth\r\n\t - this.layerConfig.width < -1 + this.scrollMargin.right)\r\n\t return true;\r\n\t };\r\n\r\n\t this.pixelToScreenCoordinates = function(x, y) {\r\n\t var canvasPos = this.scroller.getBoundingClientRect();\r\n\r\n\t var offset = (x + this.scrollLeft - canvasPos.left - this.$padding) / this.characterWidth;\r\n\t var row = Math.floor((y + this.scrollTop - canvasPos.top) / this.lineHeight);\r\n\t var col = Math.round(offset);\r\n\r\n\t return {row: row, column: col, side: offset - col > 0 ? 1 : -1};\r\n\t };\r\n\r\n\t this.screenToTextCoordinates = function(x, y) {\r\n\t var canvasPos = this.scroller.getBoundingClientRect();\r\n\r\n\t var col = Math.round(\r\n\t (x + this.scrollLeft - canvasPos.left - this.$padding) / this.characterWidth\r\n\t );\r\n\r\n\t var row = (y + this.scrollTop - canvasPos.top) / this.lineHeight;\r\n\r\n\t return this.session.screenToDocumentPosition(row, Math.max(col, 0));\r\n\t };\r\n\t this.textToScreenCoordinates = function(row, column) {\r\n\t var canvasPos = this.scroller.getBoundingClientRect();\r\n\t var pos = this.session.documentToScreenPosition(row, column);\r\n\r\n\t var x = this.$padding + Math.round(pos.column * this.characterWidth);\r\n\t var y = pos.row * this.lineHeight;\r\n\r\n\t return {\r\n\t pageX: canvasPos.left + x - this.scrollLeft,\r\n\t pageY: canvasPos.top + y - this.scrollTop\r\n\t };\r\n\t };\r\n\t this.visualizeFocus = function() {\r\n\t dom.addCssClass(this.container, \"ace_focus\");\r\n\t };\r\n\t this.visualizeBlur = function() {\r\n\t dom.removeCssClass(this.container, \"ace_focus\");\r\n\t };\r\n\t this.showComposition = function(position) {\r\n\t if (!this.$composition)\r\n\t this.$composition = {\r\n\t keepTextAreaAtCursor: this.$keepTextAreaAtCursor,\r\n\t cssText: this.textarea.style.cssText\r\n\t };\r\n\r\n\t this.$keepTextAreaAtCursor = true;\r\n\t dom.addCssClass(this.textarea, \"ace_composition\");\r\n\t this.textarea.style.cssText = \"\";\r\n\t this.$moveTextAreaToCursor();\r\n\t };\r\n\t this.setCompositionText = function(text) {\r\n\t this.$moveTextAreaToCursor();\r\n\t };\r\n\t this.hideComposition = function() {\r\n\t if (!this.$composition)\r\n\t return;\r\n\r\n\t dom.removeCssClass(this.textarea, \"ace_composition\");\r\n\t this.$keepTextAreaAtCursor = this.$composition.keepTextAreaAtCursor;\r\n\t this.textarea.style.cssText = this.$composition.cssText;\r\n\t this.$composition = null;\r\n\t };\r\n\t this.setTheme = function(theme, cb) {\r\n\t var _self = this;\r\n\t this.$themeId = theme;\r\n\t _self._dispatchEvent('themeChange',{theme:theme});\r\n\r\n\t if (!theme || typeof theme == \"string\") {\r\n\t var moduleName = theme || this.$options.theme.initialValue;\r\n\t config.loadModule([\"theme\", moduleName], afterLoad);\r\n\t } else {\r\n\t afterLoad(theme);\r\n\t }\r\n\r\n\t function afterLoad(module) {\r\n\t if (_self.$themeId != theme)\r\n\t return cb && cb();\r\n\t if (!module.cssClass)\r\n\t return;\r\n\t dom.importCssString(\r\n\t module.cssText,\r\n\t module.cssClass,\r\n\t _self.container.ownerDocument\r\n\t );\r\n\r\n\t if (_self.theme)\r\n\t dom.removeCssClass(_self.container, _self.theme.cssClass);\r\n\r\n\t var padding = \"padding\" in module ? module.padding \r\n\t : \"padding\" in (_self.theme || {}) ? 4 : _self.$padding;\r\n\t if (_self.$padding && padding != _self.$padding)\r\n\t _self.setPadding(padding);\r\n\t _self.$theme = module.cssClass;\r\n\r\n\t _self.theme = module;\r\n\t dom.addCssClass(_self.container, module.cssClass);\r\n\t dom.setCssClass(_self.container, \"ace_dark\", module.isDark);\r\n\t if (_self.$size) {\r\n\t _self.$size.width = 0;\r\n\t _self.$updateSizeAsync();\r\n\t }\r\n\r\n\t _self._dispatchEvent('themeLoaded', {theme:module});\r\n\t cb && cb();\r\n\t }\r\n\t };\r\n\t this.getTheme = function() {\r\n\t return this.$themeId;\r\n\t };\r\n\t this.setStyle = function(style, include) {\r\n\t dom.setCssClass(this.container, style, include !== false);\r\n\t };\r\n\t this.unsetStyle = function(style) {\r\n\t dom.removeCssClass(this.container, style);\r\n\t };\r\n\t \r\n\t this.setCursorStyle = function(style) {\r\n\t if (this.scroller.style.cursor != style)\r\n\t this.scroller.style.cursor = style;\r\n\t };\r\n\t this.setMouseCursor = function(cursorStyle) {\r\n\t this.scroller.style.cursor = cursorStyle;\r\n\t };\r\n\t this.destroy = function() {\r\n\t this.$textLayer.destroy();\r\n\t this.$cursorLayer.destroy();\r\n\t };\r\n\r\n\t}).call(VirtualRenderer.prototype);\r\n\r\n\r\n\tconfig.defineOptions(VirtualRenderer.prototype, \"renderer\", {\r\n\t animatedScroll: {initialValue: false},\r\n\t showInvisibles: {\r\n\t set: function(value) {\r\n\t if (this.$textLayer.setShowInvisibles(value))\r\n\t this.$loop.schedule(this.CHANGE_TEXT);\r\n\t },\r\n\t initialValue: false\r\n\t },\r\n\t showPrintMargin: {\r\n\t set: function() { this.$updatePrintMargin(); },\r\n\t initialValue: true\r\n\t },\r\n\t printMarginColumn: {\r\n\t set: function() { this.$updatePrintMargin(); },\r\n\t initialValue: 80\r\n\t },\r\n\t printMargin: {\r\n\t set: function(val) {\r\n\t if (typeof val == \"number\")\r\n\t this.$printMarginColumn = val;\r\n\t this.$showPrintMargin = !!val;\r\n\t this.$updatePrintMargin();\r\n\t },\r\n\t get: function() {\r\n\t return this.$showPrintMargin && this.$printMarginColumn; \r\n\t }\r\n\t },\r\n\t showGutter: {\r\n\t set: function(show){\r\n\t this.$gutter.style.display = show ? \"block\" : \"none\";\r\n\t this.$loop.schedule(this.CHANGE_FULL);\r\n\t this.onGutterResize();\r\n\t },\r\n\t initialValue: true\r\n\t },\r\n\t fadeFoldWidgets: {\r\n\t set: function(show) {\r\n\t dom.setCssClass(this.$gutter, \"ace_fade-fold-widgets\", show);\r\n\t },\r\n\t initialValue: false\r\n\t },\r\n\t showFoldWidgets: {\r\n\t set: function(show) {this.$gutterLayer.setShowFoldWidgets(show)},\r\n\t initialValue: true\r\n\t },\r\n\t showLineNumbers: {\r\n\t set: function(show) {\r\n\t this.$gutterLayer.setShowLineNumbers(show);\r\n\t this.$loop.schedule(this.CHANGE_GUTTER);\r\n\t },\r\n\t initialValue: true\r\n\t },\r\n\t displayIndentGuides: {\r\n\t set: function(show) {\r\n\t if (this.$textLayer.setDisplayIndentGuides(show))\r\n\t this.$loop.schedule(this.CHANGE_TEXT);\r\n\t },\r\n\t initialValue: true\r\n\t },\r\n\t highlightGutterLine: {\r\n\t set: function(shouldHighlight) {\r\n\t if (!this.$gutterLineHighlight) {\r\n\t this.$gutterLineHighlight = dom.createElement(\"div\");\r\n\t this.$gutterLineHighlight.className = \"ace_gutter-active-line\";\r\n\t this.$gutter.appendChild(this.$gutterLineHighlight);\r\n\t return;\r\n\t }\r\n\r\n\t this.$gutterLineHighlight.style.display = shouldHighlight ? \"\" : \"none\";\r\n\t if (this.$cursorLayer.$pixelPos)\r\n\t this.$updateGutterLineHighlight();\r\n\t },\r\n\t initialValue: false,\r\n\t value: true\r\n\t },\r\n\t hScrollBarAlwaysVisible: {\r\n\t set: function(val) {\r\n\t if (!this.$hScrollBarAlwaysVisible || !this.$horizScroll)\r\n\t this.$loop.schedule(this.CHANGE_SCROLL);\r\n\t },\r\n\t initialValue: false\r\n\t },\r\n\t vScrollBarAlwaysVisible: {\r\n\t set: function(val) {\r\n\t if (!this.$vScrollBarAlwaysVisible || !this.$vScroll)\r\n\t this.$loop.schedule(this.CHANGE_SCROLL);\r\n\t },\r\n\t initialValue: false\r\n\t },\r\n\t fontSize: {\r\n\t set: function(size) {\r\n\t if (typeof size == \"number\")\r\n\t size = size + \"px\";\r\n\t this.container.style.fontSize = size;\r\n\t this.updateFontSize();\r\n\t },\r\n\t initialValue: 12\r\n\t },\r\n\t fontFamily: {\r\n\t set: function(name) {\r\n\t this.container.style.fontFamily = name;\r\n\t this.updateFontSize();\r\n\t }\r\n\t },\r\n\t maxLines: {\r\n\t set: function(val) {\r\n\t this.updateFull();\r\n\t }\r\n\t },\r\n\t minLines: {\r\n\t set: function(val) {\r\n\t this.updateFull();\r\n\t }\r\n\t },\r\n\t scrollPastEnd: {\r\n\t set: function(val) {\r\n\t val = +val || 0;\r\n\t if (this.$scrollPastEnd == val)\r\n\t return;\r\n\t this.$scrollPastEnd = val;\r\n\t this.$loop.schedule(this.CHANGE_SCROLL);\r\n\t },\r\n\t initialValue: 0,\r\n\t handlesSet: true\r\n\t },\r\n\t fixedWidthGutter: {\r\n\t set: function(val) {\r\n\t this.$gutterLayer.$fixedWidth = !!val;\r\n\t this.$loop.schedule(this.CHANGE_GUTTER);\r\n\t }\r\n\t },\r\n\t theme: {\r\n\t set: function(val) { this.setTheme(val) },\r\n\t get: function() { return this.$themeId || this.theme; },\r\n\t initialValue: \"./theme/textmate\",\r\n\t handlesSet: true\r\n\t }\r\n\t});\r\n\r\n\texports.VirtualRenderer = VirtualRenderer;\r\n\t});\r\n\r\n\tace.define(\"ace/worker/worker_client\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/net\",\"ace/lib/event_emitter\",\"ace/config\"], function(acequire, exports, module) {\r\n\t\"use strict\";\r\n\r\n\tvar oop = acequire(\"../lib/oop\");\r\n\tvar net = acequire(\"../lib/net\");\r\n\tvar EventEmitter = acequire(\"../lib/event_emitter\").EventEmitter;\r\n\tvar config = acequire(\"../config\");\r\n\r\n\tvar WorkerClient = function(topLevelNamespaces, mod, classname, workerUrl) {\r\n\t this.$sendDeltaQueue = this.$sendDeltaQueue.bind(this);\r\n\t this.changeListener = this.changeListener.bind(this);\r\n\t this.onMessage = this.onMessage.bind(this);\r\n\t if (acequire.nameToUrl && !acequire.toUrl)\r\n\t acequire.toUrl = acequire.nameToUrl;\r\n\t \r\n\t if (config.get(\"packaged\") || !acequire.toUrl) {\r\n\t workerUrl = workerUrl || config.moduleUrl(mod.id, \"worker\")\r\n\t } else {\r\n\t var normalizePath = this.$normalizePath;\r\n\t workerUrl = workerUrl || normalizePath(acequire.toUrl(\"ace/worker/worker.js\", null, \"_\"));\r\n\r\n\t var tlns = {};\r\n\t topLevelNamespaces.forEach(function(ns) {\r\n\t tlns[ns] = normalizePath(acequire.toUrl(ns, null, \"_\").replace(/(\\.js)?(\\?.*)?$/, \"\"));\r\n\t });\r\n\t }\r\n\r\n\t try {\r\n\t var workerSrc = mod.src;\r\n\t var Blob = __webpack_require__(66);\r\n\t var blob = new Blob([ workerSrc ], { type: 'application/javascript' });\r\n\t var blobUrl = (window.URL || window.webkitURL).createObjectURL(blob);\r\n\r\n\t this.$worker = new Worker(blobUrl);\r\n\r\n\t } catch(e) {\r\n\t if (e instanceof window.DOMException) {\r\n\t var blob = this.$workerBlob(workerUrl);\r\n\t var URL = window.URL || window.webkitURL;\r\n\t var blobURL = URL.createObjectURL(blob);\r\n\r\n\t this.$worker = new Worker(blobURL);\r\n\t URL.revokeObjectURL(blobURL);\r\n\t } else {\r\n\t throw e;\r\n\t }\r\n\t }\r\n\t this.$worker.postMessage({\r\n\t init : true,\r\n\t tlns : tlns,\r\n\t module : mod.id,\r\n\t classname : classname\r\n\t });\r\n\r\n\t this.callbackId = 1;\r\n\t this.callbacks = {};\r\n\r\n\t this.$worker.onmessage = this.onMessage;\r\n\t};\r\n\r\n\t(function(){\r\n\r\n\t oop.implement(this, EventEmitter);\r\n\r\n\t this.onMessage = function(e) {\r\n\t var msg = e.data;\r\n\t switch(msg.type) {\r\n\t case \"event\":\r\n\t this._signal(msg.name, {data: msg.data});\r\n\t break;\r\n\t case \"call\":\r\n\t var callback = this.callbacks[msg.id];\r\n\t if (callback) {\r\n\t callback(msg.data);\r\n\t delete this.callbacks[msg.id];\r\n\t }\r\n\t break;\r\n\t case \"error\":\r\n\t this.reportError(msg.data);\r\n\t break;\r\n\t case \"log\":\r\n\t window.console && console.log && console.log.apply(console, msg.data);\r\n\t break;\r\n\t }\r\n\t };\r\n\t \r\n\t this.reportError = function(err) {\r\n\t window.console && console.error && console.error(err);\r\n\t };\r\n\r\n\t this.$normalizePath = function(path) {\r\n\t return net.qualifyURL(path);\r\n\t };\r\n\r\n\t this.terminate = function() {\r\n\t this._signal(\"terminate\", {});\r\n\t this.deltaQueue = null;\r\n\t this.$worker.terminate();\r\n\t this.$worker = null;\r\n\t if (this.$doc)\r\n\t this.$doc.off(\"change\", this.changeListener);\r\n\t this.$doc = null;\r\n\t };\r\n\r\n\t this.send = function(cmd, args) {\r\n\t this.$worker.postMessage({command: cmd, args: args});\r\n\t };\r\n\r\n\t this.call = function(cmd, args, callback) {\r\n\t if (callback) {\r\n\t var id = this.callbackId++;\r\n\t this.callbacks[id] = callback;\r\n\t args.push(id);\r\n\t }\r\n\t this.send(cmd, args);\r\n\t };\r\n\r\n\t this.emit = function(event, data) {\r\n\t try {\r\n\t this.$worker.postMessage({event: event, data: {data: data.data}});\r\n\t }\r\n\t catch(ex) {\r\n\t console.error(ex.stack);\r\n\t }\r\n\t };\r\n\r\n\t this.attachToDocument = function(doc) {\r\n\t if(this.$doc)\r\n\t this.terminate();\r\n\r\n\t this.$doc = doc;\r\n\t this.call(\"setValue\", [doc.getValue()]);\r\n\t doc.on(\"change\", this.changeListener);\r\n\t };\r\n\r\n\t this.changeListener = function(delta) {\r\n\t if (!this.deltaQueue) {\r\n\t this.deltaQueue = [];\r\n\t setTimeout(this.$sendDeltaQueue, 0);\r\n\t }\r\n\t if (delta.action == \"insert\")\r\n\t this.deltaQueue.push(delta.start, delta.lines);\r\n\t else\r\n\t this.deltaQueue.push(delta.start, delta.end);\r\n\t };\r\n\r\n\t this.$sendDeltaQueue = function() {\r\n\t var q = this.deltaQueue;\r\n\t if (!q) return;\r\n\t this.deltaQueue = null;\r\n\t if (q.length > 50 && q.length > this.$doc.getLength() >> 1) {\r\n\t this.call(\"setValue\", [this.$doc.getValue()]);\r\n\t } else\r\n\t this.emit(\"change\", {data: q});\r\n\t };\r\n\r\n\t this.$workerBlob = function(workerUrl) {\r\n\t var script = \"importScripts('\" + net.qualifyURL(workerUrl) + \"');\";\r\n\t try {\r\n\t return new Blob([script], {\"type\": \"application/javascript\"});\r\n\t } catch (e) { // Backwards-compatibility\r\n\t var BlobBuilder = window.BlobBuilder || window.WebKitBlobBuilder || window.MozBlobBuilder;\r\n\t var blobBuilder = new BlobBuilder();\r\n\t blobBuilder.append(script);\r\n\t return blobBuilder.getBlob(\"application/javascript\");\r\n\t }\r\n\t };\r\n\r\n\t}).call(WorkerClient.prototype);\r\n\r\n\r\n\tvar UIWorkerClient = function(topLevelNamespaces, mod, classname) {\r\n\t this.$sendDeltaQueue = this.$sendDeltaQueue.bind(this);\r\n\t this.changeListener = this.changeListener.bind(this);\r\n\t this.callbackId = 1;\r\n\t this.callbacks = {};\r\n\t this.messageBuffer = [];\r\n\r\n\t var main = null;\r\n\t var emitSync = false;\r\n\t var sender = Object.create(EventEmitter);\r\n\t var _self = this;\r\n\r\n\t this.$worker = {};\r\n\t this.$worker.terminate = function() {};\r\n\t this.$worker.postMessage = function(e) {\r\n\t _self.messageBuffer.push(e);\r\n\t if (main) {\r\n\t if (emitSync)\r\n\t setTimeout(processNext);\r\n\t else\r\n\t processNext();\r\n\t }\r\n\t };\r\n\t this.setEmitSync = function(val) { emitSync = val };\r\n\r\n\t var processNext = function() {\r\n\t var msg = _self.messageBuffer.shift();\r\n\t if (msg.command)\r\n\t main[msg.command].apply(main, msg.args);\r\n\t else if (msg.event)\r\n\t sender._signal(msg.event, msg.data);\r\n\t };\r\n\r\n\t sender.postMessage = function(msg) {\r\n\t _self.onMessage({data: msg});\r\n\t };\r\n\t sender.callback = function(data, callbackId) {\r\n\t this.postMessage({type: \"call\", id: callbackId, data: data});\r\n\t };\r\n\t sender.emit = function(name, data) {\r\n\t this.postMessage({type: \"event\", name: name, data: data});\r\n\t };\r\n\r\n\t config.loadModule([\"worker\", mod], function(Main) {\r\n\t main = new Main[classname](sender);\r\n\t while (_self.messageBuffer.length)\r\n\t processNext();\r\n\t });\r\n\t};\r\n\r\n\tUIWorkerClient.prototype = WorkerClient.prototype;\r\n\r\n\texports.UIWorkerClient = UIWorkerClient;\r\n\texports.WorkerClient = WorkerClient;\r\n\r\n\t});\r\n\r\n\tace.define(\"ace/placeholder\",[\"require\",\"exports\",\"module\",\"ace/range\",\"ace/lib/event_emitter\",\"ace/lib/oop\"], function(acequire, exports, module) {\r\n\t\"use strict\";\r\n\r\n\tvar Range = acequire(\"./range\").Range;\r\n\tvar EventEmitter = acequire(\"./lib/event_emitter\").EventEmitter;\r\n\tvar oop = acequire(\"./lib/oop\");\r\n\r\n\tvar PlaceHolder = function(session, length, pos, others, mainClass, othersClass) {\r\n\t var _self = this;\r\n\t this.length = length;\r\n\t this.session = session;\r\n\t this.doc = session.getDocument();\r\n\t this.mainClass = mainClass;\r\n\t this.othersClass = othersClass;\r\n\t this.$onUpdate = this.onUpdate.bind(this);\r\n\t this.doc.on(\"change\", this.$onUpdate);\r\n\t this.$others = others;\r\n\t \r\n\t this.$onCursorChange = function() {\r\n\t setTimeout(function() {\r\n\t _self.onCursorChange();\r\n\t });\r\n\t };\r\n\t \r\n\t this.$pos = pos;\r\n\t var undoStack = session.getUndoManager().$undoStack || session.getUndoManager().$undostack || {length: -1};\r\n\t this.$undoStackDepth = undoStack.length;\r\n\t this.setup();\r\n\r\n\t session.selection.on(\"changeCursor\", this.$onCursorChange);\r\n\t};\r\n\r\n\t(function() {\r\n\r\n\t oop.implement(this, EventEmitter);\r\n\t this.setup = function() {\r\n\t var _self = this;\r\n\t var doc = this.doc;\r\n\t var session = this.session;\r\n\t \r\n\t this.selectionBefore = session.selection.toJSON();\r\n\t if (session.selection.inMultiSelectMode)\r\n\t session.selection.toSingleRange();\r\n\r\n\t this.pos = doc.createAnchor(this.$pos.row, this.$pos.column);\r\n\t var pos = this.pos;\r\n\t pos.$insertRight = true;\r\n\t pos.detach();\r\n\t pos.markerId = session.addMarker(new Range(pos.row, pos.column, pos.row, pos.column + this.length), this.mainClass, null, false);\r\n\t this.others = [];\r\n\t this.$others.forEach(function(other) {\r\n\t var anchor = doc.createAnchor(other.row, other.column);\r\n\t anchor.$insertRight = true;\r\n\t anchor.detach();\r\n\t _self.others.push(anchor);\r\n\t });\r\n\t session.setUndoSelect(false);\r\n\t };\r\n\t this.showOtherMarkers = function() {\r\n\t if (this.othersActive) return;\r\n\t var session = this.session;\r\n\t var _self = this;\r\n\t this.othersActive = true;\r\n\t this.others.forEach(function(anchor) {\r\n\t anchor.markerId = session.addMarker(new Range(anchor.row, anchor.column, anchor.row, anchor.column+_self.length), _self.othersClass, null, false);\r\n\t });\r\n\t };\r\n\t this.hideOtherMarkers = function() {\r\n\t if (!this.othersActive) return;\r\n\t this.othersActive = false;\r\n\t for (var i = 0; i < this.others.length; i++) {\r\n\t this.session.removeMarker(this.others[i].markerId);\r\n\t }\r\n\t };\r\n\t this.onUpdate = function(delta) {\r\n\t if (this.$updating)\r\n\t return this.updateAnchors(delta);\r\n\t \r\n\t var range = delta;\r\n\t if (range.start.row !== range.end.row) return;\r\n\t if (range.start.row !== this.pos.row) return;\r\n\t this.$updating = true;\r\n\t var lengthDiff = delta.action === \"insert\" ? range.end.column - range.start.column : range.start.column - range.end.column;\r\n\t var inMainRange = range.start.column >= this.pos.column && range.start.column <= this.pos.column + this.length + 1;\r\n\t var distanceFromStart = range.start.column - this.pos.column;\r\n\t \r\n\t this.updateAnchors(delta);\r\n\t \r\n\t if (inMainRange)\r\n\t this.length += lengthDiff;\r\n\r\n\t if (inMainRange && !this.session.$fromUndo) {\r\n\t if (delta.action === 'insert') {\r\n\t for (var i = this.others.length - 1; i >= 0; i--) {\r\n\t var otherPos = this.others[i];\r\n\t var newPos = {row: otherPos.row, column: otherPos.column + distanceFromStart};\r\n\t this.doc.insertMergedLines(newPos, delta.lines);\r\n\t }\r\n\t } else if (delta.action === 'remove') {\r\n\t for (var i = this.others.length - 1; i >= 0; i--) {\r\n\t var otherPos = this.others[i];\r\n\t var newPos = {row: otherPos.row, column: otherPos.column + distanceFromStart};\r\n\t this.doc.remove(new Range(newPos.row, newPos.column, newPos.row, newPos.column - lengthDiff));\r\n\t }\r\n\t }\r\n\t }\r\n\t \r\n\t this.$updating = false;\r\n\t this.updateMarkers();\r\n\t };\r\n\t \r\n\t this.updateAnchors = function(delta) {\r\n\t this.pos.onChange(delta);\r\n\t for (var i = this.others.length; i--;)\r\n\t this.others[i].onChange(delta);\r\n\t this.updateMarkers();\r\n\t };\r\n\t \r\n\t this.updateMarkers = function() {\r\n\t if (this.$updating)\r\n\t return;\r\n\t var _self = this;\r\n\t var session = this.session;\r\n\t var updateMarker = function(pos, className) {\r\n\t session.removeMarker(pos.markerId);\r\n\t pos.markerId = session.addMarker(new Range(pos.row, pos.column, pos.row, pos.column+_self.length), className, null, false);\r\n\t };\r\n\t updateMarker(this.pos, this.mainClass);\r\n\t for (var i = this.others.length; i--;)\r\n\t updateMarker(this.others[i], this.othersClass);\r\n\t };\r\n\r\n\t this.onCursorChange = function(event) {\r\n\t if (this.$updating || !this.session) return;\r\n\t var pos = this.session.selection.getCursor();\r\n\t if (pos.row === this.pos.row && pos.column >= this.pos.column && pos.column <= this.pos.column + this.length) {\r\n\t this.showOtherMarkers();\r\n\t this._emit(\"cursorEnter\", event);\r\n\t } else {\r\n\t this.hideOtherMarkers();\r\n\t this._emit(\"cursorLeave\", event);\r\n\t }\r\n\t }; \r\n\t this.detach = function() {\r\n\t this.session.removeMarker(this.pos && this.pos.markerId);\r\n\t this.hideOtherMarkers();\r\n\t this.doc.removeEventListener(\"change\", this.$onUpdate);\r\n\t this.session.selection.removeEventListener(\"changeCursor\", this.$onCursorChange);\r\n\t this.session.setUndoSelect(true);\r\n\t this.session = null;\r\n\t };\r\n\t this.cancel = function() {\r\n\t if (this.$undoStackDepth === -1)\r\n\t return;\r\n\t var undoManager = this.session.getUndoManager();\r\n\t var undosRequired = (undoManager.$undoStack || undoManager.$undostack).length - this.$undoStackDepth;\r\n\t for (var i = 0; i < undosRequired; i++) {\r\n\t undoManager.undo(true);\r\n\t }\r\n\t if (this.selectionBefore)\r\n\t this.session.selection.fromJSON(this.selectionBefore);\r\n\t };\r\n\t}).call(PlaceHolder.prototype);\r\n\r\n\r\n\texports.PlaceHolder = PlaceHolder;\r\n\t});\r\n\r\n\tace.define(\"ace/mouse/multi_select_handler\",[\"require\",\"exports\",\"module\",\"ace/lib/event\",\"ace/lib/useragent\"], function(acequire, exports, module) {\r\n\r\n\tvar event = acequire(\"../lib/event\");\r\n\tvar useragent = acequire(\"../lib/useragent\");\r\n\tfunction isSamePoint(p1, p2) {\r\n\t return p1.row == p2.row && p1.column == p2.column;\r\n\t}\r\n\r\n\tfunction onMouseDown(e) {\r\n\t var ev = e.domEvent;\r\n\t var alt = ev.altKey;\r\n\t var shift = ev.shiftKey;\r\n\t var ctrl = ev.ctrlKey;\r\n\t var accel = e.getAccelKey();\r\n\t var button = e.getButton();\r\n\t \r\n\t if (ctrl && useragent.isMac)\r\n\t button = ev.button;\r\n\r\n\t if (e.editor.inMultiSelectMode && button == 2) {\r\n\t e.editor.textInput.onContextMenu(e.domEvent);\r\n\t return;\r\n\t }\r\n\t \r\n\t if (!ctrl && !alt && !accel) {\r\n\t if (button === 0 && e.editor.inMultiSelectMode)\r\n\t e.editor.exitMultiSelectMode();\r\n\t return;\r\n\t }\r\n\t \r\n\t if (button !== 0)\r\n\t return;\r\n\r\n\t var editor = e.editor;\r\n\t var selection = editor.selection;\r\n\t var isMultiSelect = editor.inMultiSelectMode;\r\n\t var pos = e.getDocumentPosition();\r\n\t var cursor = selection.getCursor();\r\n\t var inSelection = e.inSelection() || (selection.isEmpty() && isSamePoint(pos, cursor));\r\n\r\n\t var mouseX = e.x, mouseY = e.y;\r\n\t var onMouseSelection = function(e) {\r\n\t mouseX = e.clientX;\r\n\t mouseY = e.clientY;\r\n\t };\r\n\t \r\n\t var session = editor.session;\r\n\t var screenAnchor = editor.renderer.pixelToScreenCoordinates(mouseX, mouseY);\r\n\t var screenCursor = screenAnchor;\r\n\t \r\n\t var selectionMode;\r\n\t if (editor.$mouseHandler.$enableJumpToDef) {\r\n\t if (ctrl && alt || accel && alt)\r\n\t selectionMode = shift ? \"block\" : \"add\";\r\n\t else if (alt && editor.$blockSelectEnabled)\r\n\t selectionMode = \"block\";\r\n\t } else {\r\n\t if (accel && !alt) {\r\n\t selectionMode = \"add\";\r\n\t if (!isMultiSelect && shift)\r\n\t return;\r\n\t } else if (alt && editor.$blockSelectEnabled) {\r\n\t selectionMode = \"block\";\r\n\t }\r\n\t }\r\n\t \r\n\t if (selectionMode && useragent.isMac && ev.ctrlKey) {\r\n\t editor.$mouseHandler.cancelContextMenu();\r\n\t }\r\n\r\n\t if (selectionMode == \"add\") {\r\n\t if (!isMultiSelect && inSelection)\r\n\t return; // dragging\r\n\r\n\t if (!isMultiSelect) {\r\n\t var range = selection.toOrientedRange();\r\n\t editor.addSelectionMarker(range);\r\n\t }\r\n\r\n\t var oldRange = selection.rangeList.rangeAtPoint(pos);\r\n\t \r\n\t \r\n\t editor.$blockScrolling++;\r\n\t editor.inVirtualSelectionMode = true;\r\n\t \r\n\t if (shift) {\r\n\t oldRange = null;\r\n\t range = selection.ranges[0] || range;\r\n\t editor.removeSelectionMarker(range);\r\n\t }\r\n\t editor.once(\"mouseup\", function() {\r\n\t var tmpSel = selection.toOrientedRange();\r\n\r\n\t if (oldRange && tmpSel.isEmpty() && isSamePoint(oldRange.cursor, tmpSel.cursor))\r\n\t selection.substractPoint(tmpSel.cursor);\r\n\t else {\r\n\t if (shift) {\r\n\t selection.substractPoint(range.cursor);\r\n\t } else if (range) {\r\n\t editor.removeSelectionMarker(range);\r\n\t selection.addRange(range);\r\n\t }\r\n\t selection.addRange(tmpSel);\r\n\t }\r\n\t editor.$blockScrolling--;\r\n\t editor.inVirtualSelectionMode = false;\r\n\t });\r\n\r\n\t } else if (selectionMode == \"block\") {\r\n\t e.stop();\r\n\t editor.inVirtualSelectionMode = true; \r\n\t var initialRange;\r\n\t var rectSel = [];\r\n\t var blockSelect = function() {\r\n\t var newCursor = editor.renderer.pixelToScreenCoordinates(mouseX, mouseY);\r\n\t var cursor = session.screenToDocumentPosition(newCursor.row, newCursor.column);\r\n\r\n\t if (isSamePoint(screenCursor, newCursor) && isSamePoint(cursor, selection.lead))\r\n\t return;\r\n\t screenCursor = newCursor;\r\n\t \r\n\t editor.$blockScrolling++;\r\n\t editor.selection.moveToPosition(cursor);\r\n\t editor.renderer.scrollCursorIntoView();\r\n\r\n\t editor.removeSelectionMarkers(rectSel);\r\n\t rectSel = selection.rectangularRangeBlock(screenCursor, screenAnchor);\r\n\t if (editor.$mouseHandler.$clickSelection && rectSel.length == 1 && rectSel[0].isEmpty())\r\n\t rectSel[0] = editor.$mouseHandler.$clickSelection.clone();\r\n\t rectSel.forEach(editor.addSelectionMarker, editor);\r\n\t editor.updateSelectionMarkers();\r\n\t editor.$blockScrolling--;\r\n\t };\r\n\t editor.$blockScrolling++;\r\n\t if (isMultiSelect && !accel) {\r\n\t selection.toSingleRange();\r\n\t } else if (!isMultiSelect && accel) {\r\n\t initialRange = selection.toOrientedRange();\r\n\t editor.addSelectionMarker(initialRange);\r\n\t }\r\n\t \r\n\t if (shift)\r\n\t screenAnchor = session.documentToScreenPosition(selection.lead); \r\n\t else\r\n\t selection.moveToPosition(pos);\r\n\t editor.$blockScrolling--;\r\n\t \r\n\t screenCursor = {row: -1, column: -1};\r\n\r\n\t var onMouseSelectionEnd = function(e) {\r\n\t clearInterval(timerId);\r\n\t editor.removeSelectionMarkers(rectSel);\r\n\t if (!rectSel.length)\r\n\t rectSel = [selection.toOrientedRange()];\r\n\t editor.$blockScrolling++;\r\n\t if (initialRange) {\r\n\t editor.removeSelectionMarker(initialRange);\r\n\t selection.toSingleRange(initialRange);\r\n\t }\r\n\t for (var i = 0; i < rectSel.length; i++)\r\n\t selection.addRange(rectSel[i]);\r\n\t editor.inVirtualSelectionMode = false;\r\n\t editor.$mouseHandler.$clickSelection = null;\r\n\t editor.$blockScrolling--;\r\n\t };\r\n\r\n\t var onSelectionInterval = blockSelect;\r\n\r\n\t event.capture(editor.container, onMouseSelection, onMouseSelectionEnd);\r\n\t var timerId = setInterval(function() {onSelectionInterval();}, 20);\r\n\r\n\t return e.preventDefault();\r\n\t }\r\n\t}\r\n\r\n\r\n\texports.onMouseDown = onMouseDown;\r\n\r\n\t});\r\n\r\n\tace.define(\"ace/commands/multi_select_commands\",[\"require\",\"exports\",\"module\",\"ace/keyboard/hash_handler\"], function(acequire, exports, module) {\r\n\texports.defaultCommands = [{\r\n\t name: \"addCursorAbove\",\r\n\t exec: function(editor) { editor.selectMoreLines(-1); },\r\n\t bindKey: {win: \"Ctrl-Alt-Up\", mac: \"Ctrl-Alt-Up\"},\r\n\t scrollIntoView: \"cursor\",\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"addCursorBelow\",\r\n\t exec: function(editor) { editor.selectMoreLines(1); },\r\n\t bindKey: {win: \"Ctrl-Alt-Down\", mac: \"Ctrl-Alt-Down\"},\r\n\t scrollIntoView: \"cursor\",\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"addCursorAboveSkipCurrent\",\r\n\t exec: function(editor) { editor.selectMoreLines(-1, true); },\r\n\t bindKey: {win: \"Ctrl-Alt-Shift-Up\", mac: \"Ctrl-Alt-Shift-Up\"},\r\n\t scrollIntoView: \"cursor\",\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"addCursorBelowSkipCurrent\",\r\n\t exec: function(editor) { editor.selectMoreLines(1, true); },\r\n\t bindKey: {win: \"Ctrl-Alt-Shift-Down\", mac: \"Ctrl-Alt-Shift-Down\"},\r\n\t scrollIntoView: \"cursor\",\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"selectMoreBefore\",\r\n\t exec: function(editor) { editor.selectMore(-1); },\r\n\t bindKey: {win: \"Ctrl-Alt-Left\", mac: \"Ctrl-Alt-Left\"},\r\n\t scrollIntoView: \"cursor\",\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"selectMoreAfter\",\r\n\t exec: function(editor) { editor.selectMore(1); },\r\n\t bindKey: {win: \"Ctrl-Alt-Right\", mac: \"Ctrl-Alt-Right\"},\r\n\t scrollIntoView: \"cursor\",\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"selectNextBefore\",\r\n\t exec: function(editor) { editor.selectMore(-1, true); },\r\n\t bindKey: {win: \"Ctrl-Alt-Shift-Left\", mac: \"Ctrl-Alt-Shift-Left\"},\r\n\t scrollIntoView: \"cursor\",\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"selectNextAfter\",\r\n\t exec: function(editor) { editor.selectMore(1, true); },\r\n\t bindKey: {win: \"Ctrl-Alt-Shift-Right\", mac: \"Ctrl-Alt-Shift-Right\"},\r\n\t scrollIntoView: \"cursor\",\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"splitIntoLines\",\r\n\t exec: function(editor) { editor.multiSelect.splitIntoLines(); },\r\n\t bindKey: {win: \"Ctrl-Alt-L\", mac: \"Ctrl-Alt-L\"},\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"alignCursors\",\r\n\t exec: function(editor) { editor.alignCursors(); },\r\n\t bindKey: {win: \"Ctrl-Alt-A\", mac: \"Ctrl-Alt-A\"},\r\n\t scrollIntoView: \"cursor\"\r\n\t}, {\r\n\t name: \"findAll\",\r\n\t exec: function(editor) { editor.findAll(); },\r\n\t bindKey: {win: \"Ctrl-Alt-K\", mac: \"Ctrl-Alt-G\"},\r\n\t scrollIntoView: \"cursor\",\r\n\t readOnly: true\r\n\t}];\r\n\texports.multiSelectCommands = [{\r\n\t name: \"singleSelection\",\r\n\t bindKey: \"esc\",\r\n\t exec: function(editor) { editor.exitMultiSelectMode(); },\r\n\t scrollIntoView: \"cursor\",\r\n\t readOnly: true,\r\n\t isAvailable: function(editor) {return editor && editor.inMultiSelectMode}\r\n\t}];\r\n\r\n\tvar HashHandler = acequire(\"../keyboard/hash_handler\").HashHandler;\r\n\texports.keyboardHandler = new HashHandler(exports.multiSelectCommands);\r\n\r\n\t});\r\n\r\n\tace.define(\"ace/multi_select\",[\"require\",\"exports\",\"module\",\"ace/range_list\",\"ace/range\",\"ace/selection\",\"ace/mouse/multi_select_handler\",\"ace/lib/event\",\"ace/lib/lang\",\"ace/commands/multi_select_commands\",\"ace/search\",\"ace/edit_session\",\"ace/editor\",\"ace/config\"], function(acequire, exports, module) {\r\n\r\n\tvar RangeList = acequire(\"./range_list\").RangeList;\r\n\tvar Range = acequire(\"./range\").Range;\r\n\tvar Selection = acequire(\"./selection\").Selection;\r\n\tvar onMouseDown = acequire(\"./mouse/multi_select_handler\").onMouseDown;\r\n\tvar event = acequire(\"./lib/event\");\r\n\tvar lang = acequire(\"./lib/lang\");\r\n\tvar commands = acequire(\"./commands/multi_select_commands\");\r\n\texports.commands = commands.defaultCommands.concat(commands.multiSelectCommands);\r\n\tvar Search = acequire(\"./search\").Search;\r\n\tvar search = new Search();\r\n\r\n\tfunction find(session, needle, dir) {\r\n\t search.$options.wrap = true;\r\n\t search.$options.needle = needle;\r\n\t search.$options.backwards = dir == -1;\r\n\t return search.find(session);\r\n\t}\r\n\tvar EditSession = acequire(\"./edit_session\").EditSession;\r\n\t(function() {\r\n\t this.getSelectionMarkers = function() {\r\n\t return this.$selectionMarkers;\r\n\t };\r\n\t}).call(EditSession.prototype);\r\n\t(function() {\r\n\t this.ranges = null;\r\n\t this.rangeList = null;\r\n\t this.addRange = function(range, $blockChangeEvents) {\r\n\t if (!range)\r\n\t return;\r\n\r\n\t if (!this.inMultiSelectMode && this.rangeCount === 0) {\r\n\t var oldRange = this.toOrientedRange();\r\n\t this.rangeList.add(oldRange);\r\n\t this.rangeList.add(range);\r\n\t if (this.rangeList.ranges.length != 2) {\r\n\t this.rangeList.removeAll();\r\n\t return $blockChangeEvents || this.fromOrientedRange(range);\r\n\t }\r\n\t this.rangeList.removeAll();\r\n\t this.rangeList.add(oldRange);\r\n\t this.$onAddRange(oldRange);\r\n\t }\r\n\r\n\t if (!range.cursor)\r\n\t range.cursor = range.end;\r\n\r\n\t var removed = this.rangeList.add(range);\r\n\r\n\t this.$onAddRange(range);\r\n\r\n\t if (removed.length)\r\n\t this.$onRemoveRange(removed);\r\n\r\n\t if (this.rangeCount > 1 && !this.inMultiSelectMode) {\r\n\t this._signal(\"multiSelect\");\r\n\t this.inMultiSelectMode = true;\r\n\t this.session.$undoSelect = false;\r\n\t this.rangeList.attach(this.session);\r\n\t }\r\n\r\n\t return $blockChangeEvents || this.fromOrientedRange(range);\r\n\t };\r\n\r\n\t this.toSingleRange = function(range) {\r\n\t range = range || this.ranges[0];\r\n\t var removed = this.rangeList.removeAll();\r\n\t if (removed.length)\r\n\t this.$onRemoveRange(removed);\r\n\r\n\t range && this.fromOrientedRange(range);\r\n\t };\r\n\t this.substractPoint = function(pos) {\r\n\t var removed = this.rangeList.substractPoint(pos);\r\n\t if (removed) {\r\n\t this.$onRemoveRange(removed);\r\n\t return removed[0];\r\n\t }\r\n\t };\r\n\t this.mergeOverlappingRanges = function() {\r\n\t var removed = this.rangeList.merge();\r\n\t if (removed.length)\r\n\t this.$onRemoveRange(removed);\r\n\t else if(this.ranges[0])\r\n\t this.fromOrientedRange(this.ranges[0]);\r\n\t };\r\n\r\n\t this.$onAddRange = function(range) {\r\n\t this.rangeCount = this.rangeList.ranges.length;\r\n\t this.ranges.unshift(range);\r\n\t this._signal(\"addRange\", {range: range});\r\n\t };\r\n\r\n\t this.$onRemoveRange = function(removed) {\r\n\t this.rangeCount = this.rangeList.ranges.length;\r\n\t if (this.rangeCount == 1 && this.inMultiSelectMode) {\r\n\t var lastRange = this.rangeList.ranges.pop();\r\n\t removed.push(lastRange);\r\n\t this.rangeCount = 0;\r\n\t }\r\n\r\n\t for (var i = removed.length; i--; ) {\r\n\t var index = this.ranges.indexOf(removed[i]);\r\n\t this.ranges.splice(index, 1);\r\n\t }\r\n\r\n\t this._signal(\"removeRange\", {ranges: removed});\r\n\r\n\t if (this.rangeCount === 0 && this.inMultiSelectMode) {\r\n\t this.inMultiSelectMode = false;\r\n\t this._signal(\"singleSelect\");\r\n\t this.session.$undoSelect = true;\r\n\t this.rangeList.detach(this.session);\r\n\t }\r\n\r\n\t lastRange = lastRange || this.ranges[0];\r\n\t if (lastRange && !lastRange.isEqual(this.getRange()))\r\n\t this.fromOrientedRange(lastRange);\r\n\t };\r\n\t this.$initRangeList = function() {\r\n\t if (this.rangeList)\r\n\t return;\r\n\r\n\t this.rangeList = new RangeList();\r\n\t this.ranges = [];\r\n\t this.rangeCount = 0;\r\n\t };\r\n\t this.getAllRanges = function() {\r\n\t return this.rangeCount ? this.rangeList.ranges.concat() : [this.getRange()];\r\n\t };\r\n\r\n\t this.splitIntoLines = function () {\r\n\t if (this.rangeCount > 1) {\r\n\t var ranges = this.rangeList.ranges;\r\n\t var lastRange = ranges[ranges.length - 1];\r\n\t var range = Range.fromPoints(ranges[0].start, lastRange.end);\r\n\r\n\t this.toSingleRange();\r\n\t this.setSelectionRange(range, lastRange.cursor == lastRange.start);\r\n\t } else {\r\n\t var range = this.getRange();\r\n\t var isBackwards = this.isBackwards();\r\n\t var startRow = range.start.row;\r\n\t var endRow = range.end.row;\r\n\t if (startRow == endRow) {\r\n\t if (isBackwards)\r\n\t var start = range.end, end = range.start;\r\n\t else\r\n\t var start = range.start, end = range.end;\r\n\t \r\n\t this.addRange(Range.fromPoints(end, end));\r\n\t this.addRange(Range.fromPoints(start, start));\r\n\t return;\r\n\t }\r\n\r\n\t var rectSel = [];\r\n\t var r = this.getLineRange(startRow, true);\r\n\t r.start.column = range.start.column;\r\n\t rectSel.push(r);\r\n\r\n\t for (var i = startRow + 1; i < endRow; i++)\r\n\t rectSel.push(this.getLineRange(i, true));\r\n\r\n\t r = this.getLineRange(endRow, true);\r\n\t r.end.column = range.end.column;\r\n\t rectSel.push(r);\r\n\r\n\t rectSel.forEach(this.addRange, this);\r\n\t }\r\n\t };\r\n\t this.toggleBlockSelection = function () {\r\n\t if (this.rangeCount > 1) {\r\n\t var ranges = this.rangeList.ranges;\r\n\t var lastRange = ranges[ranges.length - 1];\r\n\t var range = Range.fromPoints(ranges[0].start, lastRange.end);\r\n\r\n\t this.toSingleRange();\r\n\t this.setSelectionRange(range, lastRange.cursor == lastRange.start);\r\n\t } else {\r\n\t var cursor = this.session.documentToScreenPosition(this.selectionLead);\r\n\t var anchor = this.session.documentToScreenPosition(this.selectionAnchor);\r\n\r\n\t var rectSel = this.rectangularRangeBlock(cursor, anchor);\r\n\t rectSel.forEach(this.addRange, this);\r\n\t }\r\n\t };\r\n\t this.rectangularRangeBlock = function(screenCursor, screenAnchor, includeEmptyLines) {\r\n\t var rectSel = [];\r\n\r\n\t var xBackwards = screenCursor.column < screenAnchor.column;\r\n\t if (xBackwards) {\r\n\t var startColumn = screenCursor.column;\r\n\t var endColumn = screenAnchor.column;\r\n\t } else {\r\n\t var startColumn = screenAnchor.column;\r\n\t var endColumn = screenCursor.column;\r\n\t }\r\n\r\n\t var yBackwards = screenCursor.row < screenAnchor.row;\r\n\t if (yBackwards) {\r\n\t var startRow = screenCursor.row;\r\n\t var endRow = screenAnchor.row;\r\n\t } else {\r\n\t var startRow = screenAnchor.row;\r\n\t var endRow = screenCursor.row;\r\n\t }\r\n\r\n\t if (startColumn < 0)\r\n\t startColumn = 0;\r\n\t if (startRow < 0)\r\n\t startRow = 0;\r\n\r\n\t if (startRow == endRow)\r\n\t includeEmptyLines = true;\r\n\r\n\t for (var row = startRow; row <= endRow; row++) {\r\n\t var range = Range.fromPoints(\r\n\t this.session.screenToDocumentPosition(row, startColumn),\r\n\t this.session.screenToDocumentPosition(row, endColumn)\r\n\t );\r\n\t if (range.isEmpty()) {\r\n\t if (docEnd && isSamePoint(range.end, docEnd))\r\n\t break;\r\n\t var docEnd = range.end;\r\n\t }\r\n\t range.cursor = xBackwards ? range.start : range.end;\r\n\t rectSel.push(range);\r\n\t }\r\n\r\n\t if (yBackwards)\r\n\t rectSel.reverse();\r\n\r\n\t if (!includeEmptyLines) {\r\n\t var end = rectSel.length - 1;\r\n\t while (rectSel[end].isEmpty() && end > 0)\r\n\t end--;\r\n\t if (end > 0) {\r\n\t var start = 0;\r\n\t while (rectSel[start].isEmpty())\r\n\t start++;\r\n\t }\r\n\t for (var i = end; i >= start; i--) {\r\n\t if (rectSel[i].isEmpty())\r\n\t rectSel.splice(i, 1);\r\n\t }\r\n\t }\r\n\r\n\t return rectSel;\r\n\t };\r\n\t}).call(Selection.prototype);\r\n\tvar Editor = acequire(\"./editor\").Editor;\r\n\t(function() {\r\n\t this.updateSelectionMarkers = function() {\r\n\t this.renderer.updateCursor();\r\n\t this.renderer.updateBackMarkers();\r\n\t };\r\n\t this.addSelectionMarker = function(orientedRange) {\r\n\t if (!orientedRange.cursor)\r\n\t orientedRange.cursor = orientedRange.end;\r\n\r\n\t var style = this.getSelectionStyle();\r\n\t orientedRange.marker = this.session.addMarker(orientedRange, \"ace_selection\", style);\r\n\r\n\t this.session.$selectionMarkers.push(orientedRange);\r\n\t this.session.selectionMarkerCount = this.session.$selectionMarkers.length;\r\n\t return orientedRange;\r\n\t };\r\n\t this.removeSelectionMarker = function(range) {\r\n\t if (!range.marker)\r\n\t return;\r\n\t this.session.removeMarker(range.marker);\r\n\t var index = this.session.$selectionMarkers.indexOf(range);\r\n\t if (index != -1)\r\n\t this.session.$selectionMarkers.splice(index, 1);\r\n\t this.session.selectionMarkerCount = this.session.$selectionMarkers.length;\r\n\t };\r\n\r\n\t this.removeSelectionMarkers = function(ranges) {\r\n\t var markerList = this.session.$selectionMarkers;\r\n\t for (var i = ranges.length; i--; ) {\r\n\t var range = ranges[i];\r\n\t if (!range.marker)\r\n\t continue;\r\n\t this.session.removeMarker(range.marker);\r\n\t var index = markerList.indexOf(range);\r\n\t if (index != -1)\r\n\t markerList.splice(index, 1);\r\n\t }\r\n\t this.session.selectionMarkerCount = markerList.length;\r\n\t };\r\n\r\n\t this.$onAddRange = function(e) {\r\n\t this.addSelectionMarker(e.range);\r\n\t this.renderer.updateCursor();\r\n\t this.renderer.updateBackMarkers();\r\n\t };\r\n\r\n\t this.$onRemoveRange = function(e) {\r\n\t this.removeSelectionMarkers(e.ranges);\r\n\t this.renderer.updateCursor();\r\n\t this.renderer.updateBackMarkers();\r\n\t };\r\n\r\n\t this.$onMultiSelect = function(e) {\r\n\t if (this.inMultiSelectMode)\r\n\t return;\r\n\t this.inMultiSelectMode = true;\r\n\r\n\t this.setStyle(\"ace_multiselect\");\r\n\t this.keyBinding.addKeyboardHandler(commands.keyboardHandler);\r\n\t this.commands.setDefaultHandler(\"exec\", this.$onMultiSelectExec);\r\n\r\n\t this.renderer.updateCursor();\r\n\t this.renderer.updateBackMarkers();\r\n\t };\r\n\r\n\t this.$onSingleSelect = function(e) {\r\n\t if (this.session.multiSelect.inVirtualMode)\r\n\t return;\r\n\t this.inMultiSelectMode = false;\r\n\r\n\t this.unsetStyle(\"ace_multiselect\");\r\n\t this.keyBinding.removeKeyboardHandler(commands.keyboardHandler);\r\n\r\n\t this.commands.removeDefaultHandler(\"exec\", this.$onMultiSelectExec);\r\n\t this.renderer.updateCursor();\r\n\t this.renderer.updateBackMarkers();\r\n\t this._emit(\"changeSelection\");\r\n\t };\r\n\r\n\t this.$onMultiSelectExec = function(e) {\r\n\t var command = e.command;\r\n\t var editor = e.editor;\r\n\t if (!editor.multiSelect)\r\n\t return;\r\n\t if (!command.multiSelectAction) {\r\n\t var result = command.exec(editor, e.args || {});\r\n\t editor.multiSelect.addRange(editor.multiSelect.toOrientedRange());\r\n\t editor.multiSelect.mergeOverlappingRanges();\r\n\t } else if (command.multiSelectAction == \"forEach\") {\r\n\t result = editor.forEachSelection(command, e.args);\r\n\t } else if (command.multiSelectAction == \"forEachLine\") {\r\n\t result = editor.forEachSelection(command, e.args, true);\r\n\t } else if (command.multiSelectAction == \"single\") {\r\n\t editor.exitMultiSelectMode();\r\n\t result = command.exec(editor, e.args || {});\r\n\t } else {\r\n\t result = command.multiSelectAction(editor, e.args || {});\r\n\t }\r\n\t return result;\r\n\t }; \r\n\t this.forEachSelection = function(cmd, args, options) {\r\n\t if (this.inVirtualSelectionMode)\r\n\t return;\r\n\t var keepOrder = options && options.keepOrder;\r\n\t var $byLines = options == true || options && options.$byLines\r\n\t var session = this.session;\r\n\t var selection = this.selection;\r\n\t var rangeList = selection.rangeList;\r\n\t var ranges = (keepOrder ? selection : rangeList).ranges;\r\n\t var result;\r\n\t \r\n\t if (!ranges.length)\r\n\t return cmd.exec ? cmd.exec(this, args || {}) : cmd(this, args || {});\r\n\t \r\n\t var reg = selection._eventRegistry;\r\n\t selection._eventRegistry = {};\r\n\r\n\t var tmpSel = new Selection(session);\r\n\t this.inVirtualSelectionMode = true;\r\n\t for (var i = ranges.length; i--;) {\r\n\t if ($byLines) {\r\n\t while (i > 0 && ranges[i].start.row == ranges[i - 1].end.row)\r\n\t i--;\r\n\t }\r\n\t tmpSel.fromOrientedRange(ranges[i]);\r\n\t tmpSel.index = i;\r\n\t this.selection = session.selection = tmpSel;\r\n\t var cmdResult = cmd.exec ? cmd.exec(this, args || {}) : cmd(this, args || {});\r\n\t if (!result && cmdResult !== undefined)\r\n\t result = cmdResult;\r\n\t tmpSel.toOrientedRange(ranges[i]);\r\n\t }\r\n\t tmpSel.detach();\r\n\r\n\t this.selection = session.selection = selection;\r\n\t this.inVirtualSelectionMode = false;\r\n\t selection._eventRegistry = reg;\r\n\t selection.mergeOverlappingRanges();\r\n\t \r\n\t var anim = this.renderer.$scrollAnimation;\r\n\t this.onCursorChange();\r\n\t this.onSelectionChange();\r\n\t if (anim && anim.from == anim.to)\r\n\t this.renderer.animateScrolling(anim.from);\r\n\t \r\n\t return result;\r\n\t };\r\n\t this.exitMultiSelectMode = function() {\r\n\t if (!this.inMultiSelectMode || this.inVirtualSelectionMode)\r\n\t return;\r\n\t this.multiSelect.toSingleRange();\r\n\t };\r\n\r\n\t this.getSelectedText = function() {\r\n\t var text = \"\";\r\n\t if (this.inMultiSelectMode && !this.inVirtualSelectionMode) {\r\n\t var ranges = this.multiSelect.rangeList.ranges;\r\n\t var buf = [];\r\n\t for (var i = 0; i < ranges.length; i++) {\r\n\t buf.push(this.session.getTextRange(ranges[i]));\r\n\t }\r\n\t var nl = this.session.getDocument().getNewLineCharacter();\r\n\t text = buf.join(nl);\r\n\t if (text.length == (buf.length - 1) * nl.length)\r\n\t text = \"\";\r\n\t } else if (!this.selection.isEmpty()) {\r\n\t text = this.session.getTextRange(this.getSelectionRange());\r\n\t }\r\n\t return text;\r\n\t };\r\n\t \r\n\t this.$checkMultiselectChange = function(e, anchor) {\r\n\t if (this.inMultiSelectMode && !this.inVirtualSelectionMode) {\r\n\t var range = this.multiSelect.ranges[0];\r\n\t if (this.multiSelect.isEmpty() && anchor == this.multiSelect.anchor)\r\n\t return;\r\n\t var pos = anchor == this.multiSelect.anchor\r\n\t ? range.cursor == range.start ? range.end : range.start\r\n\t : range.cursor;\r\n\t if (pos.row != anchor.row \r\n\t || this.session.$clipPositionToDocument(pos.row, pos.column).column != anchor.column)\r\n\t this.multiSelect.toSingleRange(this.multiSelect.toOrientedRange());\r\n\t }\r\n\t };\r\n\t this.findAll = function(needle, options, additive) {\r\n\t options = options || {};\r\n\t options.needle = needle || options.needle;\r\n\t if (options.needle == undefined) {\r\n\t var range = this.selection.isEmpty()\r\n\t ? this.selection.getWordRange()\r\n\t : this.selection.getRange();\r\n\t options.needle = this.session.getTextRange(range);\r\n\t } \r\n\t this.$search.set(options);\r\n\t \r\n\t var ranges = this.$search.findAll(this.session);\r\n\t if (!ranges.length)\r\n\t return 0;\r\n\r\n\t this.$blockScrolling += 1;\r\n\t var selection = this.multiSelect;\r\n\r\n\t if (!additive)\r\n\t selection.toSingleRange(ranges[0]);\r\n\r\n\t for (var i = ranges.length; i--; )\r\n\t selection.addRange(ranges[i], true);\r\n\t if (range && selection.rangeList.rangeAtPoint(range.start))\r\n\t selection.addRange(range, true);\r\n\t \r\n\t this.$blockScrolling -= 1;\r\n\r\n\t return ranges.length;\r\n\t };\r\n\t this.selectMoreLines = function(dir, skip) {\r\n\t var range = this.selection.toOrientedRange();\r\n\t var isBackwards = range.cursor == range.end;\r\n\r\n\t var screenLead = this.session.documentToScreenPosition(range.cursor);\r\n\t if (this.selection.$desiredColumn)\r\n\t screenLead.column = this.selection.$desiredColumn;\r\n\r\n\t var lead = this.session.screenToDocumentPosition(screenLead.row + dir, screenLead.column);\r\n\r\n\t if (!range.isEmpty()) {\r\n\t var screenAnchor = this.session.documentToScreenPosition(isBackwards ? range.end : range.start);\r\n\t var anchor = this.session.screenToDocumentPosition(screenAnchor.row + dir, screenAnchor.column);\r\n\t } else {\r\n\t var anchor = lead;\r\n\t }\r\n\r\n\t if (isBackwards) {\r\n\t var newRange = Range.fromPoints(lead, anchor);\r\n\t newRange.cursor = newRange.start;\r\n\t } else {\r\n\t var newRange = Range.fromPoints(anchor, lead);\r\n\t newRange.cursor = newRange.end;\r\n\t }\r\n\r\n\t newRange.desiredColumn = screenLead.column;\r\n\t if (!this.selection.inMultiSelectMode) {\r\n\t this.selection.addRange(range);\r\n\t } else {\r\n\t if (skip)\r\n\t var toRemove = range.cursor;\r\n\t }\r\n\r\n\t this.selection.addRange(newRange);\r\n\t if (toRemove)\r\n\t this.selection.substractPoint(toRemove);\r\n\t };\r\n\t this.transposeSelections = function(dir) {\r\n\t var session = this.session;\r\n\t var sel = session.multiSelect;\r\n\t var all = sel.ranges;\r\n\r\n\t for (var i = all.length; i--; ) {\r\n\t var range = all[i];\r\n\t if (range.isEmpty()) {\r\n\t var tmp = session.getWordRange(range.start.row, range.start.column);\r\n\t range.start.row = tmp.start.row;\r\n\t range.start.column = tmp.start.column;\r\n\t range.end.row = tmp.end.row;\r\n\t range.end.column = tmp.end.column;\r\n\t }\r\n\t }\r\n\t sel.mergeOverlappingRanges();\r\n\r\n\t var words = [];\r\n\t for (var i = all.length; i--; ) {\r\n\t var range = all[i];\r\n\t words.unshift(session.getTextRange(range));\r\n\t }\r\n\r\n\t if (dir < 0)\r\n\t words.unshift(words.pop());\r\n\t else\r\n\t words.push(words.shift());\r\n\r\n\t for (var i = all.length; i--; ) {\r\n\t var range = all[i];\r\n\t var tmp = range.clone();\r\n\t session.replace(range, words[i]);\r\n\t range.start.row = tmp.start.row;\r\n\t range.start.column = tmp.start.column;\r\n\t }\r\n\t };\r\n\t this.selectMore = function(dir, skip, stopAtFirst) {\r\n\t var session = this.session;\r\n\t var sel = session.multiSelect;\r\n\r\n\t var range = sel.toOrientedRange();\r\n\t if (range.isEmpty()) {\r\n\t range = session.getWordRange(range.start.row, range.start.column);\r\n\t range.cursor = dir == -1 ? range.start : range.end;\r\n\t this.multiSelect.addRange(range);\r\n\t if (stopAtFirst)\r\n\t return;\r\n\t }\r\n\t var needle = session.getTextRange(range);\r\n\r\n\t var newRange = find(session, needle, dir);\r\n\t if (newRange) {\r\n\t newRange.cursor = dir == -1 ? newRange.start : newRange.end;\r\n\t this.$blockScrolling += 1;\r\n\t this.session.unfold(newRange);\r\n\t this.multiSelect.addRange(newRange);\r\n\t this.$blockScrolling -= 1;\r\n\t this.renderer.scrollCursorIntoView(null, 0.5);\r\n\t }\r\n\t if (skip)\r\n\t this.multiSelect.substractPoint(range.cursor);\r\n\t };\r\n\t this.alignCursors = function() {\r\n\t var session = this.session;\r\n\t var sel = session.multiSelect;\r\n\t var ranges = sel.ranges;\r\n\t var row = -1;\r\n\t var sameRowRanges = ranges.filter(function(r) {\r\n\t if (r.cursor.row == row)\r\n\t return true;\r\n\t row = r.cursor.row;\r\n\t });\r\n\t \r\n\t if (!ranges.length || sameRowRanges.length == ranges.length - 1) {\r\n\t var range = this.selection.getRange();\r\n\t var fr = range.start.row, lr = range.end.row;\r\n\t var guessRange = fr == lr;\r\n\t if (guessRange) {\r\n\t var max = this.session.getLength();\r\n\t var line;\r\n\t do {\r\n\t line = this.session.getLine(lr);\r\n\t } while (/[=:]/.test(line) && ++lr < max);\r\n\t do {\r\n\t line = this.session.getLine(fr);\r\n\t } while (/[=:]/.test(line) && --fr > 0);\r\n\t \r\n\t if (fr < 0) fr = 0;\r\n\t if (lr >= max) lr = max - 1;\r\n\t }\r\n\t var lines = this.session.removeFullLines(fr, lr);\r\n\t lines = this.$reAlignText(lines, guessRange);\r\n\t this.session.insert({row: fr, column: 0}, lines.join(\"\\n\") + \"\\n\");\r\n\t if (!guessRange) {\r\n\t range.start.column = 0;\r\n\t range.end.column = lines[lines.length - 1].length;\r\n\t }\r\n\t this.selection.setRange(range);\r\n\t } else {\r\n\t sameRowRanges.forEach(function(r) {\r\n\t sel.substractPoint(r.cursor);\r\n\t });\r\n\r\n\t var maxCol = 0;\r\n\t var minSpace = Infinity;\r\n\t var spaceOffsets = ranges.map(function(r) {\r\n\t var p = r.cursor;\r\n\t var line = session.getLine(p.row);\r\n\t var spaceOffset = line.substr(p.column).search(/\\S/g);\r\n\t if (spaceOffset == -1)\r\n\t spaceOffset = 0;\r\n\r\n\t if (p.column > maxCol)\r\n\t maxCol = p.column;\r\n\t if (spaceOffset < minSpace)\r\n\t minSpace = spaceOffset;\r\n\t return spaceOffset;\r\n\t });\r\n\t ranges.forEach(function(r, i) {\r\n\t var p = r.cursor;\r\n\t var l = maxCol - p.column;\r\n\t var d = spaceOffsets[i] - minSpace;\r\n\t if (l > d)\r\n\t session.insert(p, lang.stringRepeat(\" \", l - d));\r\n\t else\r\n\t session.remove(new Range(p.row, p.column, p.row, p.column - l + d));\r\n\r\n\t r.start.column = r.end.column = maxCol;\r\n\t r.start.row = r.end.row = p.row;\r\n\t r.cursor = r.end;\r\n\t });\r\n\t sel.fromOrientedRange(ranges[0]);\r\n\t this.renderer.updateCursor();\r\n\t this.renderer.updateBackMarkers();\r\n\t }\r\n\t };\r\n\r\n\t this.$reAlignText = function(lines, forceLeft) {\r\n\t var isLeftAligned = true, isRightAligned = true;\r\n\t var startW, textW, endW;\r\n\r\n\t return lines.map(function(line) {\r\n\t var m = line.match(/(\\s*)(.*?)(\\s*)([=:].*)/);\r\n\t if (!m)\r\n\t return [line];\r\n\r\n\t if (startW == null) {\r\n\t startW = m[1].length;\r\n\t textW = m[2].length;\r\n\t endW = m[3].length;\r\n\t return m;\r\n\t }\r\n\r\n\t if (startW + textW + endW != m[1].length + m[2].length + m[3].length)\r\n\t isRightAligned = false;\r\n\t if (startW != m[1].length)\r\n\t isLeftAligned = false;\r\n\r\n\t if (startW > m[1].length)\r\n\t startW = m[1].length;\r\n\t if (textW < m[2].length)\r\n\t textW = m[2].length;\r\n\t if (endW > m[3].length)\r\n\t endW = m[3].length;\r\n\r\n\t return m;\r\n\t }).map(forceLeft ? alignLeft :\r\n\t isLeftAligned ? isRightAligned ? alignRight : alignLeft : unAlign);\r\n\r\n\t function spaces(n) {\r\n\t return lang.stringRepeat(\" \", n);\r\n\t }\r\n\r\n\t function alignLeft(m) {\r\n\t return !m[2] ? m[0] : spaces(startW) + m[2]\r\n\t + spaces(textW - m[2].length + endW)\r\n\t + m[4].replace(/^([=:])\\s+/, \"$1 \");\r\n\t }\r\n\t function alignRight(m) {\r\n\t return !m[2] ? m[0] : spaces(startW + textW - m[2].length) + m[2]\r\n\t + spaces(endW, \" \")\r\n\t + m[4].replace(/^([=:])\\s+/, \"$1 \");\r\n\t }\r\n\t function unAlign(m) {\r\n\t return !m[2] ? m[0] : spaces(startW) + m[2]\r\n\t + spaces(endW)\r\n\t + m[4].replace(/^([=:])\\s+/, \"$1 \");\r\n\t }\r\n\t };\r\n\t}).call(Editor.prototype);\r\n\r\n\r\n\tfunction isSamePoint(p1, p2) {\r\n\t return p1.row == p2.row && p1.column == p2.column;\r\n\t}\r\n\texports.onSessionChange = function(e) {\r\n\t var session = e.session;\r\n\t if (session && !session.multiSelect) {\r\n\t session.$selectionMarkers = [];\r\n\t session.selection.$initRangeList();\r\n\t session.multiSelect = session.selection;\r\n\t }\r\n\t this.multiSelect = session && session.multiSelect;\r\n\r\n\t var oldSession = e.oldSession;\r\n\t if (oldSession) {\r\n\t oldSession.multiSelect.off(\"addRange\", this.$onAddRange);\r\n\t oldSession.multiSelect.off(\"removeRange\", this.$onRemoveRange);\r\n\t oldSession.multiSelect.off(\"multiSelect\", this.$onMultiSelect);\r\n\t oldSession.multiSelect.off(\"singleSelect\", this.$onSingleSelect);\r\n\t oldSession.multiSelect.lead.off(\"change\", this.$checkMultiselectChange);\r\n\t oldSession.multiSelect.anchor.off(\"change\", this.$checkMultiselectChange);\r\n\t }\r\n\r\n\t if (session) {\r\n\t session.multiSelect.on(\"addRange\", this.$onAddRange);\r\n\t session.multiSelect.on(\"removeRange\", this.$onRemoveRange);\r\n\t session.multiSelect.on(\"multiSelect\", this.$onMultiSelect);\r\n\t session.multiSelect.on(\"singleSelect\", this.$onSingleSelect);\r\n\t session.multiSelect.lead.on(\"change\", this.$checkMultiselectChange);\r\n\t session.multiSelect.anchor.on(\"change\", this.$checkMultiselectChange);\r\n\t }\r\n\r\n\t if (session && this.inMultiSelectMode != session.selection.inMultiSelectMode) {\r\n\t if (session.selection.inMultiSelectMode)\r\n\t this.$onMultiSelect();\r\n\t else\r\n\t this.$onSingleSelect();\r\n\t }\r\n\t};\r\n\tfunction MultiSelect(editor) {\r\n\t if (editor.$multiselectOnSessionChange)\r\n\t return;\r\n\t editor.$onAddRange = editor.$onAddRange.bind(editor);\r\n\t editor.$onRemoveRange = editor.$onRemoveRange.bind(editor);\r\n\t editor.$onMultiSelect = editor.$onMultiSelect.bind(editor);\r\n\t editor.$onSingleSelect = editor.$onSingleSelect.bind(editor);\r\n\t editor.$multiselectOnSessionChange = exports.onSessionChange.bind(editor);\r\n\t editor.$checkMultiselectChange = editor.$checkMultiselectChange.bind(editor);\r\n\r\n\t editor.$multiselectOnSessionChange(editor);\r\n\t editor.on(\"changeSession\", editor.$multiselectOnSessionChange);\r\n\r\n\t editor.on(\"mousedown\", onMouseDown);\r\n\t editor.commands.addCommands(commands.defaultCommands);\r\n\r\n\t addAltCursorListeners(editor);\r\n\t}\r\n\r\n\tfunction addAltCursorListeners(editor){\r\n\t var el = editor.textInput.getElement();\r\n\t var altCursor = false;\r\n\t event.addListener(el, \"keydown\", function(e) {\r\n\t var altDown = e.keyCode == 18 && !(e.ctrlKey || e.shiftKey || e.metaKey);\r\n\t if (editor.$blockSelectEnabled && altDown) {\r\n\t if (!altCursor) {\r\n\t editor.renderer.setMouseCursor(\"crosshair\");\r\n\t altCursor = true;\r\n\t }\r\n\t } else if (altCursor) {\r\n\t reset();\r\n\t }\r\n\t });\r\n\r\n\t event.addListener(el, \"keyup\", reset);\r\n\t event.addListener(el, \"blur\", reset);\r\n\t function reset(e) {\r\n\t if (altCursor) {\r\n\t editor.renderer.setMouseCursor(\"\");\r\n\t altCursor = false;\r\n\t }\r\n\t }\r\n\t}\r\n\r\n\texports.MultiSelect = MultiSelect;\r\n\r\n\r\n\tacequire(\"./config\").defineOptions(Editor.prototype, \"editor\", {\r\n\t enableMultiselect: {\r\n\t set: function(val) {\r\n\t MultiSelect(this);\r\n\t if (val) {\r\n\t this.on(\"changeSession\", this.$multiselectOnSessionChange);\r\n\t this.on(\"mousedown\", onMouseDown);\r\n\t } else {\r\n\t this.off(\"changeSession\", this.$multiselectOnSessionChange);\r\n\t this.off(\"mousedown\", onMouseDown);\r\n\t }\r\n\t },\r\n\t value: true\r\n\t },\r\n\t enableBlockSelect: {\r\n\t set: function(val) {\r\n\t this.$blockSelectEnabled = val;\r\n\t },\r\n\t value: true\r\n\t }\r\n\t});\r\n\r\n\r\n\r\n\t});\r\n\r\n\tace.define(\"ace/mode/folding/fold_mode\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(acequire, exports, module) {\r\n\t\"use strict\";\r\n\r\n\tvar Range = acequire(\"../../range\").Range;\r\n\r\n\tvar FoldMode = exports.FoldMode = function() {};\r\n\r\n\t(function() {\r\n\r\n\t this.foldingStartMarker = null;\r\n\t this.foldingStopMarker = null;\r\n\t this.getFoldWidget = function(session, foldStyle, row) {\r\n\t var line = session.getLine(row);\r\n\t if (this.foldingStartMarker.test(line))\r\n\t return \"start\";\r\n\t if (foldStyle == \"markbeginend\"\r\n\t && this.foldingStopMarker\r\n\t && this.foldingStopMarker.test(line))\r\n\t return \"end\";\r\n\t return \"\";\r\n\t };\r\n\r\n\t this.getFoldWidgetRange = function(session, foldStyle, row) {\r\n\t return null;\r\n\t };\r\n\r\n\t this.indentationBlock = function(session, row, column) {\r\n\t var re = /\\S/;\r\n\t var line = session.getLine(row);\r\n\t var startLevel = line.search(re);\r\n\t if (startLevel == -1)\r\n\t return;\r\n\r\n\t var startColumn = column || line.length;\r\n\t var maxRow = session.getLength();\r\n\t var startRow = row;\r\n\t var endRow = row;\r\n\r\n\t while (++row < maxRow) {\r\n\t var level = session.getLine(row).search(re);\r\n\r\n\t if (level == -1)\r\n\t continue;\r\n\r\n\t if (level <= startLevel)\r\n\t break;\r\n\r\n\t endRow = row;\r\n\t }\r\n\r\n\t if (endRow > startRow) {\r\n\t var endColumn = session.getLine(endRow).length;\r\n\t return new Range(startRow, startColumn, endRow, endColumn);\r\n\t }\r\n\t };\r\n\r\n\t this.openingBracketBlock = function(session, bracket, row, column, typeRe) {\r\n\t var start = {row: row, column: column + 1};\r\n\t var end = session.$findClosingBracket(bracket, start, typeRe);\r\n\t if (!end)\r\n\t return;\r\n\r\n\t var fw = session.foldWidgets[end.row];\r\n\t if (fw == null)\r\n\t fw = session.getFoldWidget(end.row);\r\n\r\n\t if (fw == \"start\" && end.row > start.row) {\r\n\t end.row --;\r\n\t end.column = session.getLine(end.row).length;\r\n\t }\r\n\t return Range.fromPoints(start, end);\r\n\t };\r\n\r\n\t this.closingBracketBlock = function(session, bracket, row, column, typeRe) {\r\n\t var end = {row: row, column: column};\r\n\t var start = session.$findOpeningBracket(bracket, end);\r\n\r\n\t if (!start)\r\n\t return;\r\n\r\n\t start.column++;\r\n\t end.column--;\r\n\r\n\t return Range.fromPoints(start, end);\r\n\t };\r\n\t}).call(FoldMode.prototype);\r\n\r\n\t});\r\n\r\n\tace.define(\"ace/theme/textmate\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(acequire, exports, module) {\r\n\t\"use strict\";\r\n\r\n\texports.isDark = false;\r\n\texports.cssClass = \"ace-tm\";\r\n\texports.cssText = \".ace-tm .ace_gutter {\\\r\n\tbackground: #f0f0f0;\\\r\n\tcolor: #333;\\\r\n\t}\\\r\n\t.ace-tm .ace_print-margin {\\\r\n\twidth: 1px;\\\r\n\tbackground: #e8e8e8;\\\r\n\t}\\\r\n\t.ace-tm .ace_fold {\\\r\n\tbackground-color: #6B72E6;\\\r\n\t}\\\r\n\t.ace-tm {\\\r\n\tbackground-color: #FFFFFF;\\\r\n\tcolor: black;\\\r\n\t}\\\r\n\t.ace-tm .ace_cursor {\\\r\n\tcolor: black;\\\r\n\t}\\\r\n\t.ace-tm .ace_invisible {\\\r\n\tcolor: rgb(191, 191, 191);\\\r\n\t}\\\r\n\t.ace-tm .ace_storage,\\\r\n\t.ace-tm .ace_keyword {\\\r\n\tcolor: blue;\\\r\n\t}\\\r\n\t.ace-tm .ace_constant {\\\r\n\tcolor: rgb(197, 6, 11);\\\r\n\t}\\\r\n\t.ace-tm .ace_constant.ace_buildin {\\\r\n\tcolor: rgb(88, 72, 246);\\\r\n\t}\\\r\n\t.ace-tm .ace_constant.ace_language {\\\r\n\tcolor: rgb(88, 92, 246);\\\r\n\t}\\\r\n\t.ace-tm .ace_constant.ace_library {\\\r\n\tcolor: rgb(6, 150, 14);\\\r\n\t}\\\r\n\t.ace-tm .ace_invalid {\\\r\n\tbackground-color: rgba(255, 0, 0, 0.1);\\\r\n\tcolor: red;\\\r\n\t}\\\r\n\t.ace-tm .ace_support.ace_function {\\\r\n\tcolor: rgb(60, 76, 114);\\\r\n\t}\\\r\n\t.ace-tm .ace_support.ace_constant {\\\r\n\tcolor: rgb(6, 150, 14);\\\r\n\t}\\\r\n\t.ace-tm .ace_support.ace_type,\\\r\n\t.ace-tm .ace_support.ace_class {\\\r\n\tcolor: rgb(109, 121, 222);\\\r\n\t}\\\r\n\t.ace-tm .ace_keyword.ace_operator {\\\r\n\tcolor: rgb(104, 118, 135);\\\r\n\t}\\\r\n\t.ace-tm .ace_string {\\\r\n\tcolor: rgb(3, 106, 7);\\\r\n\t}\\\r\n\t.ace-tm .ace_comment {\\\r\n\tcolor: rgb(76, 136, 107);\\\r\n\t}\\\r\n\t.ace-tm .ace_comment.ace_doc {\\\r\n\tcolor: rgb(0, 102, 255);\\\r\n\t}\\\r\n\t.ace-tm .ace_comment.ace_doc.ace_tag {\\\r\n\tcolor: rgb(128, 159, 191);\\\r\n\t}\\\r\n\t.ace-tm .ace_constant.ace_numeric {\\\r\n\tcolor: rgb(0, 0, 205);\\\r\n\t}\\\r\n\t.ace-tm .ace_variable {\\\r\n\tcolor: rgb(49, 132, 149);\\\r\n\t}\\\r\n\t.ace-tm .ace_xml-pe {\\\r\n\tcolor: rgb(104, 104, 91);\\\r\n\t}\\\r\n\t.ace-tm .ace_entity.ace_name.ace_function {\\\r\n\tcolor: #0000A2;\\\r\n\t}\\\r\n\t.ace-tm .ace_heading {\\\r\n\tcolor: rgb(12, 7, 255);\\\r\n\t}\\\r\n\t.ace-tm .ace_list {\\\r\n\tcolor:rgb(185, 6, 144);\\\r\n\t}\\\r\n\t.ace-tm .ace_meta.ace_tag {\\\r\n\tcolor:rgb(0, 22, 142);\\\r\n\t}\\\r\n\t.ace-tm .ace_string.ace_regex {\\\r\n\tcolor: rgb(255, 0, 0)\\\r\n\t}\\\r\n\t.ace-tm .ace_marker-layer .ace_selection {\\\r\n\tbackground: rgb(181, 213, 255);\\\r\n\t}\\\r\n\t.ace-tm.ace_multiselect .ace_selection.ace_start {\\\r\n\tbox-shadow: 0 0 3px 0px white;\\\r\n\t}\\\r\n\t.ace-tm .ace_marker-layer .ace_step {\\\r\n\tbackground: rgb(252, 255, 0);\\\r\n\t}\\\r\n\t.ace-tm .ace_marker-layer .ace_stack {\\\r\n\tbackground: rgb(164, 229, 101);\\\r\n\t}\\\r\n\t.ace-tm .ace_marker-layer .ace_bracket {\\\r\n\tmargin: -1px 0 0 -1px;\\\r\n\tborder: 1px solid rgb(192, 192, 192);\\\r\n\t}\\\r\n\t.ace-tm .ace_marker-layer .ace_active-line {\\\r\n\tbackground: rgba(0, 0, 0, 0.07);\\\r\n\t}\\\r\n\t.ace-tm .ace_gutter-active-line {\\\r\n\tbackground-color : #dcdcdc;\\\r\n\t}\\\r\n\t.ace-tm .ace_marker-layer .ace_selected-word {\\\r\n\tbackground: rgb(250, 250, 255);\\\r\n\tborder: 1px solid rgb(200, 200, 250);\\\r\n\t}\\\r\n\t.ace-tm .ace_indent-guide {\\\r\n\tbackground: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAE0lEQVQImWP4////f4bLly//BwAmVgd1/w11/gAAAABJRU5ErkJggg==\\\") right repeat-y;\\\r\n\t}\\\r\n\t\";\r\n\r\n\tvar dom = acequire(\"../lib/dom\");\r\n\tdom.importCssString(exports.cssText, exports.cssClass);\r\n\t});\r\n\r\n\tace.define(\"ace/line_widgets\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/dom\",\"ace/range\"], function(acequire, exports, module) {\r\n\t\"use strict\";\r\n\r\n\tvar oop = acequire(\"./lib/oop\");\r\n\tvar dom = acequire(\"./lib/dom\");\r\n\tvar Range = acequire(\"./range\").Range;\r\n\r\n\r\n\tfunction LineWidgets(session) {\r\n\t this.session = session;\r\n\t this.session.widgetManager = this;\r\n\t this.session.getRowLength = this.getRowLength;\r\n\t this.session.$getWidgetScreenLength = this.$getWidgetScreenLength;\r\n\t this.updateOnChange = this.updateOnChange.bind(this);\r\n\t this.renderWidgets = this.renderWidgets.bind(this);\r\n\t this.measureWidgets = this.measureWidgets.bind(this);\r\n\t this.session._changedWidgets = [];\r\n\t this.$onChangeEditor = this.$onChangeEditor.bind(this);\r\n\t \r\n\t this.session.on(\"change\", this.updateOnChange);\r\n\t this.session.on(\"changeFold\", this.updateOnFold);\r\n\t this.session.on(\"changeEditor\", this.$onChangeEditor);\r\n\t}\r\n\r\n\t(function() {\r\n\t this.getRowLength = function(row) {\r\n\t var h;\r\n\t if (this.lineWidgets)\r\n\t h = this.lineWidgets[row] && this.lineWidgets[row].rowCount || 0;\r\n\t else \r\n\t h = 0;\r\n\t if (!this.$useWrapMode || !this.$wrapData[row]) {\r\n\t return 1 + h;\r\n\t } else {\r\n\t return this.$wrapData[row].length + 1 + h;\r\n\t }\r\n\t };\r\n\r\n\t this.$getWidgetScreenLength = function() {\r\n\t var screenRows = 0;\r\n\t this.lineWidgets.forEach(function(w){\r\n\t if (w && w.rowCount && !w.hidden)\r\n\t screenRows += w.rowCount;\r\n\t });\r\n\t return screenRows;\r\n\t }; \r\n\t \r\n\t this.$onChangeEditor = function(e) {\r\n\t this.attach(e.editor);\r\n\t };\r\n\t \r\n\t this.attach = function(editor) {\r\n\t if (editor && editor.widgetManager && editor.widgetManager != this)\r\n\t editor.widgetManager.detach();\r\n\r\n\t if (this.editor == editor)\r\n\t return;\r\n\r\n\t this.detach();\r\n\t this.editor = editor;\r\n\t \r\n\t if (editor) {\r\n\t editor.widgetManager = this;\r\n\t editor.renderer.on(\"beforeRender\", this.measureWidgets);\r\n\t editor.renderer.on(\"afterRender\", this.renderWidgets);\r\n\t }\r\n\t };\r\n\t this.detach = function(e) {\r\n\t var editor = this.editor;\r\n\t if (!editor)\r\n\t return;\r\n\t \r\n\t this.editor = null;\r\n\t editor.widgetManager = null;\r\n\t \r\n\t editor.renderer.off(\"beforeRender\", this.measureWidgets);\r\n\t editor.renderer.off(\"afterRender\", this.renderWidgets);\r\n\t var lineWidgets = this.session.lineWidgets;\r\n\t lineWidgets && lineWidgets.forEach(function(w) {\r\n\t if (w && w.el && w.el.parentNode) {\r\n\t w._inDocument = false;\r\n\t w.el.parentNode.removeChild(w.el);\r\n\t }\r\n\t });\r\n\t };\r\n\r\n\t this.updateOnFold = function(e, session) {\r\n\t var lineWidgets = session.lineWidgets;\r\n\t if (!lineWidgets || !e.action)\r\n\t return;\r\n\t var fold = e.data;\r\n\t var start = fold.start.row;\r\n\t var end = fold.end.row;\r\n\t var hide = e.action == \"add\";\r\n\t for (var i = start + 1; i < end; i++) {\r\n\t if (lineWidgets[i])\r\n\t lineWidgets[i].hidden = hide;\r\n\t }\r\n\t if (lineWidgets[end]) {\r\n\t if (hide) {\r\n\t if (!lineWidgets[start])\r\n\t lineWidgets[start] = lineWidgets[end];\r\n\t else\r\n\t lineWidgets[end].hidden = hide;\r\n\t } else {\r\n\t if (lineWidgets[start] == lineWidgets[end])\r\n\t lineWidgets[start] = undefined;\r\n\t lineWidgets[end].hidden = hide;\r\n\t }\r\n\t }\r\n\t };\r\n\t \r\n\t this.updateOnChange = function(delta) {\r\n\t var lineWidgets = this.session.lineWidgets;\r\n\t if (!lineWidgets) return;\r\n\t \r\n\t var startRow = delta.start.row;\r\n\t var len = delta.end.row - startRow;\r\n\r\n\t if (len === 0) {\r\n\t } else if (delta.action == 'remove') {\r\n\t var removed = lineWidgets.splice(startRow + 1, len);\r\n\t removed.forEach(function(w) {\r\n\t w && this.removeLineWidget(w);\r\n\t }, this);\r\n\t this.$updateRows();\r\n\t } else {\r\n\t var args = new Array(len);\r\n\t args.unshift(startRow, 0);\r\n\t lineWidgets.splice.apply(lineWidgets, args);\r\n\t this.$updateRows();\r\n\t }\r\n\t };\r\n\t \r\n\t this.$updateRows = function() {\r\n\t var lineWidgets = this.session.lineWidgets;\r\n\t if (!lineWidgets) return;\r\n\t var noWidgets = true;\r\n\t lineWidgets.forEach(function(w, i) {\r\n\t if (w) {\r\n\t noWidgets = false;\r\n\t w.row = i;\r\n\t while (w.$oldWidget) {\r\n\t w.$oldWidget.row = i;\r\n\t w = w.$oldWidget;\r\n\t }\r\n\t }\r\n\t });\r\n\t if (noWidgets)\r\n\t this.session.lineWidgets = null;\r\n\t };\r\n\r\n\t this.addLineWidget = function(w) {\r\n\t if (!this.session.lineWidgets)\r\n\t this.session.lineWidgets = new Array(this.session.getLength());\r\n\t \r\n\t var old = this.session.lineWidgets[w.row];\r\n\t if (old) {\r\n\t w.$oldWidget = old;\r\n\t if (old.el && old.el.parentNode) {\r\n\t old.el.parentNode.removeChild(old.el);\r\n\t old._inDocument = false;\r\n\t }\r\n\t }\r\n\t \r\n\t this.session.lineWidgets[w.row] = w;\r\n\t \r\n\t w.session = this.session;\r\n\t \r\n\t var renderer = this.editor.renderer;\r\n\t if (w.html && !w.el) {\r\n\t w.el = dom.createElement(\"div\");\r\n\t w.el.innerHTML = w.html;\r\n\t }\r\n\t if (w.el) {\r\n\t dom.addCssClass(w.el, \"ace_lineWidgetContainer\");\r\n\t w.el.style.position = \"absolute\";\r\n\t w.el.style.zIndex = 5;\r\n\t renderer.container.appendChild(w.el);\r\n\t w._inDocument = true;\r\n\t }\r\n\t \r\n\t if (!w.coverGutter) {\r\n\t w.el.style.zIndex = 3;\r\n\t }\r\n\t if (!w.pixelHeight) {\r\n\t w.pixelHeight = w.el.offsetHeight;\r\n\t }\r\n\t if (w.rowCount == null) {\r\n\t w.rowCount = w.pixelHeight / renderer.layerConfig.lineHeight;\r\n\t }\r\n\t \r\n\t var fold = this.session.getFoldAt(w.row, 0);\r\n\t w.$fold = fold;\r\n\t if (fold) {\r\n\t var lineWidgets = this.session.lineWidgets;\r\n\t if (w.row == fold.end.row && !lineWidgets[fold.start.row])\r\n\t lineWidgets[fold.start.row] = w;\r\n\t else\r\n\t w.hidden = true;\r\n\t }\r\n\t \r\n\t this.session._emit(\"changeFold\", {data:{start:{row: w.row}}});\r\n\t \r\n\t this.$updateRows();\r\n\t this.renderWidgets(null, renderer);\r\n\t this.onWidgetChanged(w);\r\n\t return w;\r\n\t };\r\n\t \r\n\t this.removeLineWidget = function(w) {\r\n\t w._inDocument = false;\r\n\t w.session = null;\r\n\t if (w.el && w.el.parentNode)\r\n\t w.el.parentNode.removeChild(w.el);\r\n\t if (w.editor && w.editor.destroy) try {\r\n\t w.editor.destroy();\r\n\t } catch(e){}\r\n\t if (this.session.lineWidgets) {\r\n\t var w1 = this.session.lineWidgets[w.row]\r\n\t if (w1 == w) {\r\n\t this.session.lineWidgets[w.row] = w.$oldWidget;\r\n\t if (w.$oldWidget)\r\n\t this.onWidgetChanged(w.$oldWidget);\r\n\t } else {\r\n\t while (w1) {\r\n\t if (w1.$oldWidget == w) {\r\n\t w1.$oldWidget = w.$oldWidget;\r\n\t break;\r\n\t }\r\n\t w1 = w1.$oldWidget;\r\n\t }\r\n\t }\r\n\t }\r\n\t this.session._emit(\"changeFold\", {data:{start:{row: w.row}}});\r\n\t this.$updateRows();\r\n\t };\r\n\t \r\n\t this.getWidgetsAtRow = function(row) {\r\n\t var lineWidgets = this.session.lineWidgets;\r\n\t var w = lineWidgets && lineWidgets[row];\r\n\t var list = [];\r\n\t while (w) {\r\n\t list.push(w);\r\n\t w = w.$oldWidget;\r\n\t }\r\n\t return list;\r\n\t };\r\n\t \r\n\t this.onWidgetChanged = function(w) {\r\n\t this.session._changedWidgets.push(w);\r\n\t this.editor && this.editor.renderer.updateFull();\r\n\t };\r\n\t \r\n\t this.measureWidgets = function(e, renderer) {\r\n\t var changedWidgets = this.session._changedWidgets;\r\n\t var config = renderer.layerConfig;\r\n\t \r\n\t if (!changedWidgets || !changedWidgets.length) return;\r\n\t var min = Infinity;\r\n\t for (var i = 0; i < changedWidgets.length; i++) {\r\n\t var w = changedWidgets[i];\r\n\t if (!w || !w.el) continue;\r\n\t if (w.session != this.session) continue;\r\n\t if (!w._inDocument) {\r\n\t if (this.session.lineWidgets[w.row] != w)\r\n\t continue;\r\n\t w._inDocument = true;\r\n\t renderer.container.appendChild(w.el);\r\n\t }\r\n\t \r\n\t w.h = w.el.offsetHeight;\r\n\t \r\n\t if (!w.fixedWidth) {\r\n\t w.w = w.el.offsetWidth;\r\n\t w.screenWidth = Math.ceil(w.w / config.characterWidth);\r\n\t }\r\n\t \r\n\t var rowCount = w.h / config.lineHeight;\r\n\t if (w.coverLine) {\r\n\t rowCount -= this.session.getRowLineCount(w.row);\r\n\t if (rowCount < 0)\r\n\t rowCount = 0;\r\n\t }\r\n\t if (w.rowCount != rowCount) {\r\n\t w.rowCount = rowCount;\r\n\t if (w.row < min)\r\n\t min = w.row;\r\n\t }\r\n\t }\r\n\t if (min != Infinity) {\r\n\t this.session._emit(\"changeFold\", {data:{start:{row: min}}});\r\n\t this.session.lineWidgetWidth = null;\r\n\t }\r\n\t this.session._changedWidgets = [];\r\n\t };\r\n\t \r\n\t this.renderWidgets = function(e, renderer) {\r\n\t var config = renderer.layerConfig;\r\n\t var lineWidgets = this.session.lineWidgets;\r\n\t if (!lineWidgets)\r\n\t return;\r\n\t var first = Math.min(this.firstRow, config.firstRow);\r\n\t var last = Math.max(this.lastRow, config.lastRow, lineWidgets.length);\r\n\t \r\n\t while (first > 0 && !lineWidgets[first])\r\n\t first--;\r\n\t \r\n\t this.firstRow = config.firstRow;\r\n\t this.lastRow = config.lastRow;\r\n\r\n\t renderer.$cursorLayer.config = config;\r\n\t for (var i = first; i <= last; i++) {\r\n\t var w = lineWidgets[i];\r\n\t if (!w || !w.el) continue;\r\n\t if (w.hidden) {\r\n\t w.el.style.top = -100 - (w.pixelHeight || 0) + \"px\";\r\n\t continue;\r\n\t }\r\n\t if (!w._inDocument) {\r\n\t w._inDocument = true;\r\n\t renderer.container.appendChild(w.el);\r\n\t }\r\n\t var top = renderer.$cursorLayer.getPixelPosition({row: i, column:0}, true).top;\r\n\t if (!w.coverLine)\r\n\t top += config.lineHeight * this.session.getRowLineCount(w.row);\r\n\t w.el.style.top = top - config.offset + \"px\";\r\n\t \r\n\t var left = w.coverGutter ? 0 : renderer.gutterWidth;\r\n\t if (!w.fixedWidth)\r\n\t left -= renderer.scrollLeft;\r\n\t w.el.style.left = left + \"px\";\r\n\t \r\n\t if (w.fullWidth && w.screenWidth) {\r\n\t w.el.style.minWidth = config.width + 2 * config.padding + \"px\";\r\n\t }\r\n\t \r\n\t if (w.fixedWidth) {\r\n\t w.el.style.right = renderer.scrollBar.getWidth() + \"px\";\r\n\t } else {\r\n\t w.el.style.right = \"\";\r\n\t }\r\n\t }\r\n\t };\r\n\t \r\n\t}).call(LineWidgets.prototype);\r\n\r\n\r\n\texports.LineWidgets = LineWidgets;\r\n\r\n\t});\r\n\r\n\tace.define(\"ace/ext/error_marker\",[\"require\",\"exports\",\"module\",\"ace/line_widgets\",\"ace/lib/dom\",\"ace/range\"], function(acequire, exports, module) {\r\n\t\"use strict\";\r\n\tvar LineWidgets = acequire(\"../line_widgets\").LineWidgets;\r\n\tvar dom = acequire(\"../lib/dom\");\r\n\tvar Range = acequire(\"../range\").Range;\r\n\r\n\tfunction binarySearch(array, needle, comparator) {\r\n\t var first = 0;\r\n\t var last = array.length - 1;\r\n\r\n\t while (first <= last) {\r\n\t var mid = (first + last) >> 1;\r\n\t var c = comparator(needle, array[mid]);\r\n\t if (c > 0)\r\n\t first = mid + 1;\r\n\t else if (c < 0)\r\n\t last = mid - 1;\r\n\t else\r\n\t return mid;\r\n\t }\r\n\t return -(first + 1);\r\n\t}\r\n\r\n\tfunction findAnnotations(session, row, dir) {\r\n\t var annotations = session.getAnnotations().sort(Range.comparePoints);\r\n\t if (!annotations.length)\r\n\t return;\r\n\t \r\n\t var i = binarySearch(annotations, {row: row, column: -1}, Range.comparePoints);\r\n\t if (i < 0)\r\n\t i = -i - 1;\r\n\t \r\n\t if (i >= annotations.length)\r\n\t i = dir > 0 ? 0 : annotations.length - 1;\r\n\t else if (i === 0 && dir < 0)\r\n\t i = annotations.length - 1;\r\n\t \r\n\t var annotation = annotations[i];\r\n\t if (!annotation || !dir)\r\n\t return;\r\n\r\n\t if (annotation.row === row) {\r\n\t do {\r\n\t annotation = annotations[i += dir];\r\n\t } while (annotation && annotation.row === row);\r\n\t if (!annotation)\r\n\t return annotations.slice();\r\n\t }\r\n\t \r\n\t \r\n\t var matched = [];\r\n\t row = annotation.row;\r\n\t do {\r\n\t matched[dir < 0 ? \"unshift\" : \"push\"](annotation);\r\n\t annotation = annotations[i += dir];\r\n\t } while (annotation && annotation.row == row);\r\n\t return matched.length && matched;\r\n\t}\r\n\r\n\texports.showErrorMarker = function(editor, dir) {\r\n\t var session = editor.session;\r\n\t if (!session.widgetManager) {\r\n\t session.widgetManager = new LineWidgets(session);\r\n\t session.widgetManager.attach(editor);\r\n\t }\r\n\t \r\n\t var pos = editor.getCursorPosition();\r\n\t var row = pos.row;\r\n\t var oldWidget = session.widgetManager.getWidgetsAtRow(row).filter(function(w) {\r\n\t return w.type == \"errorMarker\";\r\n\t })[0];\r\n\t if (oldWidget) {\r\n\t oldWidget.destroy();\r\n\t } else {\r\n\t row -= dir;\r\n\t }\r\n\t var annotations = findAnnotations(session, row, dir);\r\n\t var gutterAnno;\r\n\t if (annotations) {\r\n\t var annotation = annotations[0];\r\n\t pos.column = (annotation.pos && typeof annotation.column != \"number\"\r\n\t ? annotation.pos.sc\r\n\t : annotation.column) || 0;\r\n\t pos.row = annotation.row;\r\n\t gutterAnno = editor.renderer.$gutterLayer.$annotations[pos.row];\r\n\t } else if (oldWidget) {\r\n\t return;\r\n\t } else {\r\n\t gutterAnno = {\r\n\t text: [\"Looks good!\"],\r\n\t className: \"ace_ok\"\r\n\t };\r\n\t }\r\n\t editor.session.unfold(pos.row);\r\n\t editor.selection.moveToPosition(pos);\r\n\t \r\n\t var w = {\r\n\t row: pos.row, \r\n\t fixedWidth: true,\r\n\t coverGutter: true,\r\n\t el: dom.createElement(\"div\"),\r\n\t type: \"errorMarker\"\r\n\t };\r\n\t var el = w.el.appendChild(dom.createElement(\"div\"));\r\n\t var arrow = w.el.appendChild(dom.createElement(\"div\"));\r\n\t arrow.className = \"error_widget_arrow \" + gutterAnno.className;\r\n\t \r\n\t var left = editor.renderer.$cursorLayer\r\n\t .getPixelPosition(pos).left;\r\n\t arrow.style.left = left + editor.renderer.gutterWidth - 5 + \"px\";\r\n\t \r\n\t w.el.className = \"error_widget_wrapper\";\r\n\t el.className = \"error_widget \" + gutterAnno.className;\r\n\t el.innerHTML = gutterAnno.text.join(\"
\");\r\n\t \r\n\t el.appendChild(dom.createElement(\"div\"));\r\n\t \r\n\t var kb = function(_, hashId, keyString) {\r\n\t if (hashId === 0 && (keyString === \"esc\" || keyString === \"return\")) {\r\n\t w.destroy();\r\n\t return {command: \"null\"};\r\n\t }\r\n\t };\r\n\t \r\n\t w.destroy = function() {\r\n\t if (editor.$mouseHandler.isMousePressed)\r\n\t return;\r\n\t editor.keyBinding.removeKeyboardHandler(kb);\r\n\t session.widgetManager.removeLineWidget(w);\r\n\t editor.off(\"changeSelection\", w.destroy);\r\n\t editor.off(\"changeSession\", w.destroy);\r\n\t editor.off(\"mouseup\", w.destroy);\r\n\t editor.off(\"change\", w.destroy);\r\n\t };\r\n\t \r\n\t editor.keyBinding.addKeyboardHandler(kb);\r\n\t editor.on(\"changeSelection\", w.destroy);\r\n\t editor.on(\"changeSession\", w.destroy);\r\n\t editor.on(\"mouseup\", w.destroy);\r\n\t editor.on(\"change\", w.destroy);\r\n\t \r\n\t editor.session.widgetManager.addLineWidget(w);\r\n\t \r\n\t w.el.onmousedown = editor.focus.bind(editor);\r\n\t \r\n\t editor.renderer.scrollCursorIntoView(null, 0.5, {bottom: w.el.offsetHeight});\r\n\t};\r\n\r\n\r\n\tdom.importCssString(\"\\\r\n\t .error_widget_wrapper {\\\r\n\t background: inherit;\\\r\n\t color: inherit;\\\r\n\t border:none\\\r\n\t }\\\r\n\t .error_widget {\\\r\n\t border-top: solid 2px;\\\r\n\t border-bottom: solid 2px;\\\r\n\t margin: 5px 0;\\\r\n\t padding: 10px 40px;\\\r\n\t white-space: pre-wrap;\\\r\n\t }\\\r\n\t .error_widget.ace_error, .error_widget_arrow.ace_error{\\\r\n\t border-color: #ff5a5a\\\r\n\t }\\\r\n\t .error_widget.ace_warning, .error_widget_arrow.ace_warning{\\\r\n\t border-color: #F1D817\\\r\n\t }\\\r\n\t .error_widget.ace_info, .error_widget_arrow.ace_info{\\\r\n\t border-color: #5a5a5a\\\r\n\t }\\\r\n\t .error_widget.ace_ok, .error_widget_arrow.ace_ok{\\\r\n\t border-color: #5aaa5a\\\r\n\t }\\\r\n\t .error_widget_arrow {\\\r\n\t position: absolute;\\\r\n\t border: solid 5px;\\\r\n\t border-top-color: transparent!important;\\\r\n\t border-right-color: transparent!important;\\\r\n\t border-left-color: transparent!important;\\\r\n\t top: -5px;\\\r\n\t }\\\r\n\t\", \"\");\r\n\r\n\t});\r\n\r\n\tace.define(\"ace/ace\",[\"require\",\"exports\",\"module\",\"ace/lib/fixoldbrowsers\",\"ace/lib/dom\",\"ace/lib/event\",\"ace/editor\",\"ace/edit_session\",\"ace/undomanager\",\"ace/virtual_renderer\",\"ace/worker/worker_client\",\"ace/keyboard/hash_handler\",\"ace/placeholder\",\"ace/multi_select\",\"ace/mode/folding/fold_mode\",\"ace/theme/textmate\",\"ace/ext/error_marker\",\"ace/config\"], function(acequire, exports, module) {\r\n\t\"use strict\";\r\n\r\n\tacequire(\"./lib/fixoldbrowsers\");\r\n\r\n\tvar dom = acequire(\"./lib/dom\");\r\n\tvar event = acequire(\"./lib/event\");\r\n\r\n\tvar Editor = acequire(\"./editor\").Editor;\r\n\tvar EditSession = acequire(\"./edit_session\").EditSession;\r\n\tvar UndoManager = acequire(\"./undomanager\").UndoManager;\r\n\tvar Renderer = acequire(\"./virtual_renderer\").VirtualRenderer;\r\n\tacequire(\"./worker/worker_client\");\r\n\tacequire(\"./keyboard/hash_handler\");\r\n\tacequire(\"./placeholder\");\r\n\tacequire(\"./multi_select\");\r\n\tacequire(\"./mode/folding/fold_mode\");\r\n\tacequire(\"./theme/textmate\");\r\n\tacequire(\"./ext/error_marker\");\r\n\r\n\texports.config = acequire(\"./config\");\r\n\texports.acequire = acequire;\r\n\texports.edit = function(el) {\r\n\t if (typeof el == \"string\") {\r\n\t var _id = el;\r\n\t el = document.getElementById(_id);\r\n\t if (!el)\r\n\t throw new Error(\"ace.edit can't find div #\" + _id);\r\n\t }\r\n\r\n\t if (el && el.env && el.env.editor instanceof Editor)\r\n\t return el.env.editor;\r\n\r\n\t var value = \"\";\r\n\t if (el && /input|textarea/i.test(el.tagName)) {\r\n\t var oldNode = el;\r\n\t value = oldNode.value;\r\n\t el = dom.createElement(\"pre\");\r\n\t oldNode.parentNode.replaceChild(el, oldNode);\r\n\t } else if (el) {\r\n\t value = dom.getInnerText(el);\r\n\t el.innerHTML = \"\";\r\n\t }\r\n\r\n\t var doc = exports.createEditSession(value);\r\n\r\n\t var editor = new Editor(new Renderer(el));\r\n\t editor.setSession(doc);\r\n\r\n\t var env = {\r\n\t document: doc,\r\n\t editor: editor,\r\n\t onResize: editor.resize.bind(editor, null)\r\n\t };\r\n\t if (oldNode) env.textarea = oldNode;\r\n\t event.addListener(window, \"resize\", env.onResize);\r\n\t editor.on(\"destroy\", function() {\r\n\t event.removeListener(window, \"resize\", env.onResize);\r\n\t env.editor.container.env = null; // prevent memory leak on old ie\r\n\t });\r\n\t editor.container.env = editor.env = env;\r\n\t return editor;\r\n\t};\r\n\texports.createEditSession = function(text, mode) {\r\n\t var doc = new EditSession(text, mode);\r\n\t doc.setUndoManager(new UndoManager());\r\n\t return doc;\r\n\t}\r\n\texports.EditSession = EditSession;\r\n\texports.UndoManager = UndoManager;\r\n\texports.version = \"1.2.3\";\r\n\t});\r\n\t (function() {\r\n\t ace.acequire([\"ace/ace\"], function(a) {\r\n\t a && a.config.init(true);\r\n\t if (!window.ace)\r\n\t window.ace = a;\r\n\t for (var key in a) if (a.hasOwnProperty(key))\r\n\t window.ace[key] = a[key];\r\n\t });\r\n\t })();\r\n\t \r\n\tmodule.exports = window.ace.acequire(\"ace/ace\");\r\n\r\n/***/ },\r\n/* 65 */\r\n/***/ function(module, exports) {\r\n\r\n\tmodule.exports = function() { throw new Error(\"define cannot be used indirect\"); };\r\n\r\n\r\n/***/ },\r\n/* 66 */\r\n/***/ function(module, exports) {\r\n\r\n\t/* WEBPACK VAR INJECTION */(function(global) {module.exports = get_blob()\r\n\r\n\tfunction get_blob() {\r\n\t if(global.Blob) {\r\n\t try {\r\n\t new Blob(['asdf'], {type: 'text/plain'})\r\n\t return Blob\r\n\t } catch(err) {}\r\n\t }\r\n\r\n\t var Builder = global.WebKitBlobBuilder ||\r\n\t global.MozBlobBuilder ||\r\n\t global.MSBlobBuilder\r\n\r\n\t return function(parts, bag) {\r\n\t var builder = new Builder\r\n\t , endings = bag.endings\r\n\t , type = bag.type\r\n\r\n\t if(endings) for(var i = 0, len = parts.length; i < len; ++i) {\r\n\t builder.append(parts[i], endings)\r\n\t } else for(var i = 0, len = parts.length; i < len; ++i) {\r\n\t builder.append(parts[i])\r\n\t }\r\n\r\n\t return type ? builder.getBlob(type) : builder.getBlob()\r\n\t }\r\n\t}\r\n\r\n\t/* WEBPACK VAR INJECTION */}.call(exports, (function() { return this; }())))\r\n\r\n/***/ },\r\n/* 67 */\r\n/***/ function(module, exports, __webpack_require__) {\r\n\r\n\tace.define(\"ace/mode/json_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(acequire, exports, module) {\r\n\t\"use strict\";\r\n\r\n\tvar oop = acequire(\"../lib/oop\");\r\n\tvar TextHighlightRules = acequire(\"./text_highlight_rules\").TextHighlightRules;\r\n\r\n\tvar JsonHighlightRules = function() {\r\n\t this.$rules = {\r\n\t \"start\" : [\r\n\t {\r\n\t token : \"variable\", // single line\r\n\t regex : '[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]\\\\s*(?=:)'\r\n\t }, {\r\n\t token : \"string\", // single line\r\n\t regex : '\"',\r\n\t next : \"string\"\r\n\t }, {\r\n\t token : \"constant.numeric\", // hex\r\n\t regex : \"0[xX][0-9a-fA-F]+\\\\b\"\r\n\t }, {\r\n\t token : \"constant.numeric\", // float\r\n\t regex : \"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"\r\n\t }, {\r\n\t token : \"constant.language.boolean\",\r\n\t regex : \"(?:true|false)\\\\b\"\r\n\t }, {\r\n\t token : \"invalid.illegal\", // single quoted strings are not allowed\r\n\t regex : \"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"\r\n\t }, {\r\n\t token : \"invalid.illegal\", // comments are not allowed\r\n\t regex : \"\\\\/\\\\/.*$\"\r\n\t }, {\r\n\t token : \"paren.lparen\",\r\n\t regex : \"[[({]\"\r\n\t }, {\r\n\t token : \"paren.rparen\",\r\n\t regex : \"[\\\\])}]\"\r\n\t }, {\r\n\t token : \"text\",\r\n\t regex : \"\\\\s+\"\r\n\t }\r\n\t ],\r\n\t \"string\" : [\r\n\t {\r\n\t token : \"constant.language.escape\",\r\n\t regex : /\\\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|[\"\\\\\\/bfnrt])/\r\n\t }, {\r\n\t token : \"string\",\r\n\t regex : '[^\"\\\\\\\\]+'\r\n\t }, {\r\n\t token : \"string\",\r\n\t regex : '\"',\r\n\t next : \"start\"\r\n\t }, {\r\n\t token : \"string\",\r\n\t regex : \"\",\r\n\t next : \"start\"\r\n\t }\r\n\t ]\r\n\t };\r\n\t \r\n\t};\r\n\r\n\toop.inherits(JsonHighlightRules, TextHighlightRules);\r\n\r\n\texports.JsonHighlightRules = JsonHighlightRules;\r\n\t});\r\n\r\n\tace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(acequire, exports, module) {\r\n\t\"use strict\";\r\n\r\n\tvar Range = acequire(\"../range\").Range;\r\n\r\n\tvar MatchingBraceOutdent = function() {};\r\n\r\n\t(function() {\r\n\r\n\t this.checkOutdent = function(line, input) {\r\n\t if (! /^\\s+$/.test(line))\r\n\t return false;\r\n\r\n\t return /^\\s*\\}/.test(input);\r\n\t };\r\n\r\n\t this.autoOutdent = function(doc, row) {\r\n\t var line = doc.getLine(row);\r\n\t var match = line.match(/^(\\s*\\})/);\r\n\r\n\t if (!match) return 0;\r\n\r\n\t var column = match[1].length;\r\n\t var openBracePos = doc.findMatchingBracket({row: row, column: column});\r\n\r\n\t if (!openBracePos || openBracePos.row == row) return 0;\r\n\r\n\t var indent = this.$getIndent(doc.getLine(openBracePos.row));\r\n\t doc.replace(new Range(row, 0, row, column-1), indent);\r\n\t };\r\n\r\n\t this.$getIndent = function(line) {\r\n\t return line.match(/^\\s*/)[0];\r\n\t };\r\n\r\n\t}).call(MatchingBraceOutdent.prototype);\r\n\r\n\texports.MatchingBraceOutdent = MatchingBraceOutdent;\r\n\t});\r\n\r\n\tace.define(\"ace/mode/behaviour/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"], function(acequire, exports, module) {\r\n\t\"use strict\";\r\n\r\n\tvar oop = acequire(\"../../lib/oop\");\r\n\tvar Behaviour = acequire(\"../behaviour\").Behaviour;\r\n\tvar TokenIterator = acequire(\"../../token_iterator\").TokenIterator;\r\n\tvar lang = acequire(\"../../lib/lang\");\r\n\r\n\tvar SAFE_INSERT_IN_TOKENS =\r\n\t [\"text\", \"paren.rparen\", \"punctuation.operator\"];\r\n\tvar SAFE_INSERT_BEFORE_TOKENS =\r\n\t [\"text\", \"paren.rparen\", \"punctuation.operator\", \"comment\"];\r\n\r\n\tvar context;\r\n\tvar contextCache = {};\r\n\tvar initContext = function(editor) {\r\n\t var id = -1;\r\n\t if (editor.multiSelect) {\r\n\t id = editor.selection.index;\r\n\t if (contextCache.rangeCount != editor.multiSelect.rangeCount)\r\n\t contextCache = {rangeCount: editor.multiSelect.rangeCount};\r\n\t }\r\n\t if (contextCache[id])\r\n\t return context = contextCache[id];\r\n\t context = contextCache[id] = {\r\n\t autoInsertedBrackets: 0,\r\n\t autoInsertedRow: -1,\r\n\t autoInsertedLineEnd: \"\",\r\n\t maybeInsertedBrackets: 0,\r\n\t maybeInsertedRow: -1,\r\n\t maybeInsertedLineStart: \"\",\r\n\t maybeInsertedLineEnd: \"\"\r\n\t };\r\n\t};\r\n\r\n\tvar getWrapped = function(selection, selected, opening, closing) {\r\n\t var rowDiff = selection.end.row - selection.start.row;\r\n\t return {\r\n\t text: opening + selected + closing,\r\n\t selection: [\r\n\t 0,\r\n\t selection.start.column + 1,\r\n\t rowDiff,\r\n\t selection.end.column + (rowDiff ? 0 : 1)\r\n\t ]\r\n\t };\r\n\t};\r\n\r\n\tvar CstyleBehaviour = function() {\r\n\t this.add(\"braces\", \"insertion\", function(state, action, editor, session, text) {\r\n\t var cursor = editor.getCursorPosition();\r\n\t var line = session.doc.getLine(cursor.row);\r\n\t if (text == '{') {\r\n\t initContext(editor);\r\n\t var selection = editor.getSelectionRange();\r\n\t var selected = session.doc.getTextRange(selection);\r\n\t if (selected !== \"\" && selected !== \"{\" && editor.getWrapBehavioursEnabled()) {\r\n\t return getWrapped(selection, selected, '{', '}');\r\n\t } else if (CstyleBehaviour.isSaneInsertion(editor, session)) {\r\n\t if (/[\\]\\}\\)]/.test(line[cursor.column]) || editor.inMultiSelectMode) {\r\n\t CstyleBehaviour.recordAutoInsert(editor, session, \"}\");\r\n\t return {\r\n\t text: '{}',\r\n\t selection: [1, 1]\r\n\t };\r\n\t } else {\r\n\t CstyleBehaviour.recordMaybeInsert(editor, session, \"{\");\r\n\t return {\r\n\t text: '{',\r\n\t selection: [1, 1]\r\n\t };\r\n\t }\r\n\t }\r\n\t } else if (text == '}') {\r\n\t initContext(editor);\r\n\t var rightChar = line.substring(cursor.column, cursor.column + 1);\r\n\t if (rightChar == '}') {\r\n\t var matching = session.$findOpeningBracket('}', {column: cursor.column + 1, row: cursor.row});\r\n\t if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) {\r\n\t CstyleBehaviour.popAutoInsertedClosing();\r\n\t return {\r\n\t text: '',\r\n\t selection: [1, 1]\r\n\t };\r\n\t }\r\n\t }\r\n\t } else if (text == \"\\n\" || text == \"\\r\\n\") {\r\n\t initContext(editor);\r\n\t var closing = \"\";\r\n\t if (CstyleBehaviour.isMaybeInsertedClosing(cursor, line)) {\r\n\t closing = lang.stringRepeat(\"}\", context.maybeInsertedBrackets);\r\n\t CstyleBehaviour.clearMaybeInsertedClosing();\r\n\t }\r\n\t var rightChar = line.substring(cursor.column, cursor.column + 1);\r\n\t if (rightChar === '}') {\r\n\t var openBracePos = session.findMatchingBracket({row: cursor.row, column: cursor.column+1}, '}');\r\n\t if (!openBracePos)\r\n\t return null;\r\n\t var next_indent = this.$getIndent(session.getLine(openBracePos.row));\r\n\t } else if (closing) {\r\n\t var next_indent = this.$getIndent(line);\r\n\t } else {\r\n\t CstyleBehaviour.clearMaybeInsertedClosing();\r\n\t return;\r\n\t }\r\n\t var indent = next_indent + session.getTabString();\r\n\r\n\t return {\r\n\t text: '\\n' + indent + '\\n' + next_indent + closing,\r\n\t selection: [1, indent.length, 1, indent.length]\r\n\t };\r\n\t } else {\r\n\t CstyleBehaviour.clearMaybeInsertedClosing();\r\n\t }\r\n\t });\r\n\r\n\t this.add(\"braces\", \"deletion\", function(state, action, editor, session, range) {\r\n\t var selected = session.doc.getTextRange(range);\r\n\t if (!range.isMultiLine() && selected == '{') {\r\n\t initContext(editor);\r\n\t var line = session.doc.getLine(range.start.row);\r\n\t var rightChar = line.substring(range.end.column, range.end.column + 1);\r\n\t if (rightChar == '}') {\r\n\t range.end.column++;\r\n\t return range;\r\n\t } else {\r\n\t context.maybeInsertedBrackets--;\r\n\t }\r\n\t }\r\n\t });\r\n\r\n\t this.add(\"parens\", \"insertion\", function(state, action, editor, session, text) {\r\n\t if (text == '(') {\r\n\t initContext(editor);\r\n\t var selection = editor.getSelectionRange();\r\n\t var selected = session.doc.getTextRange(selection);\r\n\t if (selected !== \"\" && editor.getWrapBehavioursEnabled()) {\r\n\t return getWrapped(selection, selected, '(', ')');\r\n\t } else if (CstyleBehaviour.isSaneInsertion(editor, session)) {\r\n\t CstyleBehaviour.recordAutoInsert(editor, session, \")\");\r\n\t return {\r\n\t text: '()',\r\n\t selection: [1, 1]\r\n\t };\r\n\t }\r\n\t } else if (text == ')') {\r\n\t initContext(editor);\r\n\t var cursor = editor.getCursorPosition();\r\n\t var line = session.doc.getLine(cursor.row);\r\n\t var rightChar = line.substring(cursor.column, cursor.column + 1);\r\n\t if (rightChar == ')') {\r\n\t var matching = session.$findOpeningBracket(')', {column: cursor.column + 1, row: cursor.row});\r\n\t if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) {\r\n\t CstyleBehaviour.popAutoInsertedClosing();\r\n\t return {\r\n\t text: '',\r\n\t selection: [1, 1]\r\n\t };\r\n\t }\r\n\t }\r\n\t }\r\n\t });\r\n\r\n\t this.add(\"parens\", \"deletion\", function(state, action, editor, session, range) {\r\n\t var selected = session.doc.getTextRange(range);\r\n\t if (!range.isMultiLine() && selected == '(') {\r\n\t initContext(editor);\r\n\t var line = session.doc.getLine(range.start.row);\r\n\t var rightChar = line.substring(range.start.column + 1, range.start.column + 2);\r\n\t if (rightChar == ')') {\r\n\t range.end.column++;\r\n\t return range;\r\n\t }\r\n\t }\r\n\t });\r\n\r\n\t this.add(\"brackets\", \"insertion\", function(state, action, editor, session, text) {\r\n\t if (text == '[') {\r\n\t initContext(editor);\r\n\t var selection = editor.getSelectionRange();\r\n\t var selected = session.doc.getTextRange(selection);\r\n\t if (selected !== \"\" && editor.getWrapBehavioursEnabled()) {\r\n\t return getWrapped(selection, selected, '[', ']');\r\n\t } else if (CstyleBehaviour.isSaneInsertion(editor, session)) {\r\n\t CstyleBehaviour.recordAutoInsert(editor, session, \"]\");\r\n\t return {\r\n\t text: '[]',\r\n\t selection: [1, 1]\r\n\t };\r\n\t }\r\n\t } else if (text == ']') {\r\n\t initContext(editor);\r\n\t var cursor = editor.getCursorPosition();\r\n\t var line = session.doc.getLine(cursor.row);\r\n\t var rightChar = line.substring(cursor.column, cursor.column + 1);\r\n\t if (rightChar == ']') {\r\n\t var matching = session.$findOpeningBracket(']', {column: cursor.column + 1, row: cursor.row});\r\n\t if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) {\r\n\t CstyleBehaviour.popAutoInsertedClosing();\r\n\t return {\r\n\t text: '',\r\n\t selection: [1, 1]\r\n\t };\r\n\t }\r\n\t }\r\n\t }\r\n\t });\r\n\r\n\t this.add(\"brackets\", \"deletion\", function(state, action, editor, session, range) {\r\n\t var selected = session.doc.getTextRange(range);\r\n\t if (!range.isMultiLine() && selected == '[') {\r\n\t initContext(editor);\r\n\t var line = session.doc.getLine(range.start.row);\r\n\t var rightChar = line.substring(range.start.column + 1, range.start.column + 2);\r\n\t if (rightChar == ']') {\r\n\t range.end.column++;\r\n\t return range;\r\n\t }\r\n\t }\r\n\t });\r\n\r\n\t this.add(\"string_dquotes\", \"insertion\", function(state, action, editor, session, text) {\r\n\t if (text == '\"' || text == \"'\") {\r\n\t initContext(editor);\r\n\t var quote = text;\r\n\t var selection = editor.getSelectionRange();\r\n\t var selected = session.doc.getTextRange(selection);\r\n\t if (selected !== \"\" && selected !== \"'\" && selected != '\"' && editor.getWrapBehavioursEnabled()) {\r\n\t return getWrapped(selection, selected, quote, quote);\r\n\t } else if (!selected) {\r\n\t var cursor = editor.getCursorPosition();\r\n\t var line = session.doc.getLine(cursor.row);\r\n\t var leftChar = line.substring(cursor.column-1, cursor.column);\r\n\t var rightChar = line.substring(cursor.column, cursor.column + 1);\r\n\t \r\n\t var token = session.getTokenAt(cursor.row, cursor.column);\r\n\t var rightToken = session.getTokenAt(cursor.row, cursor.column + 1);\r\n\t if (leftChar == \"\\\\\" && token && /escape/.test(token.type))\r\n\t return null;\r\n\t \r\n\t var stringBefore = token && /string|escape/.test(token.type);\r\n\t var stringAfter = !rightToken || /string|escape/.test(rightToken.type);\r\n\t \r\n\t var pair;\r\n\t if (rightChar == quote) {\r\n\t pair = stringBefore !== stringAfter;\r\n\t } else {\r\n\t if (stringBefore && !stringAfter)\r\n\t return null; // wrap string with different quote\r\n\t if (stringBefore && stringAfter)\r\n\t return null; // do not pair quotes inside strings\r\n\t var wordRe = session.$mode.tokenRe;\r\n\t wordRe.lastIndex = 0;\r\n\t var isWordBefore = wordRe.test(leftChar);\r\n\t wordRe.lastIndex = 0;\r\n\t var isWordAfter = wordRe.test(leftChar);\r\n\t if (isWordBefore || isWordAfter)\r\n\t return null; // before or after alphanumeric\r\n\t if (rightChar && !/[\\s;,.})\\]\\\\]/.test(rightChar))\r\n\t return null; // there is rightChar and it isn't closing\r\n\t pair = true;\r\n\t }\r\n\t return {\r\n\t text: pair ? quote + quote : \"\",\r\n\t selection: [1,1]\r\n\t };\r\n\t }\r\n\t }\r\n\t });\r\n\r\n\t this.add(\"string_dquotes\", \"deletion\", function(state, action, editor, session, range) {\r\n\t var selected = session.doc.getTextRange(range);\r\n\t if (!range.isMultiLine() && (selected == '\"' || selected == \"'\")) {\r\n\t initContext(editor);\r\n\t var line = session.doc.getLine(range.start.row);\r\n\t var rightChar = line.substring(range.start.column + 1, range.start.column + 2);\r\n\t if (rightChar == selected) {\r\n\t range.end.column++;\r\n\t return range;\r\n\t }\r\n\t }\r\n\t });\r\n\r\n\t};\r\n\r\n\t \r\n\tCstyleBehaviour.isSaneInsertion = function(editor, session) {\r\n\t var cursor = editor.getCursorPosition();\r\n\t var iterator = new TokenIterator(session, cursor.row, cursor.column);\r\n\t if (!this.$matchTokenType(iterator.getCurrentToken() || \"text\", SAFE_INSERT_IN_TOKENS)) {\r\n\t var iterator2 = new TokenIterator(session, cursor.row, cursor.column + 1);\r\n\t if (!this.$matchTokenType(iterator2.getCurrentToken() || \"text\", SAFE_INSERT_IN_TOKENS))\r\n\t return false;\r\n\t }\r\n\t iterator.stepForward();\r\n\t return iterator.getCurrentTokenRow() !== cursor.row ||\r\n\t this.$matchTokenType(iterator.getCurrentToken() || \"text\", SAFE_INSERT_BEFORE_TOKENS);\r\n\t};\r\n\r\n\tCstyleBehaviour.$matchTokenType = function(token, types) {\r\n\t return types.indexOf(token.type || token) > -1;\r\n\t};\r\n\r\n\tCstyleBehaviour.recordAutoInsert = function(editor, session, bracket) {\r\n\t var cursor = editor.getCursorPosition();\r\n\t var line = session.doc.getLine(cursor.row);\r\n\t if (!this.isAutoInsertedClosing(cursor, line, context.autoInsertedLineEnd[0]))\r\n\t context.autoInsertedBrackets = 0;\r\n\t context.autoInsertedRow = cursor.row;\r\n\t context.autoInsertedLineEnd = bracket + line.substr(cursor.column);\r\n\t context.autoInsertedBrackets++;\r\n\t};\r\n\r\n\tCstyleBehaviour.recordMaybeInsert = function(editor, session, bracket) {\r\n\t var cursor = editor.getCursorPosition();\r\n\t var line = session.doc.getLine(cursor.row);\r\n\t if (!this.isMaybeInsertedClosing(cursor, line))\r\n\t context.maybeInsertedBrackets = 0;\r\n\t context.maybeInsertedRow = cursor.row;\r\n\t context.maybeInsertedLineStart = line.substr(0, cursor.column) + bracket;\r\n\t context.maybeInsertedLineEnd = line.substr(cursor.column);\r\n\t context.maybeInsertedBrackets++;\r\n\t};\r\n\r\n\tCstyleBehaviour.isAutoInsertedClosing = function(cursor, line, bracket) {\r\n\t return context.autoInsertedBrackets > 0 &&\r\n\t cursor.row === context.autoInsertedRow &&\r\n\t bracket === context.autoInsertedLineEnd[0] &&\r\n\t line.substr(cursor.column) === context.autoInsertedLineEnd;\r\n\t};\r\n\r\n\tCstyleBehaviour.isMaybeInsertedClosing = function(cursor, line) {\r\n\t return context.maybeInsertedBrackets > 0 &&\r\n\t cursor.row === context.maybeInsertedRow &&\r\n\t line.substr(cursor.column) === context.maybeInsertedLineEnd &&\r\n\t line.substr(0, cursor.column) == context.maybeInsertedLineStart;\r\n\t};\r\n\r\n\tCstyleBehaviour.popAutoInsertedClosing = function() {\r\n\t context.autoInsertedLineEnd = context.autoInsertedLineEnd.substr(1);\r\n\t context.autoInsertedBrackets--;\r\n\t};\r\n\r\n\tCstyleBehaviour.clearMaybeInsertedClosing = function() {\r\n\t if (context) {\r\n\t context.maybeInsertedBrackets = 0;\r\n\t context.maybeInsertedRow = -1;\r\n\t }\r\n\t};\r\n\r\n\r\n\r\n\toop.inherits(CstyleBehaviour, Behaviour);\r\n\r\n\texports.CstyleBehaviour = CstyleBehaviour;\r\n\t});\r\n\r\n\tace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(acequire, exports, module) {\r\n\t\"use strict\";\r\n\r\n\tvar oop = acequire(\"../../lib/oop\");\r\n\tvar Range = acequire(\"../../range\").Range;\r\n\tvar BaseFoldMode = acequire(\"./fold_mode\").FoldMode;\r\n\r\n\tvar FoldMode = exports.FoldMode = function(commentRegex) {\r\n\t if (commentRegex) {\r\n\t this.foldingStartMarker = new RegExp(\r\n\t this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start)\r\n\t );\r\n\t this.foldingStopMarker = new RegExp(\r\n\t this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end)\r\n\t );\r\n\t }\r\n\t};\r\n\toop.inherits(FoldMode, BaseFoldMode);\r\n\r\n\t(function() {\r\n\t \r\n\t this.foldingStartMarker = /(\\{|\\[)[^\\}\\]]*$|^\\s*(\\/\\*)/;\r\n\t this.foldingStopMarker = /^[^\\[\\{]*(\\}|\\])|^[\\s\\*]*(\\*\\/)/;\r\n\t this.singleLineBlockCommentRe= /^\\s*(\\/\\*).*\\*\\/\\s*$/;\r\n\t this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\r\n\t this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\r\n\t this._getFoldWidgetBase = this.getFoldWidget;\r\n\t this.getFoldWidget = function(session, foldStyle, row) {\r\n\t var line = session.getLine(row);\r\n\t \r\n\t if (this.singleLineBlockCommentRe.test(line)) {\r\n\t if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\r\n\t return \"\";\r\n\t }\r\n\t \r\n\t var fw = this._getFoldWidgetBase(session, foldStyle, row);\r\n\t \r\n\t if (!fw && this.startRegionRe.test(line))\r\n\t return \"start\"; // lineCommentRegionStart\r\n\t \r\n\t return fw;\r\n\t };\r\n\r\n\t this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) {\r\n\t var line = session.getLine(row);\r\n\t \r\n\t if (this.startRegionRe.test(line))\r\n\t return this.getCommentRegionBlock(session, line, row);\r\n\t \r\n\t var match = line.match(this.foldingStartMarker);\r\n\t if (match) {\r\n\t var i = match.index;\r\n\r\n\t if (match[1])\r\n\t return this.openingBracketBlock(session, match[1], row, i);\r\n\t \r\n\t var range = session.getCommentFoldRange(row, i + match[0].length, 1);\r\n\t \r\n\t if (range && !range.isMultiLine()) {\r\n\t if (forceMultiline) {\r\n\t range = this.getSectionRange(session, row);\r\n\t } else if (foldStyle != \"all\")\r\n\t range = null;\r\n\t }\r\n\t \r\n\t return range;\r\n\t }\r\n\r\n\t if (foldStyle === \"markbegin\")\r\n\t return;\r\n\r\n\t var match = line.match(this.foldingStopMarker);\r\n\t if (match) {\r\n\t var i = match.index + match[0].length;\r\n\r\n\t if (match[1])\r\n\t return this.closingBracketBlock(session, match[1], row, i);\r\n\r\n\t return session.getCommentFoldRange(row, i, -1);\r\n\t }\r\n\t };\r\n\t \r\n\t this.getSectionRange = function(session, row) {\r\n\t var line = session.getLine(row);\r\n\t var startIndent = line.search(/\\S/);\r\n\t var startRow = row;\r\n\t var startColumn = line.length;\r\n\t row = row + 1;\r\n\t var endRow = row;\r\n\t var maxRow = session.getLength();\r\n\t while (++row < maxRow) {\r\n\t line = session.getLine(row);\r\n\t var indent = line.search(/\\S/);\r\n\t if (indent === -1)\r\n\t continue;\r\n\t if (startIndent > indent)\r\n\t break;\r\n\t var subRange = this.getFoldWidgetRange(session, \"all\", row);\r\n\t \r\n\t if (subRange) {\r\n\t if (subRange.start.row <= startRow) {\r\n\t break;\r\n\t } else if (subRange.isMultiLine()) {\r\n\t row = subRange.end.row;\r\n\t } else if (startIndent == indent) {\r\n\t break;\r\n\t }\r\n\t }\r\n\t endRow = row;\r\n\t }\r\n\t \r\n\t return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\r\n\t };\r\n\t this.getCommentRegionBlock = function(session, line, row) {\r\n\t var startColumn = line.search(/\\s*$/);\r\n\t var maxRow = session.getLength();\r\n\t var startRow = row;\r\n\t \r\n\t var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\r\n\t var depth = 1;\r\n\t while (++row < maxRow) {\r\n\t line = session.getLine(row);\r\n\t var m = re.exec(line);\r\n\t if (!m) continue;\r\n\t if (m[1]) depth--;\r\n\t else depth++;\r\n\r\n\t if (!depth) break;\r\n\t }\r\n\r\n\t var endRow = row;\r\n\t if (endRow > startRow) {\r\n\t return new Range(startRow, startColumn, endRow, line.length);\r\n\t }\r\n\t };\r\n\r\n\t}).call(FoldMode.prototype);\r\n\r\n\t});\r\n\r\n\tace.define(\"ace/mode/json\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/json_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\",\"ace/worker/worker_client\"], function(acequire, exports, module) {\r\n\t\"use strict\";\r\n\r\n\tvar oop = acequire(\"../lib/oop\");\r\n\tvar TextMode = acequire(\"./text\").Mode;\r\n\tvar HighlightRules = acequire(\"./json_highlight_rules\").JsonHighlightRules;\r\n\tvar MatchingBraceOutdent = acequire(\"./matching_brace_outdent\").MatchingBraceOutdent;\r\n\tvar CstyleBehaviour = acequire(\"./behaviour/cstyle\").CstyleBehaviour;\r\n\tvar CStyleFoldMode = acequire(\"./folding/cstyle\").FoldMode;\r\n\tvar WorkerClient = acequire(\"../worker/worker_client\").WorkerClient;\r\n\r\n\tvar Mode = function() {\r\n\t this.HighlightRules = HighlightRules;\r\n\t this.$outdent = new MatchingBraceOutdent();\r\n\t this.$behaviour = new CstyleBehaviour();\r\n\t this.foldingRules = new CStyleFoldMode();\r\n\t};\r\n\toop.inherits(Mode, TextMode);\r\n\r\n\t(function() {\r\n\r\n\t this.getNextLineIndent = function(state, line, tab) {\r\n\t var indent = this.$getIndent(line);\r\n\r\n\t if (state == \"start\") {\r\n\t var match = line.match(/^.*[\\{\\(\\[]\\s*$/);\r\n\t if (match) {\r\n\t indent += tab;\r\n\t }\r\n\t }\r\n\r\n\t return indent;\r\n\t };\r\n\r\n\t this.checkOutdent = function(state, line, input) {\r\n\t return this.$outdent.checkOutdent(line, input);\r\n\t };\r\n\r\n\t this.autoOutdent = function(state, doc, row) {\r\n\t this.$outdent.autoOutdent(doc, row);\r\n\t };\r\n\r\n\t this.createWorker = function(session) {\r\n\t var worker = new WorkerClient([\"ace\"], __webpack_require__(68), \"JsonWorker\");\r\n\t worker.attachToDocument(session.getDocument());\r\n\r\n\t worker.on(\"annotate\", function(e) {\r\n\t session.setAnnotations(e.data);\r\n\t });\r\n\r\n\t worker.on(\"terminate\", function() {\r\n\t session.clearAnnotations();\r\n\t });\r\n\r\n\t return worker;\r\n\t };\r\n\r\n\r\n\t this.$id = \"ace/mode/json\";\r\n\t}).call(Mode.prototype);\r\n\r\n\texports.Mode = Mode;\r\n\t});\r\n\r\n\r\n/***/ },\r\n/* 68 */\r\n/***/ function(module, exports) {\r\n\r\n\tmodule.exports.id = 'ace/mode/json_worker';\r\n\tmodule.exports.src = \"\\\"no use strict\\\";(function(window){function resolveModuleId(id,paths){for(var testPath=id,tail=\\\"\\\";testPath;){var alias=paths[testPath];if(\\\"string\\\"==typeof alias)return alias+tail;if(alias)return alias.location.replace(/\\\\/*$/,\\\"/\\\")+(tail||alias.main||alias.name);if(alias===!1)return\\\"\\\";var i=testPath.lastIndexOf(\\\"/\\\");if(-1===i)break;tail=testPath.substr(i)+tail,testPath=testPath.slice(0,i)}return id}if(!(void 0!==window.window&&window.document||window.acequire&&window.define)){window.console||(window.console=function(){var msgs=Array.prototype.slice.call(arguments,0);postMessage({type:\\\"log\\\",data:msgs})},window.console.error=window.console.warn=window.console.log=window.console.trace=window.console),window.window=window,window.ace=window,window.onerror=function(message,file,line,col,err){postMessage({type:\\\"error\\\",data:{message:message,data:err.data,file:file,line:line,col:col,stack:err.stack}})},window.normalizeModule=function(parentId,moduleName){if(-1!==moduleName.indexOf(\\\"!\\\")){var chunks=moduleName.split(\\\"!\\\");return window.normalizeModule(parentId,chunks[0])+\\\"!\\\"+window.normalizeModule(parentId,chunks[1])}if(\\\".\\\"==moduleName.charAt(0)){var base=parentId.split(\\\"/\\\").slice(0,-1).join(\\\"/\\\");for(moduleName=(base?base+\\\"/\\\":\\\"\\\")+moduleName;-1!==moduleName.indexOf(\\\".\\\")&&previous!=moduleName;){var previous=moduleName;moduleName=moduleName.replace(/^\\\\.\\\\//,\\\"\\\").replace(/\\\\/\\\\.\\\\//,\\\"/\\\").replace(/[^\\\\/]+\\\\/\\\\.\\\\.\\\\//,\\\"\\\")}}return moduleName},window.acequire=function acequire(parentId,id){if(id||(id=parentId,parentId=null),!id.charAt)throw Error(\\\"worker.js acequire() accepts only (parentId, id) as arguments\\\");id=window.normalizeModule(parentId,id);var module=window.acequire.modules[id];if(module)return module.initialized||(module.initialized=!0,module.exports=module.factory().exports),module.exports;if(!window.acequire.tlns)return console.log(\\\"unable to load \\\"+id);var path=resolveModuleId(id,window.acequire.tlns);return\\\".js\\\"!=path.slice(-3)&&(path+=\\\".js\\\"),window.acequire.id=id,window.acequire.modules[id]={},importScripts(path),window.acequire(parentId,id)},window.acequire.modules={},window.acequire.tlns={},window.define=function(id,deps,factory){if(2==arguments.length?(factory=deps,\\\"string\\\"!=typeof id&&(deps=id,id=window.acequire.id)):1==arguments.length&&(factory=id,deps=[],id=window.acequire.id),\\\"function\\\"!=typeof factory)return window.acequire.modules[id]={exports:factory,initialized:!0},void 0;deps.length||(deps=[\\\"require\\\",\\\"exports\\\",\\\"module\\\"]);var req=function(childId){return window.acequire(id,childId)};window.acequire.modules[id]={exports:{},factory:function(){var module=this,returnExports=factory.apply(this,deps.map(function(dep){switch(dep){case\\\"require\\\":return req;case\\\"exports\\\":return module.exports;case\\\"module\\\":return module;default:return req(dep)}}));return returnExports&&(module.exports=returnExports),module}}},window.define.amd={},acequire.tlns={},window.initBaseUrls=function(topLevelNamespaces){for(var i in topLevelNamespaces)acequire.tlns[i]=topLevelNamespaces[i]},window.initSender=function(){var EventEmitter=window.acequire(\\\"ace/lib/event_emitter\\\").EventEmitter,oop=window.acequire(\\\"ace/lib/oop\\\"),Sender=function(){};return function(){oop.implement(this,EventEmitter),this.callback=function(data,callbackId){postMessage({type:\\\"call\\\",id:callbackId,data:data})},this.emit=function(name,data){postMessage({type:\\\"event\\\",name:name,data:data})}}.call(Sender.prototype),new Sender};var main=window.main=null,sender=window.sender=null;window.onmessage=function(e){var msg=e.data;if(msg.event&&sender)sender._signal(msg.event,msg.data);else if(msg.command)if(main[msg.command])main[msg.command].apply(main,msg.args);else{if(!window[msg.command])throw Error(\\\"Unknown command:\\\"+msg.command);window[msg.command].apply(window,msg.args)}else if(msg.init){window.initBaseUrls(msg.tlns),acequire(\\\"ace/lib/es5-shim\\\"),sender=window.sender=window.initSender();var clazz=acequire(msg.module)[msg.classname];main=window.main=new clazz(sender)}}}})(this),ace.define(\\\"ace/lib/oop\\\",[\\\"require\\\",\\\"exports\\\",\\\"module\\\"],function(acequire,exports){\\\"use strict\\\";exports.inherits=function(ctor,superCtor){ctor.super_=superCtor,ctor.prototype=Object.create(superCtor.prototype,{constructor:{value:ctor,enumerable:!1,writable:!0,configurable:!0}})},exports.mixin=function(obj,mixin){for(var key in mixin)obj[key]=mixin[key];return obj},exports.implement=function(proto,mixin){exports.mixin(proto,mixin)}}),ace.define(\\\"ace/range\\\",[\\\"require\\\",\\\"exports\\\",\\\"module\\\"],function(acequire,exports){\\\"use strict\\\";var comparePoints=function(p1,p2){return p1.row-p2.row||p1.column-p2.column},Range=function(startRow,startColumn,endRow,endColumn){this.start={row:startRow,column:startColumn},this.end={row:endRow,column:endColumn}};(function(){this.isEqual=function(range){return this.start.row===range.start.row&&this.end.row===range.end.row&&this.start.column===range.start.column&&this.end.column===range.end.column},this.toString=function(){return\\\"Range: [\\\"+this.start.row+\\\"/\\\"+this.start.column+\\\"] -> [\\\"+this.end.row+\\\"/\\\"+this.end.column+\\\"]\\\"},this.contains=function(row,column){return 0==this.compare(row,column)},this.compareRange=function(range){var cmp,end=range.end,start=range.start;return cmp=this.compare(end.row,end.column),1==cmp?(cmp=this.compare(start.row,start.column),1==cmp?2:0==cmp?1:0):-1==cmp?-2:(cmp=this.compare(start.row,start.column),-1==cmp?-1:1==cmp?42:0)},this.comparePoint=function(p){return this.compare(p.row,p.column)},this.containsRange=function(range){return 0==this.comparePoint(range.start)&&0==this.comparePoint(range.end)},this.intersects=function(range){var cmp=this.compareRange(range);return-1==cmp||0==cmp||1==cmp},this.isEnd=function(row,column){return this.end.row==row&&this.end.column==column},this.isStart=function(row,column){return this.start.row==row&&this.start.column==column},this.setStart=function(row,column){\\\"object\\\"==typeof row?(this.start.column=row.column,this.start.row=row.row):(this.start.row=row,this.start.column=column)},this.setEnd=function(row,column){\\\"object\\\"==typeof row?(this.end.column=row.column,this.end.row=row.row):(this.end.row=row,this.end.column=column)},this.inside=function(row,column){return 0==this.compare(row,column)?this.isEnd(row,column)||this.isStart(row,column)?!1:!0:!1},this.insideStart=function(row,column){return 0==this.compare(row,column)?this.isEnd(row,column)?!1:!0:!1},this.insideEnd=function(row,column){return 0==this.compare(row,column)?this.isStart(row,column)?!1:!0:!1},this.compare=function(row,column){return this.isMultiLine()||row!==this.start.row?this.start.row>row?-1:row>this.end.row?1:this.start.row===row?column>=this.start.column?0:-1:this.end.row===row?this.end.column>=column?0:1:0:this.start.column>column?-1:column>this.end.column?1:0},this.compareStart=function(row,column){return this.start.row==row&&this.start.column==column?-1:this.compare(row,column)},this.compareEnd=function(row,column){return this.end.row==row&&this.end.column==column?1:this.compare(row,column)},this.compareInside=function(row,column){return this.end.row==row&&this.end.column==column?1:this.start.row==row&&this.start.column==column?-1:this.compare(row,column)},this.clipRows=function(firstRow,lastRow){if(this.end.row>lastRow)var end={row:lastRow+1,column:0};else if(firstRow>this.end.row)var end={row:firstRow,column:0};if(this.start.row>lastRow)var start={row:lastRow+1,column:0};else if(firstRow>this.start.row)var start={row:firstRow,column:0};return Range.fromPoints(start||this.start,end||this.end)},this.extend=function(row,column){var cmp=this.compare(row,column);if(0==cmp)return this;if(-1==cmp)var start={row:row,column:column};else var end={row:row,column:column};return Range.fromPoints(start||this.start,end||this.end)},this.isEmpty=function(){return this.start.row===this.end.row&&this.start.column===this.end.column},this.isMultiLine=function(){return this.start.row!==this.end.row},this.clone=function(){return Range.fromPoints(this.start,this.end)},this.collapseRows=function(){return 0==this.end.column?new Range(this.start.row,0,Math.max(this.start.row,this.end.row-1),0):new Range(this.start.row,0,this.end.row,0)},this.toScreenRange=function(session){var screenPosStart=session.documentToScreenPosition(this.start),screenPosEnd=session.documentToScreenPosition(this.end);return new Range(screenPosStart.row,screenPosStart.column,screenPosEnd.row,screenPosEnd.column)},this.moveBy=function(row,column){this.start.row+=row,this.start.column+=column,this.end.row+=row,this.end.column+=column}}).call(Range.prototype),Range.fromPoints=function(start,end){return new Range(start.row,start.column,end.row,end.column)},Range.comparePoints=comparePoints,Range.comparePoints=function(p1,p2){return p1.row-p2.row||p1.column-p2.column},exports.Range=Range}),ace.define(\\\"ace/apply_delta\\\",[\\\"require\\\",\\\"exports\\\",\\\"module\\\"],function(acequire,exports){\\\"use strict\\\";exports.applyDelta=function(docLines,delta){var row=delta.start.row,startColumn=delta.start.column,line=docLines[row]||\\\"\\\";switch(delta.action){case\\\"insert\\\":var lines=delta.lines;if(1===lines.length)docLines[row]=line.substring(0,startColumn)+delta.lines[0]+line.substring(startColumn);else{var args=[row,1].concat(delta.lines);docLines.splice.apply(docLines,args),docLines[row]=line.substring(0,startColumn)+docLines[row],docLines[row+delta.lines.length-1]+=line.substring(startColumn)}break;case\\\"remove\\\":var endColumn=delta.end.column,endRow=delta.end.row;row===endRow?docLines[row]=line.substring(0,startColumn)+line.substring(endColumn):docLines.splice(row,endRow-row+1,line.substring(0,startColumn)+docLines[endRow].substring(endColumn))}}}),ace.define(\\\"ace/lib/event_emitter\\\",[\\\"require\\\",\\\"exports\\\",\\\"module\\\"],function(acequire,exports){\\\"use strict\\\";var EventEmitter={},stopPropagation=function(){this.propagationStopped=!0},preventDefault=function(){this.defaultPrevented=!0};EventEmitter._emit=EventEmitter._dispatchEvent=function(eventName,e){this._eventRegistry||(this._eventRegistry={}),this._defaultHandlers||(this._defaultHandlers={});var listeners=this._eventRegistry[eventName]||[],defaultHandler=this._defaultHandlers[eventName];if(listeners.length||defaultHandler){\\\"object\\\"==typeof e&&e||(e={}),e.type||(e.type=eventName),e.stopPropagation||(e.stopPropagation=stopPropagation),e.preventDefault||(e.preventDefault=preventDefault),listeners=listeners.slice();for(var i=0;listeners.length>i&&(listeners[i](e,this),!e.propagationStopped);i++);return defaultHandler&&!e.defaultPrevented?defaultHandler(e,this):void 0}},EventEmitter._signal=function(eventName,e){var listeners=(this._eventRegistry||{})[eventName];if(listeners){listeners=listeners.slice();for(var i=0;listeners.length>i;i++)listeners[i](e,this)}},EventEmitter.once=function(eventName,callback){var _self=this;callback&&this.addEventListener(eventName,function newCallback(){_self.removeEventListener(eventName,newCallback),callback.apply(null,arguments)})},EventEmitter.setDefaultHandler=function(eventName,callback){var handlers=this._defaultHandlers;if(handlers||(handlers=this._defaultHandlers={_disabled_:{}}),handlers[eventName]){var old=handlers[eventName],disabled=handlers._disabled_[eventName];disabled||(handlers._disabled_[eventName]=disabled=[]),disabled.push(old);var i=disabled.indexOf(callback);-1!=i&&disabled.splice(i,1)}handlers[eventName]=callback},EventEmitter.removeDefaultHandler=function(eventName,callback){var handlers=this._defaultHandlers;if(handlers){var disabled=handlers._disabled_[eventName];if(handlers[eventName]==callback)handlers[eventName],disabled&&this.setDefaultHandler(eventName,disabled.pop());else if(disabled){var i=disabled.indexOf(callback);-1!=i&&disabled.splice(i,1)}}},EventEmitter.on=EventEmitter.addEventListener=function(eventName,callback,capturing){this._eventRegistry=this._eventRegistry||{};var listeners=this._eventRegistry[eventName];return listeners||(listeners=this._eventRegistry[eventName]=[]),-1==listeners.indexOf(callback)&&listeners[capturing?\\\"unshift\\\":\\\"push\\\"](callback),callback},EventEmitter.off=EventEmitter.removeListener=EventEmitter.removeEventListener=function(eventName,callback){this._eventRegistry=this._eventRegistry||{};var listeners=this._eventRegistry[eventName];if(listeners){var index=listeners.indexOf(callback);-1!==index&&listeners.splice(index,1)}},EventEmitter.removeAllListeners=function(eventName){this._eventRegistry&&(this._eventRegistry[eventName]=[])},exports.EventEmitter=EventEmitter}),ace.define(\\\"ace/anchor\\\",[\\\"require\\\",\\\"exports\\\",\\\"module\\\",\\\"ace/lib/oop\\\",\\\"ace/lib/event_emitter\\\"],function(acequire,exports){\\\"use strict\\\";var oop=acequire(\\\"./lib/oop\\\"),EventEmitter=acequire(\\\"./lib/event_emitter\\\").EventEmitter,Anchor=exports.Anchor=function(doc,row,column){this.$onChange=this.onChange.bind(this),this.attach(doc),column===void 0?this.setPosition(row.row,row.column):this.setPosition(row,column)};(function(){function $pointsInOrder(point1,point2,equalPointsInOrder){var bColIsAfter=equalPointsInOrder?point1.column<=point2.column:point1.columnthis.row)){var point=$getTransformedPoint(delta,{row:this.row,column:this.column},this.$insertRight);this.setPosition(point.row,point.column,!0)}},this.setPosition=function(row,column,noClip){var pos;if(pos=noClip?{row:row,column:column}:this.$clipPositionToDocument(row,column),this.row!=pos.row||this.column!=pos.column){var old={row:this.row,column:this.column};this.row=pos.row,this.column=pos.column,this._signal(\\\"change\\\",{old:old,value:pos})}},this.detach=function(){this.document.removeEventListener(\\\"change\\\",this.$onChange)},this.attach=function(doc){this.document=doc||this.document,this.document.on(\\\"change\\\",this.$onChange)},this.$clipPositionToDocument=function(row,column){var pos={};return row>=this.document.getLength()?(pos.row=Math.max(0,this.document.getLength()-1),pos.column=this.document.getLine(pos.row).length):0>row?(pos.row=0,pos.column=0):(pos.row=row,pos.column=Math.min(this.document.getLine(pos.row).length,Math.max(0,column))),0>column&&(pos.column=0),pos}}).call(Anchor.prototype)}),ace.define(\\\"ace/document\\\",[\\\"require\\\",\\\"exports\\\",\\\"module\\\",\\\"ace/lib/oop\\\",\\\"ace/apply_delta\\\",\\\"ace/lib/event_emitter\\\",\\\"ace/range\\\",\\\"ace/anchor\\\"],function(acequire,exports){\\\"use strict\\\";var oop=acequire(\\\"./lib/oop\\\"),applyDelta=acequire(\\\"./apply_delta\\\").applyDelta,EventEmitter=acequire(\\\"./lib/event_emitter\\\").EventEmitter,Range=acequire(\\\"./range\\\").Range,Anchor=acequire(\\\"./anchor\\\").Anchor,Document=function(textOrLines){this.$lines=[\\\"\\\"],0===textOrLines.length?this.$lines=[\\\"\\\"]:Array.isArray(textOrLines)?this.insertMergedLines({row:0,column:0},textOrLines):this.insert({row:0,column:0},textOrLines)};(function(){oop.implement(this,EventEmitter),this.setValue=function(text){var len=this.getLength()-1;this.remove(new Range(0,0,len,this.getLine(len).length)),this.insert({row:0,column:0},text)},this.getValue=function(){return this.getAllLines().join(this.getNewLineCharacter())},this.createAnchor=function(row,column){return new Anchor(this,row,column)},this.$split=0===\\\"aaa\\\".split(/a/).length?function(text){return text.replace(/\\\\r\\\\n|\\\\r/g,\\\"\\\\n\\\").split(\\\"\\\\n\\\")}:function(text){return text.split(/\\\\r\\\\n|\\\\r|\\\\n/)},this.$detectNewLine=function(text){var match=text.match(/^.*?(\\\\r\\\\n|\\\\r|\\\\n)/m);this.$autoNewLine=match?match[1]:\\\"\\\\n\\\",this._signal(\\\"changeNewLineMode\\\")},this.getNewLineCharacter=function(){switch(this.$newLineMode){case\\\"windows\\\":return\\\"\\\\r\\\\n\\\";case\\\"unix\\\":return\\\"\\\\n\\\";default:return this.$autoNewLine||\\\"\\\\n\\\"}},this.$autoNewLine=\\\"\\\",this.$newLineMode=\\\"auto\\\",this.setNewLineMode=function(newLineMode){this.$newLineMode!==newLineMode&&(this.$newLineMode=newLineMode,this._signal(\\\"changeNewLineMode\\\"))},this.getNewLineMode=function(){return this.$newLineMode},this.isNewLine=function(text){return\\\"\\\\r\\\\n\\\"==text||\\\"\\\\r\\\"==text||\\\"\\\\n\\\"==text},this.getLine=function(row){return this.$lines[row]||\\\"\\\"},this.getLines=function(firstRow,lastRow){return this.$lines.slice(firstRow,lastRow+1)},this.getAllLines=function(){return this.getLines(0,this.getLength())},this.getLength=function(){return this.$lines.length},this.getTextRange=function(range){return this.getLinesForRange(range).join(this.getNewLineCharacter())},this.getLinesForRange=function(range){var lines;if(range.start.row===range.end.row)lines=[this.getLine(range.start.row).substring(range.start.column,range.end.column)];else{lines=this.getLines(range.start.row,range.end.row),lines[0]=(lines[0]||\\\"\\\").substring(range.start.column);var l=lines.length-1;range.end.row-range.start.row==l&&(lines[l]=lines[l].substring(0,range.end.column))}return lines},this.insertLines=function(row,lines){return console.warn(\\\"Use of document.insertLines is deprecated. Use the insertFullLines method instead.\\\"),this.insertFullLines(row,lines)},this.removeLines=function(firstRow,lastRow){return console.warn(\\\"Use of document.removeLines is deprecated. Use the removeFullLines method instead.\\\"),this.removeFullLines(firstRow,lastRow)},this.insertNewLine=function(position){return console.warn(\\\"Use of document.insertNewLine is deprecated. Use insertMergedLines(position, ['', '']) instead.\\\"),this.insertMergedLines(position,[\\\"\\\",\\\"\\\"])},this.insert=function(position,text){return 1>=this.getLength()&&this.$detectNewLine(text),this.insertMergedLines(position,this.$split(text))},this.insertInLine=function(position,text){var start=this.clippedPos(position.row,position.column),end=this.pos(position.row,position.column+text.length);return this.applyDelta({start:start,end:end,action:\\\"insert\\\",lines:[text]},!0),this.clonePos(end)},this.clippedPos=function(row,column){var length=this.getLength();void 0===row?row=length:0>row?row=0:row>=length&&(row=length-1,column=void 0);var line=this.getLine(row);return void 0==column&&(column=line.length),column=Math.min(Math.max(column,0),line.length),{row:row,column:column}},this.clonePos=function(pos){return{row:pos.row,column:pos.column}},this.pos=function(row,column){return{row:row,column:column}},this.$clipPosition=function(position){var length=this.getLength();return position.row>=length?(position.row=Math.max(0,length-1),position.column=this.getLine(length-1).length):(position.row=Math.max(0,position.row),position.column=Math.min(Math.max(position.column,0),this.getLine(position.row).length)),position},this.insertFullLines=function(row,lines){row=Math.min(Math.max(row,0),this.getLength());var column=0;this.getLength()>row?(lines=lines.concat([\\\"\\\"]),column=0):(lines=[\\\"\\\"].concat(lines),row--,column=this.$lines[row].length),this.insertMergedLines({row:row,column:column},lines)},this.insertMergedLines=function(position,lines){var start=this.clippedPos(position.row,position.column),end={row:start.row+lines.length-1,column:(1==lines.length?start.column:0)+lines[lines.length-1].length};return this.applyDelta({start:start,end:end,action:\\\"insert\\\",lines:lines}),this.clonePos(end)},this.remove=function(range){var start=this.clippedPos(range.start.row,range.start.column),end=this.clippedPos(range.end.row,range.end.column);return this.applyDelta({start:start,end:end,action:\\\"remove\\\",lines:this.getLinesForRange({start:start,end:end})}),this.clonePos(start)},this.removeInLine=function(row,startColumn,endColumn){var start=this.clippedPos(row,startColumn),end=this.clippedPos(row,endColumn);return this.applyDelta({start:start,end:end,action:\\\"remove\\\",lines:this.getLinesForRange({start:start,end:end})},!0),this.clonePos(start)},this.removeFullLines=function(firstRow,lastRow){firstRow=Math.min(Math.max(0,firstRow),this.getLength()-1),lastRow=Math.min(Math.max(0,lastRow),this.getLength()-1);var deleteFirstNewLine=lastRow==this.getLength()-1&&firstRow>0,deleteLastNewLine=this.getLength()-1>lastRow,startRow=deleteFirstNewLine?firstRow-1:firstRow,startCol=deleteFirstNewLine?this.getLine(startRow).length:0,endRow=deleteLastNewLine?lastRow+1:lastRow,endCol=deleteLastNewLine?0:this.getLine(endRow).length,range=new Range(startRow,startCol,endRow,endCol),deletedLines=this.$lines.slice(firstRow,lastRow+1);return this.applyDelta({start:range.start,end:range.end,action:\\\"remove\\\",lines:this.getLinesForRange(range)}),deletedLines},this.removeNewLine=function(row){this.getLength()-1>row&&row>=0&&this.applyDelta({start:this.pos(row,this.getLine(row).length),end:this.pos(row+1,0),action:\\\"remove\\\",lines:[\\\"\\\",\\\"\\\"]})},this.replace=function(range,text){if(range instanceof Range||(range=Range.fromPoints(range.start,range.end)),0===text.length&&range.isEmpty())return range.start;if(text==this.getTextRange(range))return range.end;this.remove(range);var end;return end=text?this.insert(range.start,text):range.start},this.applyDeltas=function(deltas){for(var i=0;deltas.length>i;i++)this.applyDelta(deltas[i])},this.revertDeltas=function(deltas){for(var i=deltas.length-1;i>=0;i--)this.revertDelta(deltas[i])},this.applyDelta=function(delta,doNotValidate){var isInsert=\\\"insert\\\"==delta.action;(isInsert?1>=delta.lines.length&&!delta.lines[0]:!Range.comparePoints(delta.start,delta.end))||(isInsert&&delta.lines.length>2e4&&this.$splitAndapplyLargeDelta(delta,2e4),applyDelta(this.$lines,delta,doNotValidate),this._signal(\\\"change\\\",delta))},this.$splitAndapplyLargeDelta=function(delta,MAX){for(var lines=delta.lines,l=lines.length,row=delta.start.row,column=delta.start.column,from=0,to=0;;){from=to,to+=MAX-1;var chunk=lines.slice(from,to);if(to>l){delta.lines=chunk,delta.start.row=row+from,delta.start.column=column;break}chunk.push(\\\"\\\"),this.applyDelta({start:this.pos(row+from,column),end:this.pos(row+to,column=0),action:delta.action,lines:chunk},!0)}},this.revertDelta=function(delta){this.applyDelta({start:this.clonePos(delta.start),end:this.clonePos(delta.end),action:\\\"insert\\\"==delta.action?\\\"remove\\\":\\\"insert\\\",lines:delta.lines.slice()})},this.indexToPosition=function(index,startRow){for(var lines=this.$lines||this.getAllLines(),newlineLength=this.getNewLineCharacter().length,i=startRow||0,l=lines.length;l>i;i++)if(index-=lines[i].length+newlineLength,0>index)return{row:i,column:index+lines[i].length+newlineLength};return{row:l-1,column:lines[l-1].length}},this.positionToIndex=function(pos,startRow){for(var lines=this.$lines||this.getAllLines(),newlineLength=this.getNewLineCharacter().length,index=0,row=Math.min(pos.row,lines.length),i=startRow||0;row>i;++i)index+=lines[i].length+newlineLength;return index+pos.column}}).call(Document.prototype),exports.Document=Document}),ace.define(\\\"ace/lib/lang\\\",[\\\"require\\\",\\\"exports\\\",\\\"module\\\"],function(acequire,exports){\\\"use strict\\\";exports.last=function(a){return a[a.length-1]},exports.stringReverse=function(string){return string.split(\\\"\\\").reverse().join(\\\"\\\")},exports.stringRepeat=function(string,count){for(var result=\\\"\\\";count>0;)1&count&&(result+=string),(count>>=1)&&(string+=string);return result};var trimBeginRegexp=/^\\\\s\\\\s*/,trimEndRegexp=/\\\\s\\\\s*$/;exports.stringTrimLeft=function(string){return string.replace(trimBeginRegexp,\\\"\\\")},exports.stringTrimRight=function(string){return string.replace(trimEndRegexp,\\\"\\\")},exports.copyObject=function(obj){var copy={};for(var key in obj)copy[key]=obj[key];return copy},exports.copyArray=function(array){for(var copy=[],i=0,l=array.length;l>i;i++)copy[i]=array[i]&&\\\"object\\\"==typeof array[i]?this.copyObject(array[i]):array[i];return copy},exports.deepCopy=function deepCopy(obj){if(\\\"object\\\"!=typeof obj||!obj)return obj;var copy;if(Array.isArray(obj)){copy=[];for(var key=0;obj.length>key;key++)copy[key]=deepCopy(obj[key]);return copy}var cons=obj.constructor;if(cons===RegExp)return obj;copy=cons();for(var key in obj)copy[key]=deepCopy(obj[key]);return copy},exports.arrayToMap=function(arr){for(var map={},i=0;arr.length>i;i++)map[arr[i]]=1;return map},exports.createMap=function(props){var map=Object.create(null);for(var i in props)map[i]=props[i];return map},exports.arrayRemove=function(array,value){for(var i=0;array.length>=i;i++)value===array[i]&&array.splice(i,1)},exports.escapeRegExp=function(str){return str.replace(/([.*+?^${}()|[\\\\]\\\\/\\\\\\\\])/g,\\\"\\\\\\\\$1\\\")},exports.escapeHTML=function(str){return str.replace(/&/g,\\\"&\\\").replace(/\\\"/g,\\\""\\\").replace(/'/g,\\\"'\\\").replace(/i;i+=2){if(Array.isArray(data[i+1]))var d={action:\\\"insert\\\",start:data[i],lines:data[i+1]};else var d={action:\\\"remove\\\",start:data[i],end:data[i+1]};doc.applyDelta(d,!0)}return _self.$timeout?deferredUpdate.schedule(_self.$timeout):(_self.onUpdate(),void 0)})};(function(){this.$timeout=500,this.setTimeout=function(timeout){this.$timeout=timeout},this.setValue=function(value){this.doc.setValue(value),this.deferredUpdate.schedule(this.$timeout)},this.getValue=function(callbackId){this.sender.callback(this.doc.getValue(),callbackId)},this.onUpdate=function(){},this.isPending=function(){return this.deferredUpdate.isPending()}}).call(Mirror.prototype)}),ace.define(\\\"ace/mode/json/json_parse\\\",[\\\"require\\\",\\\"exports\\\",\\\"module\\\"],function(){\\\"use strict\\\";var at,ch,text,value,escapee={'\\\"':'\\\"',\\\"\\\\\\\\\\\":\\\"\\\\\\\\\\\",\\\"/\\\":\\\"/\\\",b:\\\"\\\\b\\\",f:\\\"\\\\f\\\",n:\\\"\\\\n\\\",r:\\\"\\\\r\\\",t:\\\"\\t\\\"},error=function(m){throw{name:\\\"SyntaxError\\\",message:m,at:at,text:text}},next=function(c){return c&&c!==ch&&error(\\\"Expected '\\\"+c+\\\"' instead of '\\\"+ch+\\\"'\\\"),ch=text.charAt(at),at+=1,ch},number=function(){var number,string=\\\"\\\";for(\\\"-\\\"===ch&&(string=\\\"-\\\",next(\\\"-\\\"));ch>=\\\"0\\\"&&\\\"9\\\">=ch;)string+=ch,next();if(\\\".\\\"===ch)for(string+=\\\".\\\";next()&&ch>=\\\"0\\\"&&\\\"9\\\">=ch;)string+=ch;if(\\\"e\\\"===ch||\\\"E\\\"===ch)for(string+=ch,next(),(\\\"-\\\"===ch||\\\"+\\\"===ch)&&(string+=ch,next());ch>=\\\"0\\\"&&\\\"9\\\">=ch;)string+=ch,next();return number=+string,isNaN(number)?(error(\\\"Bad number\\\"),void 0):number},string=function(){var hex,i,uffff,string=\\\"\\\";if('\\\"'===ch)for(;next();){if('\\\"'===ch)return next(),string;if(\\\"\\\\\\\\\\\"===ch)if(next(),\\\"u\\\"===ch){for(uffff=0,i=0;4>i&&(hex=parseInt(next(),16),isFinite(hex));i+=1)uffff=16*uffff+hex;string+=String.fromCharCode(uffff)}else{if(\\\"string\\\"!=typeof escapee[ch])break;string+=escapee[ch]}else string+=ch}error(\\\"Bad string\\\")},white=function(){for(;ch&&\\\" \\\">=ch;)next()},word=function(){switch(ch){case\\\"t\\\":return next(\\\"t\\\"),next(\\\"r\\\"),next(\\\"u\\\"),next(\\\"e\\\"),!0;case\\\"f\\\":return next(\\\"f\\\"),next(\\\"a\\\"),next(\\\"l\\\"),next(\\\"s\\\"),next(\\\"e\\\"),!1;case\\\"n\\\":return next(\\\"n\\\"),next(\\\"u\\\"),next(\\\"l\\\"),next(\\\"l\\\"),null}error(\\\"Unexpected '\\\"+ch+\\\"'\\\")},array=function(){var array=[];if(\\\"[\\\"===ch){if(next(\\\"[\\\"),white(),\\\"]\\\"===ch)return next(\\\"]\\\"),array;for(;ch;){if(array.push(value()),white(),\\\"]\\\"===ch)return next(\\\"]\\\"),array;next(\\\",\\\"),white()}}error(\\\"Bad array\\\")},object=function(){var key,object={};if(\\\"{\\\"===ch){if(next(\\\"{\\\"),white(),\\\"}\\\"===ch)return next(\\\"}\\\"),object;for(;ch;){if(key=string(),white(),next(\\\":\\\"),Object.hasOwnProperty.call(object,key)&&error('Duplicate key \\\"'+key+'\\\"'),object[key]=value(),white(),\\\"}\\\"===ch)return next(\\\"}\\\"),object;next(\\\",\\\"),white()}}error(\\\"Bad object\\\")};return value=function(){switch(white(),ch){case\\\"{\\\":return object();case\\\"[\\\":return array();case'\\\"':return string();case\\\"-\\\":return number();default:return ch>=\\\"0\\\"&&\\\"9\\\">=ch?number():word()}},function(source,reviver){var result;return text=source,at=0,ch=\\\" \\\",result=value(),white(),ch&&error(\\\"Syntax error\\\"),\\\"function\\\"==typeof reviver?function walk(holder,key){var k,v,value=holder[key];if(value&&\\\"object\\\"==typeof value)for(k in value)Object.hasOwnProperty.call(value,k)&&(v=walk(value,k),void 0!==v?value[k]=v:delete value[k]);return reviver.call(holder,key,value)}({\\\"\\\":result},\\\"\\\"):result}}),ace.define(\\\"ace/mode/json_worker\\\",[\\\"require\\\",\\\"exports\\\",\\\"module\\\",\\\"ace/lib/oop\\\",\\\"ace/worker/mirror\\\",\\\"ace/mode/json/json_parse\\\"],function(acequire,exports){\\\"use strict\\\";var oop=acequire(\\\"../lib/oop\\\"),Mirror=acequire(\\\"../worker/mirror\\\").Mirror,parse=acequire(\\\"./json/json_parse\\\"),JsonWorker=exports.JsonWorker=function(sender){Mirror.call(this,sender),this.setTimeout(200)};oop.inherits(JsonWorker,Mirror),function(){this.onUpdate=function(){var value=this.doc.getValue(),errors=[];try{value&&parse(value)}catch(e){var pos=this.doc.indexToPosition(e.at-1);errors.push({row:pos.row,column:pos.column,text:e.message,type:\\\"error\\\"})}this.sender.emit(\\\"annotate\\\",errors)}}.call(JsonWorker.prototype)}),ace.define(\\\"ace/lib/es5-shim\\\",[\\\"require\\\",\\\"exports\\\",\\\"module\\\"],function(){function Empty(){}function doesDefinePropertyWork(object){try{return Object.defineProperty(object,\\\"sentinel\\\",{}),\\\"sentinel\\\"in object}catch(exception){}}function toInteger(n){return n=+n,n!==n?n=0:0!==n&&n!==1/0&&n!==-(1/0)&&(n=(n>0||-1)*Math.floor(Math.abs(n))),n}Function.prototype.bind||(Function.prototype.bind=function(that){var target=this;if(\\\"function\\\"!=typeof target)throw new TypeError(\\\"Function.prototype.bind called on incompatible \\\"+target);var args=slice.call(arguments,1),bound=function(){if(this instanceof bound){var result=target.apply(this,args.concat(slice.call(arguments)));return Object(result)===result?result:this}return target.apply(that,args.concat(slice.call(arguments)))};return target.prototype&&(Empty.prototype=target.prototype,bound.prototype=new Empty,Empty.prototype=null),bound});var defineGetter,defineSetter,lookupGetter,lookupSetter,supportsAccessors,call=Function.prototype.call,prototypeOfArray=Array.prototype,prototypeOfObject=Object.prototype,slice=prototypeOfArray.slice,_toString=call.bind(prototypeOfObject.toString),owns=call.bind(prototypeOfObject.hasOwnProperty);if((supportsAccessors=owns(prototypeOfObject,\\\"__defineGetter__\\\"))&&(defineGetter=call.bind(prototypeOfObject.__defineGetter__),defineSetter=call.bind(prototypeOfObject.__defineSetter__),lookupGetter=call.bind(prototypeOfObject.__lookupGetter__),lookupSetter=call.bind(prototypeOfObject.__lookupSetter__)),2!=[1,2].splice(0).length)if(function(){function makeArray(l){var a=Array(l+2);return a[0]=a[1]=0,a}var lengthBefore,array=[];return array.splice.apply(array,makeArray(20)),array.splice.apply(array,makeArray(26)),lengthBefore=array.length,array.splice(5,0,\\\"XXX\\\"),lengthBefore+1==array.length,lengthBefore+1==array.length?!0:void 0\\n}()){var array_splice=Array.prototype.splice;Array.prototype.splice=function(start,deleteCount){return arguments.length?array_splice.apply(this,[void 0===start?0:start,void 0===deleteCount?this.length-start:deleteCount].concat(slice.call(arguments,2))):[]}}else Array.prototype.splice=function(pos,removeCount){var length=this.length;pos>0?pos>length&&(pos=length):void 0==pos?pos=0:0>pos&&(pos=Math.max(length+pos,0)),length>pos+removeCount||(removeCount=length-pos);var removed=this.slice(pos,pos+removeCount),insert=slice.call(arguments,2),add=insert.length;if(pos===length)add&&this.push.apply(this,insert);else{var remove=Math.min(removeCount,length-pos),tailOldPos=pos+remove,tailNewPos=tailOldPos+add-remove,tailCount=length-tailOldPos,lengthAfterRemove=length-remove;if(tailOldPos>tailNewPos)for(var i=0;tailCount>i;++i)this[tailNewPos+i]=this[tailOldPos+i];else if(tailNewPos>tailOldPos)for(i=tailCount;i--;)this[tailNewPos+i]=this[tailOldPos+i];if(add&&pos===lengthAfterRemove)this.length=lengthAfterRemove,this.push.apply(this,insert);else for(this.length=lengthAfterRemove+add,i=0;add>i;++i)this[pos+i]=insert[i]}return removed};Array.isArray||(Array.isArray=function(obj){return\\\"[object Array]\\\"==_toString(obj)});var boxedString=Object(\\\"a\\\"),splitString=\\\"a\\\"!=boxedString[0]||!(0 in boxedString);if(Array.prototype.forEach||(Array.prototype.forEach=function(fun){var object=toObject(this),self=splitString&&\\\"[object String]\\\"==_toString(this)?this.split(\\\"\\\"):object,thisp=arguments[1],i=-1,length=self.length>>>0;if(\\\"[object Function]\\\"!=_toString(fun))throw new TypeError;for(;length>++i;)i in self&&fun.call(thisp,self[i],i,object)}),Array.prototype.map||(Array.prototype.map=function(fun){var object=toObject(this),self=splitString&&\\\"[object String]\\\"==_toString(this)?this.split(\\\"\\\"):object,length=self.length>>>0,result=Array(length),thisp=arguments[1];if(\\\"[object Function]\\\"!=_toString(fun))throw new TypeError(fun+\\\" is not a function\\\");for(var i=0;length>i;i++)i in self&&(result[i]=fun.call(thisp,self[i],i,object));return result}),Array.prototype.filter||(Array.prototype.filter=function(fun){var value,object=toObject(this),self=splitString&&\\\"[object String]\\\"==_toString(this)?this.split(\\\"\\\"):object,length=self.length>>>0,result=[],thisp=arguments[1];if(\\\"[object Function]\\\"!=_toString(fun))throw new TypeError(fun+\\\" is not a function\\\");for(var i=0;length>i;i++)i in self&&(value=self[i],fun.call(thisp,value,i,object)&&result.push(value));return result}),Array.prototype.every||(Array.prototype.every=function(fun){var object=toObject(this),self=splitString&&\\\"[object String]\\\"==_toString(this)?this.split(\\\"\\\"):object,length=self.length>>>0,thisp=arguments[1];if(\\\"[object Function]\\\"!=_toString(fun))throw new TypeError(fun+\\\" is not a function\\\");for(var i=0;length>i;i++)if(i in self&&!fun.call(thisp,self[i],i,object))return!1;return!0}),Array.prototype.some||(Array.prototype.some=function(fun){var object=toObject(this),self=splitString&&\\\"[object String]\\\"==_toString(this)?this.split(\\\"\\\"):object,length=self.length>>>0,thisp=arguments[1];if(\\\"[object Function]\\\"!=_toString(fun))throw new TypeError(fun+\\\" is not a function\\\");for(var i=0;length>i;i++)if(i in self&&fun.call(thisp,self[i],i,object))return!0;return!1}),Array.prototype.reduce||(Array.prototype.reduce=function(fun){var object=toObject(this),self=splitString&&\\\"[object String]\\\"==_toString(this)?this.split(\\\"\\\"):object,length=self.length>>>0;if(\\\"[object Function]\\\"!=_toString(fun))throw new TypeError(fun+\\\" is not a function\\\");if(!length&&1==arguments.length)throw new TypeError(\\\"reduce of empty array with no initial value\\\");var result,i=0;if(arguments.length>=2)result=arguments[1];else for(;;){if(i in self){result=self[i++];break}if(++i>=length)throw new TypeError(\\\"reduce of empty array with no initial value\\\")}for(;length>i;i++)i in self&&(result=fun.call(void 0,result,self[i],i,object));return result}),Array.prototype.reduceRight||(Array.prototype.reduceRight=function(fun){var object=toObject(this),self=splitString&&\\\"[object String]\\\"==_toString(this)?this.split(\\\"\\\"):object,length=self.length>>>0;if(\\\"[object Function]\\\"!=_toString(fun))throw new TypeError(fun+\\\" is not a function\\\");if(!length&&1==arguments.length)throw new TypeError(\\\"reduceRight of empty array with no initial value\\\");var result,i=length-1;if(arguments.length>=2)result=arguments[1];else for(;;){if(i in self){result=self[i--];break}if(0>--i)throw new TypeError(\\\"reduceRight of empty array with no initial value\\\")}do i in this&&(result=fun.call(void 0,result,self[i],i,object));while(i--);return result}),Array.prototype.indexOf&&-1==[0,1].indexOf(1,2)||(Array.prototype.indexOf=function(sought){var self=splitString&&\\\"[object String]\\\"==_toString(this)?this.split(\\\"\\\"):toObject(this),length=self.length>>>0;if(!length)return-1;var i=0;for(arguments.length>1&&(i=toInteger(arguments[1])),i=i>=0?i:Math.max(0,length+i);length>i;i++)if(i in self&&self[i]===sought)return i;return-1}),Array.prototype.lastIndexOf&&-1==[0,1].lastIndexOf(0,-3)||(Array.prototype.lastIndexOf=function(sought){var self=splitString&&\\\"[object String]\\\"==_toString(this)?this.split(\\\"\\\"):toObject(this),length=self.length>>>0;if(!length)return-1;var i=length-1;for(arguments.length>1&&(i=Math.min(i,toInteger(arguments[1]))),i=i>=0?i:length-Math.abs(i);i>=0;i--)if(i in self&&sought===self[i])return i;return-1}),Object.getPrototypeOf||(Object.getPrototypeOf=function(object){return object.__proto__||(object.constructor?object.constructor.prototype:prototypeOfObject)}),!Object.getOwnPropertyDescriptor){var ERR_NON_OBJECT=\\\"Object.getOwnPropertyDescriptor called on a non-object: \\\";Object.getOwnPropertyDescriptor=function(object,property){if(\\\"object\\\"!=typeof object&&\\\"function\\\"!=typeof object||null===object)throw new TypeError(ERR_NON_OBJECT+object);if(owns(object,property)){var descriptor,getter,setter;if(descriptor={enumerable:!0,configurable:!0},supportsAccessors){var prototype=object.__proto__;object.__proto__=prototypeOfObject;var getter=lookupGetter(object,property),setter=lookupSetter(object,property);if(object.__proto__=prototype,getter||setter)return getter&&(descriptor.get=getter),setter&&(descriptor.set=setter),descriptor}return descriptor.value=object[property],descriptor}}}if(Object.getOwnPropertyNames||(Object.getOwnPropertyNames=function(object){return Object.keys(object)}),!Object.create){var createEmpty;createEmpty=null===Object.prototype.__proto__?function(){return{__proto__:null}}:function(){var empty={};for(var i in empty)empty[i]=null;return empty.constructor=empty.hasOwnProperty=empty.propertyIsEnumerable=empty.isPrototypeOf=empty.toLocaleString=empty.toString=empty.valueOf=empty.__proto__=null,empty},Object.create=function(prototype,properties){var object;if(null===prototype)object=createEmpty();else{if(\\\"object\\\"!=typeof prototype)throw new TypeError(\\\"typeof prototype[\\\"+typeof prototype+\\\"] != 'object'\\\");var Type=function(){};Type.prototype=prototype,object=new Type,object.__proto__=prototype}return void 0!==properties&&Object.defineProperties(object,properties),object}}if(Object.defineProperty){var definePropertyWorksOnObject=doesDefinePropertyWork({}),definePropertyWorksOnDom=\\\"undefined\\\"==typeof document||doesDefinePropertyWork(document.createElement(\\\"div\\\"));if(!definePropertyWorksOnObject||!definePropertyWorksOnDom)var definePropertyFallback=Object.defineProperty}if(!Object.defineProperty||definePropertyFallback){var ERR_NON_OBJECT_DESCRIPTOR=\\\"Property description must be an object: \\\",ERR_NON_OBJECT_TARGET=\\\"Object.defineProperty called on non-object: \\\",ERR_ACCESSORS_NOT_SUPPORTED=\\\"getters & setters can not be defined on this javascript engine\\\";Object.defineProperty=function(object,property,descriptor){if(\\\"object\\\"!=typeof object&&\\\"function\\\"!=typeof object||null===object)throw new TypeError(ERR_NON_OBJECT_TARGET+object);if(\\\"object\\\"!=typeof descriptor&&\\\"function\\\"!=typeof descriptor||null===descriptor)throw new TypeError(ERR_NON_OBJECT_DESCRIPTOR+descriptor);if(definePropertyFallback)try{return definePropertyFallback.call(Object,object,property,descriptor)}catch(exception){}if(owns(descriptor,\\\"value\\\"))if(supportsAccessors&&(lookupGetter(object,property)||lookupSetter(object,property))){var prototype=object.__proto__;object.__proto__=prototypeOfObject,delete object[property],object[property]=descriptor.value,object.__proto__=prototype}else object[property]=descriptor.value;else{if(!supportsAccessors)throw new TypeError(ERR_ACCESSORS_NOT_SUPPORTED);owns(descriptor,\\\"get\\\")&&defineGetter(object,property,descriptor.get),owns(descriptor,\\\"set\\\")&&defineSetter(object,property,descriptor.set)}return object}}Object.defineProperties||(Object.defineProperties=function(object,properties){for(var property in properties)owns(properties,property)&&Object.defineProperty(object,property,properties[property]);return object}),Object.seal||(Object.seal=function(object){return object}),Object.freeze||(Object.freeze=function(object){return object});try{Object.freeze(function(){})}catch(exception){Object.freeze=function(freezeObject){return function(object){return\\\"function\\\"==typeof object?object:freezeObject(object)}}(Object.freeze)}if(Object.preventExtensions||(Object.preventExtensions=function(object){return object}),Object.isSealed||(Object.isSealed=function(){return!1}),Object.isFrozen||(Object.isFrozen=function(){return!1}),Object.isExtensible||(Object.isExtensible=function(object){if(Object(object)===object)throw new TypeError;for(var name=\\\"\\\";owns(object,name);)name+=\\\"?\\\";object[name]=!0;var returnValue=owns(object,name);return delete object[name],returnValue}),!Object.keys){var hasDontEnumBug=!0,dontEnums=[\\\"toString\\\",\\\"toLocaleString\\\",\\\"valueOf\\\",\\\"hasOwnProperty\\\",\\\"isPrototypeOf\\\",\\\"propertyIsEnumerable\\\",\\\"constructor\\\"],dontEnumsLength=dontEnums.length;for(var key in{toString:null})hasDontEnumBug=!1;Object.keys=function(object){if(\\\"object\\\"!=typeof object&&\\\"function\\\"!=typeof object||null===object)throw new TypeError(\\\"Object.keys called on a non-object\\\");var keys=[];for(var name in object)owns(object,name)&&keys.push(name);if(hasDontEnumBug)for(var i=0,ii=dontEnumsLength;ii>i;i++){var dontEnum=dontEnums[i];owns(object,dontEnum)&&keys.push(dontEnum)}return keys}}Date.now||(Date.now=function(){return(new Date).getTime()});var ws=\\\"\\t\\\\n\\u000b\\\\f\\\\r   ᠎              \\\\u2028\\\\u2029\\\";if(!String.prototype.trim||ws.trim()){ws=\\\"[\\\"+ws+\\\"]\\\";var trimBeginRegexp=RegExp(\\\"^\\\"+ws+ws+\\\"*\\\"),trimEndRegexp=RegExp(ws+ws+\\\"*$\\\");String.prototype.trim=function(){return(this+\\\"\\\").replace(trimBeginRegexp,\\\"\\\").replace(trimEndRegexp,\\\"\\\")}}var toObject=function(o){if(null==o)throw new TypeError(\\\"can't convert \\\"+o+\\\" to object\\\");return Object(o)}});\";\r\n\r\n/***/ },\r\n/* 69 */\r\n/***/ function(module, exports) {\r\n\r\n\tace.define(\"ace/ext/searchbox\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\",\"ace/lib/lang\",\"ace/lib/event\",\"ace/keyboard/hash_handler\",\"ace/lib/keys\"], function(acequire, exports, module) {\r\n\t\"use strict\";\r\n\r\n\tvar dom = acequire(\"../lib/dom\");\r\n\tvar lang = acequire(\"../lib/lang\");\r\n\tvar event = acequire(\"../lib/event\");\r\n\tvar searchboxCss = \"\\\r\n\t.ace_search {\\\r\n\tbackground-color: #ddd;\\\r\n\tborder: 1px solid #cbcbcb;\\\r\n\tborder-top: 0 none;\\\r\n\tmax-width: 325px;\\\r\n\toverflow: hidden;\\\r\n\tmargin: 0;\\\r\n\tpadding: 4px;\\\r\n\tpadding-right: 6px;\\\r\n\tpadding-bottom: 0;\\\r\n\tposition: absolute;\\\r\n\ttop: 0px;\\\r\n\tz-index: 99;\\\r\n\twhite-space: normal;\\\r\n\t}\\\r\n\t.ace_search.left {\\\r\n\tborder-left: 0 none;\\\r\n\tborder-radius: 0px 0px 5px 0px;\\\r\n\tleft: 0;\\\r\n\t}\\\r\n\t.ace_search.right {\\\r\n\tborder-radius: 0px 0px 0px 5px;\\\r\n\tborder-right: 0 none;\\\r\n\tright: 0;\\\r\n\t}\\\r\n\t.ace_search_form, .ace_replace_form {\\\r\n\tborder-radius: 3px;\\\r\n\tborder: 1px solid #cbcbcb;\\\r\n\tfloat: left;\\\r\n\tmargin-bottom: 4px;\\\r\n\toverflow: hidden;\\\r\n\t}\\\r\n\t.ace_search_form.ace_nomatch {\\\r\n\toutline: 1px solid red;\\\r\n\t}\\\r\n\t.ace_search_field {\\\r\n\tbackground-color: white;\\\r\n\tborder-right: 1px solid #cbcbcb;\\\r\n\tborder: 0 none;\\\r\n\t-webkit-box-sizing: border-box;\\\r\n\t-moz-box-sizing: border-box;\\\r\n\tbox-sizing: border-box;\\\r\n\tfloat: left;\\\r\n\theight: 22px;\\\r\n\toutline: 0;\\\r\n\tpadding: 0 7px;\\\r\n\twidth: 214px;\\\r\n\tmargin: 0;\\\r\n\t}\\\r\n\t.ace_searchbtn,\\\r\n\t.ace_replacebtn {\\\r\n\tbackground: #fff;\\\r\n\tborder: 0 none;\\\r\n\tborder-left: 1px solid #dcdcdc;\\\r\n\tcursor: pointer;\\\r\n\tfloat: left;\\\r\n\theight: 22px;\\\r\n\tmargin: 0;\\\r\n\tposition: relative;\\\r\n\t}\\\r\n\t.ace_searchbtn:last-child,\\\r\n\t.ace_replacebtn:last-child {\\\r\n\tborder-top-right-radius: 3px;\\\r\n\tborder-bottom-right-radius: 3px;\\\r\n\t}\\\r\n\t.ace_searchbtn:disabled {\\\r\n\tbackground: none;\\\r\n\tcursor: default;\\\r\n\t}\\\r\n\t.ace_searchbtn {\\\r\n\tbackground-position: 50% 50%;\\\r\n\tbackground-repeat: no-repeat;\\\r\n\twidth: 27px;\\\r\n\t}\\\r\n\t.ace_searchbtn.prev {\\\r\n\tbackground-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAFCAYAAAB4ka1VAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAADFJREFUeNpiSU1NZUAC/6E0I0yACYskCpsJiySKIiY0SUZk40FyTEgCjGgKwTRAgAEAQJUIPCE+qfkAAAAASUVORK5CYII=); \\\r\n\t}\\\r\n\t.ace_searchbtn.next {\\\r\n\tbackground-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAFCAYAAAB4ka1VAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAADRJREFUeNpiTE1NZQCC/0DMyIAKwGJMUAYDEo3M/s+EpvM/mkKwCQxYjIeLMaELoLMBAgwAU7UJObTKsvAAAAAASUVORK5CYII=); \\\r\n\t}\\\r\n\t.ace_searchbtn_close {\\\r\n\tbackground: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAcCAYAAABRVo5BAAAAZ0lEQVR42u2SUQrAMAhDvazn8OjZBilCkYVVxiis8H4CT0VrAJb4WHT3C5xU2a2IQZXJjiQIRMdkEoJ5Q2yMqpfDIo+XY4k6h+YXOyKqTIj5REaxloNAd0xiKmAtsTHqW8sR2W5f7gCu5nWFUpVjZwAAAABJRU5ErkJggg==) no-repeat 50% 0;\\\r\n\tborder-radius: 50%;\\\r\n\tborder: 0 none;\\\r\n\tcolor: #656565;\\\r\n\tcursor: pointer;\\\r\n\tfloat: right;\\\r\n\tfont: 16px/16px Arial;\\\r\n\theight: 14px;\\\r\n\tmargin: 5px 1px 9px 5px;\\\r\n\tpadding: 0;\\\r\n\ttext-align: center;\\\r\n\twidth: 14px;\\\r\n\t}\\\r\n\t.ace_searchbtn_close:hover {\\\r\n\tbackground-color: #656565;\\\r\n\tbackground-position: 50% 100%;\\\r\n\tcolor: white;\\\r\n\t}\\\r\n\t.ace_replacebtn.prev {\\\r\n\twidth: 54px\\\r\n\t}\\\r\n\t.ace_replacebtn.next {\\\r\n\twidth: 27px\\\r\n\t}\\\r\n\t.ace_button {\\\r\n\tmargin-left: 2px;\\\r\n\tcursor: pointer;\\\r\n\t-webkit-user-select: none;\\\r\n\t-moz-user-select: none;\\\r\n\t-o-user-select: none;\\\r\n\t-ms-user-select: none;\\\r\n\tuser-select: none;\\\r\n\toverflow: hidden;\\\r\n\topacity: 0.7;\\\r\n\tborder: 1px solid rgba(100,100,100,0.23);\\\r\n\tpadding: 1px;\\\r\n\t-moz-box-sizing: border-box;\\\r\n\tbox-sizing: border-box;\\\r\n\tcolor: black;\\\r\n\t}\\\r\n\t.ace_button:hover {\\\r\n\tbackground-color: #eee;\\\r\n\topacity:1;\\\r\n\t}\\\r\n\t.ace_button:active {\\\r\n\tbackground-color: #ddd;\\\r\n\t}\\\r\n\t.ace_button.checked {\\\r\n\tborder-color: #3399ff;\\\r\n\topacity:1;\\\r\n\t}\\\r\n\t.ace_search_options{\\\r\n\tmargin-bottom: 3px;\\\r\n\ttext-align: right;\\\r\n\t-webkit-user-select: none;\\\r\n\t-moz-user-select: none;\\\r\n\t-o-user-select: none;\\\r\n\t-ms-user-select: none;\\\r\n\tuser-select: none;\\\r\n\t}\";\r\n\tvar HashHandler = acequire(\"../keyboard/hash_handler\").HashHandler;\r\n\tvar keyUtil = acequire(\"../lib/keys\");\r\n\r\n\tdom.importCssString(searchboxCss, \"ace_searchbox\");\r\n\r\n\tvar html = ''.replace(/>\\s+/g, \">\");\r\n\r\n\tvar SearchBox = function(editor, range, showReplaceForm) {\r\n\t var div = dom.createElement(\"div\");\r\n\t div.innerHTML = html;\r\n\t this.element = div.firstChild;\r\n\r\n\t this.$init();\r\n\t this.setEditor(editor);\r\n\t};\r\n\r\n\t(function() {\r\n\t this.setEditor = function(editor) {\r\n\t editor.searchBox = this;\r\n\t editor.container.appendChild(this.element);\r\n\t this.editor = editor;\r\n\t };\r\n\r\n\t this.$initElements = function(sb) {\r\n\t this.searchBox = sb.querySelector(\".ace_search_form\");\r\n\t this.replaceBox = sb.querySelector(\".ace_replace_form\");\r\n\t this.searchOptions = sb.querySelector(\".ace_search_options\");\r\n\t this.regExpOption = sb.querySelector(\"[action=toggleRegexpMode]\");\r\n\t this.caseSensitiveOption = sb.querySelector(\"[action=toggleCaseSensitive]\");\r\n\t this.wholeWordOption = sb.querySelector(\"[action=toggleWholeWords]\");\r\n\t this.searchInput = this.searchBox.querySelector(\".ace_search_field\");\r\n\t this.replaceInput = this.replaceBox.querySelector(\".ace_search_field\");\r\n\t };\r\n\t \r\n\t this.$init = function() {\r\n\t var sb = this.element;\r\n\t \r\n\t this.$initElements(sb);\r\n\t \r\n\t var _this = this;\r\n\t event.addListener(sb, \"mousedown\", function(e) {\r\n\t setTimeout(function(){\r\n\t _this.activeInput.focus();\r\n\t }, 0);\r\n\t event.stopPropagation(e);\r\n\t });\r\n\t event.addListener(sb, \"click\", function(e) {\r\n\t var t = e.target || e.srcElement;\r\n\t var action = t.getAttribute(\"action\");\r\n\t if (action && _this[action])\r\n\t _this[action]();\r\n\t else if (_this.$searchBarKb.commands[action])\r\n\t _this.$searchBarKb.commands[action].exec(_this);\r\n\t event.stopPropagation(e);\r\n\t });\r\n\r\n\t event.addCommandKeyListener(sb, function(e, hashId, keyCode) {\r\n\t var keyString = keyUtil.keyCodeToString(keyCode);\r\n\t var command = _this.$searchBarKb.findKeyCommand(hashId, keyString);\r\n\t if (command && command.exec) {\r\n\t command.exec(_this);\r\n\t event.stopEvent(e);\r\n\t }\r\n\t });\r\n\r\n\t this.$onChange = lang.delayedCall(function() {\r\n\t _this.find(false, false);\r\n\t });\r\n\r\n\t event.addListener(this.searchInput, \"input\", function() {\r\n\t _this.$onChange.schedule(20);\r\n\t });\r\n\t event.addListener(this.searchInput, \"focus\", function() {\r\n\t _this.activeInput = _this.searchInput;\r\n\t _this.searchInput.value && _this.highlight();\r\n\t });\r\n\t event.addListener(this.replaceInput, \"focus\", function() {\r\n\t _this.activeInput = _this.replaceInput;\r\n\t _this.searchInput.value && _this.highlight();\r\n\t });\r\n\t };\r\n\t this.$closeSearchBarKb = new HashHandler([{\r\n\t bindKey: \"Esc\",\r\n\t name: \"closeSearchBar\",\r\n\t exec: function(editor) {\r\n\t editor.searchBox.hide();\r\n\t }\r\n\t }]);\r\n\t this.$searchBarKb = new HashHandler();\r\n\t this.$searchBarKb.bindKeys({\r\n\t \"Ctrl-f|Command-f\": function(sb) {\r\n\t var isReplace = sb.isReplace = !sb.isReplace;\r\n\t sb.replaceBox.style.display = isReplace ? \"\" : \"none\";\r\n\t sb.searchInput.focus();\r\n\t },\r\n\t \"Ctrl-H|Command-Option-F\": function(sb) {\r\n\t sb.replaceBox.style.display = \"\";\r\n\t sb.replaceInput.focus();\r\n\t },\r\n\t \"Ctrl-G|Command-G\": function(sb) {\r\n\t sb.findNext();\r\n\t },\r\n\t \"Ctrl-Shift-G|Command-Shift-G\": function(sb) {\r\n\t sb.findPrev();\r\n\t },\r\n\t \"esc\": function(sb) {\r\n\t setTimeout(function() { sb.hide();});\r\n\t },\r\n\t \"Return\": function(sb) {\r\n\t if (sb.activeInput == sb.replaceInput)\r\n\t sb.replace();\r\n\t sb.findNext();\r\n\t },\r\n\t \"Shift-Return\": function(sb) {\r\n\t if (sb.activeInput == sb.replaceInput)\r\n\t sb.replace();\r\n\t sb.findPrev();\r\n\t },\r\n\t \"Alt-Return\": function(sb) {\r\n\t if (sb.activeInput == sb.replaceInput)\r\n\t sb.replaceAll();\r\n\t sb.findAll();\r\n\t },\r\n\t \"Tab\": function(sb) {\r\n\t (sb.activeInput == sb.replaceInput ? sb.searchInput : sb.replaceInput).focus();\r\n\t }\r\n\t });\r\n\r\n\t this.$searchBarKb.addCommands([{\r\n\t name: \"toggleRegexpMode\",\r\n\t bindKey: {win: \"Alt-R|Alt-/\", mac: \"Ctrl-Alt-R|Ctrl-Alt-/\"},\r\n\t exec: function(sb) {\r\n\t sb.regExpOption.checked = !sb.regExpOption.checked;\r\n\t sb.$syncOptions();\r\n\t }\r\n\t }, {\r\n\t name: \"toggleCaseSensitive\",\r\n\t bindKey: {win: \"Alt-C|Alt-I\", mac: \"Ctrl-Alt-R|Ctrl-Alt-I\"},\r\n\t exec: function(sb) {\r\n\t sb.caseSensitiveOption.checked = !sb.caseSensitiveOption.checked;\r\n\t sb.$syncOptions();\r\n\t }\r\n\t }, {\r\n\t name: \"toggleWholeWords\",\r\n\t bindKey: {win: \"Alt-B|Alt-W\", mac: \"Ctrl-Alt-B|Ctrl-Alt-W\"},\r\n\t exec: function(sb) {\r\n\t sb.wholeWordOption.checked = !sb.wholeWordOption.checked;\r\n\t sb.$syncOptions();\r\n\t }\r\n\t }]);\r\n\r\n\t this.$syncOptions = function() {\r\n\t dom.setCssClass(this.regExpOption, \"checked\", this.regExpOption.checked);\r\n\t dom.setCssClass(this.wholeWordOption, \"checked\", this.wholeWordOption.checked);\r\n\t dom.setCssClass(this.caseSensitiveOption, \"checked\", this.caseSensitiveOption.checked);\r\n\t this.find(false, false);\r\n\t };\r\n\r\n\t this.highlight = function(re) {\r\n\t this.editor.session.highlight(re || this.editor.$search.$options.re);\r\n\t this.editor.renderer.updateBackMarkers()\r\n\t };\r\n\t this.find = function(skipCurrent, backwards, preventScroll) {\r\n\t var range = this.editor.find(this.searchInput.value, {\r\n\t skipCurrent: skipCurrent,\r\n\t backwards: backwards,\r\n\t wrap: true,\r\n\t regExp: this.regExpOption.checked,\r\n\t caseSensitive: this.caseSensitiveOption.checked,\r\n\t wholeWord: this.wholeWordOption.checked,\r\n\t preventScroll: preventScroll\r\n\t });\r\n\t var noMatch = !range && this.searchInput.value;\r\n\t dom.setCssClass(this.searchBox, \"ace_nomatch\", noMatch);\r\n\t this.editor._emit(\"findSearchBox\", { match: !noMatch });\r\n\t this.highlight();\r\n\t };\r\n\t this.findNext = function() {\r\n\t this.find(true, false);\r\n\t };\r\n\t this.findPrev = function() {\r\n\t this.find(true, true);\r\n\t };\r\n\t this.findAll = function(){\r\n\t var range = this.editor.findAll(this.searchInput.value, { \r\n\t regExp: this.regExpOption.checked,\r\n\t caseSensitive: this.caseSensitiveOption.checked,\r\n\t wholeWord: this.wholeWordOption.checked\r\n\t });\r\n\t var noMatch = !range && this.searchInput.value;\r\n\t dom.setCssClass(this.searchBox, \"ace_nomatch\", noMatch);\r\n\t this.editor._emit(\"findSearchBox\", { match: !noMatch });\r\n\t this.highlight();\r\n\t this.hide();\r\n\t };\r\n\t this.replace = function() {\r\n\t if (!this.editor.getReadOnly())\r\n\t this.editor.replace(this.replaceInput.value);\r\n\t }; \r\n\t this.replaceAndFindNext = function() {\r\n\t if (!this.editor.getReadOnly()) {\r\n\t this.editor.replace(this.replaceInput.value);\r\n\t this.findNext()\r\n\t }\r\n\t };\r\n\t this.replaceAll = function() {\r\n\t if (!this.editor.getReadOnly())\r\n\t this.editor.replaceAll(this.replaceInput.value);\r\n\t };\r\n\r\n\t this.hide = function() {\r\n\t this.element.style.display = \"none\";\r\n\t this.editor.keyBinding.removeKeyboardHandler(this.$closeSearchBarKb);\r\n\t this.editor.focus();\r\n\t };\r\n\t this.show = function(value, isReplace) {\r\n\t this.element.style.display = \"\";\r\n\t this.replaceBox.style.display = isReplace ? \"\" : \"none\";\r\n\r\n\t this.isReplace = isReplace;\r\n\r\n\t if (value)\r\n\t this.searchInput.value = value;\r\n\t \r\n\t this.find(false, false, true);\r\n\t \r\n\t this.searchInput.focus();\r\n\t this.searchInput.select();\r\n\r\n\t this.editor.keyBinding.addKeyboardHandler(this.$closeSearchBarKb);\r\n\t };\r\n\r\n\t this.isFocused = function() {\r\n\t var el = document.activeElement;\r\n\t return el == this.searchInput || el == this.replaceInput;\r\n\t }\r\n\t}).call(SearchBox.prototype);\r\n\r\n\texports.SearchBox = SearchBox;\r\n\r\n\texports.Search = function(editor, isReplace) {\r\n\t var sb = editor.searchBox || new SearchBox(editor);\r\n\t sb.show(editor.session.getTextRange(), isReplace);\r\n\t};\r\n\r\n\t});\r\n\t (function() {\r\n\t ace.acequire([\"ace/ext/searchbox\"], function() {});\r\n\t })();\r\n\t \r\n\r\n/***/ },\r\n/* 70 */\r\n/***/ function(module, exports) {\r\n\r\n\t/* ***** BEGIN LICENSE BLOCK *****\r\n\t * Distributed under the BSD license:\r\n\t *\r\n\t * Copyright (c) 2010, Ajax.org B.V.\r\n\t * All rights reserved.\r\n\t * \r\n\t * Redistribution and use in source and binary forms, with or without\r\n\t * modification, are permitted provided that the following conditions are met:\r\n\t * * Redistributions of source code must retain the above copyright\r\n\t * notice, this list of conditions and the following disclaimer.\r\n\t * * Redistributions in binary form must reproduce the above copyright\r\n\t * notice, this list of conditions and the following disclaimer in the\r\n\t * documentation and/or other materials provided with the distribution.\r\n\t * * Neither the name of Ajax.org B.V. nor the\r\n\t * names of its contributors may be used to endorse or promote products\r\n\t * derived from this software without specific prior written permission.\r\n\t * \r\n\t * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\r\n\t * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\r\n\t * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r\n\t * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\r\n\t * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\r\n\t * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\r\n\t * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\r\n\t * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\r\n\t * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\r\n\t * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n\t *\r\n\t * ***** END LICENSE BLOCK ***** */\r\n\r\n\tace.define('ace/theme/jsoneditor', ['require', 'exports', 'module', 'ace/lib/dom'], function(acequire, exports, module) {\r\n\r\n\texports.isDark = false;\r\n\texports.cssClass = \"ace-jsoneditor\";\r\n\texports.cssText = \".ace-jsoneditor .ace_gutter {\\\r\n\tbackground: #ebebeb;\\\r\n\tcolor: #333\\\r\n\t}\\\r\n\t\\\r\n\t.ace-jsoneditor.ace_editor {\\\r\n\tfont-family: droid sans mono, consolas, monospace, courier new, courier, sans-serif;\\\r\n\tline-height: 1.3;\\\r\n\t}\\\r\n\t.ace-jsoneditor .ace_print-margin {\\\r\n\twidth: 1px;\\\r\n\tbackground: #e8e8e8\\\r\n\t}\\\r\n\t.ace-jsoneditor .ace_scroller {\\\r\n\tbackground-color: #FFFFFF\\\r\n\t}\\\r\n\t.ace-jsoneditor .ace_text-layer {\\\r\n\tcolor: gray\\\r\n\t}\\\r\n\t.ace-jsoneditor .ace_variable {\\\r\n\tcolor: #1a1a1a\\\r\n\t}\\\r\n\t.ace-jsoneditor .ace_cursor {\\\r\n\tborder-left: 2px solid #000000\\\r\n\t}\\\r\n\t.ace-jsoneditor .ace_overwrite-cursors .ace_cursor {\\\r\n\tborder-left: 0px;\\\r\n\tborder-bottom: 1px solid #000000\\\r\n\t}\\\r\n\t.ace-jsoneditor .ace_marker-layer .ace_selection {\\\r\n\tbackground: lightgray\\\r\n\t}\\\r\n\t.ace-jsoneditor.ace_multiselect .ace_selection.ace_start {\\\r\n\tbox-shadow: 0 0 3px 0px #FFFFFF;\\\r\n\tborder-radius: 2px\\\r\n\t}\\\r\n\t.ace-jsoneditor .ace_marker-layer .ace_step {\\\r\n\tbackground: rgb(255, 255, 0)\\\r\n\t}\\\r\n\t.ace-jsoneditor .ace_marker-layer .ace_bracket {\\\r\n\tmargin: -1px 0 0 -1px;\\\r\n\tborder: 1px solid #BFBFBF\\\r\n\t}\\\r\n\t.ace-jsoneditor .ace_marker-layer .ace_active-line {\\\r\n\tbackground: #FFFBD1\\\r\n\t}\\\r\n\t.ace-jsoneditor .ace_gutter-active-line {\\\r\n\tbackground-color : #dcdcdc\\\r\n\t}\\\r\n\t.ace-jsoneditor .ace_marker-layer .ace_selected-word {\\\r\n\tborder: 1px solid lightgray\\\r\n\t}\\\r\n\t.ace-jsoneditor .ace_invisible {\\\r\n\tcolor: #BFBFBF\\\r\n\t}\\\r\n\t.ace-jsoneditor .ace_keyword,\\\r\n\t.ace-jsoneditor .ace_meta,\\\r\n\t.ace-jsoneditor .ace_support.ace_constant.ace_property-value {\\\r\n\tcolor: #AF956F\\\r\n\t}\\\r\n\t.ace-jsoneditor .ace_keyword.ace_operator {\\\r\n\tcolor: #484848\\\r\n\t}\\\r\n\t.ace-jsoneditor .ace_keyword.ace_other.ace_unit {\\\r\n\tcolor: #96DC5F\\\r\n\t}\\\r\n\t.ace-jsoneditor .ace_constant.ace_language {\\\r\n\tcolor: darkorange\\\r\n\t}\\\r\n\t.ace-jsoneditor .ace_constant.ace_numeric {\\\r\n\tcolor: red\\\r\n\t}\\\r\n\t.ace-jsoneditor .ace_constant.ace_character.ace_entity {\\\r\n\tcolor: #BF78CC\\\r\n\t}\\\r\n\t.ace-jsoneditor .ace_invalid {\\\r\n\tcolor: #FFFFFF;\\\r\n\tbackground-color: #FF002A;\\\r\n\t}\\\r\n\t.ace-jsoneditor .ace_fold {\\\r\n\tbackground-color: #AF956F;\\\r\n\tborder-color: #000000\\\r\n\t}\\\r\n\t.ace-jsoneditor .ace_storage,\\\r\n\t.ace-jsoneditor .ace_support.ace_class,\\\r\n\t.ace-jsoneditor .ace_support.ace_function,\\\r\n\t.ace-jsoneditor .ace_support.ace_other,\\\r\n\t.ace-jsoneditor .ace_support.ace_type {\\\r\n\tcolor: #C52727\\\r\n\t}\\\r\n\t.ace-jsoneditor .ace_string {\\\r\n\tcolor: green\\\r\n\t}\\\r\n\t.ace-jsoneditor .ace_comment {\\\r\n\tcolor: #BCC8BA\\\r\n\t}\\\r\n\t.ace-jsoneditor .ace_entity.ace_name.ace_tag,\\\r\n\t.ace-jsoneditor .ace_entity.ace_other.ace_attribute-name {\\\r\n\tcolor: #606060\\\r\n\t}\\\r\n\t.ace-jsoneditor .ace_markup.ace_underline {\\\r\n\ttext-decoration: underline\\\r\n\t}\\\r\n\t.ace-jsoneditor .ace_indent-guide {\\\r\n\tbackground: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAE0lEQVQImWP4////f4bLly//BwAmVgd1/w11/gAAAABJRU5ErkJggg==\\\") right repeat-y\\\r\n\t}\";\r\n\r\n\tvar dom = acequire(\"../lib/dom\");\r\n\tdom.importCssString(exports.cssText, exports.cssClass);\r\n\t});\r\n\r\n\r\n/***/ }\r\n/******/ ])\r\n});\r\n;","\"use strict\";\n// External Files\nconst vue = require('vue');\n// CSS\nrequire('./scss/main.scss');\n// Interfaces\nconst { IView } = require('../interfaces/view.ts');\n// Components\nconst mainContent = require('./components/mainContent.ts');\nconst topbar = require('./components/topbar.ts');\nconst bottomBar = require('./components/bottomBar.ts');\nconst pantry = new vue({\n el: '.app',\n components: {\n mainContent,\n topbar,\n bottomBar,\n },\n data() {\n return {\n view: IView.home,\n };\n },\n methods: {\n changeView(view) {\n this.view = IView[view];\n },\n checkIfInView() {\n if (window.location.search) {\n const _view = decodeURIComponent(window.location.search.match(/(\\?|&)show\\=([^&]*)/)[2]);\n if (IView[_view]) {\n this.view = IView[_view];\n }\n }\n },\n },\n created() {\n this.checkIfInView();\n },\n});\nmodule.exports = pantry;\n","/*!\n * Vue.js v2.6.14\n * (c) 2014-2021 Evan You\n * Released under the MIT License.\n */\n!function(e,t){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=t():\"function\"==typeof define&&define.amd?define(t):(e=e||self).Vue=t()}(this,function(){\"use strict\";var e=Object.freeze({});function t(e){return null==e}function n(e){return null!=e}function r(e){return!0===e}function i(e){return\"string\"==typeof e||\"number\"==typeof e||\"symbol\"==typeof e||\"boolean\"==typeof e}function o(e){return null!==e&&\"object\"==typeof e}var a=Object.prototype.toString;function s(e){return\"[object Object]\"===a.call(e)}function c(e){var t=parseFloat(String(e));return t>=0&&Math.floor(t)===t&&isFinite(e)}function u(e){return n(e)&&\"function\"==typeof e.then&&\"function\"==typeof e.catch}function l(e){return null==e?\"\":Array.isArray(e)||s(e)&&e.toString===a?JSON.stringify(e,null,2):String(e)}function f(e){var t=parseFloat(e);return isNaN(t)?e:t}function p(e,t){for(var n=Object.create(null),r=e.split(\",\"),i=0;i-1)return e.splice(n,1)}}var m=Object.prototype.hasOwnProperty;function y(e,t){return m.call(e,t)}function g(e){var t=Object.create(null);return function(n){return t[n]||(t[n]=e(n))}}var _=/-(\\w)/g,b=g(function(e){return e.replace(_,function(e,t){return t?t.toUpperCase():\"\"})}),$=g(function(e){return e.charAt(0).toUpperCase()+e.slice(1)}),w=/\\B([A-Z])/g,C=g(function(e){return e.replace(w,\"-$1\").toLowerCase()});var x=Function.prototype.bind?function(e,t){return e.bind(t)}:function(e,t){function n(n){var r=arguments.length;return r?r>1?e.apply(t,arguments):e.call(t,n):e.call(t)}return n._length=e.length,n};function k(e,t){t=t||0;for(var n=e.length-t,r=new Array(n);n--;)r[n]=e[n+t];return r}function A(e,t){for(var n in t)e[n]=t[n];return e}function O(e){for(var t={},n=0;n0,Z=J&&J.indexOf(\"edge/\")>0,G=(J&&J.indexOf(\"android\"),J&&/iphone|ipad|ipod|ios/.test(J)||\"ios\"===K),X=(J&&/chrome\\/\\d+/.test(J),J&&/phantomjs/.test(J),J&&J.match(/firefox\\/(\\d+)/)),Y={}.watch,Q=!1;if(V)try{var ee={};Object.defineProperty(ee,\"passive\",{get:function(){Q=!0}}),window.addEventListener(\"test-passive\",null,ee)}catch(e){}var te=function(){return void 0===B&&(B=!V&&!z&&\"undefined\"!=typeof global&&(global.process&&\"server\"===global.process.env.VUE_ENV)),B},ne=V&&window.__VUE_DEVTOOLS_GLOBAL_HOOK__;function re(e){return\"function\"==typeof e&&/native code/.test(e.toString())}var ie,oe=\"undefined\"!=typeof Symbol&&re(Symbol)&&\"undefined\"!=typeof Reflect&&re(Reflect.ownKeys);ie=\"undefined\"!=typeof Set&&re(Set)?Set:function(){function e(){this.set=Object.create(null)}return e.prototype.has=function(e){return!0===this.set[e]},e.prototype.add=function(e){this.set[e]=!0},e.prototype.clear=function(){this.set=Object.create(null)},e}();var ae=S,se=0,ce=function(){this.id=se++,this.subs=[]};ce.prototype.addSub=function(e){this.subs.push(e)},ce.prototype.removeSub=function(e){h(this.subs,e)},ce.prototype.depend=function(){ce.target&&ce.target.addDep(this)},ce.prototype.notify=function(){for(var e=this.subs.slice(),t=0,n=e.length;t-1)if(o&&!y(i,\"default\"))a=!1;else if(\"\"===a||a===C(e)){var c=Re(String,i.type);(c<0||s0&&(ct((u=e(u,(a||\"\")+\"_\"+c))[0])&&ct(f)&&(s[l]=he(f.text+u[0].text),u.shift()),s.push.apply(s,u)):i(u)?ct(f)?s[l]=he(f.text+u):\"\"!==u&&s.push(he(u)):ct(u)&&ct(f)?s[l]=he(f.text+u.text):(r(o._isVList)&&n(u.tag)&&t(u.key)&&n(a)&&(u.key=\"__vlist\"+a+\"_\"+c+\"__\"),s.push(u)));return s}(e):void 0}function ct(e){return n(e)&&n(e.text)&&!1===e.isComment}function ut(e,t){if(e){for(var n=Object.create(null),r=oe?Reflect.ownKeys(e):Object.keys(e),i=0;i0,a=t?!!t.$stable:!o,s=t&&t.$key;if(t){if(t._normalized)return t._normalized;if(a&&r&&r!==e&&s===r.$key&&!o&&!r.$hasNormal)return r;for(var c in i={},t)t[c]&&\"$\"!==c[0]&&(i[c]=vt(n,c,t[c]))}else i={};for(var u in n)u in i||(i[u]=ht(n,u));return t&&Object.isExtensible(t)&&(t._normalized=i),R(i,\"$stable\",a),R(i,\"$key\",s),R(i,\"$hasNormal\",o),i}function vt(e,t,n){var r=function(){var e=arguments.length?n.apply(null,arguments):n({}),t=(e=e&&\"object\"==typeof e&&!Array.isArray(e)?[e]:st(e))&&e[0];return e&&(!t||1===e.length&&t.isComment&&!pt(t))?void 0:e};return n.proxy&&Object.defineProperty(e,t,{get:r,enumerable:!0,configurable:!0}),r}function ht(e,t){return function(){return e[t]}}function mt(e,t){var r,i,a,s,c;if(Array.isArray(e)||\"string\"==typeof e)for(r=new Array(e.length),i=0,a=e.length;idocument.createEvent(\"Event\").timeStamp&&(cn=function(){return un.now()})}function ln(){var e,t;for(sn=cn(),on=!0,en.sort(function(e,t){return e.id-t.id}),an=0;anan&&en[n].id>e.id;)n--;en.splice(n+1,0,e)}else en.push(e);rn||(rn=!0,Qe(ln))}}(this)},pn.prototype.run=function(){if(this.active){var e=this.get();if(e!==this.value||o(e)||this.deep){var t=this.value;if(this.value=e,this.user){var n='callback for watcher \"'+this.expression+'\"';Be(this.cb,this.vm,[e,t],this.vm,n)}else this.cb.call(this.vm,e,t)}}},pn.prototype.evaluate=function(){this.value=this.get(),this.dirty=!1},pn.prototype.depend=function(){for(var e=this.deps.length;e--;)this.deps[e].depend()},pn.prototype.teardown=function(){if(this.active){this.vm._isBeingDestroyed||h(this.vm._watchers,this);for(var e=this.deps.length;e--;)this.deps[e].removeSub(this);this.active=!1}};var dn={enumerable:!0,configurable:!0,get:S,set:S};function vn(e,t,n){dn.get=function(){return this[t][n]},dn.set=function(e){this[t][n]=e},Object.defineProperty(e,n,dn)}function hn(e){e._watchers=[];var t=e.$options;t.props&&function(e,t){var n=e.$options.propsData||{},r=e._props={},i=e.$options._propKeys=[];e.$parent&&$e(!1);var o=function(o){i.push(o);var a=Ie(o,t,n,e);xe(r,o,a),o in e||vn(e,\"_props\",o)};for(var a in t)o(a);$e(!0)}(e,t.props),t.methods&&function(e,t){e.$options.props;for(var n in t)e[n]=\"function\"!=typeof t[n]?S:x(t[n],e)}(e,t.methods),t.data?function(e){var t=e.$options.data;s(t=e._data=\"function\"==typeof t?function(e,t){le();try{return e.call(t,t)}catch(e){return He(e,t,\"data()\"),{}}finally{fe()}}(t,e):t||{})||(t={});var n=Object.keys(t),r=e.$options.props,i=(e.$options.methods,n.length);for(;i--;){var o=n[i];r&&y(r,o)||(a=void 0,36!==(a=(o+\"\").charCodeAt(0))&&95!==a&&vn(e,\"_data\",o))}var a;Ce(t,!0)}(e):Ce(e._data={},!0),t.computed&&function(e,t){var n=e._computedWatchers=Object.create(null),r=te();for(var i in t){var o=t[i],a=\"function\"==typeof o?o:o.get;r||(n[i]=new pn(e,a||S,S,mn)),i in e||yn(e,i,o)}}(e,t.computed),t.watch&&t.watch!==Y&&function(e,t){for(var n in t){var r=t[n];if(Array.isArray(r))for(var i=0;i-1:\"string\"==typeof e?e.split(\",\").indexOf(t)>-1:(n=e,\"[object RegExp]\"===a.call(n)&&e.test(t));var n}function On(e,t){var n=e.cache,r=e.keys,i=e._vnode;for(var o in n){var a=n[o];if(a){var s=a.name;s&&!t(s)&&Sn(n,o,r,i)}}}function Sn(e,t,n,r){var i=e[t];!i||r&&i.tag===r.tag||i.componentInstance.$destroy(),e[t]=null,h(n,t)}!function(t){t.prototype._init=function(t){var n=this;n._uid=$n++,n._isVue=!0,t&&t._isComponent?function(e,t){var n=e.$options=Object.create(e.constructor.options),r=t._parentVnode;n.parent=t.parent,n._parentVnode=r;var i=r.componentOptions;n.propsData=i.propsData,n._parentListeners=i.listeners,n._renderChildren=i.children,n._componentTag=i.tag,t.render&&(n.render=t.render,n.staticRenderFns=t.staticRenderFns)}(n,t):n.$options=De(wn(n.constructor),t||{},n),n._renderProxy=n,n._self=n,function(e){var t=e.$options,n=t.parent;if(n&&!t.abstract){for(;n.$options.abstract&&n.$parent;)n=n.$parent;n.$children.push(e)}e.$parent=n,e.$root=n?n.$root:e,e.$children=[],e.$refs={},e._watcher=null,e._inactive=null,e._directInactive=!1,e._isMounted=!1,e._isDestroyed=!1,e._isBeingDestroyed=!1}(n),function(e){e._events=Object.create(null),e._hasHookEvent=!1;var t=e.$options._parentListeners;t&&Wt(e,t)}(n),function(t){t._vnode=null,t._staticTrees=null;var n=t.$options,r=t.$vnode=n._parentVnode,i=r&&r.context;t.$slots=lt(n._renderChildren,i),t.$scopedSlots=e,t._c=function(e,n,r,i){return Ht(t,e,n,r,i,!1)},t.$createElement=function(e,n,r,i){return Ht(t,e,n,r,i,!0)};var o=r&&r.data;xe(t,\"$attrs\",o&&o.attrs||e,null,!0),xe(t,\"$listeners\",n._parentListeners||e,null,!0)}(n),Qt(n,\"beforeCreate\"),function(e){var t=ut(e.$options.inject,e);t&&($e(!1),Object.keys(t).forEach(function(n){xe(e,n,t[n])}),$e(!0))}(n),hn(n),function(e){var t=e.$options.provide;t&&(e._provided=\"function\"==typeof t?t.call(e):t)}(n),Qt(n,\"created\"),n.$options.el&&n.$mount(n.$options.el)}}(Cn),function(e){var t={get:function(){return this._data}},n={get:function(){return this._props}};Object.defineProperty(e.prototype,\"$data\",t),Object.defineProperty(e.prototype,\"$props\",n),e.prototype.$set=ke,e.prototype.$delete=Ae,e.prototype.$watch=function(e,t,n){if(s(t))return bn(this,e,t,n);(n=n||{}).user=!0;var r=new pn(this,e,t,n);if(n.immediate){var i='callback for immediate watcher \"'+r.expression+'\"';le(),Be(t,this,[r.value],this,i),fe()}return function(){r.teardown()}}}(Cn),function(e){var t=/^hook:/;e.prototype.$on=function(e,n){var r=this;if(Array.isArray(e))for(var i=0,o=e.length;i1?k(t):t;for(var n=k(arguments,1),r='event handler for \"'+e+'\"',i=0,o=t.length;iparseInt(this.max)&&Sn(e,t[0],t,this._vnode),this.vnodeToCache=null}}},created:function(){this.cache=Object.create(null),this.keys=[]},destroyed:function(){for(var e in this.cache)Sn(this.cache,e,this.keys)},mounted:function(){var e=this;this.cacheVNode(),this.$watch(\"include\",function(t){On(e,function(e){return An(t,e)})}),this.$watch(\"exclude\",function(t){On(e,function(e){return!An(t,e)})})},updated:function(){this.cacheVNode()},render:function(){var e=this.$slots.default,t=zt(e),n=t&&t.componentOptions;if(n){var r=kn(n),i=this.include,o=this.exclude;if(i&&(!r||!An(i,r))||o&&r&&An(o,r))return t;var a=this.cache,s=this.keys,c=null==t.key?n.Ctor.cid+(n.tag?\"::\"+n.tag:\"\"):t.key;a[c]?(t.componentInstance=a[c].componentInstance,h(s,c),s.push(c)):(this.vnodeToCache=t,this.keyToCache=c),t.data.keepAlive=!0}return t||e&&e[0]}}};!function(e){var t={get:function(){return F}};Object.defineProperty(e,\"config\",t),e.util={warn:ae,extend:A,mergeOptions:De,defineReactive:xe},e.set=ke,e.delete=Ae,e.nextTick=Qe,e.observable=function(e){return Ce(e),e},e.options=Object.create(null),I.forEach(function(t){e.options[t+\"s\"]=Object.create(null)}),e.options._base=e,A(e.options.components,Nn),function(e){e.use=function(e){var t=this._installedPlugins||(this._installedPlugins=[]);if(t.indexOf(e)>-1)return this;var n=k(arguments,1);return n.unshift(this),\"function\"==typeof e.install?e.install.apply(e,n):\"function\"==typeof e&&e.apply(null,n),t.push(e),this}}(e),function(e){e.mixin=function(e){return this.options=De(this.options,e),this}}(e),xn(e),function(e){I.forEach(function(t){e[t]=function(e,n){return n?(\"component\"===t&&s(n)&&(n.name=n.name||e,n=this.options._base.extend(n)),\"directive\"===t&&\"function\"==typeof n&&(n={bind:n,update:n}),this.options[t+\"s\"][e]=n,n):this.options[t+\"s\"][e]}})}(e)}(Cn),Object.defineProperty(Cn.prototype,\"$isServer\",{get:te}),Object.defineProperty(Cn.prototype,\"$ssrContext\",{get:function(){return this.$vnode&&this.$vnode.ssrContext}}),Object.defineProperty(Cn,\"FunctionalRenderContext\",{value:Et}),Cn.version=\"2.6.14\";var En=p(\"style,class\"),jn=p(\"input,textarea,option,select,progress\"),Dn=function(e,t,n){return\"value\"===n&&jn(e)&&\"button\"!==t||\"selected\"===n&&\"option\"===e||\"checked\"===n&&\"input\"===e||\"muted\"===n&&\"video\"===e},Ln=p(\"contenteditable,draggable,spellcheck\"),In=p(\"events,caret,typing,plaintext-only\"),Mn=function(e,t){return Bn(t)||\"false\"===t?\"false\":\"contenteditable\"===e&&In(t)?t:\"true\"},Fn=p(\"allowfullscreen,async,autofocus,autoplay,checked,compact,controls,declare,default,defaultchecked,defaultmuted,defaultselected,defer,disabled,enabled,formnovalidate,hidden,indeterminate,inert,ismap,itemscope,loop,multiple,muted,nohref,noresize,noshade,novalidate,nowrap,open,pauseonexit,readonly,required,reversed,scoped,seamless,selected,sortable,truespeed,typemustmatch,visible\"),Pn=\"http://www.w3.org/1999/xlink\",Rn=function(e){return\":\"===e.charAt(5)&&\"xlink\"===e.slice(0,5)},Hn=function(e){return Rn(e)?e.slice(6,e.length):\"\"},Bn=function(e){return null==e||!1===e};function Un(e){for(var t=e.data,r=e,i=e;n(i.componentInstance);)(i=i.componentInstance._vnode)&&i.data&&(t=Vn(i.data,t));for(;n(r=r.parent);)r&&r.data&&(t=Vn(t,r.data));return function(e,t){if(n(e)||n(t))return zn(e,Kn(t));return\"\"}(t.staticClass,t.class)}function Vn(e,t){return{staticClass:zn(e.staticClass,t.staticClass),class:n(e.class)?[e.class,t.class]:t.class}}function zn(e,t){return e?t?e+\" \"+t:e:t||\"\"}function Kn(e){return Array.isArray(e)?function(e){for(var t,r=\"\",i=0,o=e.length;i-1?mr(e,t,n):Fn(t)?Bn(n)?e.removeAttribute(t):(n=\"allowfullscreen\"===t&&\"EMBED\"===e.tagName?\"true\":t,e.setAttribute(t,n)):Ln(t)?e.setAttribute(t,Mn(t,n)):Rn(t)?Bn(n)?e.removeAttributeNS(Pn,Hn(t)):e.setAttributeNS(Pn,t,n):mr(e,t,n)}function mr(e,t,n){if(Bn(n))e.removeAttribute(t);else{if(q&&!W&&\"TEXTAREA\"===e.tagName&&\"placeholder\"===t&&\"\"!==n&&!e.__ieph){var r=function(t){t.stopImmediatePropagation(),e.removeEventListener(\"input\",r)};e.addEventListener(\"input\",r),e.__ieph=!0}e.setAttribute(t,n)}}var yr={create:vr,update:vr};function gr(e,r){var i=r.elm,o=r.data,a=e.data;if(!(t(o.staticClass)&&t(o.class)&&(t(a)||t(a.staticClass)&&t(a.class)))){var s=Un(r),c=i._transitionClasses;n(c)&&(s=zn(s,Kn(c))),s!==i._prevClass&&(i.setAttribute(\"class\",s),i._prevClass=s)}}var _r,br,$r,wr,Cr,xr,kr={create:gr,update:gr},Ar=/[\\w).+\\-_$\\]]/;function Or(e){var t,n,r,i,o,a=!1,s=!1,c=!1,u=!1,l=0,f=0,p=0,d=0;for(r=0;r=0&&\" \"===(h=e.charAt(v));v--);h&&Ar.test(h)||(u=!0)}}else void 0===i?(d=r+1,i=e.slice(0,r).trim()):m();function m(){(o||(o=[])).push(e.slice(d,r).trim()),d=r+1}if(void 0===i?i=e.slice(0,r).trim():0!==d&&m(),o)for(r=0;r-1?{exp:e.slice(0,wr),key:'\"'+e.slice(wr+1)+'\"'}:{exp:e,key:null};br=e,wr=Cr=xr=0;for(;!zr();)Kr($r=Vr())?qr($r):91===$r&&Jr($r);return{exp:e.slice(0,Cr),key:e.slice(Cr+1,xr)}}(e);return null===n.key?e+\"=\"+t:\"$set(\"+n.exp+\", \"+n.key+\", \"+t+\")\"}function Vr(){return br.charCodeAt(++wr)}function zr(){return wr>=_r}function Kr(e){return 34===e||39===e}function Jr(e){var t=1;for(Cr=wr;!zr();)if(Kr(e=Vr()))qr(e);else if(91===e&&t++,93===e&&t--,0===t){xr=wr;break}}function qr(e){for(var t=e;!zr()&&(e=Vr())!==t;);}var Wr,Zr=\"__r\",Gr=\"__c\";function Xr(e,t,n){var r=Wr;return function i(){null!==t.apply(null,arguments)&&ei(e,i,n,r)}}var Yr=Ke&&!(X&&Number(X[1])<=53);function Qr(e,t,n,r){if(Yr){var i=sn,o=t;t=o._wrapper=function(e){if(e.target===e.currentTarget||e.timeStamp>=i||e.timeStamp<=0||e.target.ownerDocument!==document)return o.apply(this,arguments)}}Wr.addEventListener(e,t,Q?{capture:n,passive:r}:n)}function ei(e,t,n,r){(r||Wr).removeEventListener(e,t._wrapper||t,n)}function ti(e,r){if(!t(e.data.on)||!t(r.data.on)){var i=r.data.on||{},o=e.data.on||{};Wr=r.elm,function(e){if(n(e[Zr])){var t=q?\"change\":\"input\";e[t]=[].concat(e[Zr],e[t]||[]),delete e[Zr]}n(e[Gr])&&(e.change=[].concat(e[Gr],e.change||[]),delete e[Gr])}(i),it(i,o,Qr,ei,Xr,r.context),Wr=void 0}}var ni,ri={create:ti,update:ti};function ii(e,r){if(!t(e.data.domProps)||!t(r.data.domProps)){var i,o,a=r.elm,s=e.data.domProps||{},c=r.data.domProps||{};for(i in n(c.__ob__)&&(c=r.data.domProps=A({},c)),s)i in c||(a[i]=\"\");for(i in c){if(o=c[i],\"textContent\"===i||\"innerHTML\"===i){if(r.children&&(r.children.length=0),o===s[i])continue;1===a.childNodes.length&&a.removeChild(a.childNodes[0])}if(\"value\"===i&&\"PROGRESS\"!==a.tagName){a._value=o;var u=t(o)?\"\":String(o);oi(a,u)&&(a.value=u)}else if(\"innerHTML\"===i&&Wn(a.tagName)&&t(a.innerHTML)){(ni=ni||document.createElement(\"div\")).innerHTML=\"\"+o+\"\";for(var l=ni.firstChild;a.firstChild;)a.removeChild(a.firstChild);for(;l.firstChild;)a.appendChild(l.firstChild)}else if(o!==s[i])try{a[i]=o}catch(e){}}}}function oi(e,t){return!e.composing&&(\"OPTION\"===e.tagName||function(e,t){var n=!0;try{n=document.activeElement!==e}catch(e){}return n&&e.value!==t}(e,t)||function(e,t){var r=e.value,i=e._vModifiers;if(n(i)){if(i.number)return f(r)!==f(t);if(i.trim)return r.trim()!==t.trim()}return r!==t}(e,t))}var ai={create:ii,update:ii},si=g(function(e){var t={},n=/:(.+)/;return e.split(/;(?![^(]*\\))/g).forEach(function(e){if(e){var r=e.split(n);r.length>1&&(t[r[0].trim()]=r[1].trim())}}),t});function ci(e){var t=ui(e.style);return e.staticStyle?A(e.staticStyle,t):t}function ui(e){return Array.isArray(e)?O(e):\"string\"==typeof e?si(e):e}var li,fi=/^--/,pi=/\\s*!important$/,di=function(e,t,n){if(fi.test(t))e.style.setProperty(t,n);else if(pi.test(n))e.style.setProperty(C(t),n.replace(pi,\"\"),\"important\");else{var r=hi(t);if(Array.isArray(n))for(var i=0,o=n.length;i-1?t.split(gi).forEach(function(t){return e.classList.add(t)}):e.classList.add(t);else{var n=\" \"+(e.getAttribute(\"class\")||\"\")+\" \";n.indexOf(\" \"+t+\" \")<0&&e.setAttribute(\"class\",(n+t).trim())}}function bi(e,t){if(t&&(t=t.trim()))if(e.classList)t.indexOf(\" \")>-1?t.split(gi).forEach(function(t){return e.classList.remove(t)}):e.classList.remove(t),e.classList.length||e.removeAttribute(\"class\");else{for(var n=\" \"+(e.getAttribute(\"class\")||\"\")+\" \",r=\" \"+t+\" \";n.indexOf(r)>=0;)n=n.replace(r,\" \");(n=n.trim())?e.setAttribute(\"class\",n):e.removeAttribute(\"class\")}}function $i(e){if(e){if(\"object\"==typeof e){var t={};return!1!==e.css&&A(t,wi(e.name||\"v\")),A(t,e),t}return\"string\"==typeof e?wi(e):void 0}}var wi=g(function(e){return{enterClass:e+\"-enter\",enterToClass:e+\"-enter-to\",enterActiveClass:e+\"-enter-active\",leaveClass:e+\"-leave\",leaveToClass:e+\"-leave-to\",leaveActiveClass:e+\"-leave-active\"}}),Ci=V&&!W,xi=\"transition\",ki=\"animation\",Ai=\"transition\",Oi=\"transitionend\",Si=\"animation\",Ti=\"animationend\";Ci&&(void 0===window.ontransitionend&&void 0!==window.onwebkittransitionend&&(Ai=\"WebkitTransition\",Oi=\"webkitTransitionEnd\"),void 0===window.onanimationend&&void 0!==window.onwebkitanimationend&&(Si=\"WebkitAnimation\",Ti=\"webkitAnimationEnd\"));var Ni=V?window.requestAnimationFrame?window.requestAnimationFrame.bind(window):setTimeout:function(e){return e()};function Ei(e){Ni(function(){Ni(e)})}function ji(e,t){var n=e._transitionClasses||(e._transitionClasses=[]);n.indexOf(t)<0&&(n.push(t),_i(e,t))}function Di(e,t){e._transitionClasses&&h(e._transitionClasses,t),bi(e,t)}function Li(e,t,n){var r=Mi(e,t),i=r.type,o=r.timeout,a=r.propCount;if(!i)return n();var s=i===xi?Oi:Ti,c=0,u=function(){e.removeEventListener(s,l),n()},l=function(t){t.target===e&&++c>=a&&u()};setTimeout(function(){c0&&(n=xi,l=a,f=o.length):t===ki?u>0&&(n=ki,l=u,f=c.length):f=(n=(l=Math.max(a,u))>0?a>u?xi:ki:null)?n===xi?o.length:c.length:0,{type:n,timeout:l,propCount:f,hasTransform:n===xi&&Ii.test(r[Ai+\"Property\"])}}function Fi(e,t){for(;e.length1}function Vi(e,t){!0!==t.data.show&&Ri(t)}var zi=function(e){var o,a,s={},c=e.modules,u=e.nodeOps;for(o=0;ov?_(e,t(i[y+1])?null:i[y+1].elm,i,d,y,o):d>y&&$(r,p,v)}(p,h,y,o,l):n(y)?(n(e.text)&&u.setTextContent(p,\"\"),_(p,null,y,0,y.length-1,o)):n(h)?$(h,0,h.length-1):n(e.text)&&u.setTextContent(p,\"\"):e.text!==i.text&&u.setTextContent(p,i.text),n(v)&&n(d=v.hook)&&n(d=d.postpatch)&&d(e,i)}}}function k(e,t,i){if(r(i)&&n(e.parent))e.parent.data.pendingInsert=t;else for(var o=0;o-1,a.selected!==o&&(a.selected=o);else if(E(Zi(a),r))return void(e.selectedIndex!==s&&(e.selectedIndex=s));i||(e.selectedIndex=-1)}}function Wi(e,t){return t.every(function(t){return!E(t,e)})}function Zi(e){return\"_value\"in e?e._value:e.value}function Gi(e){e.target.composing=!0}function Xi(e){e.target.composing&&(e.target.composing=!1,Yi(e.target,\"input\"))}function Yi(e,t){var n=document.createEvent(\"HTMLEvents\");n.initEvent(t,!0,!0),e.dispatchEvent(n)}function Qi(e){return!e.componentInstance||e.data&&e.data.transition?e:Qi(e.componentInstance._vnode)}var eo={model:Ki,show:{bind:function(e,t,n){var r=t.value,i=(n=Qi(n)).data&&n.data.transition,o=e.__vOriginalDisplay=\"none\"===e.style.display?\"\":e.style.display;r&&i?(n.data.show=!0,Ri(n,function(){e.style.display=o})):e.style.display=r?o:\"none\"},update:function(e,t,n){var r=t.value;!r!=!t.oldValue&&((n=Qi(n)).data&&n.data.transition?(n.data.show=!0,r?Ri(n,function(){e.style.display=e.__vOriginalDisplay}):Hi(n,function(){e.style.display=\"none\"})):e.style.display=r?e.__vOriginalDisplay:\"none\")},unbind:function(e,t,n,r,i){i||(e.style.display=e.__vOriginalDisplay)}}},to={name:String,appear:Boolean,css:Boolean,mode:String,type:String,enterClass:String,leaveClass:String,enterToClass:String,leaveToClass:String,enterActiveClass:String,leaveActiveClass:String,appearClass:String,appearActiveClass:String,appearToClass:String,duration:[Number,String,Object]};function no(e){var t=e&&e.componentOptions;return t&&t.Ctor.options.abstract?no(zt(t.children)):e}function ro(e){var t={},n=e.$options;for(var r in n.propsData)t[r]=e[r];var i=n._parentListeners;for(var o in i)t[b(o)]=i[o];return t}function io(e,t){if(/\\d-keep-alive$/.test(t.tag))return e(\"keep-alive\",{props:t.componentOptions.propsData})}var oo=function(e){return e.tag||pt(e)},ao=function(e){return\"show\"===e.name},so={name:\"transition\",props:to,abstract:!0,render:function(e){var t=this,n=this.$slots.default;if(n&&(n=n.filter(oo)).length){var r=this.mode,o=n[0];if(function(e){for(;e=e.parent;)if(e.data.transition)return!0}(this.$vnode))return o;var a=no(o);if(!a)return o;if(this._leaving)return io(e,o);var s=\"__transition-\"+this._uid+\"-\";a.key=null==a.key?a.isComment?s+\"comment\":s+a.tag:i(a.key)?0===String(a.key).indexOf(s)?a.key:s+a.key:a.key;var c=(a.data||(a.data={})).transition=ro(this),u=this._vnode,l=no(u);if(a.data.directives&&a.data.directives.some(ao)&&(a.data.show=!0),l&&l.data&&!function(e,t){return t.key===e.key&&t.tag===e.tag}(a,l)&&!pt(l)&&(!l.componentInstance||!l.componentInstance._vnode.isComment)){var f=l.data.transition=A({},c);if(\"out-in\"===r)return this._leaving=!0,ot(f,\"afterLeave\",function(){t._leaving=!1,t.$forceUpdate()}),io(e,o);if(\"in-out\"===r){if(pt(a))return u;var p,d=function(){p()};ot(c,\"afterEnter\",d),ot(c,\"enterCancelled\",d),ot(f,\"delayLeave\",function(e){p=e})}}return o}}},co=A({tag:String,moveClass:String},to);function uo(e){e.elm._moveCb&&e.elm._moveCb(),e.elm._enterCb&&e.elm._enterCb()}function lo(e){e.data.newPos=e.elm.getBoundingClientRect()}function fo(e){var t=e.data.pos,n=e.data.newPos,r=t.left-n.left,i=t.top-n.top;if(r||i){e.data.moved=!0;var o=e.elm.style;o.transform=o.WebkitTransform=\"translate(\"+r+\"px,\"+i+\"px)\",o.transitionDuration=\"0s\"}}delete co.mode;var po={Transition:so,TransitionGroup:{props:co,beforeMount:function(){var e=this,t=this._update;this._update=function(n,r){var i=Gt(e);e.__patch__(e._vnode,e.kept,!1,!0),e._vnode=e.kept,i(),t.call(e,n,r)}},render:function(e){for(var t=this.tag||this.$vnode.data.tag||\"span\",n=Object.create(null),r=this.prevChildren=this.children,i=this.$slots.default||[],o=this.children=[],a=ro(this),s=0;s-1?Xn[e]=t.constructor===window.HTMLUnknownElement||t.constructor===window.HTMLElement:Xn[e]=/HTMLUnknownElement/.test(t.toString())},A(Cn.options.directives,eo),A(Cn.options.components,po),Cn.prototype.__patch__=V?zi:S,Cn.prototype.$mount=function(e,t){return function(e,t,n){var r;return e.$el=t,e.$options.render||(e.$options.render=ve),Qt(e,\"beforeMount\"),r=function(){e._update(e._render(),n)},new pn(e,r,S,{before:function(){e._isMounted&&!e._isDestroyed&&Qt(e,\"beforeUpdate\")}},!0),n=!1,null==e.$vnode&&(e._isMounted=!0,Qt(e,\"mounted\")),e}(this,e=e&&V?Qn(e):void 0,t)},V&&setTimeout(function(){F.devtools&&ne&&ne.emit(\"init\",Cn)},0);var vo=/\\{\\{((?:.|\\r?\\n)+?)\\}\\}/g,ho=/[-.*+?^${}()|[\\]\\/\\\\]/g,mo=g(function(e){var t=e[0].replace(ho,\"\\\\$&\"),n=e[1].replace(ho,\"\\\\$&\");return new RegExp(t+\"((?:.|\\\\n)+?)\"+n,\"g\")});var yo={staticKeys:[\"staticClass\"],transformNode:function(e,t){t.warn;var n=Pr(e,\"class\");n&&(e.staticClass=JSON.stringify(n));var r=Fr(e,\"class\",!1);r&&(e.classBinding=r)},genData:function(e){var t=\"\";return e.staticClass&&(t+=\"staticClass:\"+e.staticClass+\",\"),e.classBinding&&(t+=\"class:\"+e.classBinding+\",\"),t}};var go,_o={staticKeys:[\"staticStyle\"],transformNode:function(e,t){t.warn;var n=Pr(e,\"style\");n&&(e.staticStyle=JSON.stringify(si(n)));var r=Fr(e,\"style\",!1);r&&(e.styleBinding=r)},genData:function(e){var t=\"\";return e.staticStyle&&(t+=\"staticStyle:\"+e.staticStyle+\",\"),e.styleBinding&&(t+=\"style:(\"+e.styleBinding+\"),\"),t}},bo=function(e){return(go=go||document.createElement(\"div\")).innerHTML=e,go.textContent},$o=p(\"area,base,br,col,embed,frame,hr,img,input,isindex,keygen,link,meta,param,source,track,wbr\"),wo=p(\"colgroup,dd,dt,li,options,p,td,tfoot,th,thead,tr,source\"),Co=p(\"address,article,aside,base,blockquote,body,caption,col,colgroup,dd,details,dialog,div,dl,dt,fieldset,figcaption,figure,footer,form,h1,h2,h3,h4,h5,h6,head,header,hgroup,hr,html,legend,li,menuitem,meta,optgroup,option,param,rp,rt,source,style,summary,tbody,td,tfoot,th,thead,title,tr,track\"),xo=/^\\s*([^\\s\"'<>\\/=]+)(?:\\s*(=)\\s*(?:\"([^\"]*)\"+|'([^']*)'+|([^\\s\"'=<>`]+)))?/,ko=/^\\s*((?:v-[\\w-]+:|@|:|#)\\[[^=]+?\\][^\\s\"'<>\\/=]*)(?:\\s*(=)\\s*(?:\"([^\"]*)\"+|'([^']*)'+|([^\\s\"'=<>`]+)))?/,Ao=\"[a-zA-Z_][\\\\-\\\\.0-9_a-zA-Z\"+P.source+\"]*\",Oo=\"((?:\"+Ao+\"\\\\:)?\"+Ao+\")\",So=new RegExp(\"^<\"+Oo),To=/^\\s*(\\/?)>/,No=new RegExp(\"^<\\\\/\"+Oo+\"[^>]*>\"),Eo=/^]+>/i,jo=/^\",\""\":'\"',\"&\":\"&\",\" \":\"\\n\",\" \":\"\\t\",\"'\":\"'\"},Fo=/&(?:lt|gt|quot|amp|#39);/g,Po=/&(?:lt|gt|quot|amp|#39|#10|#9);/g,Ro=p(\"pre,textarea\",!0),Ho=function(e,t){return e&&Ro(e)&&\"\\n\"===t[0]};function Bo(e,t){var n=t?Po:Fo;return e.replace(n,function(e){return Mo[e]})}var Uo,Vo,zo,Ko,Jo,qo,Wo,Zo,Go=/^@|^v-on:/,Xo=/^v-|^@|^:|^#/,Yo=/([\\s\\S]*?)\\s+(?:in|of)\\s+([\\s\\S]*)/,Qo=/,([^,\\}\\]]*)(?:,([^,\\}\\]]*))?$/,ea=/^\\(|\\)$/g,ta=/^\\[.*\\]$/,na=/:(.*)$/,ra=/^:|^\\.|^v-bind:/,ia=/\\.[^.\\]]+(?=[^\\]]*$)/g,oa=/^v-slot(:|$)|^#/,aa=/[\\r\\n]/,sa=/[ \\f\\t\\r\\n]+/g,ca=g(bo),ua=\"_empty_\";function la(e,t,n){return{type:1,tag:e,attrsList:t,attrsMap:ya(t),rawAttrsMap:{},parent:n,children:[]}}function fa(e,t){Uo=t.warn||Tr,qo=t.isPreTag||T,Wo=t.mustUseProp||T,Zo=t.getTagNamespace||T;t.isReservedTag;zo=Nr(t.modules,\"transformNode\"),Ko=Nr(t.modules,\"preTransformNode\"),Jo=Nr(t.modules,\"postTransformNode\"),Vo=t.delimiters;var n,r,i=[],o=!1!==t.preserveWhitespace,a=t.whitespace,s=!1,c=!1;function u(e){if(l(e),s||e.processed||(e=pa(e,t)),i.length||e===n||n.if&&(e.elseif||e.else)&&va(n,{exp:e.elseif,block:e}),r&&!e.forbidden)if(e.elseif||e.else)a=e,(u=function(e){var t=e.length;for(;t--;){if(1===e[t].type)return e[t];e.pop()}}(r.children))&&u.if&&va(u,{exp:a.elseif,block:a});else{if(e.slotScope){var o=e.slotTarget||'\"default\"';(r.scopedSlots||(r.scopedSlots={}))[o]=e}r.children.push(e),e.parent=r}var a,u;e.children=e.children.filter(function(e){return!e.slotScope}),l(e),e.pre&&(s=!1),qo(e.tag)&&(c=!1);for(var f=0;f]*>)\",\"i\")),p=e.replace(f,function(e,n,r){return u=r.length,Lo(l)||\"noscript\"===l||(n=n.replace(//g,\"$1\").replace(//g,\"$1\")),Ho(l,n)&&(n=n.slice(1)),t.chars&&t.chars(n),\"\"});c+=e.length-p.length,e=p,A(l,c-u,c)}else{var d=e.indexOf(\"<\");if(0===d){if(jo.test(e)){var v=e.indexOf(\"--\\x3e\");if(v>=0){t.shouldKeepComment&&t.comment(e.substring(4,v),c,c+v+3),C(v+3);continue}}if(Do.test(e)){var h=e.indexOf(\"]>\");if(h>=0){C(h+2);continue}}var m=e.match(Eo);if(m){C(m[0].length);continue}var y=e.match(No);if(y){var g=c;C(y[0].length),A(y[1],g,c);continue}var _=x();if(_){k(_),Ho(_.tagName,e)&&C(1);continue}}var b=void 0,$=void 0,w=void 0;if(d>=0){for($=e.slice(d);!(No.test($)||So.test($)||jo.test($)||Do.test($)||(w=$.indexOf(\"<\",1))<0);)d+=w,$=e.slice(d);b=e.substring(0,d)}d<0&&(b=e),b&&C(b.length),t.chars&&b&&t.chars(b,c-b.length,c)}if(e===n){t.chars&&t.chars(e);break}}function C(t){c+=t,e=e.substring(t)}function x(){var t=e.match(So);if(t){var n,r,i={tagName:t[1],attrs:[],start:c};for(C(t[0].length);!(n=e.match(To))&&(r=e.match(ko)||e.match(xo));)r.start=c,C(r[0].length),r.end=c,i.attrs.push(r);if(n)return i.unarySlash=n[1],C(n[0].length),i.end=c,i}}function k(e){var n=e.tagName,c=e.unarySlash;o&&(\"p\"===r&&Co(n)&&A(r),s(n)&&r===n&&A(n));for(var u=a(n)||!!c,l=e.attrs.length,f=new Array(l),p=0;p=0&&i[a].lowerCasedTag!==s;a--);else a=0;if(a>=0){for(var u=i.length-1;u>=a;u--)t.end&&t.end(i[u].tag,n,o);i.length=a,r=a&&i[a-1].tag}else\"br\"===s?t.start&&t.start(e,[],!0,n,o):\"p\"===s&&(t.start&&t.start(e,[],!1,n,o),t.end&&t.end(e,n,o))}A()}(e,{warn:Uo,expectHTML:t.expectHTML,isUnaryTag:t.isUnaryTag,canBeLeftOpenTag:t.canBeLeftOpenTag,shouldDecodeNewlines:t.shouldDecodeNewlines,shouldDecodeNewlinesForHref:t.shouldDecodeNewlinesForHref,shouldKeepComment:t.comments,outputSourceRange:t.outputSourceRange,start:function(e,o,a,l,f){var p=r&&r.ns||Zo(e);q&&\"svg\"===p&&(o=function(e){for(var t=[],n=0;nc&&(s.push(o=e.slice(c,i)),a.push(JSON.stringify(o)));var u=Or(r[1].trim());a.push(\"_s(\"+u+\")\"),s.push({\"@binding\":u}),c=i+r[0].length}return c-1\"+(\"true\"===o?\":(\"+t+\")\":\":_q(\"+t+\",\"+o+\")\")),Mr(e,\"change\",\"var $$a=\"+t+\",$$el=$event.target,$$c=$$el.checked?(\"+o+\"):(\"+a+\");if(Array.isArray($$a)){var $$v=\"+(r?\"_n(\"+i+\")\":i)+\",$$i=_i($$a,$$v);if($$el.checked){$$i<0&&(\"+Ur(t,\"$$a.concat([$$v])\")+\")}else{$$i>-1&&(\"+Ur(t,\"$$a.slice(0,$$i).concat($$a.slice($$i+1))\")+\")}}else{\"+Ur(t,\"$$c\")+\"}\",null,!0)}(e,r,i);else if(\"input\"===o&&\"radio\"===a)!function(e,t,n){var r=n&&n.number,i=Fr(e,\"value\")||\"null\";Er(e,\"checked\",\"_q(\"+t+\",\"+(i=r?\"_n(\"+i+\")\":i)+\")\"),Mr(e,\"change\",Ur(t,i),null,!0)}(e,r,i);else if(\"input\"===o||\"textarea\"===o)!function(e,t,n){var r=e.attrsMap.type,i=n||{},o=i.lazy,a=i.number,s=i.trim,c=!o&&\"range\"!==r,u=o?\"change\":\"range\"===r?Zr:\"input\",l=\"$event.target.value\";s&&(l=\"$event.target.value.trim()\"),a&&(l=\"_n(\"+l+\")\");var f=Ur(t,l);c&&(f=\"if($event.target.composing)return;\"+f),Er(e,\"value\",\"(\"+t+\")\"),Mr(e,u,f,null,!0),(s||a)&&Mr(e,\"blur\",\"$forceUpdate()\")}(e,r,i);else if(!F.isReservedTag(o))return Br(e,r,i),!1;return!0},text:function(e,t){t.value&&Er(e,\"textContent\",\"_s(\"+t.value+\")\",t)},html:function(e,t){t.value&&Er(e,\"innerHTML\",\"_s(\"+t.value+\")\",t)}},isPreTag:function(e){return\"pre\"===e},isUnaryTag:$o,mustUseProp:Dn,canBeLeftOpenTag:wo,isReservedTag:Zn,getTagNamespace:Gn,staticKeys:function(e){return e.reduce(function(e,t){return e.concat(t.staticKeys||[])},[]).join(\",\")}($a)},ka=g(function(e){return p(\"type,tag,attrsList,attrsMap,plain,parent,children,attrs,start,end,rawAttrsMap\"+(e?\",\"+e:\"\"))});function Aa(e,t){e&&(wa=ka(t.staticKeys||\"\"),Ca=t.isReservedTag||T,function e(t){t.static=function(e){if(2===e.type)return!1;if(3===e.type)return!0;return!(!e.pre&&(e.hasBindings||e.if||e.for||d(e.tag)||!Ca(e.tag)||function(e){for(;e.parent;){if(\"template\"!==(e=e.parent).tag)return!1;if(e.for)return!0}return!1}(e)||!Object.keys(e).every(wa)))}(t);if(1===t.type){if(!Ca(t.tag)&&\"slot\"!==t.tag&&null==t.attrsMap[\"inline-template\"])return;for(var n=0,r=t.children.length;n|^function(?:\\s+[\\w$]+)?\\s*\\(/,Sa=/\\([^)]*?\\);*$/,Ta=/^[A-Za-z_$][\\w$]*(?:\\.[A-Za-z_$][\\w$]*|\\['[^']*?']|\\[\"[^\"]*?\"]|\\[\\d+]|\\[[A-Za-z_$][\\w$]*])*$/,Na={esc:27,tab:9,enter:13,space:32,up:38,left:37,right:39,down:40,delete:[8,46]},Ea={esc:[\"Esc\",\"Escape\"],tab:\"Tab\",enter:\"Enter\",space:[\" \",\"Spacebar\"],up:[\"Up\",\"ArrowUp\"],left:[\"Left\",\"ArrowLeft\"],right:[\"Right\",\"ArrowRight\"],down:[\"Down\",\"ArrowDown\"],delete:[\"Backspace\",\"Delete\",\"Del\"]},ja=function(e){return\"if(\"+e+\")return null;\"},Da={stop:\"$event.stopPropagation();\",prevent:\"$event.preventDefault();\",self:ja(\"$event.target !== $event.currentTarget\"),ctrl:ja(\"!$event.ctrlKey\"),shift:ja(\"!$event.shiftKey\"),alt:ja(\"!$event.altKey\"),meta:ja(\"!$event.metaKey\"),left:ja(\"'button' in $event && $event.button !== 0\"),middle:ja(\"'button' in $event && $event.button !== 1\"),right:ja(\"'button' in $event && $event.button !== 2\")};function La(e,t){var n=t?\"nativeOn:\":\"on:\",r=\"\",i=\"\";for(var o in e){var a=Ia(e[o]);e[o]&&e[o].dynamic?i+=o+\",\"+a+\",\":r+='\"'+o+'\":'+a+\",\"}return r=\"{\"+r.slice(0,-1)+\"}\",i?n+\"_d(\"+r+\",[\"+i.slice(0,-1)+\"])\":n+r}function Ia(e){if(!e)return\"function(){}\";if(Array.isArray(e))return\"[\"+e.map(function(e){return Ia(e)}).join(\",\")+\"]\";var t=Ta.test(e.value),n=Oa.test(e.value),r=Ta.test(e.value.replace(Sa,\"\"));if(e.modifiers){var i=\"\",o=\"\",a=[];for(var s in e.modifiers)if(Da[s])o+=Da[s],Na[s]&&a.push(s);else if(\"exact\"===s){var c=e.modifiers;o+=ja([\"ctrl\",\"shift\",\"alt\",\"meta\"].filter(function(e){return!c[e]}).map(function(e){return\"$event.\"+e+\"Key\"}).join(\"||\"))}else a.push(s);return a.length&&(i+=function(e){return\"if(!$event.type.indexOf('key')&&\"+e.map(Ma).join(\"&&\")+\")return null;\"}(a)),o&&(i+=o),\"function($event){\"+i+(t?\"return \"+e.value+\".apply(null, arguments)\":n?\"return (\"+e.value+\").apply(null, arguments)\":r?\"return \"+e.value:e.value)+\"}\"}return t||n?e.value:\"function($event){\"+(r?\"return \"+e.value:e.value)+\"}\"}function Ma(e){var t=parseInt(e,10);if(t)return\"$event.keyCode!==\"+t;var n=Na[e],r=Ea[e];return\"_k($event.keyCode,\"+JSON.stringify(e)+\",\"+JSON.stringify(n)+\",$event.key,\"+JSON.stringify(r)+\")\"}var Fa={on:function(e,t){e.wrapListeners=function(e){return\"_g(\"+e+\",\"+t.value+\")\"}},bind:function(e,t){e.wrapData=function(n){return\"_b(\"+n+\",'\"+e.tag+\"',\"+t.value+\",\"+(t.modifiers&&t.modifiers.prop?\"true\":\"false\")+(t.modifiers&&t.modifiers.sync?\",true\":\"\")+\")\"}},cloak:S},Pa=function(e){this.options=e,this.warn=e.warn||Tr,this.transforms=Nr(e.modules,\"transformCode\"),this.dataGenFns=Nr(e.modules,\"genData\"),this.directives=A(A({},Fa),e.directives);var t=e.isReservedTag||T;this.maybeComponent=function(e){return!!e.component||!t(e.tag)},this.onceId=0,this.staticRenderFns=[],this.pre=!1};function Ra(e,t){var n=new Pa(t);return{render:\"with(this){return \"+(e?\"script\"===e.tag?\"null\":Ha(e,n):'_c(\"div\")')+\"}\",staticRenderFns:n.staticRenderFns}}function Ha(e,t){if(e.parent&&(e.pre=e.pre||e.parent.pre),e.staticRoot&&!e.staticProcessed)return Ba(e,t);if(e.once&&!e.onceProcessed)return Ua(e,t);if(e.for&&!e.forProcessed)return za(e,t);if(e.if&&!e.ifProcessed)return Va(e,t);if(\"template\"!==e.tag||e.slotTarget||t.pre){if(\"slot\"===e.tag)return function(e,t){var n=e.slotName||'\"default\"',r=Wa(e,t),i=\"_t(\"+n+(r?\",function(){return \"+r+\"}\":\"\"),o=e.attrs||e.dynamicAttrs?Xa((e.attrs||[]).concat(e.dynamicAttrs||[]).map(function(e){return{name:b(e.name),value:e.value,dynamic:e.dynamic}})):null,a=e.attrsMap[\"v-bind\"];!o&&!a||r||(i+=\",null\");o&&(i+=\",\"+o);a&&(i+=(o?\"\":\",null\")+\",\"+a);return i+\")\"}(e,t);var n;if(e.component)n=function(e,t,n){var r=t.inlineTemplate?null:Wa(t,n,!0);return\"_c(\"+e+\",\"+Ka(t,n)+(r?\",\"+r:\"\")+\")\"}(e.component,e,t);else{var r;(!e.plain||e.pre&&t.maybeComponent(e))&&(r=Ka(e,t));var i=e.inlineTemplate?null:Wa(e,t,!0);n=\"_c('\"+e.tag+\"'\"+(r?\",\"+r:\"\")+(i?\",\"+i:\"\")+\")\"}for(var o=0;o>>0}(a):\"\")+\")\"}(e,e.scopedSlots,t)+\",\"),e.model&&(n+=\"model:{value:\"+e.model.value+\",callback:\"+e.model.callback+\",expression:\"+e.model.expression+\"},\"),e.inlineTemplate){var o=function(e,t){var n=e.children[0];if(n&&1===n.type){var r=Ra(n,t.options);return\"inlineTemplate:{render:function(){\"+r.render+\"},staticRenderFns:[\"+r.staticRenderFns.map(function(e){return\"function(){\"+e+\"}\"}).join(\",\")+\"]}\"}}(e,t);o&&(n+=o+\",\")}return n=n.replace(/,$/,\"\")+\"}\",e.dynamicAttrs&&(n=\"_b(\"+n+',\"'+e.tag+'\",'+Xa(e.dynamicAttrs)+\")\"),e.wrapData&&(n=e.wrapData(n)),e.wrapListeners&&(n=e.wrapListeners(n)),n}function Ja(e){return 1===e.type&&(\"slot\"===e.tag||e.children.some(Ja))}function qa(e,t){var n=e.attrsMap[\"slot-scope\"];if(e.if&&!e.ifProcessed&&!n)return Va(e,t,qa,\"null\");if(e.for&&!e.forProcessed)return za(e,t,qa);var r=e.slotScope===ua?\"\":String(e.slotScope),i=\"function(\"+r+\"){return \"+(\"template\"===e.tag?e.if&&n?\"(\"+e.if+\")?\"+(Wa(e,t)||\"undefined\")+\":undefined\":Wa(e,t)||\"undefined\":Ha(e,t))+\"}\",o=r?\"\":\",proxy:true\";return\"{key:\"+(e.slotTarget||'\"default\"')+\",fn:\"+i+o+\"}\"}function Wa(e,t,n,r,i){var o=e.children;if(o.length){var a=o[0];if(1===o.length&&a.for&&\"template\"!==a.tag&&\"slot\"!==a.tag){var s=n?t.maybeComponent(a)?\",1\":\",0\":\"\";return\"\"+(r||Ha)(a,t)+s}var c=n?function(e,t){for(var n=0,r=0;r':'
',ns.innerHTML.indexOf(\" \")>0}var as=!!V&&os(!1),ss=!!V&&os(!0),cs=g(function(e){var t=Qn(e);return t&&t.innerHTML}),us=Cn.prototype.$mount;return Cn.prototype.$mount=function(e,t){if((e=e&&Qn(e))===document.body||e===document.documentElement)return this;var n=this.$options;if(!n.render){var r=n.template;if(r)if(\"string\"==typeof r)\"#\"===r.charAt(0)&&(r=cs(r));else{if(!r.nodeType)return this;r=r.innerHTML}else e&&(r=function(e){if(e.outerHTML)return e.outerHTML;var t=document.createElement(\"div\");return t.appendChild(e.cloneNode(!0)),t.innerHTML}(e));if(r){var i=is(r,{outputSourceRange:!1,shouldDecodeNewlines:as,shouldDecodeNewlinesForHref:ss,delimiters:n.delimiters,comments:n.comments},this),o=i.render,a=i.staticRenderFns;n.render=o,n.staticRenderFns=a}}return us.call(this,e,t)},Cn.compile=is,Cn});","var scope = (typeof global !== \"undefined\" && global) ||\n (typeof self !== \"undefined\" && self) ||\n window;\nvar apply = Function.prototype.apply;\n\n// DOM APIs, for completeness\n\nexports.setTimeout = function() {\n return new Timeout(apply.call(setTimeout, scope, arguments), clearTimeout);\n};\nexports.setInterval = function() {\n return new Timeout(apply.call(setInterval, scope, arguments), clearInterval);\n};\nexports.clearTimeout =\nexports.clearInterval = function(timeout) {\n if (timeout) {\n timeout.close();\n }\n};\n\nfunction Timeout(id, clearFn) {\n this._id = id;\n this._clearFn = clearFn;\n}\nTimeout.prototype.unref = Timeout.prototype.ref = function() {};\nTimeout.prototype.close = function() {\n this._clearFn.call(scope, this._id);\n};\n\n// Does not start the time, just sets up the members needed.\nexports.enroll = function(item, msecs) {\n clearTimeout(item._idleTimeoutId);\n item._idleTimeout = msecs;\n};\n\nexports.unenroll = function(item) {\n clearTimeout(item._idleTimeoutId);\n item._idleTimeout = -1;\n};\n\nexports._unrefActive = exports.active = function(item) {\n clearTimeout(item._idleTimeoutId);\n\n var msecs = item._idleTimeout;\n if (msecs >= 0) {\n item._idleTimeoutId = setTimeout(function onTimeout() {\n if (item._onTimeout)\n item._onTimeout();\n }, msecs);\n }\n};\n\n// setimmediate attaches itself to the global object\nrequire(\"setimmediate\");\n// On some exotic environments, it's not clear which object `setimmediate` was\n// able to install onto. Search each possibility in the same order as the\n// `setimmediate` library.\nexports.setImmediate = (typeof self !== \"undefined\" && self.setImmediate) ||\n (typeof global !== \"undefined\" && global.setImmediate) ||\n (this && this.setImmediate);\nexports.clearImmediate = (typeof self !== \"undefined\" && self.clearImmediate) ||\n (typeof global !== \"undefined\" && global.clearImmediate) ||\n (this && this.clearImmediate);\n","(function (global, undefined) {\n \"use strict\";\n\n if (global.setImmediate) {\n return;\n }\n\n var nextHandle = 1; // Spec says greater than zero\n var tasksByHandle = {};\n var currentlyRunningATask = false;\n var doc = global.document;\n var registerImmediate;\n\n function setImmediate(callback) {\n // Callback can either be a function or a string\n if (typeof callback !== \"function\") {\n callback = new Function(\"\" + callback);\n }\n // Copy function arguments\n var args = new Array(arguments.length - 1);\n for (var i = 0; i < args.length; i++) {\n args[i] = arguments[i + 1];\n }\n // Store and register the task\n var task = { callback: callback, args: args };\n tasksByHandle[nextHandle] = task;\n registerImmediate(nextHandle);\n return nextHandle++;\n }\n\n function clearImmediate(handle) {\n delete tasksByHandle[handle];\n }\n\n function run(task) {\n var callback = task.callback;\n var args = task.args;\n switch (args.length) {\n case 0:\n callback();\n break;\n case 1:\n callback(args[0]);\n break;\n case 2:\n callback(args[0], args[1]);\n break;\n case 3:\n callback(args[0], args[1], args[2]);\n break;\n default:\n callback.apply(undefined, args);\n break;\n }\n }\n\n function runIfPresent(handle) {\n // From the spec: \"Wait until any invocations of this algorithm started before this one have completed.\"\n // So if we're currently running a task, we'll need to delay this invocation.\n if (currentlyRunningATask) {\n // Delay by doing a setTimeout. setImmediate was tried instead, but in Firefox 7 it generated a\n // \"too much recursion\" error.\n setTimeout(runIfPresent, 0, handle);\n } else {\n var task = tasksByHandle[handle];\n if (task) {\n currentlyRunningATask = true;\n try {\n run(task);\n } finally {\n clearImmediate(handle);\n currentlyRunningATask = false;\n }\n }\n }\n }\n\n function installNextTickImplementation() {\n registerImmediate = function(handle) {\n process.nextTick(function () { runIfPresent(handle); });\n };\n }\n\n function canUsePostMessage() {\n // The test against `importScripts` prevents this implementation from being installed inside a web worker,\n // where `global.postMessage` means something completely different and can't be used for this purpose.\n if (global.postMessage && !global.importScripts) {\n var postMessageIsAsynchronous = true;\n var oldOnMessage = global.onmessage;\n global.onmessage = function() {\n postMessageIsAsynchronous = false;\n };\n global.postMessage(\"\", \"*\");\n global.onmessage = oldOnMessage;\n return postMessageIsAsynchronous;\n }\n }\n\n function installPostMessageImplementation() {\n // Installs an event handler on `global` for the `message` event: see\n // * https://developer.mozilla.org/en/DOM/window.postMessage\n // * http://www.whatwg.org/specs/web-apps/current-work/multipage/comms.html#crossDocumentMessages\n\n var messagePrefix = \"setImmediate$\" + Math.random() + \"$\";\n var onGlobalMessage = function(event) {\n if (event.source === global &&\n typeof event.data === \"string\" &&\n event.data.indexOf(messagePrefix) === 0) {\n runIfPresent(+event.data.slice(messagePrefix.length));\n }\n };\n\n if (global.addEventListener) {\n global.addEventListener(\"message\", onGlobalMessage, false);\n } else {\n global.attachEvent(\"onmessage\", onGlobalMessage);\n }\n\n registerImmediate = function(handle) {\n global.postMessage(messagePrefix + handle, \"*\");\n };\n }\n\n function installMessageChannelImplementation() {\n var channel = new MessageChannel();\n channel.port1.onmessage = function(event) {\n var handle = event.data;\n runIfPresent(handle);\n };\n\n registerImmediate = function(handle) {\n channel.port2.postMessage(handle);\n };\n }\n\n function installReadyStateChangeImplementation() {\n var html = doc.documentElement;\n registerImmediate = function(handle) {\n // Create a