[
  {
    "path": ".gitignore",
    "content": "*.swp\nnode_modules/\n/lib\nsite/\nrelease/"
  },
  {
    "path": ".travis.yml",
    "content": "language: node_js\nnode_js:\n  - \"0.11\"\n  - \"0.10\"\nbefore_script:\n  - npm install -g gulp\n  - npm install -g mocha\nsudo: false\n"
  },
  {
    "path": "README.md",
    "content": "PathFinding.js\n==============\n#### A comprehensive path-finding library in javascript. ####\n\n[![Gitter](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/qiao/PathFinding.js?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)\n\n[![Build Status](https://travis-ci.org/qiao/PathFinding.js.svg?branch=master)](https://travis-ci.org/qiao/PathFinding.js)\n[![Dependency Status](https://david-dm.org/qiao/pathfinding.js.png)](https://david-dm.org/qiao/pathfinding.js)\n[![Documentation Status](https://readthedocs.org/projects/pathfindingjs/badge/)](https://readthedocs.org/projects/pathfindingjs/?badge=latest)\n\nIntroduction\n------------\n\nThe aim of this project is to provide a path-finding library that can be easily incorporated into web games. It may run on Node.js or the browser.\n\nIt comes along with an [online demo](http://qiao.github.io/PathFinding.js/visual) to show how the algorithms execute. (The pathfinding speed is slowed down in the demo)\n\nNote that this project only provides path-finding algorithms for 2D space. If you need to work in a 3D environment, then you may use [@schteppe](https://github.com/schteppe)'s [fork](https://github.com/schteppe/PathFinding3D.js).\n\nThere is new documentation being written for PathFinding.js. You can read it [here](http://pathfindingjs.readthedocs.org/en/latest/). Note that this is in very early stages and far from complete so keep your eyes open for mistakes and don't hesitate to open a pull request in case you find one.\n\nServer\n------\n\nIf you want to use it in Node.js, you may install it via `npm`.\n\n```bash\nnpm install pathfinding\n```\n\nThen, in your program:\n\n```javascript\nvar PF = require('pathfinding');\n```\n\nSee the `Basic Usage` section below for usage details.\n\n\nBrowser\n-------\n\nIf you have bower installed then you can install it with the following command:\n\n```bash\nbower install pathfinding\n```\n\nBy default bower will install pathfinding under the bower_components folder, so to include it in your page do something like:\n\n```html\n<script type=\"text/javascript\" src=\"path/to/bower_components/pathfinding/pathfinding-browser.min.js\"></script>\n```\n\nYou can also grab a release from the [Releases Page](https://github.com/imor/pathfinding-bower/releases) if you don't use bower.\n\nBasic Usage\n-----------\n\nTo build a grid-map of width 5 and height 3:\n\n```javascript\nvar grid = new PF.Grid(5, 3); \n```\n\nBy default, all the nodes in the grid will be able to be walked through.\nTo set whether a node at a given coordinate is walkable or not, use the `setWalkableAt` method.\n\nFor example, to set the node at (0, 1) to be un-walkable, where 0 is the x coordinate (from left to right), and \n1 is the y coordinate (from up to down):\n\n```javascript\ngrid.setWalkableAt(0, 1, false);\n```\n\nYou may also pass in a matrix while instantiating the `PF.Grid` class.\nIt will initiate all the nodes in the grid with the same walkability indicated by the matrix.\n0 for walkable while 1 for blocked.\n\n```javascript\nvar matrix = [\n    [0, 0, 0, 1, 0],\n    [1, 0, 0, 0, 1],\n    [0, 0, 1, 0, 0],\n];\nvar grid = new PF.Grid(matrix);\n```\n\nCurrently there are 10 path-finders bundled in this library, namely:\n\n*  `AStarFinder` *\n*  `BestFirstFinder`\n*  `BreadthFirstFinder` *\n*  `DijkstraFinder` *\n*  `IDAStarFinder.js` *\n*  `JumpPointFinder` *\n*  `OrthogonalJumpPointFinder` *\n*  `BiAStarFinder`\n*  `BiBestFirstFinder`\n*  `BiBreadthFirstFinder` *\n*  `BiDijkstraFinder` *\n\nThe prefix `Bi` for the last four finders in the above list stands for the bi-directional searching strategy.\n\nAlso, Note that only the finders with trailing asterisks are guaranteed to find the shortest path.\n\nTo build a path-finder, say, the `AStarFinder`:\n\n```javascript\nvar finder = new PF.AStarFinder();\n```\n\nTo find a path from (1, 2) to (4, 2), (Note: both the start point and end point should be walkable):\n\n```javascript\nvar path = finder.findPath(1, 2, 4, 2, grid);\n```\n\n`path` will be an array of coordinates including both the start and end positions.\n\nFor the `matrix` defined previously, the `path` will be:\n\n```javascript\n[ [ 1, 2 ], [ 1, 1 ], [ 2, 1 ], [ 3, 1 ], [ 3, 2 ], [ 4, 2 ] ]\n```\n\nBe aware that `grid` will be modified in each path-finding, and will not be usable afterwards. If you want to use a single grid multiple times, create a clone for it before calling `findPath`.\n\n```javascript\nvar gridBackup = grid.clone();\n```\n\n\nAdvanced Usage\n--------------\n\nWhen instantiating path-finders, you may pass in additional parameters to indicate which specific strategies to use.\n\nFor all path-finders, you may indicate whether diagonal movement is allowed. The default value is `false`, which means that the path can only go orthogonally.\n\nIn order to enable diagonal movement:\n\n```javascript\nvar finder = new PF.AStarFinder({\n    allowDiagonal: true\n});\n```\n\nWhen diagonal movement is enabled, you might want to prevent the path from touching the corners of the occupied grid blocks. This is usually desirable if the objects using the path have physical width and can also move between the grid cells.\n\nTo enable the corner crossing prevention:\n\n```javascript\nvar finder = new PF.AStarFinder({\n    allowDiagonal: true,\n    dontCrossCorners: true\n});\n```\n\nNote that `dontCrossCorners` only makes sense when `allowDiagonal` is also used. Currently all algorithms except `JumpPointFinder` support this feature.\n\nFor `AStarFinder`, `BestFirstFinder` and all their `Bi` relatives, you may indicate which heuristic function to use.\n\nThe predefined heuristics are `PF.Heuristic.manhattan`(default), `PF.Heuristic.chebyshev`, `PF.Heuristic.euclidean` and `PF.Heuristic.octile`.\n\nTo use the chebyshev heuristic:\n\n```javascript\nvar finder = new PF.AStarFinder({\n    heuristic: PF.Heuristic.chebyshev\n});\n```\n\nTo build a `BestFirstFinder` with diagonal movement allowed and a custom heuristic function:\n\n```javascript\nvar finder = new PF.BestFirstFinder({\n    allowDiagonal: true,\n    heuristic: function(dx, dy) {\n        return Math.min(dx, dy);\n    }\n});\n```\n\nTo smoothen the path, you may use `PF.Util.smoothenPath`. This routine will return\na new path with the original one unmodified.\n\n```javascript\nvar newPath = PF.Util.smoothenPath(grid, path);\n```\n\nNote that the new path will be compressed as well, i.e. if the original path is\n`[[0, 1], [0, 2], [0, 3], [0, 4]]`, then the new path will be `[[0, 1], [0, 4]]`.\n\nTo just compress a path without smoothing it, you may use `PF.Util.compressPath`.\n\n```javascript\nvar newPath = PF.Util.compressPath(path);\n```\n\nTo expand the compressed path like `[[0, 1], [0, 4]]` back to `[[0, 1], [0, 2], [0, 3], [0, 4]]`,\nyou may use `PF.Util.expandPath`.\n\n```javascript\nvar newPath = PF.Util.expandPath(path);\n```\n\n\nDevelopment\n------------\n\nLayout:\n\n    .\n    |-- lib          # browser distribution\n    |-- src          # source code (algorithms only)\n    |-- test         # test scripts\n    |-- utils        # build scripts\n\t|-- benchmark    # benchmarks\n    `-- visual       # visualization\n\nMake sure you have `node.js` installed, then use `npm` to install the dependencies: \n\n    npm install -d \n\nThe build system uses gulp, so make sure you have it installed:\n\n    npm install -d -g gulp\n\nTo build the browser distribution:\n\n    gulp compile\n\nTo run the tests\n(algorithms only, not including the visualization) with\n[mocha](http://mochajs.org/) and [should.js](https://github.com/visionmedia/should.js)\nFirst install mocha:\n\n    npm install -d -g mocha\n\nThen run the tests:\n\n    gulp test\n\nTo run the benchmarks:\n\n    gulp bench\n\nOr if you are feeling lazy, the default gulp task does everything(except running the benchmarks):\n\n    gulp\n\nLicense\n-------\n\n[MIT License](http://www.opensource.org/licenses/mit-license.php)\n\n&copy; 2011-2012 Xueqiao Xu &lt;xueqiaoxu@gmail.com&gt;\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n"
  },
  {
    "path": "TODO",
    "content": "implement IDS\nimplement Dynamic Weighting\ncustomize heuristic functions on demo page\nbeautify play panel\n"
  },
  {
    "path": "benchmark/benchmark.js",
    "content": "#!/usr/bin/env node\n\nvar colors    = require('colors');\nvar PF        = require('..');\nvar parseMap  = require('./parse_map').parse;\nvar parseScen = require('./parse_scen').parse;\nvar testCases = require('./test_cases');\nvar path      = require('path');\n\nfunction profile(callback) {\n  var startTime = Date.now();\n  ret = callback();\n  var endTime = Date.now();\n  return {\n    returnValue: ret,\n    time: endTime - startTime\n  };\n}\n\n/**\n * @param {object} opt\n * @param {string} opt.header\n * @param {string} opt.footer\n * @param {PF.*Finder} opt.finder\n * @param {PF.Grid} opt.grid\n * @param {number} opt.startX\n * @param {number} opt.startY\n * @param {number} opt.endX\n * @param {number} opt.endY\n */\nfunction benchmark(opt) {\n  var result = profile(function() {\n    return opt.finder.findPath(\n      opt.startX,\n      opt.startY,\n      opt.endX,\n      opt.endY,\n      opt.grid\n    );\n  });\n  var fields = [\n    opt.header,\n    (''+result.time + 'ms').yellow,\n    'length' , formatFloat(PF.Util.pathLength(result.returnValue)),\n    opt.footer,\n  ];\n  console.log(fields.join(' '));\n}\n\nfunction formatFloat(float) {\n  return Math.round(float * 1000) / 1000;\n}\n\nfunction map2grid(map) {\n  return new PF.Grid(map.width, map.height, map.grid);\n}\n\ntestCases.forEach(function(test) {\n  var grid = map2grid(parseMap(path.join(__dirname, test.map)));\n  var scens = parseScen(path.join(__dirname, test.scen)).scenarios;\n  var select = test.select;\n\n  select.forEach(function(id) {\n    var scen = scens[id];\n    var result = benchmark({\n      header: 'AStarFinder',\n      finder: new PF.AStarFinder({allowDiagonal: true}),\n      grid: grid,\n      startX: scen.startX,\n      startY: scen.startY,\n      endX: scen.endX,\n      endY: scen.endY,\n      footer: '(optimal: '.grey + (''+scen.length).green + ')'.grey\n    });\n  });\n});\n"
  },
  {
    "path": "benchmark/parse_map.js",
    "content": "#!/usr/bin/env node\n\n/**\n * Convert the `map` files into json\n * \n * All maps begin with the lines:\n * \n *     type octile\n *     height x\n *     width y\n *     map\n * \n * where x and y are the repsective height and width of the map.\n * \n * The map data is store as an ASCII grid. The following characters are possible:\n * \n *     . - passable terrain\n *     G - passable terrain\n *     @ - out of bounds\n *     O - out of bounds\n *     T - trees (unpassable)\n *     S - swamp (passable from regular terrain)\n *     W - water (traversable, but not passable from terrain)\n * \n */\n\n/**\n * Implementation note:\n * For convenience, only '.' and 'G' are interpreted as walkable.\n */\n\nvar fs = require('fs');\nvar endOfLine = require('os').EOL;\n\nfunction parse(filename) {\n  var content = fs.readFileSync(filename).toString();\n  var lines = content.split(endOfLine);\n  return {\n    height : parseInt(lines[1].split(' ')[1]),\n    width  : parseInt(lines[2].split(' ')[1]),\n    grid   : parseGrid(lines.slice(4)),\n  };\n}\nexports.parse = parse;\n\nfunction parseGrid(lines) {\n  var grid = [];\n  lines.forEach(function(line) {\n    if (!line.length) {\n      return;\n    }\n    var row = [];\n    line.split('').forEach(function(char) {\n      row.push(char in { '.': 1, 'G': 1 } ? 0 : 1);\n    });\n    grid.push(row);\n  });\n  return grid;\n}\n\nfunction splitext(filename) {\n  var index = filename.lastIndexOf('.');\n  if (index < 0) {\n    return [filename, ''];\n  } else {\n    return [filename.substr(0, index), filename.substr(index)];\n  }\n}\n\nfunction main(argv) {\n  var filename = argv[2];\n  var obj = parse(filename);\n  var root = splitext(filename)[0];\n  fs.writeFileSync(root + '.json', JSON.stringify(obj));\n}\n\nif (!module.parent) {\n  main(process.argv);\n}\n"
  },
  {
    "path": "benchmark/parse_scen.js",
    "content": "#!/usr/bin/env node\n\n/**\n * The scenario files have the following format.\n * The begin with the text \"version x.x\". This document describes version 1.0. \n * The trailing 0 is optional.\n *\n * Each line of a scenario has 9 fields:\n *\n * Bucket\n * map \n * map width\n * map height \n * start x-coordinate\n * start y-coordinate\n * goal x-coordinate\n * goal y-coordinate\n * optimal length\n */\n\nvar fs = require('fs');\n\nfunction parse(filename) {\n  var content = fs.readFileSync(filename).toString();\n  var lines = content.split('\\n');\n  var version = lines[1].split(/\\s+/);\n  return {\n    version: version,\n    scenarios: lines.slice(1, lines.length - 1).map(parseLine)\n  };\n}\n\nfunction parseLine(line) {\n  var fields = line.split(/\\s+/);\n  return {\n    bucket: parseInt(fields[0]),\n    map: fields[1],\n    width: parseInt(fields[2]),\n    height: parseInt(fields[3]),\n    startX: parseInt(fields[4]),\n    startY: parseInt(fields[5]),\n    endX: parseInt(fields[6]),\n    endY: parseInt(fields[7]),\n    length: parseFloat(fields[8])\n  };\n}\n\nexports.parse = parse;\n"
  },
  {
    "path": "benchmark/scen/64room_000.map.scen",
    "content": "version 1\n1\tmaps/rooms/64room_000.map\t512\t512\t210\t389\t214\t389\t4\n1\tmaps/rooms/64room_000.map\t512\t512\t137\t295\t134\t292\t4.24264\n1\tmaps/rooms/64room_000.map\t512\t512\t71\t507\t65\t510\t7.24264\n1\tmaps/rooms/64room_000.map\t512\t512\t474\t427\t469\t426\t5.41421\n1\tmaps/rooms/64room_000.map\t512\t512\t291\t14\t295\t15\t4.41421\n1\tmaps/rooms/64room_000.map\t512\t512\t227\t214\t225\t220\t6.82843\n1\tmaps/rooms/64room_000.map\t512\t512\t68\t315\t74\t316\t6.41421\n1\tmaps/rooms/64room_000.map\t512\t512\t456\t113\t456\t108\t5\n1\tmaps/rooms/64room_000.map\t512\t512\t393\t111\t397\t110\t4.41421\n1\tmaps/rooms/64room_000.map\t512\t512\t262\t146\t263\t142\t4.41421\n2\tmaps/rooms/64room_000.map\t512\t512\t44\t124\t52\t122\t8.82843\n2\tmaps/rooms/64room_000.map\t512\t512\t370\t293\t371\t282\t11.4142\n2\tmaps/rooms/64room_000.map\t512\t512\t328\t324\t328\t334\t10\n2\tmaps/rooms/64room_000.map\t512\t512\t343\t130\t339\t138\t9.65685\n2\tmaps/rooms/64room_000.map\t512\t512\t45\t333\t49\t323\t11.6569\n2\tmaps/rooms/64room_000.map\t512\t512\t111\t85\t106\t79\t8.07107\n2\tmaps/rooms/64room_000.map\t512\t512\t41\t143\t43\t152\t9.82843\n2\tmaps/rooms/64room_000.map\t512\t512\t374\t461\t374\t471\t10\n2\tmaps/rooms/64room_000.map\t512\t512\t416\t492\t412\t484\t9.65685\n2\tmaps/rooms/64room_000.map\t512\t512\t496\t399\t488\t404\t10.0711\n3\tmaps/rooms/64room_000.map\t512\t512\t47\t370\t58\t376\t13.4853\n3\tmaps/rooms/64room_000.map\t512\t512\t204\t140\t215\t131\t14.7279\n3\tmaps/rooms/64room_000.map\t512\t512\t132\t5\t144\t7\t12.8284\n3\tmaps/rooms/64room_000.map\t512\t512\t26\t497\t13\t500\t14.2426\n3\tmaps/rooms/64room_000.map\t512\t512\t430\t354\t437\t365\t13.8995\n3\tmaps/rooms/64room_000.map\t512\t512\t44\t376\t36\t367\t12.3137\n3\tmaps/rooms/64room_000.map\t512\t512\t96\t96\t98\t83\t13.8284\n3\tmaps/rooms/64room_000.map\t512\t512\t500\t81\t509\t93\t15.7279\n3\tmaps/rooms/64room_000.map\t512\t512\t474\t158\t460\t156\t14.8284\n3\tmaps/rooms/64room_000.map\t512\t512\t342\t154\t344\t166\t12.8284\n4\tmaps/rooms/64room_000.map\t512\t512\t311\t287\t304\t302\t17.8995\n4\tmaps/rooms/64room_000.map\t512\t512\t343\t313\t324\t312\t19.4142\n4\tmaps/rooms/64room_000.map\t512\t512\t52\t462\t38\t456\t16.4853\n4\tmaps/rooms/64room_000.map\t512\t512\t488\t360\t491\t377\t18.2426\n4\tmaps/rooms/64room_000.map\t512\t512\t359\t187\t377\t187\t18\n4\tmaps/rooms/64room_000.map\t512\t512\t398\t39\t391\t25\t16.8995\n4\tmaps/rooms/64room_000.map\t512\t512\t38\t102\t38\t118\t16\n4\tmaps/rooms/64room_000.map\t512\t512\t99\t184\t84\t192\t18.8995\n4\tmaps/rooms/64room_000.map\t512\t512\t407\t338\t389\t341\t19.2426\n4\tmaps/rooms/64room_000.map\t512\t512\t184\t276\t184\t292\t16\n5\tmaps/rooms/64room_000.map\t512\t512\t163\t347\t182\t344\t20.2426\n5\tmaps/rooms/64room_000.map\t512\t512\t259\t404\t281\t404\t22\n5\tmaps/rooms/64room_000.map\t512\t512\t410\t136\t406\t156\t21.6569\n5\tmaps/rooms/64room_000.map\t512\t512\t342\t207\t336\t190\t23.8284\n5\tmaps/rooms/64room_000.map\t512\t512\t277\t218\t276\t196\t22.4142\n5\tmaps/rooms/64room_000.map\t512\t512\t194\t147\t204\t129\t22.1421\n5\tmaps/rooms/64room_000.map\t512\t512\t94\t511\t77\t496\t23.2132\n5\tmaps/rooms/64room_000.map\t512\t512\t208\t97\t231\t97\t23\n5\tmaps/rooms/64room_000.map\t512\t512\t420\t47\t400\t38\t23.7279\n5\tmaps/rooms/64room_000.map\t512\t512\t415\t170\t438\t170\t23\n6\tmaps/rooms/64room_000.map\t512\t512\t334\t335\t360\t333\t26.8284\n6\tmaps/rooms/64room_000.map\t512\t512\t477\t148\t468\t169\t24.7279\n6\tmaps/rooms/64room_000.map\t512\t512\t252\t202\t226\t204\t26.8284\n6\tmaps/rooms/64room_000.map\t512\t512\t433\t284\t433\t259\t25\n6\tmaps/rooms/64room_000.map\t512\t512\t395\t495\t401\t471\t26.4853\n6\tmaps/rooms/64room_000.map\t512\t512\t110\t493\t132\t497\t26.1421\n6\tmaps/rooms/64room_000.map\t512\t512\t229\t284\t210\t265\t26.8701\n6\tmaps/rooms/64room_000.map\t512\t512\t223\t476\t205\t458\t25.4558\n6\tmaps/rooms/64room_000.map\t512\t512\t152\t497\t162\t477\t24.1421\n6\tmaps/rooms/64room_000.map\t512\t512\t451\t247\t444\t225\t26.6569\n7\tmaps/rooms/64room_000.map\t512\t512\t121\t155\t103\t178\t30.4558\n7\tmaps/rooms/64room_000.map\t512\t512\t58\t463\t78\t482\t29.6274\n7\tmaps/rooms/64room_000.map\t512\t512\t154\t418\t149\t447\t31.0711\n7\tmaps/rooms/64room_000.map\t512\t512\t329\t275\t352\t290\t29.2132\n7\tmaps/rooms/64room_000.map\t512\t512\t366\t190\t378\t166\t28.9706\n7\tmaps/rooms/64room_000.map\t512\t512\t333\t423\t324\t398\t28.7279\n7\tmaps/rooms/64room_000.map\t512\t512\t279\t188\t277\t157\t31.8284\n7\tmaps/rooms/64room_000.map\t512\t512\t397\t416\t403\t387\t31.4853\n7\tmaps/rooms/64room_000.map\t512\t512\t105\t136\t97\t162\t29.3137\n7\tmaps/rooms/64room_000.map\t512\t512\t478\t377\t508\t379\t30.8284\n8\tmaps/rooms/64room_000.map\t512\t512\t370\t455\t376\t428\t33.7279\n8\tmaps/rooms/64room_000.map\t512\t512\t29\t211\t45\t237\t32.6274\n8\tmaps/rooms/64room_000.map\t512\t512\t169\t65\t140\t76\t33.5563\n8\tmaps/rooms/64room_000.map\t512\t512\t195\t59\t179\t32\t34.799\n8\tmaps/rooms/64room_000.map\t512\t512\t421\t371\t391\t380\t33.7279\n8\tmaps/rooms/64room_000.map\t512\t512\t124\t350\t108\t321\t35.6274\n8\tmaps/rooms/64room_000.map\t512\t512\t346\t325\t325\t308\t35.799\n8\tmaps/rooms/64room_000.map\t512\t512\t105\t162\t80\t180\t32.4558\n8\tmaps/rooms/64room_000.map\t512\t512\t1\t475\t30\t491\t35.6274\n8\tmaps/rooms/64room_000.map\t512\t512\t251\t233\t247\t200\t34.6569\n9\tmaps/rooms/64room_000.map\t512\t512\t88\t325\t90\t311\t38.9706\n9\tmaps/rooms/64room_000.map\t512\t512\t58\t484\t79\t459\t38.9706\n9\tmaps/rooms/64room_000.map\t512\t512\t74\t342\t55\t312\t39.0416\n9\tmaps/rooms/64room_000.map\t512\t512\t243\t300\t232\t268\t36.5563\n9\tmaps/rooms/64room_000.map\t512\t512\t500\t472\t497\t438\t38.5563\n9\tmaps/rooms/64room_000.map\t512\t512\t72\t283\t97\t309\t36.3553\n9\tmaps/rooms/64room_000.map\t512\t512\t50\t91\t15\t82\t38.7279\n9\tmaps/rooms/64room_000.map\t512\t512\t505\t268\t471\t273\t36.0711\n9\tmaps/rooms/64room_000.map\t512\t512\t84\t199\t87\t235\t37.2426\n9\tmaps/rooms/64room_000.map\t512\t512\t433\t255\t420\t223\t37.3848\n10\tmaps/rooms/64room_000.map\t512\t512\t441\t78\t411\t48\t43.598\n10\tmaps/rooms/64room_000.map\t512\t512\t65\t191\t67\t151\t40.8284\n10\tmaps/rooms/64room_000.map\t512\t512\t156\t447\t145\t460\t41.5563\n10\tmaps/rooms/64room_000.map\t512\t512\t508\t432\t477\t405\t42.1838\n10\tmaps/rooms/64room_000.map\t512\t512\t174\t156\t142\t183\t43.1838\n10\tmaps/rooms/64room_000.map\t512\t512\t243\t183\t205\t177\t40.4853\n10\tmaps/rooms/64room_000.map\t512\t512\t377\t316\t361\t279\t43.6274\n10\tmaps/rooms/64room_000.map\t512\t512\t303\t407\t318\t442\t41.2132\n10\tmaps/rooms/64room_000.map\t512\t512\t116\t304\t118\t262\t42.8284\n10\tmaps/rooms/64room_000.map\t512\t512\t148\t267\t171\t244\t43.799\n11\tmaps/rooms/64room_000.map\t512\t512\t313\t176\t304\t134\t45.7279\n11\tmaps/rooms/64room_000.map\t512\t512\t80\t30\t119\t14\t45.6274\n11\tmaps/rooms/64room_000.map\t512\t512\t463\t446\t502\t430\t45.6274\n11\tmaps/rooms/64room_000.map\t512\t512\t184\t235\t157\t200\t46.1838\n11\tmaps/rooms/64room_000.map\t512\t512\t123\t391\t118\t435\t46.0711\n11\tmaps/rooms/64room_000.map\t512\t512\t18\t233\t59\t220\t46.3848\n11\tmaps/rooms/64room_000.map\t512\t512\t72\t415\t74\t460\t47.4853\n11\tmaps/rooms/64room_000.map\t512\t512\t215\t238\t207\t280\t47.799\n11\tmaps/rooms/64room_000.map\t512\t512\t337\t346\t380\t354\t46.3137\n11\tmaps/rooms/64room_000.map\t512\t512\t253\t261\t218\t291\t47.4264\n12\tmaps/rooms/64room_000.map\t512\t512\t452\t14\t467\t59\t51.2132\n12\tmaps/rooms/64room_000.map\t512\t512\t469\t214\t441\t205\t51.8701\n12\tmaps/rooms/64room_000.map\t512\t512\t315\t118\t306\t70\t51.7279\n12\tmaps/rooms/64room_000.map\t512\t512\t187\t102\t221\t102\t48.6274\n12\tmaps/rooms/64room_000.map\t512\t512\t206\t63\t237\t27\t48.8406\n12\tmaps/rooms/64room_000.map\t512\t512\t107\t145\t152\t141\t49.9706\n12\tmaps/rooms/64room_000.map\t512\t512\t362\t365\t333\t328\t49.0122\n12\tmaps/rooms/64room_000.map\t512\t512\t70\t299\t87\t342\t50.0416\n12\tmaps/rooms/64room_000.map\t512\t512\t389\t118\t415\t77\t51.7696\n12\tmaps/rooms/64room_000.map\t512\t512\t507\t116\t488\t157\t50.5269\n13\tmaps/rooms/64room_000.map\t512\t512\t78\t152\t125\t168\t53.6274\n13\tmaps/rooms/64room_000.map\t512\t512\t48\t189\t41\t136\t55.8995\n13\tmaps/rooms/64room_000.map\t512\t512\t261\t235\t220\t203\t54.2548\n13\tmaps/rooms/64room_000.map\t512\t512\t155\t257\t156\t218\t53.5563\n13\tmaps/rooms/64room_000.map\t512\t512\t299\t432\t348\t444\t53.9706\n13\tmaps/rooms/64room_000.map\t512\t512\t213\t334\t171\t348\t54.1838\n13\tmaps/rooms/64room_000.map\t512\t512\t385\t113\t410\t157\t54.3553\n13\tmaps/rooms/64room_000.map\t512\t512\t171\t329\t183\t380\t55.9706\n13\tmaps/rooms/64room_000.map\t512\t512\t172\t211\t213\t247\t55.9117\n13\tmaps/rooms/64room_000.map\t512\t512\t400\t235\t443\t206\t55.0122\n14\tmaps/rooms/64room_000.map\t512\t512\t503\t44\t492\t91\t58.1838\n14\tmaps/rooms/64room_000.map\t512\t512\t401\t398\t381\t387\t58.4558\n14\tmaps/rooms/64room_000.map\t512\t512\t393\t52\t372\t84\t57.0416\n14\tmaps/rooms/64room_000.map\t512\t512\t442\t228\t447\t186\t58.8995\n14\tmaps/rooms/64room_000.map\t512\t512\t62\t435\t14\t454\t57.0416\n14\tmaps/rooms/64room_000.map\t512\t512\t291\t52\t259\t6\t59.2548\n14\tmaps/rooms/64room_000.map\t512\t512\t335\t276\t352\t224\t59.0416\n14\tmaps/rooms/64room_000.map\t512\t512\t489\t219\t456\t180\t58.1838\n14\tmaps/rooms/64room_000.map\t512\t512\t213\t80\t199\t35\t57.2843\n14\tmaps/rooms/64room_000.map\t512\t512\t106\t5\t107\t62\t57.4142\n15\tmaps/rooms/64room_000.map\t512\t512\t454\t354\t445\t366\t60.8995\n15\tmaps/rooms/64room_000.map\t512\t512\t387\t147\t362\t151\t61.5269\n15\tmaps/rooms/64room_000.map\t512\t512\t436\t377\t387\t344\t62.669\n15\tmaps/rooms/64room_000.map\t512\t512\t396\t395\t353\t430\t63.9411\n15\tmaps/rooms/64room_000.map\t512\t512\t490\t180\t443\t177\t63.2132\n15\tmaps/rooms/64room_000.map\t512\t512\t353\t68\t410\t63\t61.8995\n15\tmaps/rooms/64room_000.map\t512\t512\t243\t198\t272\t227\t60.8701\n15\tmaps/rooms/64room_000.map\t512\t512\t120\t149\t66\t130\t61.8701\n15\tmaps/rooms/64room_000.map\t512\t512\t310\t209\t291\t265\t63.8701\n15\tmaps/rooms/64room_000.map\t512\t512\t310\t170\t262\t140\t60.4264\n16\tmaps/rooms/64room_000.map\t512\t512\t291\t195\t310\t152\t65.0711\n16\tmaps/rooms/64room_000.map\t512\t512\t178\t112\t243\t119\t67.8995\n16\tmaps/rooms/64room_000.map\t512\t512\t350\t52\t359\t108\t67.0416\n16\tmaps/rooms/64room_000.map\t512\t512\t79\t337\t50\t288\t65.1127\n16\tmaps/rooms/64room_000.map\t512\t512\t475\t72\t430\t120\t67.8112\n16\tmaps/rooms/64room_000.map\t512\t512\t380\t333\t441\t338\t66.9706\n16\tmaps/rooms/64room_000.map\t512\t512\t69\t352\t101\t313\t65.1421\n16\tmaps/rooms/64room_000.map\t512\t512\t372\t125\t325\t156\t64.5269\n16\tmaps/rooms/64room_000.map\t512\t512\t508\t381\t453\t355\t65.7696\n16\tmaps/rooms/64room_000.map\t512\t512\t507\t118\t455\t82\t66.9117\n17\tmaps/rooms/64room_000.map\t512\t512\t167\t193\t115\t219\t70.3848\n17\tmaps/rooms/64room_000.map\t512\t512\t189\t114\t244\t145\t69.0122\n17\tmaps/rooms/64room_000.map\t512\t512\t317\t259\t273\t218\t70.9411\n17\tmaps/rooms/64room_000.map\t512\t512\t45\t505\t37\t447\t70.2426\n17\tmaps/rooms/64room_000.map\t512\t512\t419\t59\t396\t109\t68.4975\n17\tmaps/rooms/64room_000.map\t512\t512\t280\t416\t232\t416\t71.0538\n17\tmaps/rooms/64room_000.map\t512\t512\t371\t357\t338\t302\t68.669\n17\tmaps/rooms/64room_000.map\t512\t512\t61\t358\t37\t297\t70.9411\n17\tmaps/rooms/64room_000.map\t512\t512\t295\t229\t277\t292\t70.4558\n17\tmaps/rooms/64room_000.map\t512\t512\t188\t386\t154\t330\t71.8406\n18\tmaps/rooms/64room_000.map\t512\t512\t350\t301\t284\t291\t74.2843\n18\tmaps/rooms/64room_000.map\t512\t512\t286\t205\t282\t174\t72.0122\n18\tmaps/rooms/64room_000.map\t512\t512\t177\t411\t235\t410\t72.8406\n18\tmaps/rooms/64room_000.map\t512\t512\t349\t79\t421\t82\t73.2426\n18\tmaps/rooms/64room_000.map\t512\t512\t193\t103\t223\t52\t73.9706\n18\tmaps/rooms/64room_000.map\t512\t512\t386\t184\t329\t191\t73.4558\n18\tmaps/rooms/64room_000.map\t512\t512\t48\t268\t36\t246\t74.2843\n18\tmaps/rooms/64room_000.map\t512\t512\t266\t53\t245\t69\t73.0833\n18\tmaps/rooms/64room_000.map\t512\t512\t200\t65\t139\t61\t75.7279\n18\tmaps/rooms/64room_000.map\t512\t512\t206\t481\t213\t417\t72.6985\n19\tmaps/rooms/64room_000.map\t512\t512\t238\t424\t293\t392\t78.4558\n19\tmaps/rooms/64room_000.map\t512\t512\t431\t493\t366\t464\t77.0122\n19\tmaps/rooms/64room_000.map\t512\t512\t335\t284\t266\t308\t78.9411\n19\tmaps/rooms/64room_000.map\t512\t512\t113\t138\t59\t103\t77.8701\n19\tmaps/rooms/64room_000.map\t512\t512\t349\t273\t344\t203\t79.5269\n19\tmaps/rooms/64room_000.map\t512\t512\t268\t171\t235\t130\t79.8406\n19\tmaps/rooms/64room_000.map\t512\t512\t54\t136\t10\t109\t79.6274\n19\tmaps/rooms/64room_000.map\t512\t512\t409\t420\t382\t463\t76.1421\n19\tmaps/rooms/64room_000.map\t512\t512\t227\t189\t177\t211\t78.7107\n19\tmaps/rooms/64room_000.map\t512\t512\t26\t59\t74\t60\t76.2548\n20\tmaps/rooms/64room_000.map\t512\t512\t77\t273\t43\t338\t83.7696\n20\tmaps/rooms/64room_000.map\t512\t512\t70\t342\t46\t272\t81.1127\n20\tmaps/rooms/64room_000.map\t512\t512\t349\t293\t276\t270\t82.5269\n20\tmaps/rooms/64room_000.map\t512\t512\t441\t176\t508\t182\t82.2132\n20\tmaps/rooms/64room_000.map\t512\t512\t144\t17\t200\t39\t80.8112\n20\tmaps/rooms/64room_000.map\t512\t512\t325\t62\t359\t101\t80.8995\n20\tmaps/rooms/64room_000.map\t512\t512\t276\t111\t312\t56\t82.2132\n20\tmaps/rooms/64room_000.map\t512\t512\t399\t1\t368\t63\t83.6274\n20\tmaps/rooms/64room_000.map\t512\t512\t491\t414\t452\t464\t83.0416\n20\tmaps/rooms/64room_000.map\t512\t512\t96\t267\t167\t275\t82.598\n21\tmaps/rooms/64room_000.map\t512\t512\t40\t280\t27\t339\t84.0833\n21\tmaps/rooms/64room_000.map\t512\t512\t193\t233\t255\t292\t87.6102\n21\tmaps/rooms/64room_000.map\t512\t512\t342\t444\t258\t447\t85.2426\n21\tmaps/rooms/64room_000.map\t512\t512\t502\t422\t474\t498\t87.598\n21\tmaps/rooms/64room_000.map\t512\t512\t96\t244\t96\t166\t87.9411\n21\tmaps/rooms/64room_000.map\t512\t512\t18\t60\t54\t120\t85.8822\n21\tmaps/rooms/64room_000.map\t512\t512\t459\t443\t492\t495\t84.0711\n21\tmaps/rooms/64room_000.map\t512\t512\t432\t316\t362\t279\t85.3259\n21\tmaps/rooms/64room_000.map\t512\t512\t71\t290\t126\t326\t86.8995\n21\tmaps/rooms/64room_000.map\t512\t512\t240\t178\t258\t246\t85.7401\n22\tmaps/rooms/64room_000.map\t512\t512\t305\t389\t242\t358\t89.2132\n22\tmaps/rooms/64room_000.map\t512\t512\t52\t417\t113\t409\t88.9828\n22\tmaps/rooms/64room_000.map\t512\t512\t509\t226\t434\t191\t90.669\n22\tmaps/rooms/64room_000.map\t512\t512\t432\t254\t376\t239\t89.2254\n22\tmaps/rooms/64room_000.map\t512\t512\t244\t251\t163\t225\t91.7696\n22\tmaps/rooms/64room_000.map\t512\t512\t417\t150\t375\t215\t91.0833\n22\tmaps/rooms/64room_000.map\t512\t512\t123\t161\t69\t225\t91.6396\n22\tmaps/rooms/64room_000.map\t512\t512\t409\t430\t462\t385\t90.3848\n22\tmaps/rooms/64room_000.map\t512\t512\t288\t193\t296\t278\t88.3137\n22\tmaps/rooms/64room_000.map\t512\t512\t189\t475\t114\t487\t90.7401\n23\tmaps/rooms/64room_000.map\t512\t512\t171\t429\t152\t360\t92.9117\n23\tmaps/rooms/64room_000.map\t512\t512\t303\t126\t265\t50\t95.2548\n23\tmaps/rooms/64room_000.map\t512\t512\t141\t338\t219\t329\t95.8112\n23\tmaps/rooms/64room_000.map\t512\t512\t98\t240\t151\t294\t92.9411\n23\tmaps/rooms/64room_000.map\t512\t512\t67\t267\t25\t321\t94.2426\n23\tmaps/rooms/64room_000.map\t512\t512\t304\t314\t235\t271\t94.4264\n23\tmaps/rooms/64room_000.map\t512\t512\t324\t311\t299\t232\t93.8406\n23\tmaps/rooms/64room_000.map\t512\t512\t254\t49\t315\t8\t92.6274\n23\tmaps/rooms/64room_000.map\t512\t512\t315\t433\t242\t402\t94.9533\n23\tmaps/rooms/64room_000.map\t512\t512\t243\t372\t160\t346\t93.7696\n24\tmaps/rooms/64room_000.map\t512\t512\t409\t152\t370\t233\t98.3259\n24\tmaps/rooms/64room_000.map\t512\t512\t119\t126\t181\t96\t99.8822\n24\tmaps/rooms/64room_000.map\t512\t512\t76\t374\t107\t304\t96.4558\n24\tmaps/rooms/64room_000.map\t512\t512\t464\t447\t471\t505\t96.1127\n24\tmaps/rooms/64room_000.map\t512\t512\t495\t46\t449\t93\t99.2254\n24\tmaps/rooms/64room_000.map\t512\t512\t438\t497\t370\t441\t99.397\n24\tmaps/rooms/64room_000.map\t512\t512\t35\t84\t101\t71\t99.5097\n24\tmaps/rooms/64room_000.map\t512\t512\t505\t181\t415\t182\t97.8701\n24\tmaps/rooms/64room_000.map\t512\t512\t30\t402\t12\t328\t97.598\n24\tmaps/rooms/64room_000.map\t512\t512\t340\t331\t363\t419\t97.5269\n25\tmaps/rooms/64room_000.map\t512\t512\t407\t141\t355\t87\t100.184\n25\tmaps/rooms/64room_000.map\t512\t512\t386\t426\t303\t443\t103.012\n25\tmaps/rooms/64room_000.map\t512\t512\t411\t250\t416\t152\t101.728\n25\tmaps/rooms/64room_000.map\t512\t512\t284\t187\t244\t225\t100.184\n25\tmaps/rooms/64room_000.map\t512\t512\t346\t304\t434\t270\t102.083\n25\tmaps/rooms/64room_000.map\t512\t512\t350\t147\t394\t208\t100.439\n25\tmaps/rooms/64room_000.map\t512\t512\t154\t259\t60\t240\t103.042\n25\tmaps/rooms/64room_000.map\t512\t512\t375\t72\t356\t158\t102.154\n25\tmaps/rooms/64room_000.map\t512\t512\t36\t272\t44\t362\t103.255\n25\tmaps/rooms/64room_000.map\t512\t512\t140\t292\t98\t224\t102.385\n26\tmaps/rooms/64room_000.map\t512\t512\t34\t410\t119\t416\t106.539\n26\tmaps/rooms/64room_000.map\t512\t512\t378\t55\t335\t138\t104.912\n26\tmaps/rooms/64room_000.map\t512\t512\t92\t92\t30\t26\t106.326\n26\tmaps/rooms/64room_000.map\t512\t512\t374\t137\t376\t202\t105.569\n26\tmaps/rooms/64room_000.map\t512\t512\t112\t282\t85\t189\t105.012\n26\tmaps/rooms/64room_000.map\t512\t512\t357\t392\t445\t403\t104.154\n26\tmaps/rooms/64room_000.map\t512\t512\t416\t338\t501\t304\t106.113\n26\tmaps/rooms/64room_000.map\t512\t512\t265\t437\t221\t430\t104.397\n26\tmaps/rooms/64room_000.map\t512\t512\t461\t273\t408\t337\t107.042\n26\tmaps/rooms/64room_000.map\t512\t512\t435\t234\t470\t146\t106.598\n27\tmaps/rooms/64room_000.map\t512\t512\t462\t144\t484\t241\t111.912\n27\tmaps/rooms/64room_000.map\t512\t512\t334\t108\t264\t138\t111.698\n27\tmaps/rooms/64room_000.map\t512\t512\t248\t95\t187\t69\t111.527\n27\tmaps/rooms/64room_000.map\t512\t512\t80\t218\t141\t287\t111.255\n27\tmaps/rooms/64room_000.map\t512\t512\t474\t408\t381\t412\t111.326\n27\tmaps/rooms/64room_000.map\t512\t512\t208\t69\t262\t13\t109.296\n27\tmaps/rooms/64room_000.map\t512\t512\t332\t195\t428\t164\t110.012\n27\tmaps/rooms/64room_000.map\t512\t512\t379\t90\t417\t168\t110.912\n27\tmaps/rooms/64room_000.map\t512\t512\t16\t297\t23\t194\t110.87\n27\tmaps/rooms/64room_000.map\t512\t512\t200\t65\t293\t56\t109.497\n28\tmaps/rooms/64room_000.map\t512\t512\t121\t499\t20\t465\t115.083\n28\tmaps/rooms/64room_000.map\t512\t512\t210\t300\t312\t280\t113.598\n28\tmaps/rooms/64room_000.map\t512\t512\t398\t19\t378\t102\t112.598\n28\tmaps/rooms/64room_000.map\t512\t512\t175\t102\t222\t35\t113.983\n28\tmaps/rooms/64room_000.map\t512\t512\t129\t127\t227\t135\t113.255\n28\tmaps/rooms/64room_000.map\t512\t512\t327\t466\t398\t406\t112.255\n28\tmaps/rooms/64room_000.map\t512\t512\t206\t415\t205\t351\t113.426\n28\tmaps/rooms/64room_000.map\t512\t512\t9\t77\t44\t171\t115.711\n28\tmaps/rooms/64room_000.map\t512\t512\t382\t93\t291\t53\t115.184\n28\tmaps/rooms/64room_000.map\t512\t512\t333\t305\t308\t204\t114.77\n29\tmaps/rooms/64room_000.map\t512\t512\t399\t318\t302\t281\t117.012\n29\tmaps/rooms/64room_000.map\t512\t512\t186\t396\t174\t283\t117.971\n29\tmaps/rooms/64room_000.map\t512\t512\t423\t61\t510\t116\t118.569\n29\tmaps/rooms/64room_000.map\t512\t512\t491\t360\t438\t415\t118.083\n29\tmaps/rooms/64room_000.map\t512\t512\t339\t21\t376\t122\t116.326\n29\tmaps/rooms/64room_000.map\t512\t512\t333\t194\t441\t212\t119.598\n29\tmaps/rooms/64room_000.map\t512\t512\t453\t327\t375\t299\t116.385\n29\tmaps/rooms/64room_000.map\t512\t512\t55\t215\t99\t169\t119.397\n29\tmaps/rooms/64room_000.map\t512\t512\t213\t402\t311\t430\t118.711\n29\tmaps/rooms/64room_000.map\t512\t512\t463\t364\t426\t316\t116.497\n30\tmaps/rooms/64room_000.map\t512\t512\t354\t222\t326\t125\t121.627\n30\tmaps/rooms/64room_000.map\t512\t512\t405\t416\t457\t362\t121.113\n30\tmaps/rooms/64room_000.map\t512\t512\t396\t187\t310\t144\t120.924\n30\tmaps/rooms/64room_000.map\t512\t512\t100\t61\t34\t86\t123.326\n30\tmaps/rooms/64room_000.map\t512\t512\t424\t433\t455\t335\t123.728\n30\tmaps/rooms/64room_000.map\t512\t512\t47\t396\t21\t323\t120.841\n30\tmaps/rooms/64room_000.map\t512\t512\t287\t211\t253\t311\t121.882\n30\tmaps/rooms/64room_000.map\t512\t512\t430\t494\t323\t475\t123.154\n30\tmaps/rooms/64room_000.map\t512\t512\t60\t423\t139\t504\t121.338\n30\tmaps/rooms/64room_000.map\t512\t512\t430\t380\t354\t390\t122.426\n31\tmaps/rooms/64room_000.map\t512\t512\t231\t154\t268\t101\t124.267\n31\tmaps/rooms/64room_000.map\t512\t512\t83\t383\t9\t316\t124.598\n31\tmaps/rooms/64room_000.map\t512\t512\t166\t252\t234\t298\t125.338\n31\tmaps/rooms/64room_000.map\t512\t512\t47\t147\t10\t59\t127.184\n31\tmaps/rooms/64room_000.map\t512\t512\t118\t397\t60\t386\t126.64\n31\tmaps/rooms/64room_000.map\t512\t512\t331\t112\t332\t13\t126.752\n31\tmaps/rooms/64room_000.map\t512\t512\t233\t211\t323\t219\t125.255\n31\tmaps/rooms/64room_000.map\t512\t512\t179\t149\t194\t85\t127.083\n31\tmaps/rooms/64room_000.map\t512\t512\t511\t252\t398\t234\t126.255\n31\tmaps/rooms/64room_000.map\t512\t512\t115\t385\t160\t342\t126.225\n32\tmaps/rooms/64room_000.map\t512\t512\t3\t402\t91\t495\t130.622\n32\tmaps/rooms/64room_000.map\t512\t512\t188\t224\t122\t248\t129.497\n32\tmaps/rooms/64room_000.map\t512\t512\t247\t129\t133\t134\t130.841\n32\tmaps/rooms/64room_000.map\t512\t512\t444\t307\t385\t343\t131.627\n32\tmaps/rooms/64room_000.map\t512\t512\t430\t259\t468\t372\t129.912\n32\tmaps/rooms/64room_000.map\t512\t512\t131\t348\t255\t346\t130.627\n32\tmaps/rooms/64room_000.map\t512\t512\t228\t182\t138\t199\t128.095\n32\tmaps/rooms/64room_000.map\t512\t512\t204\t94\t157\t174\t129.912\n32\tmaps/rooms/64room_000.map\t512\t512\t86\t175\t41\t200\t128.811\n32\tmaps/rooms/64room_000.map\t512\t512\t183\t124\t71\t169\t131.811\n33\tmaps/rooms/64room_000.map\t512\t512\t283\t62\t238\t152\t134.823\n33\tmaps/rooms/64room_000.map\t512\t512\t323\t323\t435\t379\t135.196\n33\tmaps/rooms/64room_000.map\t512\t512\t309\t55\t197\t103\t133.054\n33\tmaps/rooms/64room_000.map\t512\t512\t277\t236\t238\t138\t133.326\n33\tmaps/rooms/64room_000.map\t512\t512\t228\t160\t329\t135\t135.38\n33\tmaps/rooms/64room_000.map\t512\t512\t271\t186\t230\t88\t132.539\n33\tmaps/rooms/64room_000.map\t512\t512\t247\t309\t165\t234\t135.267\n33\tmaps/rooms/64room_000.map\t512\t512\t292\t200\t347\t309\t133.539\n33\tmaps/rooms/64room_000.map\t512\t512\t293\t270\t369\t366\t134.51\n33\tmaps/rooms/64room_000.map\t512\t512\t445\t340\t329\t304\t132.083\n34\tmaps/rooms/64room_000.map\t512\t512\t406\t428\t459\t464\t137.083\n34\tmaps/rooms/64room_000.map\t512\t512\t239\t123\t157\t26\t136.238\n34\tmaps/rooms/64room_000.map\t512\t512\t352\t125\t442\t198\t139.267\n34\tmaps/rooms/64room_000.map\t512\t512\t361\t338\t378\t250\t138.841\n34\tmaps/rooms/64room_000.map\t512\t512\t247\t75\t245\t190\t138.196\n34\tmaps/rooms/64room_000.map\t512\t512\t356\t396\t341\t265\t137.213\n34\tmaps/rooms/64room_000.map\t512\t512\t92\t317\t44\t218\t139.569\n34\tmaps/rooms/64room_000.map\t512\t512\t482\t252\t362\t205\t139.468\n34\tmaps/rooms/64room_000.map\t512\t512\t153\t317\t196\t217\t136.154\n34\tmaps/rooms/64room_000.map\t512\t512\t279\t133\t263\t226\t137.752\n35\tmaps/rooms/64room_000.map\t512\t512\t354\t405\t317\t281\t140.497\n35\tmaps/rooms/64room_000.map\t512\t512\t295\t59\t386\t116\t140.083\n35\tmaps/rooms/64room_000.map\t512\t512\t244\t13\t233\t118\t141.865\n35\tmaps/rooms/64room_000.map\t512\t512\t86\t337\t53\t431\t140.924\n35\tmaps/rooms/64room_000.map\t512\t512\t244\t142\t285\t238\t140.64\n35\tmaps/rooms/64room_000.map\t512\t512\t308\t295\t437\t286\t141.012\n35\tmaps/rooms/64room_000.map\t512\t512\t211\t299\t166\t416\t141.74\n35\tmaps/rooms/64room_000.map\t512\t512\t176\t27\t154\t97\t142.083\n35\tmaps/rooms/64room_000.map\t512\t512\t332\t25\t387\t131\t140.681\n35\tmaps/rooms/64room_000.map\t512\t512\t430\t81\t370\t149\t142.024\n36\tmaps/rooms/64room_000.map\t512\t512\t356\t93\t479\t126\t145.782\n36\tmaps/rooms/64room_000.map\t512\t512\t139\t144\t247\t68\t145.924\n36\tmaps/rooms/64room_000.map\t512\t512\t309\t443\t352\t510\t145.841\n36\tmaps/rooms/64room_000.map\t512\t512\t124\t137\t2\t83\t145.539\n36\tmaps/rooms/64room_000.map\t512\t512\t379\t97\t369\t206\t144.054\n36\tmaps/rooms/64room_000.map\t512\t512\t431\t253\t351\t154\t144.439\n36\tmaps/rooms/64room_000.map\t512\t512\t84\t281\t133\t366\t147.213\n36\tmaps/rooms/64room_000.map\t512\t512\t112\t264\t5\t282\t146.74\n36\tmaps/rooms/64room_000.map\t512\t512\t101\t507\t15\t399\t144.794\n36\tmaps/rooms/64room_000.map\t512\t512\t227\t101\t296\t175\t145.368\n37\tmaps/rooms/64room_000.map\t512\t512\t244\t223\t142\t290\t148.497\n37\tmaps/rooms/64room_000.map\t512\t512\t305\t202\t413\t218\t150.569\n37\tmaps/rooms/64room_000.map\t512\t512\t451\t263\t386\t372\t149.397\n37\tmaps/rooms/64room_000.map\t512\t512\t451\t123\t382\t180\t151.397\n37\tmaps/rooms/64room_000.map\t512\t512\t329\t229\t375\t360\t150.054\n37\tmaps/rooms/64room_000.map\t512\t512\t458\t509\t434\t447\t151.924\n37\tmaps/rooms/64room_000.map\t512\t512\t423\t274\t319\t254\t148.652\n37\tmaps/rooms/64room_000.map\t512\t512\t349\t471\t297\t407\t148.468\n37\tmaps/rooms/64room_000.map\t512\t512\t323\t355\t285\t435\t151.095\n37\tmaps/rooms/64room_000.map\t512\t512\t114\t145\t122\t55\t151.296\n38\tmaps/rooms/64room_000.map\t512\t512\t359\t324\t237\t315\t153.853\n38\tmaps/rooms/64room_000.map\t512\t512\t358\t159\t325\t53\t152.983\n38\tmaps/rooms/64room_000.map\t512\t512\t330\t303\t372\t174\t153.426\n38\tmaps/rooms/64room_000.map\t512\t512\t159\t316\t58\t329\t155.556\n38\tmaps/rooms/64room_000.map\t512\t512\t102\t467\t70\t360\t154.581\n38\tmaps/rooms/64room_000.map\t512\t512\t159\t371\t161\t475\t155.865\n38\tmaps/rooms/64room_000.map\t512\t512\t163\t13\t204\t133\t155.61\n38\tmaps/rooms/64room_000.map\t512\t512\t276\t439\t343\t471\t153.426\n38\tmaps/rooms/64room_000.map\t512\t512\t96\t308\t190\t339\t154.012\n38\tmaps/rooms/64room_000.map\t512\t512\t292\t241\t398\t168\t154.054\n39\tmaps/rooms/64room_000.map\t512\t512\t251\t224\t158\t289\t158.225\n39\tmaps/rooms/64room_000.map\t512\t512\t153\t467\t156\t353\t156.179\n39\tmaps/rooms/64room_000.map\t512\t512\t294\t228\t422\t299\t158.581\n39\tmaps/rooms/64room_000.map\t512\t512\t151\t293\t37\t213\t158.267\n39\tmaps/rooms/64room_000.map\t512\t512\t228\t305\t160\t415\t157.154\n39\tmaps/rooms/64room_000.map\t512\t512\t338\t187\t438\t100\t157.711\n39\tmaps/rooms/64room_000.map\t512\t512\t142\t266\t26\t343\t156.522\n39\tmaps/rooms/64room_000.map\t512\t512\t35\t314\t38\t410\t159.208\n39\tmaps/rooms/64room_000.map\t512\t512\t261\t160\t153\t202\t158.409\n39\tmaps/rooms/64room_000.map\t512\t512\t341\t354\t271\t231\t159.794\n40\tmaps/rooms/64room_000.map\t512\t512\t340\t241\t219\t281\t160.841\n40\tmaps/rooms/64room_000.map\t512\t512\t392\t257\t272\t290\t160.698\n40\tmaps/rooms/64room_000.map\t512\t512\t52\t194\t143\t237\t162.77\n40\tmaps/rooms/64room_000.map\t512\t512\t465\t132\t364\t219\t163.397\n40\tmaps/rooms/64room_000.map\t512\t512\t285\t289\t210\t182\t163.338\n40\tmaps/rooms/64room_000.map\t512\t512\t152\t183\t207\t141\t161.225\n40\tmaps/rooms/64room_000.map\t512\t512\t162\t504\t27\t440\t163.51\n40\tmaps/rooms/64room_000.map\t512\t512\t251\t204\t364\t203\t160.125\n40\tmaps/rooms/64room_000.map\t512\t512\t338\t151\t310\t293\t160.083\n40\tmaps/rooms/64room_000.map\t512\t512\t141\t58\t231\t144\t160.811\n41\tmaps/rooms/64room_000.map\t512\t512\t420\t172\t333\t62\t165.953\n41\tmaps/rooms/64room_000.map\t512\t512\t65\t293\t13\t423\t166.167\n41\tmaps/rooms/64room_000.map\t512\t512\t413\t220\t354\t317\t164.853\n41\tmaps/rooms/64room_000.map\t512\t512\t266\t147\t369\t199\t164.054\n41\tmaps/rooms/64room_000.map\t512\t512\t367\t289\t280\t168\t164.652\n41\tmaps/rooms/64room_000.map\t512\t512\t451\t222\t503\t81\t167.51\n41\tmaps/rooms/64room_000.map\t512\t512\t159\t80\t70\t194\t164.338\n41\tmaps/rooms/64room_000.map\t512\t512\t250\t101\t226\t244\t165.569\n41\tmaps/rooms/64room_000.map\t512\t512\t112\t374\t89\t238\t167.894\n41\tmaps/rooms/64room_000.map\t512\t512\t118\t341\t165\t431\t166.38\n42\tmaps/rooms/64room_000.map\t512\t512\t338\t274\t463\t331\t170.527\n42\tmaps/rooms/64room_000.map\t512\t512\t180\t359\t185\t460\t169.338\n42\tmaps/rooms/64room_000.map\t512\t512\t344\t316\t492\t370\t171.539\n42\tmaps/rooms/64room_000.map\t512\t512\t139\t164\t71\t249\t168.338\n42\tmaps/rooms/64room_000.map\t512\t512\t439\t459\t433\t442\t170.154\n42\tmaps/rooms/64room_000.map\t512\t512\t115\t259\t193\t383\t168.51\n42\tmaps/rooms/64room_000.map\t512\t512\t287\t412\t422\t477\t170.125\n42\tmaps/rooms/64room_000.map\t512\t512\t396\t475\t347\t329\t168.054\n42\tmaps/rooms/64room_000.map\t512\t512\t88\t173\t36\t266\t170.64\n42\tmaps/rooms/64room_000.map\t512\t512\t484\t190\t395\t81\t168.953\n43\tmaps/rooms/64room_000.map\t512\t512\t127\t226\t155\t167\t173.25\n43\tmaps/rooms/64room_000.map\t512\t512\t249\t187\t275\t301\t175.782\n43\tmaps/rooms/64room_000.map\t512\t512\t140\t135\t105\t16\t174.551\n43\tmaps/rooms/64room_000.map\t512\t512\t236\t160\t251\t311\t172.125\n43\tmaps/rooms/64room_000.map\t512\t512\t342\t117\t293\t259\t173.225\n43\tmaps/rooms/64room_000.map\t512\t512\t177\t457\t200\t359\t175.995\n43\tmaps/rooms/64room_000.map\t512\t512\t251\t392\t385\t422\t172.551\n43\tmaps/rooms/64room_000.map\t512\t512\t19\t476\t76\t357\t173.421\n43\tmaps/rooms/64room_000.map\t512\t512\t290\t19\t188\t123\t172.024\n43\tmaps/rooms/64room_000.map\t512\t512\t207\t175\t331\t224\t173.853\n44\tmaps/rooms/64room_000.map\t512\t512\t502\t440\t411\t354\t177.066\n44\tmaps/rooms/64room_000.map\t512\t512\t122\t290\t10\t395\t176.421\n44\tmaps/rooms/64room_000.map\t512\t512\t413\t39\t297\t89\t176.953\n44\tmaps/rooms/64room_000.map\t512\t512\t237\t414\t187\t287\t178.539\n44\tmaps/rooms/64room_000.map\t512\t512\t108\t207\t50\t358\t176.782\n44\tmaps/rooms/64room_000.map\t512\t512\t158\t284\t11\t259\t176.368\n44\tmaps/rooms/64room_000.map\t512\t512\t187\t88\t298\t172\t178.924\n44\tmaps/rooms/64room_000.map\t512\t512\t398\t346\t297\t440\t177.225\n44\tmaps/rooms/64room_000.map\t512\t512\t510\t187\t459\t58\t179.314\n44\tmaps/rooms/64room_000.map\t512\t512\t130\t81\t38\t121\t178.953\n45\tmaps/rooms/64room_000.map\t512\t512\t487\t228\t343\t137\t182.865\n45\tmaps/rooms/64room_000.map\t512\t512\t440\t223\t303\t291\t180.095\n45\tmaps/rooms/64room_000.map\t512\t512\t365\t48\t202\t71\t180.326\n45\tmaps/rooms/64room_000.map\t512\t512\t293\t311\t247\t177\t183.095\n45\tmaps/rooms/64room_000.map\t512\t512\t294\t26\t441\t106\t182.48\n45\tmaps/rooms/64room_000.map\t512\t512\t82\t330\t37\t196\t180.279\n45\tmaps/rooms/64room_000.map\t512\t512\t455\t183\t352\t81\t180.581\n45\tmaps/rooms/64room_000.map\t512\t512\t149\t371\t158\t224\t182.208\n45\tmaps/rooms/64room_000.map\t512\t512\t180\t462\t103\t419\t182.049\n45\tmaps/rooms/64room_000.map\t512\t512\t353\t505\t309\t397\t181.154\n46\tmaps/rooms/64room_000.map\t512\t512\t86\t63\t35\t164\t187.196\n46\tmaps/rooms/64room_000.map\t512\t512\t213\t258\t354\t193\t185.095\n46\tmaps/rooms/64room_000.map\t512\t512\t403\t385\t297\t283\t185.154\n46\tmaps/rooms/64room_000.map\t512\t512\t282\t272\t389\t151\t187.581\n46\tmaps/rooms/64room_000.map\t512\t512\t136\t367\t105\t255\t187.083\n46\tmaps/rooms/64room_000.map\t512\t512\t214\t410\t98\t487\t187.368\n46\tmaps/rooms/64room_000.map\t512\t512\t281\t59\t130\t127\t186.924\n46\tmaps/rooms/64room_000.map\t512\t512\t356\t365\t436\t500\t184.48\n46\tmaps/rooms/64room_000.map\t512\t512\t393\t289\t464\t413\t185.627\n46\tmaps/rooms/64room_000.map\t512\t512\t110\t270\t213\t327\t186.35\n47\tmaps/rooms/64room_000.map\t512\t512\t363\t251\t373\t388\t190.698\n47\tmaps/rooms/64room_000.map\t512\t512\t241\t275\t163\t423\t189.338\n47\tmaps/rooms/64room_000.map\t512\t512\t68\t472\t153\t392\t190.539\n47\tmaps/rooms/64room_000.map\t512\t512\t17\t337\t24\t489\t188.037\n47\tmaps/rooms/64room_000.map\t512\t512\t341\t56\t180\t49\t188.752\n47\tmaps/rooms/64room_000.map\t512\t512\t283\t51\t153\t66\t191.451\n47\tmaps/rooms/64room_000.map\t512\t512\t250\t442\t127\t501\t189.154\n47\tmaps/rooms/64room_000.map\t512\t512\t275\t172\t395\t208\t189.439\n47\tmaps/rooms/64room_000.map\t512\t512\t238\t205\t179\t44\t188.368\n47\tmaps/rooms/64room_000.map\t512\t512\t414\t345\t304\t421\t190.409\n48\tmaps/rooms/64room_000.map\t512\t512\t163\t471\t136\t335\t194.12\n48\tmaps/rooms/64room_000.map\t512\t512\t435\t222\t261\t220\t195.539\n48\tmaps/rooms/64room_000.map\t512\t512\t116\t443\t8\t329\t193.539\n48\tmaps/rooms/64room_000.map\t512\t512\t118\t337\t233\t428\t195.823\n48\tmaps/rooms/64room_000.map\t512\t512\t453\t239\t392\t72\t195.782\n48\tmaps/rooms/64room_000.map\t512\t512\t210\t360\t122\t302\t193.823\n48\tmaps/rooms/64room_000.map\t512\t512\t249\t252\t368\t159\t192.267\n48\tmaps/rooms/64room_000.map\t512\t512\t109\t124\t140\t259\t193.296\n48\tmaps/rooms/64room_000.map\t512\t512\t382\t465\t495\t466\t193.154\n48\tmaps/rooms/64room_000.map\t512\t512\t259\t311\t322\t170\t192.108\n49\tmaps/rooms/64room_000.map\t512\t512\t324\t403\t203\t428\t197.522\n49\tmaps/rooms/64room_000.map\t512\t512\t376\t191\t447\t24\t197.581\n49\tmaps/rooms/64room_000.map\t512\t512\t347\t353\t250\t390\t196.794\n49\tmaps/rooms/64room_000.map\t512\t512\t106\t219\t227\t159\t198.279\n49\tmaps/rooms/64room_000.map\t512\t512\t342\t444\t471\t341\t199.037\n49\tmaps/rooms/64room_000.map\t512\t512\t307\t180\t142\t195\t198.894\n49\tmaps/rooms/64room_000.map\t512\t512\t322\t227\t449\t262\t196.024\n49\tmaps/rooms/64room_000.map\t512\t512\t215\t189\t105\t152\t198.539\n49\tmaps/rooms/64room_000.map\t512\t512\t356\t327\t427\t237\t197.309\n49\tmaps/rooms/64room_000.map\t512\t512\t213\t258\t337\t331\t199.593\n50\tmaps/rooms/64room_000.map\t512\t512\t137\t121\t270\t149\t201.995\n50\tmaps/rooms/64room_000.map\t512\t512\t335\t291\t427\t441\t200.995\n50\tmaps/rooms/64room_000.map\t512\t512\t78\t258\t152\t120\t200.066\n50\tmaps/rooms/64room_000.map\t512\t512\t294\t223\t117\t200\t200.61\n50\tmaps/rooms/64room_000.map\t512\t512\t371\t100\t259\t228\t201.338\n50\tmaps/rooms/64room_000.map\t512\t512\t44\t362\t26\t505\t202.279\n50\tmaps/rooms/64room_000.map\t512\t512\t340\t296\t160\t330\t203.539\n50\tmaps/rooms/64room_000.map\t512\t512\t87\t266\t214\t376\t201.108\n50\tmaps/rooms/64room_000.map\t512\t512\t276\t141\t241\t299\t203.267\n50\tmaps/rooms/64room_000.map\t512\t512\t80\t227\t251\t232\t200.409\n51\tmaps/rooms/64room_000.map\t512\t512\t14\t285\t200\t316\t205.326\n51\tmaps/rooms/64room_000.map\t512\t512\t439\t261\t367\t402\t205.066\n51\tmaps/rooms/64room_000.map\t512\t512\t140\t334\t251\t477\t204.208\n51\tmaps/rooms/64room_000.map\t512\t512\t360\t336\t412\t509\t204.823\n51\tmaps/rooms/64room_000.map\t512\t512\t294\t316\t412\t167\t206.078\n51\tmaps/rooms/64room_000.map\t512\t512\t488\t310\t376\t443\t205.167\n51\tmaps/rooms/64room_000.map\t512\t512\t312\t78\t349\t135\t205.782\n51\tmaps/rooms/64room_000.map\t512\t512\t46\t118\t204\t85\t204.439\n51\tmaps/rooms/64room_000.map\t512\t512\t65\t248\t221\t280\t207.764\n51\tmaps/rooms/64room_000.map\t512\t512\t166\t311\t4\t310\t207.042\n52\tmaps/rooms/64room_000.map\t512\t512\t77\t340\t215\t223\t210.279\n52\tmaps/rooms/64room_000.map\t512\t512\t305\t43\t237\t199\t210.451\n52\tmaps/rooms/64room_000.map\t512\t512\t45\t35\t169\t102\t209.451\n52\tmaps/rooms/64room_000.map\t512\t512\t266\t223\t417\t340\t209.421\n52\tmaps/rooms/64room_000.map\t512\t512\t141\t289\t193\t386\t208.74\n52\tmaps/rooms/64room_000.map\t512\t512\t317\t207\t479\t229\t211.154\n52\tmaps/rooms/64room_000.map\t512\t512\t78\t488\t209\t401\t211.539\n52\tmaps/rooms/64room_000.map\t512\t512\t249\t243\t231\t381\t209.823\n52\tmaps/rooms/64room_000.map\t512\t512\t458\t493\t373\t439\t209.066\n52\tmaps/rooms/64room_000.map\t512\t512\t96\t98\t193\t37\t210.468\n53\tmaps/rooms/64room_000.map\t512\t512\t450\t162\t347\t60\t214.38\n53\tmaps/rooms/64room_000.map\t512\t512\t302\t255\t228\t95\t214.167\n53\tmaps/rooms/64room_000.map\t512\t512\t272\t186\t93\t261\t214.894\n53\tmaps/rooms/64room_000.map\t512\t512\t299\t218\t430\t323\t212.267\n53\tmaps/rooms/64room_000.map\t512\t512\t67\t264\t158\t131\t213.823\n53\tmaps/rooms/64room_000.map\t512\t512\t40\t343\t18\t509\t214.049\n53\tmaps/rooms/64room_000.map\t512\t512\t137\t330\t117\t471\t213.551\n53\tmaps/rooms/64room_000.map\t512\t512\t331\t63\t437\t195\t212.811\n53\tmaps/rooms/64room_000.map\t512\t512\t121\t147\t258\t125\t214.095\n53\tmaps/rooms/64room_000.map\t512\t512\t42\t299\t229\t346\t215.095\n54\tmaps/rooms/64room_000.map\t512\t512\t321\t237\t177\t277\t219.723\n54\tmaps/rooms/64room_000.map\t512\t512\t324\t317\t260\t135\t219.38\n54\tmaps/rooms/64room_000.map\t512\t512\t159\t162\t272\t170\t218.279\n54\tmaps/rooms/64room_000.map\t512\t512\t445\t300\t323\t191\t217.125\n54\tmaps/rooms/64room_000.map\t512\t512\t237\t30\t106\t160\t216.48\n54\tmaps/rooms/64room_000.map\t512\t512\t138\t237\t66\t124\t216.983\n54\tmaps/rooms/64room_000.map\t512\t512\t285\t229\t197\t369\t218.51\n54\tmaps/rooms/64room_000.map\t512\t512\t156\t17\t185\t148\t217.581\n54\tmaps/rooms/64room_000.map\t512\t512\t258\t216\t216\t360\t216.267\n54\tmaps/rooms/64room_000.map\t512\t512\t182\t108\t52\t230\t217.421\n55\tmaps/rooms/64room_000.map\t512\t512\t47\t313\t136\t390\t223.338\n55\tmaps/rooms/64room_000.map\t512\t512\t179\t168\t143\t51\t221.125\n55\tmaps/rooms/64room_000.map\t512\t512\t345\t198\t329\t399\t222.74\n55\tmaps/rooms/64room_000.map\t512\t512\t404\t345\t301\t387\t221.51\n55\tmaps/rooms/64room_000.map\t512\t512\t327\t15\t195\t157\t221.279\n55\tmaps/rooms/64room_000.map\t512\t512\t186\t495\t104\t371\t222.794\n55\tmaps/rooms/64room_000.map\t512\t512\t166\t418\t121\t284\t222.723\n55\tmaps/rooms/64room_000.map\t512\t512\t230\t328\t300\t281\t222.238\n55\tmaps/rooms/64room_000.map\t512\t512\t489\t250\t446\t117\t221.764\n55\tmaps/rooms/64room_000.map\t512\t512\t225\t116\t410\t60\t220.095\n56\tmaps/rooms/64room_000.map\t512\t512\t315\t83\t171\t141\t224.51\n56\tmaps/rooms/64room_000.map\t512\t512\t429\t22\t309\t112\t227.966\n56\tmaps/rooms/64room_000.map\t512\t512\t186\t362\t325\t314\t225.569\n56\tmaps/rooms/64room_000.map\t512\t512\t115\t491\t248\t375\t224.48\n56\tmaps/rooms/64room_000.map\t512\t512\t38\t209\t83\t92\t226.836\n56\tmaps/rooms/64room_000.map\t512\t512\t110\t260\t131\t87\t224.794\n56\tmaps/rooms/64room_000.map\t512\t512\t327\t85\t209\t151\t224.492\n56\tmaps/rooms/64room_000.map\t512\t512\t338\t248\t397\t444\t225.267\n56\tmaps/rooms/64room_000.map\t512\t512\t400\t157\t365\t322\t227.622\n56\tmaps/rooms/64room_000.map\t512\t512\t54\t232\t153\t362\t226.907\n57\tmaps/rooms/64room_000.map\t512\t512\t329\t99\t246\t254\t229.238\n57\tmaps/rooms/64room_000.map\t512\t512\t113\t83\t101\t295\t231.054\n57\tmaps/rooms/64room_000.map\t512\t512\t100\t330\t82\t139\t231.368\n57\tmaps/rooms/64room_000.map\t512\t512\t317\t294\t486\t251\t228.451\n57\tmaps/rooms/64room_000.map\t512\t512\t336\t397\t464\t264\t228.196\n57\tmaps/rooms/64room_000.map\t512\t512\t380\t507\t464\t339\t231.095\n57\tmaps/rooms/64room_000.map\t512\t512\t37\t409\t172\t322\t231.865\n57\tmaps/rooms/64room_000.map\t512\t512\t443\t370\t372\t234\t231.794\n57\tmaps/rooms/64room_000.map\t512\t512\t301\t197\t365\t15\t229.012\n57\tmaps/rooms/64room_000.map\t512\t512\t199\t57\t395\t52\t229.551\n58\tmaps/rooms/64room_000.map\t512\t512\t188\t95\t249\t281\t232.681\n58\tmaps/rooms/64room_000.map\t512\t512\t165\t119\t114\t293\t232.865\n58\tmaps/rooms/64room_000.map\t512\t512\t330\t505\t498\t419\t234.894\n58\tmaps/rooms/64room_000.map\t512\t512\t197\t117\t340\t233\t235.995\n58\tmaps/rooms/64room_000.map\t512\t512\t439\t202\t253\t302\t235.522\n58\tmaps/rooms/64room_000.map\t512\t512\t142\t401\t71\t394\t235.581\n58\tmaps/rooms/64room_000.map\t512\t512\t73\t159\t87\t365\t234.167\n58\tmaps/rooms/64room_000.map\t512\t512\t198\t94\t78\t30\t234.309\n58\tmaps/rooms/64room_000.map\t512\t512\t113\t186\t185\t336\t234.894\n58\tmaps/rooms/64room_000.map\t512\t512\t227\t153\t69\t271\t234.309\n59\tmaps/rooms/64room_000.map\t512\t512\t72\t190\t24\t24\t236.007\n59\tmaps/rooms/64room_000.map\t512\t512\t317\t221\t329\t435\t237.296\n59\tmaps/rooms/64room_000.map\t512\t512\t227\t432\t397\t458\t236.35\n59\tmaps/rooms/64room_000.map\t512\t512\t115\t308\t275\t310\t237.522\n59\tmaps/rooms/64room_000.map\t512\t512\t372\t263\t385\t80\t238.368\n59\tmaps/rooms/64room_000.map\t512\t512\t124\t109\t287\t58\t239.522\n59\tmaps/rooms/64room_000.map\t512\t512\t48\t296\t200\t431\t238.966\n59\tmaps/rooms/64room_000.map\t512\t512\t362\t385\t253\t255\t237.066\n59\tmaps/rooms/64room_000.map\t512\t512\t117\t95\t231\t24\t236.823\n59\tmaps/rooms/64room_000.map\t512\t512\t137\t8\t235\t196\t236.794\n60\tmaps/rooms/64room_000.map\t512\t512\t37\t190\t78\t13\t240.794\n60\tmaps/rooms/64room_000.map\t512\t512\t489\t465\t415\t501\t243.823\n60\tmaps/rooms/64room_000.map\t512\t512\t350\t5\t232\t160\t240.078\n60\tmaps/rooms/64room_000.map\t512\t512\t257\t233\t163\t62\t243.409\n60\tmaps/rooms/64room_000.map\t512\t512\t158\t187\t153\t11\t240.338\n60\tmaps/rooms/64room_000.map\t512\t512\t35\t272\t162\t398\t240.179\n60\tmaps/rooms/64room_000.map\t512\t512\t212\t364\t120\t446\t243.966\n60\tmaps/rooms/64room_000.map\t512\t512\t210\t288\t7\t361\t242.024\n60\tmaps/rooms/64room_000.map\t512\t512\t396\t169\t329\t352\t240.149\n60\tmaps/rooms/64room_000.map\t512\t512\t55\t106\t174\t214\t241.995\n61\tmaps/rooms/64room_000.map\t512\t512\t322\t281\t429\t99\t244.48\n61\tmaps/rooms/64room_000.map\t512\t512\t93\t328\t310\t263\t245.095\n61\tmaps/rooms/64room_000.map\t512\t512\t296\t415\t122\t354\t244.179\n61\tmaps/rooms/64room_000.map\t512\t512\t6\t221\t174\t138\t245.794\n61\tmaps/rooms/64room_000.map\t512\t512\t217\t249\t403\t341\t244.735\n61\tmaps/rooms/64room_000.map\t512\t512\t252\t150\t390\t134\t247.321\n61\tmaps/rooms/64room_000.map\t512\t512\t175\t246\t263\t108\t245.078\n61\tmaps/rooms/64room_000.map\t512\t512\t346\t359\t435\t175\t245.35\n61\tmaps/rooms/64room_000.map\t512\t512\t132\t53\t93\t163\t244.296\n61\tmaps/rooms/64room_000.map\t512\t512\t211\t404\t375\t496\t247.238\n62\tmaps/rooms/64room_000.map\t512\t512\t413\t432\t204\t397\t250.836\n62\tmaps/rooms/64room_000.map\t512\t512\t29\t258\t156\t122\t248.865\n62\tmaps/rooms/64room_000.map\t512\t512\t65\t80\t194\t27\t250.894\n62\tmaps/rooms/64room_000.map\t512\t512\t214\t274\t424\t329\t251.794\n62\tmaps/rooms/64room_000.map\t512\t512\t43\t238\t106\t423\t248.978\n62\tmaps/rooms/64room_000.map\t512\t512\t110\t288\t303\t272\t251.551\n62\tmaps/rooms/64room_000.map\t512\t512\t324\t386\t189\t332\t251.108\n62\tmaps/rooms/64room_000.map\t512\t512\t396\t459\t194\t409\t250.794\n62\tmaps/rooms/64room_000.map\t512\t512\t292\t150\t284\t4\t250.208\n62\tmaps/rooms/64room_000.map\t512\t512\t307\t217\t93\t283\t248.309\n63\tmaps/rooms/64room_000.map\t512\t512\t391\t475\t412\t312\t253.723\n63\tmaps/rooms/64room_000.map\t512\t512\t310\t153\t228\t48\t252.907\n63\tmaps/rooms/64room_000.map\t512\t512\t249\t190\t414\t268\t254.421\n63\tmaps/rooms/64room_000.map\t512\t512\t17\t262\t167\t164\t253.321\n63\tmaps/rooms/64room_000.map\t512\t512\t414\t285\t355\t110\t254.995\n63\tmaps/rooms/64room_000.map\t512\t512\t380\t222\t394\t422\t254.794\n63\tmaps/rooms/64room_000.map\t512\t512\t300\t225\t323\t46\t253.782\n63\tmaps/rooms/64room_000.map\t512\t512\t263\t133\t413\t286\t253.877\n63\tmaps/rooms/64room_000.map\t512\t512\t45\t263\t215\t228\t253.735\n63\tmaps/rooms/64room_000.map\t512\t512\t137\t337\t269\t177\t252.752\n64\tmaps/rooms/64room_000.map\t512\t512\t485\t493\t453\t258\t257.368\n64\tmaps/rooms/64room_000.map\t512\t512\t39\t283\t115\t483\t258.777\n64\tmaps/rooms/64room_000.map\t512\t512\t368\t108\t255\t308\t257.35\n64\tmaps/rooms/64room_000.map\t512\t512\t182\t334\t394\t277\t257.953\n64\tmaps/rooms/64room_000.map\t512\t512\t46\t267\t214\t251\t259.605\n64\tmaps/rooms/64room_000.map\t512\t512\t237\t295\t112\t156\t257.907\n64\tmaps/rooms/64room_000.map\t512\t512\t363\t37\t269\t239\t258.409\n64\tmaps/rooms/64room_000.map\t512\t512\t243\t378\t44\t273\t258.894\n64\tmaps/rooms/64room_000.map\t512\t512\t303\t287\t255\t89\t259.664\n64\tmaps/rooms/64room_000.map\t512\t512\t166\t28\t378\t23\t259.635\n65\tmaps/rooms/64room_000.map\t512\t512\t155\t129\t38\t280\t261.907\n65\tmaps/rooms/64room_000.map\t512\t512\t174\t114\t330\t107\t262.706\n65\tmaps/rooms/64room_000.map\t512\t512\t112\t85\t271\t191\t260.037\n65\tmaps/rooms/64room_000.map\t512\t512\t375\t166\t422\t344\t263.995\n65\tmaps/rooms/64room_000.map\t512\t512\t499\t127\t286\t137\t260.279\n65\tmaps/rooms/64room_000.map\t512\t512\t75\t173\t298\t219\t260.924\n65\tmaps/rooms/64room_000.map\t512\t512\t509\t165\t301\t210\t262.522\n65\tmaps/rooms/64room_000.map\t512\t512\t150\t209\t209\t415\t262.095\n65\tmaps/rooms/64room_000.map\t512\t512\t188\t133\t129\t283\t262.095\n65\tmaps/rooms/64room_000.map\t512\t512\t296\t140\t156\t33\t262.12\n66\tmaps/rooms/64room_000.map\t512\t512\t357\t353\t195\t422\t266.706\n66\tmaps/rooms/64room_000.map\t512\t512\t122\t298\t327\t236\t265.368\n66\tmaps/rooms/64room_000.map\t512\t512\t213\t459\t350\t378\t265.304\n66\tmaps/rooms/64room_000.map\t512\t512\t109\t508\t102\t295\t266.049\n66\tmaps/rooms/64room_000.map\t512\t512\t223\t89\t412\t147\t267.451\n66\tmaps/rooms/64room_000.map\t512\t512\t203\t273\t430\t260\t266.35\n66\tmaps/rooms/64room_000.map\t512\t512\t326\t424\t349\t181\t264.125\n66\tmaps/rooms/64room_000.map\t512\t512\t196\t403\t49\t362\t267.622\n66\tmaps/rooms/64room_000.map\t512\t512\t32\t43\t213\t107\t266.279\n66\tmaps/rooms/64room_000.map\t512\t512\t142\t145\t195\t263\t267.61\n67\tmaps/rooms/64room_000.map\t512\t512\t207\t61\t245\t288\t269.066\n67\tmaps/rooms/64room_000.map\t512\t512\t445\t2\t250\t60\t269.25\n67\tmaps/rooms/64room_000.map\t512\t512\t220\t301\t264\t95\t268.167\n67\tmaps/rooms/64room_000.map\t512\t512\t264\t271\t281\t414\t271.037\n67\tmaps/rooms/64room_000.map\t512\t512\t409\t306\t244\t152\t268.037\n67\tmaps/rooms/64room_000.map\t512\t512\t114\t252\t231\t89\t270.291\n67\tmaps/rooms/64room_000.map\t512\t512\t446\t42\t317\t241\t270.836\n67\tmaps/rooms/64room_000.map\t512\t512\t217\t481\t263\t293\t270.953\n67\tmaps/rooms/64room_000.map\t512\t512\t66\t188\t49\t172\t270.463\n67\tmaps/rooms/64room_000.map\t512\t512\t78\t257\t311\t316\t269.037\n68\tmaps/rooms/64room_000.map\t512\t512\t217\t445\t108\t243\t275.451\n68\tmaps/rooms/64room_000.map\t512\t512\t199\t308\t403\t184\t275.563\n68\tmaps/rooms/64room_000.map\t512\t512\t274\t281\t404\t77\t274.836\n68\tmaps/rooms/64room_000.map\t512\t512\t261\t197\t277\t116\t273.593\n68\tmaps/rooms/64room_000.map\t512\t512\t390\t38\t182\t29\t274.966\n68\tmaps/rooms/64room_000.map\t512\t512\t220\t338\t96\t189\t274.179\n68\tmaps/rooms/64room_000.map\t512\t512\t181\t247\t67\t416\t272.362\n68\tmaps/rooms/64room_000.map\t512\t512\t28\t407\t152\t296\t272.103\n68\tmaps/rooms/64room_000.map\t512\t512\t109\t259\t346\t274\t275.581\n68\tmaps/rooms/64room_000.map\t512\t512\t110\t209\t163\t418\t273.622\n69\tmaps/rooms/64room_000.map\t512\t512\t232\t58\t153\t238\t279.208\n69\tmaps/rooms/64room_000.map\t512\t512\t381\t252\t509\t337\t278.924\n69\tmaps/rooms/64room_000.map\t512\t512\t262\t135\t166\t357\t278.752\n69\tmaps/rooms/64room_000.map\t512\t512\t292\t168\t476\t265\t278.563\n69\tmaps/rooms/64room_000.map\t512\t512\t26\t198\t239\t271\t277.463\n69\tmaps/rooms/64room_000.map\t512\t512\t35\t89\t267\t83\t279.907\n69\tmaps/rooms/64room_000.map\t512\t512\t162\t315\t411\t317\t276.338\n69\tmaps/rooms/64room_000.map\t512\t512\t167\t52\t389\t30\t279.238\n69\tmaps/rooms/64room_000.map\t512\t512\t294\t202\t177\t139\t279.279\n69\tmaps/rooms/64room_000.map\t512\t512\t323\t166\t387\t396\t279.539\n70\tmaps/rooms/64room_000.map\t512\t512\t297\t240\t163\t47\t283.652\n70\tmaps/rooms/64room_000.map\t512\t512\t201\t281\t378\t394\t280.309\n70\tmaps/rooms/64room_000.map\t512\t512\t378\t239\t298\t29\t282.451\n70\tmaps/rooms/64room_000.map\t512\t512\t137\t438\t180\t207\t281.12\n70\tmaps/rooms/64room_000.map\t512\t512\t510\t340\t413\t495\t280.35\n70\tmaps/rooms/64room_000.map\t512\t512\t426\t357\t201\t269\t280.463\n70\tmaps/rooms/64room_000.map\t512\t512\t105\t310\t305\t166\t280.149\n70\tmaps/rooms/64room_000.map\t512\t512\t344\t231\t117\t232\t283.581\n70\tmaps/rooms/64room_000.map\t512\t512\t191\t436\t351\t352\t280.291\n70\tmaps/rooms/64room_000.map\t512\t512\t198\t163\t413\t109\t282.161\n71\tmaps/rooms/64room_000.map\t512\t512\t307\t119\t285\t242\t287.534\n71\tmaps/rooms/64room_000.map\t512\t512\t210\t257\t133\t178\t286.853\n71\tmaps/rooms/64room_000.map\t512\t512\t118\t78\t226\t229\t285.995\n71\tmaps/rooms/64room_000.map\t512\t512\t289\t304\t14\t314\t287.284\n71\tmaps/rooms/64room_000.map\t512\t512\t68\t220\t312\t197\t286.664\n71\tmaps/rooms/64room_000.map\t512\t512\t197\t415\t422\t494\t285.806\n71\tmaps/rooms/64room_000.map\t512\t512\t11\t36\t221\t109\t285.593\n71\tmaps/rooms/64room_000.map\t512\t512\t33\t286\t167\t171\t285.676\n71\tmaps/rooms/64room_000.map\t512\t512\t62\t358\t213\t473\t287.279\n71\tmaps/rooms/64room_000.map\t512\t512\t272\t165\t58\t312\t284.546\n72\tmaps/rooms/64room_000.map\t512\t512\t505\t185\t406\t295\t289.735\n72\tmaps/rooms/64room_000.map\t512\t512\t141\t261\t332\t336\t290.777\n72\tmaps/rooms/64room_000.map\t512\t512\t152\t449\t74\t279\t289.321\n72\tmaps/rooms/64room_000.map\t512\t512\t216\t101\t91\t306\t290.978\n72\tmaps/rooms/64room_000.map\t512\t512\t382\t122\t386\t323\t288.154\n72\tmaps/rooms/64room_000.map\t512\t512\t431\t67\t310\t272\t289.806\n72\tmaps/rooms/64room_000.map\t512\t512\t494\t426\t302\t273\t289.35\n72\tmaps/rooms/64room_000.map\t512\t512\t396\t267\t492\t196\t289.635\n72\tmaps/rooms/64room_000.map\t512\t512\t406\t73\t174\t90\t289.392\n72\tmaps/rooms/64room_000.map\t512\t512\t221\t143\t227\t333\t288.066\n73\tmaps/rooms/64room_000.map\t512\t512\t498\t182\t353\t348\t294.865\n73\tmaps/rooms/64room_000.map\t512\t512\t365\t359\t207\t144\t292.747\n73\tmaps/rooms/64room_000.map\t512\t512\t247\t259\t139\t499\t295.806\n73\tmaps/rooms/64room_000.map\t512\t512\t367\t419\t432\t208\t293.723\n73\tmaps/rooms/64room_000.map\t512\t512\t324\t314\t148\t410\t293.681\n73\tmaps/rooms/64room_000.map\t512\t512\t147\t94\t189\t264\t292.894\n73\tmaps/rooms/64room_000.map\t512\t512\t434\t271\t216\t171\t295.362\n73\tmaps/rooms/64room_000.map\t512\t512\t149\t316\t8\t439\t293.924\n73\tmaps/rooms/64room_000.map\t512\t512\t437\t65\t207\t205\t295.019\n73\tmaps/rooms/64room_000.map\t512\t512\t133\t424\t8\t278\t293.919\n74\tmaps/rooms/64room_000.map\t512\t512\t61\t225\t186\t58\t298.108\n74\tmaps/rooms/64room_000.map\t512\t512\t308\t247\t127\t174\t298.409\n74\tmaps/rooms/64room_000.map\t512\t512\t13\t298\t268\t392\t296.279\n74\tmaps/rooms/64room_000.map\t512\t512\t39\t326\t291\t235\t298.664\n74\tmaps/rooms/64room_000.map\t512\t512\t335\t283\t455\t65\t296.995\n74\tmaps/rooms/64room_000.map\t512\t512\t194\t40\t116\t252\t297.179\n74\tmaps/rooms/64room_000.map\t512\t512\t87\t120\t46\t353\t296.25\n74\tmaps/rooms/64room_000.map\t512\t512\t166\t344\t335\t166\t296.806\n74\tmaps/rooms/64room_000.map\t512\t512\t372\t335\t385\t83\t296.48\n74\tmaps/rooms/64room_000.map\t512\t512\t197\t200\t450\t290\t296.421\n75\tmaps/rooms/64room_000.map\t512\t512\t319\t100\t501\t75\t301.978\n75\tmaps/rooms/64room_000.map\t512\t512\t400\t317\t447\t455\t300.966\n75\tmaps/rooms/64room_000.map\t512\t512\t319\t57\t316\t288\t301.196\n75\tmaps/rooms/64room_000.map\t512\t512\t94\t259\t359\t275\t300.48\n75\tmaps/rooms/64room_000.map\t512\t512\t297\t406\t189\t219\t300.563\n75\tmaps/rooms/64room_000.map\t512\t512\t241\t186\t52\t381\t302.576\n75\tmaps/rooms/64room_000.map\t512\t512\t142\t163\t369\t36\t300.108\n75\tmaps/rooms/64room_000.map\t512\t512\t130\t280\t75\t488\t303.635\n75\tmaps/rooms/64room_000.map\t512\t512\t291\t442\t170\t232\t300.747\n75\tmaps/rooms/64room_000.map\t512\t512\t316\t248\t471\t424\t302.865\n76\tmaps/rooms/64room_000.map\t512\t512\t201\t181\t428\t40\t306.978\n76\tmaps/rooms/64room_000.map\t512\t512\t306\t399\t151\t206\t304.936\n76\tmaps/rooms/64room_000.map\t512\t512\t405\t415\t206\t310\t305.137\n76\tmaps/rooms/64room_000.map\t512\t512\t168\t324\t435\t324\t307.894\n76\tmaps/rooms/64room_000.map\t512\t512\t109\t451\t72\t226\t304.049\n76\tmaps/rooms/64room_000.map\t512\t512\t194\t501\t106\t312\t306.137\n76\tmaps/rooms/64room_000.map\t512\t512\t158\t265\t265\t116\t304.191\n76\tmaps/rooms/64room_000.map\t512\t512\t38\t399\t194\t324\t307.534\n76\tmaps/rooms/64room_000.map\t512\t512\t66\t379\t286\t240\t305.978\n76\tmaps/rooms/64room_000.map\t512\t512\t159\t456\t37\t291\t306.99\n77\tmaps/rooms/64room_000.map\t512\t512\t201\t335\t21\t478\t309.576\n77\tmaps/rooms/64room_000.map\t512\t512\t270\t445\t190\t249\t308.007\n77\tmaps/rooms/64room_000.map\t512\t512\t196\t28\t65\t20\t310.723\n77\tmaps/rooms/64room_000.map\t512\t512\t271\t232\t5\t199\t308.522\n77\tmaps/rooms/64room_000.map\t512\t512\t65\t282\t61\t33\t309.877\n77\tmaps/rooms/64room_000.map\t512\t512\t284\t432\t84\t280\t311.907\n77\tmaps/rooms/64room_000.map\t512\t512\t108\t9\t203\t56\t308.978\n77\tmaps/rooms/64room_000.map\t512\t512\t221\t27\t297\t271\t308.978\n77\tmaps/rooms/64room_000.map\t512\t512\t37\t154\t232\t111\t308.208\n77\tmaps/rooms/64room_000.map\t512\t512\t40\t113\t13\t292\t310.894\n78\tmaps/rooms/64room_000.map\t512\t512\t277\t245\t482\t72\t315.321\n78\tmaps/rooms/64room_000.map\t512\t512\t24\t232\t41\t475\t313.002\n78\tmaps/rooms/64room_000.map\t512\t512\t249\t144\t45\t8\t314.534\n78\tmaps/rooms/64room_000.map\t512\t512\t37\t81\t296\t88\t315.806\n78\tmaps/rooms/64room_000.map\t512\t512\t117\t481\t253\t283\t314.25\n78\tmaps/rooms/64room_000.map\t512\t512\t238\t336\t290\t173\t314.966\n78\tmaps/rooms/64room_000.map\t512\t512\t204\t231\t90\t56\t313.392\n78\tmaps/rooms/64room_000.map\t512\t512\t341\t52\t83\t98\t312.877\n78\tmaps/rooms/64room_000.map\t512\t512\t365\t315\t204\t439\t313.09\n78\tmaps/rooms/64room_000.map\t512\t512\t158\t111\t92\t363\t314.191\n79\tmaps/rooms/64room_000.map\t512\t512\t339\t2\t464\t11\t316.475\n79\tmaps/rooms/64room_000.map\t512\t512\t65\t175\t315\t27\t316.576\n79\tmaps/rooms/64room_000.map\t512\t512\t126\t376\t121\t112\t319.09\n79\tmaps/rooms/64room_000.map\t512\t512\t4\t86\t230\t187\t317.35\n79\tmaps/rooms/64room_000.map\t512\t512\t493\t340\t359\t162\t319.865\n79\tmaps/rooms/64room_000.map\t512\t512\t171\t248\t171\t492\t318.919\n79\tmaps/rooms/64room_000.map\t512\t512\t133\t6\t183\t200\t316.777\n79\tmaps/rooms/64room_000.map\t512\t512\t110\t118\t312\t241\t319.451\n79\tmaps/rooms/64room_000.map\t512\t512\t287\t138\t462\t322\t317.108\n79\tmaps/rooms/64room_000.map\t512\t512\t442\t396\t189\t437\t318.576\n80\tmaps/rooms/64room_000.map\t512\t512\t154\t57\t5\t89\t322.238\n80\tmaps/rooms/64room_000.map\t512\t512\t443\t418\t182\t410\t321.191\n80\tmaps/rooms/64room_000.map\t512\t512\t303\t74\t380\t247\t322.451\n80\tmaps/rooms/64room_000.map\t512\t512\t220\t290\t310\t26\t320.836\n80\tmaps/rooms/64room_000.map\t512\t512\t332\t511\t181\t349\t323.233\n80\tmaps/rooms/64room_000.map\t512\t512\t63\t308\t161\t66\t322.877\n80\tmaps/rooms/64room_000.map\t512\t512\t463\t86\t348\t318\t320.865\n80\tmaps/rooms/64room_000.map\t512\t512\t154\t262\t237\t30\t323.919\n80\tmaps/rooms/64room_000.map\t512\t512\t224\t65\t498\t125\t322.735\n80\tmaps/rooms/64room_000.map\t512\t512\t306\t172\t122\t65\t320.421\n81\tmaps/rooms/64room_000.map\t512\t512\t212\t163\t478\t178\t327.718\n81\tmaps/rooms/64room_000.map\t512\t512\t383\t433\t387\t184\t324.463\n81\tmaps/rooms/64room_000.map\t512\t512\t131\t352\t100\t120\t326.137\n81\tmaps/rooms/64room_000.map\t512\t512\t120\t263\t374\t99\t325.446\n81\tmaps/rooms/64room_000.map\t512\t512\t466\t188\t179\t242\t324.723\n81\tmaps/rooms/64room_000.map\t512\t512\t140\t43\t409\t110\t325.12\n81\tmaps/rooms/64room_000.map\t512\t512\t5\t33\t112\t261\t324.22\n81\tmaps/rooms/64room_000.map\t512\t512\t321\t194\t185\t421\t327.167\n81\tmaps/rooms/64room_000.map\t512\t512\t130\t138\t305\t303\t327.664\n81\tmaps/rooms/64room_000.map\t512\t512\t247\t282\t229\t2\t327.907\n82\tmaps/rooms/64room_000.map\t512\t512\t237\t295\t142\t25\t331.936\n82\tmaps/rooms/64room_000.map\t512\t512\t206\t300\t141\t37\t330.066\n82\tmaps/rooms/64room_000.map\t512\t512\t510\t298\t199\t298\t330.882\n82\tmaps/rooms/64room_000.map\t512\t512\t158\t49\t335\t255\t328.522\n82\tmaps/rooms/64room_000.map\t512\t512\t275\t161\t50\t73\t330.362\n82\tmaps/rooms/64room_000.map\t512\t512\t486\t280\t258\t434\t328.777\n82\tmaps/rooms/64room_000.map\t512\t512\t66\t332\t354\t254\t331.439\n82\tmaps/rooms/64room_000.map\t512\t512\t104\t104\t105\t387\t328.978\n82\tmaps/rooms/64room_000.map\t512\t512\t311\t301\t463\t452\t329.149\n82\tmaps/rooms/64room_000.map\t512\t512\t99\t241\t161\t486\t329.919\n83\tmaps/rooms/64room_000.map\t512\t512\t500\t197\t405\t342\t332.836\n83\tmaps/rooms/64room_000.map\t512\t512\t134\t499\t294\t267\t334.492\n83\tmaps/rooms/64room_000.map\t512\t512\t183\t378\t244\t85\t332.652\n83\tmaps/rooms/64room_000.map\t512\t512\t232\t287\t506\t210\t334.706\n83\tmaps/rooms/64room_000.map\t512\t512\t382\t303\t254\t325\t334.451\n83\tmaps/rooms/64room_000.map\t512\t512\t111\t139\t331\t174\t332.747\n83\tmaps/rooms/64room_000.map\t512\t512\t463\t458\t312\t302\t332.22\n83\tmaps/rooms/64room_000.map\t512\t512\t73\t201\t28\t457\t334.99\n83\tmaps/rooms/64room_000.map\t512\t512\t91\t2\t223\t181\t332.078\n83\tmaps/rooms/64room_000.map\t512\t512\t242\t359\t510\t435\t332.978\n84\tmaps/rooms/64room_000.map\t512\t512\t126\t288\t348\t348\t337.948\n84\tmaps/rooms/64room_000.map\t512\t512\t129\t268\t287\t30\t337.161\n84\tmaps/rooms/64room_000.map\t512\t512\t211\t151\t46\t379\t336.446\n84\tmaps/rooms/64room_000.map\t512\t512\t57\t215\t237\t418\t336.12\n84\tmaps/rooms/64room_000.map\t512\t512\t434\t207\t301\t125\t339.108\n84\tmaps/rooms/64room_000.map\t512\t512\t440\t171\t509\t282\t338.919\n84\tmaps/rooms/64room_000.map\t512\t512\t456\t331\t447\t148\t338.96\n84\tmaps/rooms/64room_000.map\t512\t512\t460\t336\t176\t231\t339.007\n84\tmaps/rooms/64room_000.map\t512\t512\t248\t19\t95\t252\t337.706\n84\tmaps/rooms/64room_000.map\t512\t512\t303\t222\t8\t266\t339.066\n85\tmaps/rooms/64room_000.map\t512\t512\t52\t56\t283\t70\t342.262\n85\tmaps/rooms/64room_000.map\t512\t512\t162\t200\t425\t371\t343.203\n85\tmaps/rooms/64room_000.map\t512\t512\t507\t253\t401\t351\t342.392\n85\tmaps/rooms/64room_000.map\t512\t512\t161\t338\t441\t465\t341.978\n85\tmaps/rooms/64room_000.map\t512\t512\t282\t285\t486\t472\t342.907\n85\tmaps/rooms/64room_000.map\t512\t512\t114\t11\t181\t26\t341.12\n85\tmaps/rooms/64room_000.map\t512\t512\t165\t221\t446\t351\t343.049\n85\tmaps/rooms/64room_000.map\t512\t512\t226\t88\t203\t321\t342.652\n85\tmaps/rooms/64room_000.map\t512\t512\t176\t119\t201\t381\t340.966\n85\tmaps/rooms/64room_000.map\t512\t512\t71\t227\t56\t510\t340.676\n86\tmaps/rooms/64room_000.map\t512\t512\t161\t204\t408\t117\t345.144\n86\tmaps/rooms/64room_000.map\t512\t512\t251\t415\t225\t141\t345.723\n86\tmaps/rooms/64room_000.map\t512\t512\t193\t134\t134\t398\t346.037\n86\tmaps/rooms/64room_000.map\t512\t512\t347\t507\t150\t443\t346.99\n86\tmaps/rooms/64room_000.map\t512\t512\t471\t328\t254\t432\t347.333\n86\tmaps/rooms/64room_000.map\t512\t512\t161\t36\t177\t278\t346.333\n86\tmaps/rooms/64room_000.map\t512\t512\t332\t243\t92\t125\t347.764\n86\tmaps/rooms/64room_000.map\t512\t512\t132\t275\t380\t416\t347.174\n86\tmaps/rooms/64room_000.map\t512\t512\t92\t508\t23\t227\t344.718\n86\tmaps/rooms/64room_000.map\t512\t512\t404\t304\t464\t83\t345.191\n87\tmaps/rooms/64room_000.map\t512\t512\t254\t487\t16\t343\t351.019\n87\tmaps/rooms/64room_000.map\t512\t512\t440\t293\t236\t401\t349.463\n87\tmaps/rooms/64room_000.map\t512\t512\t231\t47\t345\t274\t348.22\n87\tmaps/rooms/64room_000.map\t512\t512\t287\t269\t157\t511\t351.12\n87\tmaps/rooms/64room_000.map\t512\t512\t509\t300\t259\t139\t349.191\n87\tmaps/rooms/64room_000.map\t512\t512\t467\t319\t241\t146\t350.078\n87\tmaps/rooms/64room_000.map\t512\t512\t310\t237\t56\t382\t350.966\n87\tmaps/rooms/64room_000.map\t512\t512\t341\t191\t475\t438\t348.38\n87\tmaps/rooms/64room_000.map\t512\t512\t242\t34\t479\t208\t348.061\n87\tmaps/rooms/64room_000.map\t512\t512\t24\t299\t261\t132\t351.789\n88\tmaps/rooms/64room_000.map\t512\t512\t226\t99\t188\t419\t354.267\n88\tmaps/rooms/64room_000.map\t512\t512\t399\t231\t259\t440\t355.593\n88\tmaps/rooms/64room_000.map\t512\t512\t175\t56\t460\t127\t353.463\n88\tmaps/rooms/64room_000.map\t512\t512\t132\t503\t61\t244\t353.203\n88\tmaps/rooms/64room_000.map\t512\t512\t138\t93\t433\t106\t353.262\n88\tmaps/rooms/64room_000.map\t512\t512\t479\t234\t492\t309\t352.291\n88\tmaps/rooms/64room_000.map\t512\t512\t393\t193\t101\t223\t355.321\n88\tmaps/rooms/64room_000.map\t512\t512\t292\t241\t496\t467\t355.019\n88\tmaps/rooms/64room_000.map\t512\t512\t236\t150\t500\t69\t352.203\n88\tmaps/rooms/64room_000.map\t512\t512\t135\t428\t249\t132\t352.836\n89\tmaps/rooms/64room_000.map\t512\t512\t465\t40\t279\t176\t358.718\n89\tmaps/rooms/64room_000.map\t512\t512\t314\t190\t502\t386\t357.882\n89\tmaps/rooms/64room_000.map\t512\t512\t252\t296\t317\t12\t356.99\n89\tmaps/rooms/64room_000.map\t512\t512\t341\t312\t198\t27\t359.848\n89\tmaps/rooms/64room_000.map\t512\t512\t150\t282\t466\t306\t357.421\n89\tmaps/rooms/64room_000.map\t512\t512\t109\t389\t142\t96\t358.676\n89\tmaps/rooms/64room_000.map\t512\t512\t206\t363\t430\t202\t359.534\n89\tmaps/rooms/64room_000.map\t512\t512\t378\t335\t185\t86\t358.233\n89\tmaps/rooms/64room_000.map\t512\t512\t262\t83\t351\t346\t358.375\n89\tmaps/rooms/64room_000.map\t512\t512\t381\t115\t328\t427\t359.024\n90\tmaps/rooms/64room_000.map\t512\t512\t242\t499\t30\t380\t360.546\n90\tmaps/rooms/64room_000.map\t512\t512\t65\t250\t361\t185\t360.48\n90\tmaps/rooms/64room_000.map\t512\t512\t375\t242\t158\t56\t362.723\n90\tmaps/rooms/64room_000.map\t512\t512\t13\t77\t272\t21\t363.534\n90\tmaps/rooms/64room_000.map\t512\t512\t175\t86\t425\t206\t363.772\n90\tmaps/rooms/64room_000.map\t512\t512\t371\t355\t77\t313\t363.037\n90\tmaps/rooms/64room_000.map\t512\t512\t101\t45\t191\t271\t360.049\n90\tmaps/rooms/64room_000.map\t512\t512\t199\t328\t127\t102\t363.605\n90\tmaps/rooms/64room_000.map\t512\t512\t284\t397\t359\t172\t362.836\n90\tmaps/rooms/64room_000.map\t512\t512\t208\t111\t26\t353\t363.487\n91\tmaps/rooms/64room_000.map\t512\t512\t249\t294\t331\t18\t366.919\n91\tmaps/rooms/64room_000.map\t512\t512\t502\t61\t224\t183\t366.818\n91\tmaps/rooms/64room_000.map\t512\t512\t148\t486\t289\t220\t364.019\n91\tmaps/rooms/64room_000.map\t512\t512\t479\t149\t406\t381\t367.919\n91\tmaps/rooms/64room_000.map\t512\t512\t269\t98\t41\t129\t364.078\n91\tmaps/rooms/64room_000.map\t512\t512\t6\t510\t232\t362\t366.375\n91\tmaps/rooms/64room_000.map\t512\t512\t224\t2\t419\t240\t367.392\n91\tmaps/rooms/64room_000.map\t512\t512\t298\t177\t84\t27\t364.919\n91\tmaps/rooms/64room_000.map\t512\t512\t99\t98\t7\t392\t365.789\n91\tmaps/rooms/64room_000.map\t512\t512\t469\t181\t213\t41\t365.889\n92\tmaps/rooms/64room_000.map\t512\t512\t440\t279\t335\t47\t371.25\n92\tmaps/rooms/64room_000.map\t512\t512\t327\t60\t364\t368\t368.681\n92\tmaps/rooms/64room_000.map\t512\t512\t308\t48\t87\t19\t370.475\n92\tmaps/rooms/64room_000.map\t512\t512\t312\t446\t447\t157\t369.99\n92\tmaps/rooms/64room_000.map\t512\t512\t201\t200\t510\t139\t370.233\n92\tmaps/rooms/64room_000.map\t512\t512\t186\t477\t243\t197\t368.262\n92\tmaps/rooms/64room_000.map\t512\t512\t68\t110\t281\t269\t370.434\n92\tmaps/rooms/64room_000.map\t512\t512\t90\t291\t169\t17\t368.22\n92\tmaps/rooms/64room_000.map\t512\t512\t334\t263\t116\t103\t368.978\n92\tmaps/rooms/64room_000.map\t512\t512\t146\t304\t484\t306\t370.309\n93\tmaps/rooms/64room_000.map\t512\t512\t369\t407\t123\t272\t373.701\n93\tmaps/rooms/64room_000.map\t512\t512\t498\t148\t198\t312\t375.546\n93\tmaps/rooms/64room_000.map\t512\t512\t319\t194\t15\t109\t372.907\n93\tmaps/rooms/64room_000.map\t512\t512\t117\t307\t390\t313\t373.877\n93\tmaps/rooms/64room_000.map\t512\t512\t109\t227\t406\t255\t375.392\n93\tmaps/rooms/64room_000.map\t512\t512\t450\t486\t284\t279\t375.818\n93\tmaps/rooms/64room_000.map\t512\t512\t190\t100\t254\t362\t372.894\n93\tmaps/rooms/64room_000.map\t512\t512\t414\t257\t424\t55\t373.161\n93\tmaps/rooms/64room_000.map\t512\t512\t96\t68\t6\t373\t373.475\n93\tmaps/rooms/64room_000.map\t512\t512\t154\t188\t105\t397\t372.233\n94\tmaps/rooms/64room_000.map\t512\t512\t60\t323\t409\t288\t378.267\n94\tmaps/rooms/64room_000.map\t512\t512\t434\t361\t480\t139\t379.889\n94\tmaps/rooms/64room_000.map\t512\t512\t230\t296\t493\t445\t376.534\n94\tmaps/rooms/64room_000.map\t512\t512\t447\t50\t157\t208\t379.387\n94\tmaps/rooms/64room_000.map\t512\t512\t235\t329\t97\t111\t377.889\n94\tmaps/rooms/64room_000.map\t512\t512\t61\t66\t104\t361\t378.877\n94\tmaps/rooms/64room_000.map\t512\t512\t443\t190\t376\t476\t376.563\n94\tmaps/rooms/64room_000.map\t512\t512\t335\t358\t82\t281\t376.86\n94\tmaps/rooms/64room_000.map\t512\t512\t445\t414\t182\t284\t379.191\n94\tmaps/rooms/64room_000.map\t512\t512\t207\t212\t118\t7\t376.274\n95\tmaps/rooms/64room_000.map\t512\t512\t368\t8\t394\t322\t383.681\n95\tmaps/rooms/64room_000.map\t512\t512\t121\t38\t190\t268\t380.706\n95\tmaps/rooms/64room_000.map\t512\t512\t477\t136\t192\t318\t383.818\n95\tmaps/rooms/64room_000.map\t512\t512\t375\t347\t66\t289\t381.936\n95\tmaps/rooms/64room_000.map\t512\t512\t321\t359\t120\t306\t380.617\n95\tmaps/rooms/64room_000.map\t512\t512\t114\t159\t399\t122\t381.505\n95\tmaps/rooms/64room_000.map\t512\t512\t385\t125\t331\t444\t380.581\n95\tmaps/rooms/64room_000.map\t512\t512\t385\t425\t190\t462\t380.718\n95\tmaps/rooms/64room_000.map\t512\t512\t354\t370\t156\t126\t383.99\n95\tmaps/rooms/64room_000.map\t512\t512\t473\t476\t209\t428\t382.174\n96\tmaps/rooms/64room_000.map\t512\t512\t325\t432\t329\t73\t386.338\n96\tmaps/rooms/64room_000.map\t512\t512\t18\t506\t156\t218\t385.487\n96\tmaps/rooms/64room_000.map\t512\t512\t124\t188\t117\t459\t386.635\n96\tmaps/rooms/64room_000.map\t512\t512\t47\t412\t242\t196\t384.085\n96\tmaps/rooms/64room_000.map\t512\t512\t473\t12\t251\t36\t385.304\n96\tmaps/rooms/64room_000.map\t512\t512\t291\t404\t443\t207\t387.877\n96\tmaps/rooms/64room_000.map\t512\t512\t97\t333\t363\t144\t384.706\n96\tmaps/rooms/64room_000.map\t512\t512\t187\t373\t488\t393\t386.588\n96\tmaps/rooms/64room_000.map\t512\t512\t489\t472\t353\t203\t386.907\n96\tmaps/rooms/64room_000.map\t512\t512\t498\t285\t334\t65\t385.238\n97\tmaps/rooms/64room_000.map\t512\t512\t65\t139\t379\t106\t390.907\n97\tmaps/rooms/64room_000.map\t512\t512\t82\t92\t289\t318\t390.588\n97\tmaps/rooms/64room_000.map\t512\t512\t57\t477\t199\t194\t390.931\n97\tmaps/rooms/64room_000.map\t512\t512\t463\t495\t232\t354\t390.517\n97\tmaps/rooms/64room_000.map\t512\t512\t237\t372\t261\t89\t390.22\n97\tmaps/rooms/64room_000.map\t512\t512\t3\t53\t48\t305\t389.274\n97\tmaps/rooms/64room_000.map\t512\t512\t232\t74\t409\t345\t389.304\n97\tmaps/rooms/64room_000.map\t512\t512\t35\t393\t259\t213\t391.103\n97\tmaps/rooms/64room_000.map\t512\t512\t124\t309\t151\t24\t391.848\n97\tmaps/rooms/64room_000.map\t512\t512\t99\t461\t304\t248\t391.948\n98\tmaps/rooms/64room_000.map\t512\t512\t389\t19\t424\t257\t392.22\n98\tmaps/rooms/64room_000.map\t512\t512\t415\t242\t497\t409\t392.22\n98\tmaps/rooms/64room_000.map\t512\t512\t81\t205\t327\t432\t395.073\n98\tmaps/rooms/64room_000.map\t512\t512\t470\t59\t242\t121\t393.463\n98\tmaps/rooms/64room_000.map\t512\t512\t378\t359\t306\t39\t395.764\n98\tmaps/rooms/64room_000.map\t512\t512\t176\t50\t210\t332\t394.836\n98\tmaps/rooms/64room_000.map\t512\t512\t107\t151\t432\t116\t395.203\n98\tmaps/rooms/64room_000.map\t512\t512\t294\t41\t404\t262\t394.563\n98\tmaps/rooms/64room_000.map\t512\t512\t363\t367\t504\t89\t394.203\n98\tmaps/rooms/64room_000.map\t512\t512\t352\t188\t224\t416\t395.563\n99\tmaps/rooms/64room_000.map\t512\t512\t357\t26\t28\t89\t398.375\n99\tmaps/rooms/64room_000.map\t512\t512\t172\t411\t121\t93\t396.706\n99\tmaps/rooms/64room_000.map\t512\t512\t132\t282\t461\t252\t398.664\n99\tmaps/rooms/64room_000.map\t512\t512\t84\t449\t125\t122\t398.919\n99\tmaps/rooms/64room_000.map\t512\t512\t407\t352\t161\t118\t396.032\n99\tmaps/rooms/64room_000.map\t512\t512\t434\t417\t322\t101\t397.865\n99\tmaps/rooms/64room_000.map\t512\t512\t203\t475\t376\t238\t398.451\n99\tmaps/rooms/64room_000.map\t512\t512\t189\t271\t23\t29\t397.806\n99\tmaps/rooms/64room_000.map\t512\t512\t430\t221\t259\t405\t396.948\n99\tmaps/rooms/64room_000.map\t512\t512\t166\t355\t239\t22\t399.848\n100\tmaps/rooms/64room_000.map\t512\t512\t4\t161\t81\t339\t402.563\n100\tmaps/rooms/64room_000.map\t512\t512\t112\t389\t314\t130\t403.777\n100\tmaps/rooms/64room_000.map\t512\t512\t430\t276\t153\t434\t401.35\n100\tmaps/rooms/64room_000.map\t512\t512\t451\t375\t454\t151\t403.936\n100\tmaps/rooms/64room_000.map\t512\t512\t300\t432\t13\t443\t403.789\n100\tmaps/rooms/64room_000.map\t512\t512\t201\t73\t185\t438\t401.752\n100\tmaps/rooms/64room_000.map\t512\t512\t310\t245\t59\t454\t401.161\n100\tmaps/rooms/64room_000.map\t512\t512\t419\t335\t326\t33\t403.451\n100\tmaps/rooms/64room_000.map\t512\t512\t127\t316\t418\t273\t402.191\n100\tmaps/rooms/64room_000.map\t512\t512\t207\t351\t501\t273\t402.309\n101\tmaps/rooms/64room_000.map\t512\t512\t41\t191\t132\t281\t405.635\n101\tmaps/rooms/64room_000.map\t512\t512\t133\t170\t400\t150\t404.286\n101\tmaps/rooms/64room_000.map\t512\t512\t98\t154\t19\t484\t406.931\n101\tmaps/rooms/64room_000.map\t512\t512\t225\t152\t20\t424\t404.671\n101\tmaps/rooms/64room_000.map\t512\t512\t333\t158\t205\t411\t407.877\n101\tmaps/rooms/64room_000.map\t512\t512\t509\t350\t199\t162\t406.032\n101\tmaps/rooms/64room_000.map\t512\t512\t99\t218\t417\t362\t406.316\n101\tmaps/rooms/64room_000.map\t512\t512\t25\t171\t298\t51\t405.818\n101\tmaps/rooms/64room_000.map\t512\t512\t355\t402\t41\t291\t404.73\n101\tmaps/rooms/64room_000.map\t512\t512\t193\t86\t346\t413\t405.161\n102\tmaps/rooms/64room_000.map\t512\t512\t65\t14\t279\t223\t410.747\n102\tmaps/rooms/64room_000.map\t512\t512\t404\t331\t304\t33\t411.723\n102\tmaps/rooms/64room_000.map\t512\t512\t58\t177\t179\t9\t411.291\n102\tmaps/rooms/64room_000.map\t512\t512\t202\t124\t394\t432\t409.789\n102\tmaps/rooms/64room_000.map\t512\t512\t308\t63\t15\t3\t408.446\n102\tmaps/rooms/64room_000.map\t512\t512\t238\t252\t29\t52\t409.132\n102\tmaps/rooms/64room_000.map\t512\t512\t141\t95\t90\t437\t411.233\n102\tmaps/rooms/64room_000.map\t512\t512\t97\t326\t437\t407\t409.517\n102\tmaps/rooms/64room_000.map\t512\t512\t389\t223\t194\t389\t410.078\n102\tmaps/rooms/64room_000.map\t512\t512\t421\t327\t71\t258\t411.676\n103\tmaps/rooms/64room_000.map\t512\t512\t246\t350\t171\t176\t414.345\n103\tmaps/rooms/64room_000.map\t512\t512\t440\t262\t137\t410\t412.664\n103\tmaps/rooms/64room_000.map\t512\t512\t185\t11\t142\t363\t412.706\n103\tmaps/rooms/64room_000.map\t512\t512\t500\t503\t326\t203\t415.421\n103\tmaps/rooms/64room_000.map\t512\t512\t27\t13\t57\t347\t415.789\n103\tmaps/rooms/64room_000.map\t512\t512\t395\t356\t141\t486\t415.789\n103\tmaps/rooms/64room_000.map\t512\t512\t450\t185\t312\t390\t413.392\n103\tmaps/rooms/64room_000.map\t512\t512\t229\t123\t149\t470\t412.706\n103\tmaps/rooms/64room_000.map\t512\t512\t150\t165\t40\t426\t413.985\n103\tmaps/rooms/64room_000.map\t512\t512\t457\t219\t83\t251\t415.279\n104\tmaps/rooms/64room_000.map\t512\t512\t430\t125\t180\t182\t417.316\n104\tmaps/rooms/64room_000.map\t512\t512\t490\t421\t198\t206\t419.132\n104\tmaps/rooms/64room_000.map\t512\t512\t151\t304\t54\t142\t416.321\n104\tmaps/rooms/64room_000.map\t512\t512\t444\t127\t189\t147\t416.103\n104\tmaps/rooms/64room_000.map\t512\t512\t72\t80\t378\t111\t416.286\n104\tmaps/rooms/64room_000.map\t512\t512\t223\t257\t506\t439\t416.061\n104\tmaps/rooms/64room_000.map\t512\t512\t114\t353\t126\t48\t417.032\n104\tmaps/rooms/64room_000.map\t512\t512\t101\t323\t10\t167\t418.563\n104\tmaps/rooms/64room_000.map\t512\t512\t34\t14\t324\t38\t418.274\n104\tmaps/rooms/64room_000.map\t512\t512\t174\t82\t131\t398\t417.108\n105\tmaps/rooms/64room_000.map\t512\t512\t63\t100\t381\t111\t422.019\n105\tmaps/rooms/64room_000.map\t512\t512\t177\t18\t349\t356\t422.718\n105\tmaps/rooms/64room_000.map\t512\t512\t206\t325\t451\t202\t421.362\n105\tmaps/rooms/64room_000.map\t512\t512\t397\t313\t224\t486\t420.6\n105\tmaps/rooms/64room_000.map\t512\t512\t54\t108\t235\t382\t421.96\n105\tmaps/rooms/64room_000.map\t512\t512\t185\t97\t436\t372\t420.558\n105\tmaps/rooms/64room_000.map\t512\t512\t198\t449\t505\t498\t421.73\n105\tmaps/rooms/64room_000.map\t512\t512\t6\t335\t118\t48\t422.304\n105\tmaps/rooms/64room_000.map\t512\t512\t101\t432\t316\t156\t422.463\n105\tmaps/rooms/64room_000.map\t512\t512\t118\t330\t92\t2\t421.161\n106\tmaps/rooms/64room_000.map\t512\t512\t16\t110\t275\t304\t426.404\n106\tmaps/rooms/64room_000.map\t512\t512\t18\t213\t364\t143\t426.558\n106\tmaps/rooms/64room_000.map\t512\t512\t15\t144\t179\t335\t424.647\n106\tmaps/rooms/64room_000.map\t512\t512\t50\t187\t246\t210\t424.889\n106\tmaps/rooms/64room_000.map\t512\t512\t191\t205\t366\t504\t427.948\n106\tmaps/rooms/64room_000.map\t512\t512\t126\t100\t394\t153\t427.257\n106\tmaps/rooms/64room_000.map\t512\t512\t397\t289\t145\t58\t424.99\n106\tmaps/rooms/64room_000.map\t512\t512\t470\t335\t353\t37\t427.25\n106\tmaps/rooms/64room_000.map\t512\t512\t350\t503\t97\t360\t424.801\n106\tmaps/rooms/64room_000.map\t512\t512\t162\t183\t250\t373\t425.245\n107\tmaps/rooms/64room_000.map\t512\t512\t362\t33\t120\t304\t429.375\n107\tmaps/rooms/64room_000.map\t512\t512\t62\t325\t151\t18\t430.96\n107\tmaps/rooms/64room_000.map\t512\t512\t507\t354\t409\t106\t431.019\n107\tmaps/rooms/64room_000.map\t512\t512\t335\t416\t468\t82\t431.735\n107\tmaps/rooms/64room_000.map\t512\t512\t380\t316\t249\t8\t428.12\n107\tmaps/rooms/64room_000.map\t512\t512\t138\t132\t294\t390\t429.688\n107\tmaps/rooms/64room_000.map\t512\t512\t366\t34\t60\t49\t431.032\n107\tmaps/rooms/64room_000.map\t512\t512\t413\t86\t170\t358\t429.475\n107\tmaps/rooms/64room_000.map\t512\t512\t138\t61\t41\t276\t428.777\n107\tmaps/rooms/64room_000.map\t512\t512\t382\t429\t124\t223\t431.872\n108\tmaps/rooms/64room_000.map\t512\t512\t393\t372\t141\t101\t433.96\n108\tmaps/rooms/64room_000.map\t512\t512\t129\t1\t193\t356\t433.09\n108\tmaps/rooms/64room_000.map\t512\t512\t68\t305\t374\t502\t434.505\n108\tmaps/rooms/64room_000.map\t512\t512\t321\t383\t50\t360\t434.149\n108\tmaps/rooms/64room_000.map\t512\t512\t68\t398\t391\t225\t434.09\n108\tmaps/rooms/64room_000.map\t512\t512\t395\t72\t83\t60\t434.174\n108\tmaps/rooms/64room_000.map\t512\t512\t420\t140\t278\t392\t434.617\n108\tmaps/rooms/64room_000.map\t512\t512\t219\t466\t453\t290\t434.156\n108\tmaps/rooms/64room_000.map\t512\t512\t374\t337\t118\t114\t435.073\n108\tmaps/rooms/64room_000.map\t512\t512\t147\t251\t482\t65\t432.328\n109\tmaps/rooms/64room_000.map\t512\t512\t97\t321\t140\t60\t438.049\n109\tmaps/rooms/64room_000.map\t512\t512\t247\t262\t34\t151\t438.818\n109\tmaps/rooms/64room_000.map\t512\t512\t172\t101\t56\t443\t438.357\n109\tmaps/rooms/64room_000.map\t512\t512\t334\t94\t81\t353\t436.014\n109\tmaps/rooms/64room_000.map\t512\t512\t123\t213\t498\t253\t436.806\n109\tmaps/rooms/64room_000.map\t512\t512\t139\t287\t451\t131\t439.421\n109\tmaps/rooms/64room_000.map\t512\t512\t419\t349\t150\t137\t438.002\n109\tmaps/rooms/64room_000.map\t512\t512\t505\t397\t264\t136\t439.321\n109\tmaps/rooms/64room_000.map\t512\t512\t382\t423\t327\t46\t436.936\n109\tmaps/rooms/64room_000.map\t512\t512\t440\t16\t406\t349\t437.534\n110\tmaps/rooms/64room_000.map\t512\t512\t202\t442\t402\t156\t442.576\n110\tmaps/rooms/64room_000.map\t512\t512\t232\t479\t116\t130\t443.475\n110\tmaps/rooms/64room_000.map\t512\t512\t53\t329\t258\t45\t441.742\n110\tmaps/rooms/64room_000.map\t512\t512\t369\t335\t164\t191\t442.002\n110\tmaps/rooms/64room_000.map\t512\t512\t473\t110\t130\t180\t443.818\n110\tmaps/rooms/64room_000.map\t512\t512\t58\t93\t3\t428\t442.617\n110\tmaps/rooms/64room_000.map\t512\t512\t126\t134\t311\t406\t442.002\n110\tmaps/rooms/64room_000.map\t512\t512\t483\t302\t165\t426\t440.551\n110\tmaps/rooms/64room_000.map\t512\t512\t262\t219\t468\t509\t440.558\n110\tmaps/rooms/64room_000.map\t512\t512\t138\t316\t496\t140\t442.517\n111\tmaps/rooms/64room_000.map\t512\t512\t477\t13\t397\t284\t444.571\n111\tmaps/rooms/64room_000.map\t512\t512\t437\t218\t71\t382\t445.304\n111\tmaps/rooms/64room_000.map\t512\t512\t350\t103\t21\t95\t444.002\n111\tmaps/rooms/64room_000.map\t512\t512\t155\t370\t454\t135\t447.304\n111\tmaps/rooms/64room_000.map\t512\t512\t281\t83\t379\t387\t446.375\n111\tmaps/rooms/64room_000.map\t512\t512\t97\t382\t19\t48\t444.174\n111\tmaps/rooms/64room_000.map\t512\t512\t437\t351\t163\t461\t444.558\n111\tmaps/rooms/64room_000.map\t512\t512\t499\t490\t250\t202\t446.789\n111\tmaps/rooms/64room_000.map\t512\t512\t357\t343\t464\t45\t446.931\n111\tmaps/rooms/64room_000.map\t512\t512\t103\t47\t328\t168\t445.772\n112\tmaps/rooms/64room_000.map\t512\t512\t375\t327\t8\t206\t448.902\n112\tmaps/rooms/64room_000.map\t512\t512\t472\t263\t72\t360\t451.978\n112\tmaps/rooms/64room_000.map\t512\t512\t122\t87\t70\t478\t451.475\n112\tmaps/rooms/64room_000.map\t512\t512\t209\t321\t492\t209\t451.233\n112\tmaps/rooms/64room_000.map\t512\t512\t424\t300\t507\t19\t449.831\n112\tmaps/rooms/64room_000.map\t512\t512\t103\t345\t146\t37\t450.806\n112\tmaps/rooms/64room_000.map\t512\t512\t452\t224\t152\t432\t449.747\n112\tmaps/rooms/64room_000.map\t512\t512\t249\t110\t439\t394\t451.647\n112\tmaps/rooms/64room_000.map\t512\t512\t54\t372\t388\t367\t449.451\n112\tmaps/rooms/64room_000.map\t512\t512\t72\t405\t415\t353\t449.333\n113\tmaps/rooms/64room_000.map\t512\t512\t250\t366\t80\t59\t453.274\n113\tmaps/rooms/64room_000.map\t512\t512\t397\t13\t46\t94\t452.576\n113\tmaps/rooms/64room_000.map\t512\t512\t152\t393\t252\t62\t454.966\n113\tmaps/rooms/64room_000.map\t512\t512\t457\t134\t405\t464\t454.291\n113\tmaps/rooms/64room_000.map\t512\t512\t339\t152\t81\t420\t453.161\n113\tmaps/rooms/64room_000.map\t512\t512\t463\t409\t175\t460\t453.073\n113\tmaps/rooms/64room_000.map\t512\t512\t198\t459\t104\t86\t454.12\n113\tmaps/rooms/64room_000.map\t512\t512\t137\t150\t43\t498\t454.215\n113\tmaps/rooms/64room_000.map\t512\t512\t388\t426\t408\t38\t453.078\n113\tmaps/rooms/64room_000.map\t512\t512\t258\t32\t331\t371\t453.522\n114\tmaps/rooms/64room_000.map\t512\t512\t98\t441\t401\t219\t457.534\n114\tmaps/rooms/64room_000.map\t512\t512\t113\t451\t168\t127\t456.203\n114\tmaps/rooms/64room_000.map\t512\t512\t186\t146\t209\t443\t456.475\n114\tmaps/rooms/64room_000.map\t512\t512\t190\t13\t440\t293\t458.676\n114\tmaps/rooms/64room_000.map\t512\t512\t201\t151\t460\t33\t456.671\n114\tmaps/rooms/64room_000.map\t512\t512\t125\t427\t248\t84\t458.534\n114\tmaps/rooms/64room_000.map\t512\t512\t219\t442\t113\t78\t456.534\n114\tmaps/rooms/64room_000.map\t512\t512\t480\t424\t404\t124\t458.936\n114\tmaps/rooms/64room_000.map\t512\t512\t137\t455\t155\t89\t458.818\n114\tmaps/rooms/64room_000.map\t512\t512\t330\t424\t203\t56\t457.274\n115\tmaps/rooms/64room_000.map\t512\t512\t440\t299\t158\t29\t461.203\n115\tmaps/rooms/64room_000.map\t512\t512\t61\t490\t367\t304\t460.635\n115\tmaps/rooms/64room_000.map\t512\t512\t364\t376\t179\t5\t461.103\n115\tmaps/rooms/64room_000.map\t512\t512\t428\t206\t459\t479\t462.517\n115\tmaps/rooms/64room_000.map\t512\t512\t184\t65\t12\t422\t461.156\n115\tmaps/rooms/64room_000.map\t512\t512\t300\t73\t339\t408\t462.517\n115\tmaps/rooms/64room_000.map\t512\t512\t481\t279\t94\t301\t461.375\n115\tmaps/rooms/64room_000.map\t512\t512\t218\t447\t404\t153\t460.96\n115\tmaps/rooms/64room_000.map\t512\t512\t189\t45\t222\t418\t462.108\n115\tmaps/rooms/64room_000.map\t512\t512\t342\t398\t187\t19\t462.475\n116\tmaps/rooms/64room_000.map\t512\t512\t153\t378\t362\t39\t465.546\n116\tmaps/rooms/64room_000.map\t512\t512\t228\t105\t383\t488\t467.789\n116\tmaps/rooms/64room_000.map\t512\t512\t446\t382\t347\t2\t466.948\n116\tmaps/rooms/64room_000.map\t512\t512\t220\t432\t430\t161\t467.718\n116\tmaps/rooms/64room_000.map\t512\t512\t381\t73\t36\t18\t467.831\n116\tmaps/rooms/64room_000.map\t512\t512\t405\t326\t318\t127\t467.328\n116\tmaps/rooms/64room_000.map\t512\t512\t410\t356\t9\t360\t467.09\n116\tmaps/rooms/64room_000.map\t512\t512\t460\t508\t315\t177\t465.161\n116\tmaps/rooms/64room_000.map\t512\t512\t201\t487\t423\t214\t466.563\n116\tmaps/rooms/64room_000.map\t512\t512\t378\t143\t38\t265\t464.784\n117\tmaps/rooms/64room_000.map\t512\t512\t108\t197\t445\t411\t469.132\n117\tmaps/rooms/64room_000.map\t512\t512\t490\t221\t106\t180\t471.836\n117\tmaps/rooms/64room_000.map\t512\t512\t340\t173\t69\t451\t470.647\n117\tmaps/rooms/64room_000.map\t512\t512\t493\t172\t172\t11\t470.458\n117\tmaps/rooms/64room_000.map\t512\t512\t67\t351\t258\t14\t469.203\n117\tmaps/rooms/64room_000.map\t512\t512\t235\t396\t451\t196\t469.345\n117\tmaps/rooms/64room_000.map\t512\t512\t321\t349\t42\t425\t468.345\n117\tmaps/rooms/64room_000.map\t512\t512\t499\t43\t164\t245\t468.813\n117\tmaps/rooms/64room_000.map\t512\t512\t443\t333\t220\t39\t469.416\n117\tmaps/rooms/64room_000.map\t512\t512\t338\t438\t198\t51\t469.718\n118\tmaps/rooms/64room_000.map\t512\t512\t203\t462\t163\t183\t472.345\n118\tmaps/rooms/64room_000.map\t512\t512\t232\t274\t480\t60\t473.872\n118\tmaps/rooms/64room_000.map\t512\t512\t466\t218\t113\t141\t472.926\n118\tmaps/rooms/64room_000.map\t512\t512\t73\t407\t341\t485\t473.914\n118\tmaps/rooms/64room_000.map\t512\t512\t14\t261\t427\t269\t474.706\n118\tmaps/rooms/64room_000.map\t512\t512\t377\t43\t28\t3\t472.73\n118\tmaps/rooms/64room_000.map\t512\t512\t25\t385\t352\t359\t473.191\n118\tmaps/rooms/64room_000.map\t512\t512\t120\t207\t489\t115\t472.328\n118\tmaps/rooms/64room_000.map\t512\t512\t235\t490\t410\t230\t474.789\n118\tmaps/rooms/64room_000.map\t512\t512\t330\t173\t54\t447\t475.831\n119\tmaps/rooms/64room_000.map\t512\t512\t463\t311\t30\t346\t478.451\n119\tmaps/rooms/64room_000.map\t512\t512\t364\t232\t95\t35\t479.931\n119\tmaps/rooms/64room_000.map\t512\t512\t215\t460\t286\t87\t476.877\n119\tmaps/rooms/64room_000.map\t512\t512\t207\t17\t435\t323\t477.688\n119\tmaps/rooms/64room_000.map\t512\t512\t54\t246\t477\t251\t476.291\n119\tmaps/rooms/64room_000.map\t512\t512\t67\t367\t470\t228\t477.304\n119\tmaps/rooms/64room_000.map\t512\t512\t300\t427\t381\t30\t478.492\n119\tmaps/rooms/64room_000.map\t512\t512\t394\t451\t101\t442\t476.517\n119\tmaps/rooms/64room_000.map\t512\t512\t88\t371\t477\t372\t478.576\n119\tmaps/rooms/64room_000.map\t512\t512\t269\t412\t94\t67\t476.416\n120\tmaps/rooms/64room_000.map\t512\t512\t381\t333\t102\t76\t480.073\n120\tmaps/rooms/64room_000.map\t512\t512\t60\t489\t68\t88\t483.801\n120\tmaps/rooms/64room_000.map\t512\t512\t39\t103\t407\t145\t483.688\n120\tmaps/rooms/64room_000.map\t512\t512\t255\t379\t259\t24\t483.617\n120\tmaps/rooms/64room_000.map\t512\t512\t282\t49\t341\t433\t480.338\n120\tmaps/rooms/64room_000.map\t512\t512\t469\t16\t160\t123\t481.044\n120\tmaps/rooms/64room_000.map\t512\t512\t18\t385\t396\t339\t481.404\n120\tmaps/rooms/64room_000.map\t512\t512\t308\t28\t61\t263\t481.487\n120\tmaps/rooms/64room_000.map\t512\t512\t208\t112\t427\t465\t481.789\n120\tmaps/rooms/64room_000.map\t512\t512\t312\t211\t38\t511\t482.032\n121\tmaps/rooms/64room_000.map\t512\t512\t363\t234\t110\t42\t486.688\n121\tmaps/rooms/64room_000.map\t512\t512\t25\t511\t330\t389\t487.357\n121\tmaps/rooms/64room_000.map\t512\t512\t201\t471\t321\t117\t486.777\n121\tmaps/rooms/64room_000.map\t512\t512\t184\t96\t352\t463\t487.073\n121\tmaps/rooms/64room_000.map\t512\t512\t485\t486\t408\t152\t484.203\n121\tmaps/rooms/64room_000.map\t512\t512\t114\t449\t440\t477\t487.061\n121\tmaps/rooms/64room_000.map\t512\t512\t114\t93\t425\t319\t487.416\n121\tmaps/rooms/64room_000.map\t512\t512\t419\t87\t411\t491\t486.09\n121\tmaps/rooms/64room_000.map\t512\t512\t200\t390\t405\t134\t486.99\n121\tmaps/rooms/64room_000.map\t512\t512\t458\t297\t86\t432\t484.179\n122\tmaps/rooms/64room_000.map\t512\t512\t115\t40\t383\t155\t491.541\n122\tmaps/rooms/64room_000.map\t512\t512\t504\t149\t239\t363\t489.659\n122\tmaps/rooms/64room_000.map\t512\t512\t456\t113\t358\t460\t489.191\n122\tmaps/rooms/64room_000.map\t512\t512\t383\t166\t459\t505\t490.546\n122\tmaps/rooms/64room_000.map\t512\t512\t440\t406\t63\t371\t490.759\n122\tmaps/rooms/64room_000.map\t512\t512\t262\t159\t490\t495\t489.161\n122\tmaps/rooms/64room_000.map\t512\t512\t435\t464\t122\t415\t488.416\n122\tmaps/rooms/64room_000.map\t512\t512\t234\t430\t396\t131\t488.605\n122\tmaps/rooms/64room_000.map\t512\t512\t474\t33\t132\t60\t491.659\n122\tmaps/rooms/64room_000.map\t512\t512\t33\t288\t367\t53\t490.754\n123\tmaps/rooms/64room_000.map\t512\t512\t313\t402\t280\t82\t492.404\n123\tmaps/rooms/64room_000.map\t512\t512\t127\t27\t232\t346\t494.701\n123\tmaps/rooms/64room_000.map\t512\t512\t267\t394\t511\t169\t493.902\n123\tmaps/rooms/64room_000.map\t512\t512\t75\t469\t399\t218\t492.647\n123\tmaps/rooms/64room_000.map\t512\t512\t469\t273\t15\t301\t492.794\n123\tmaps/rooms/64room_000.map\t512\t512\t331\t273\t37\t29\t495.931\n123\tmaps/rooms/64room_000.map\t512\t512\t42\t310\t455\t249\t492.049\n123\tmaps/rooms/64room_000.map\t512\t512\t353\t439\t305\t74\t495.617\n123\tmaps/rooms/64room_000.map\t512\t512\t388\t71\t13\t329\t495.926\n123\tmaps/rooms/64room_000.map\t512\t512\t484\t293\t176\t30\t493.96\n124\tmaps/rooms/64room_000.map\t512\t512\t35\t328\t452\t441\t497.831\n124\tmaps/rooms/64room_000.map\t512\t512\t343\t84\t251\t429\t496.99\n124\tmaps/rooms/64room_000.map\t512\t512\t341\t335\t17\t494\t497.416\n124\tmaps/rooms/64room_000.map\t512\t512\t489\t78\t103\t226\t499.612\n124\tmaps/rooms/64room_000.map\t512\t512\t66\t331\t412\t55\t497.813\n124\tmaps/rooms/64room_000.map\t512\t512\t92\t388\t408\t116\t498.96\n124\tmaps/rooms/64room_000.map\t512\t512\t449\t397\t84\t192\t498.434\n124\tmaps/rooms/64room_000.map\t512\t512\t510\t139\t97\t294\t496.073\n124\tmaps/rooms/64room_000.map\t512\t512\t175\t184\t294\t420\t496.269\n124\tmaps/rooms/64room_000.map\t512\t512\t474\t145\t444\t484\t496.789\n125\tmaps/rooms/64room_000.map\t512\t512\t458\t103\t235\t345\t501.174\n125\tmaps/rooms/64room_000.map\t512\t512\t341\t70\t45\t146\t503.304\n125\tmaps/rooms/64room_000.map\t512\t512\t33\t229\t339\t450\t502.144\n125\tmaps/rooms/64room_000.map\t512\t512\t321\t69\t496\t436\t500.149\n125\tmaps/rooms/64room_000.map\t512\t512\t165\t403\t25\t57\t503.63\n125\tmaps/rooms/64room_000.map\t512\t512\t78\t501\t406\t278\t503.877\n125\tmaps/rooms/64room_000.map\t512\t512\t14\t89\t356\t318\t503.357\n125\tmaps/rooms/64room_000.map\t512\t512\t82\t400\t487\t328\t502.22\n125\tmaps/rooms/64room_000.map\t512\t512\t454\t207\t491\t490\t500.576\n125\tmaps/rooms/64room_000.map\t512\t512\t117\t126\t348\t447\t502.6\n126\tmaps/rooms/64room_000.map\t512\t512\t247\t321\t355\t38\t507.416\n126\tmaps/rooms/64room_000.map\t512\t512\t425\t89\t142\t413\t507.073\n126\tmaps/rooms/64room_000.map\t512\t512\t134\t488\t185\t52\t504.605\n126\tmaps/rooms/64room_000.map\t512\t512\t59\t298\t452\t406\t504.002\n126\tmaps/rooms/64room_000.map\t512\t512\t355\t28\t175\t415\t506.647\n126\tmaps/rooms/64room_000.map\t512\t512\t14\t50\t403\t106\t505.843\n126\tmaps/rooms/64room_000.map\t512\t512\t433\t250\t247\t468\t506.032\n126\tmaps/rooms/64room_000.map\t512\t512\t182\t119\t409\t497\t506.044\n126\tmaps/rooms/64room_000.map\t512\t512\t172\t468\t354\t124\t504.659\n126\tmaps/rooms/64room_000.map\t512\t512\t204\t3\t365\t423\t507.274\n127\tmaps/rooms/64room_000.map\t512\t512\t453\t157\t226\t416\t511.044\n127\tmaps/rooms/64room_000.map\t512\t512\t106\t404\t143\t39\t510.617\n127\tmaps/rooms/64room_000.map\t512\t512\t195\t396\t476\t165\t509.546\n127\tmaps/rooms/64room_000.map\t512\t512\t97\t87\t13\t505\t509.428\n127\tmaps/rooms/64room_000.map\t512\t512\t96\t462\t403\t198\t509.659\n127\tmaps/rooms/64room_000.map\t512\t512\t28\t95\t385\t194\t510.132\n127\tmaps/rooms/64room_000.map\t512\t512\t482\t363\t121\t407\t509.233\n127\tmaps/rooms/64room_000.map\t512\t512\t315\t125\t463\t271\t509.328\n127\tmaps/rooms/64room_000.map\t512\t512\t356\t94\t81\t419\t509.203\n127\tmaps/rooms/64room_000.map\t512\t512\t76\t507\t421\t340\t510.801\n128\tmaps/rooms/64room_000.map\t512\t512\t409\t328\t32\t471\t514.617\n128\tmaps/rooms/64room_000.map\t512\t512\t188\t508\t398\t241\t513.399\n128\tmaps/rooms/64room_000.map\t512\t512\t431\t46\t104\t11\t515.973\n128\tmaps/rooms/64room_000.map\t512\t512\t132\t433\t259\t19\t513.659\n128\tmaps/rooms/64room_000.map\t512\t512\t56\t494\t397\t269\t513.362\n128\tmaps/rooms/64room_000.map\t512\t512\t307\t425\t441\t32\t513.919\n128\tmaps/rooms/64room_000.map\t512\t512\t156\t172\t221\t511\t514.902\n128\tmaps/rooms/64room_000.map\t512\t512\t174\t428\t49\t14\t515.416\n128\tmaps/rooms/64room_000.map\t512\t512\t423\t24\t455\t390\t515.421\n128\tmaps/rooms/64room_000.map\t512\t512\t174\t183\t380\t405\t515.63\n129\tmaps/rooms/64room_000.map\t512\t512\t413\t379\t85\t124\t517.115\n129\tmaps/rooms/64room_000.map\t512\t512\t502\t80\t428\t441\t518.428\n129\tmaps/rooms/64room_000.map\t512\t512\t475\t109\t65\t299\t519.269\n129\tmaps/rooms/64room_000.map\t512\t512\t413\t478\t185\t84\t518.902\n129\tmaps/rooms/64room_000.map\t512\t512\t439\t428\t151\t73\t517.642\n129\tmaps/rooms/64room_000.map\t512\t512\t35\t411\t400\t471\t518.227\n129\tmaps/rooms/64room_000.map\t512\t512\t426\t466\t200\t77\t519.517\n129\tmaps/rooms/64room_000.map\t512\t512\t297\t11\t6\t352\t519.269\n129\tmaps/rooms/64room_000.map\t512\t512\t56\t385\t328\t181\t516.174\n129\tmaps/rooms/64room_000.map\t512\t512\t459\t202\t53\t372\t518.333\n130\tmaps/rooms/64room_000.map\t512\t512\t425\t183\t53\t444\t521.701\n130\tmaps/rooms/64room_000.map\t512\t512\t71\t99\t452\t211\t520.612\n130\tmaps/rooms/64room_000.map\t512\t512\t414\t82\t6\t165\t520.304\n130\tmaps/rooms/64room_000.map\t512\t512\t50\t204\t435\t127\t522.098\n130\tmaps/rooms/64room_000.map\t512\t512\t51\t277\t462\t254\t521.605\n130\tmaps/rooms/64room_000.map\t512\t512\t145\t479\t511\t496\t522.186\n130\tmaps/rooms/64room_000.map\t512\t512\t333\t471\t487\t118\t523.6\n130\tmaps/rooms/64room_000.map\t512\t512\t156\t166\t509\t237\t520.926\n130\tmaps/rooms/64room_000.map\t512\t512\t494\t342\t29\t354\t521.635\n130\tmaps/rooms/64room_000.map\t512\t512\t479\t366\t104\t426\t521.777\n131\tmaps/rooms/64room_000.map\t512\t512\t500\t341\t275\t112\t525.63\n131\tmaps/rooms/64room_000.map\t512\t512\t96\t410\t227\t4\t525.558\n131\tmaps/rooms/64room_000.map\t512\t512\t484\t79\t465\t399\t526.362\n131\tmaps/rooms/64room_000.map\t512\t512\t403\t111\t14\t35\t525.843\n131\tmaps/rooms/64room_000.map\t512\t512\t343\t2\t101\t357\t527.032\n131\tmaps/rooms/64room_000.map\t512\t512\t436\t416\t413\t2\t526.806\n131\tmaps/rooms/64room_000.map\t512\t512\t487\t390\t402\t34\t527.551\n131\tmaps/rooms/64room_000.map\t512\t512\t460\t407\t144\t107\t526.96\n131\tmaps/rooms/64room_000.map\t512\t512\t339\t338\t80\t29\t526.156\n131\tmaps/rooms/64room_000.map\t512\t512\t226\t493\t257\t127\t527.191\n132\tmaps/rooms/64room_000.map\t512\t512\t356\t342\t81\t29\t529.328\n132\tmaps/rooms/64room_000.map\t512\t512\t28\t496\t367\t497\t529.529\n132\tmaps/rooms/64room_000.map\t512\t512\t471\t200\t159\t450\t531.487\n132\tmaps/rooms/64room_000.map\t512\t512\t115\t369\t488\t480\t529.772\n132\tmaps/rooms/64room_000.map\t512\t512\t389\t13\t107\t345\t529.647\n132\tmaps/rooms/64room_000.map\t512\t512\t485\t95\t230\t328\t529.387\n132\tmaps/rooms/64room_000.map\t512\t512\t465\t205\t11\t304\t529.676\n132\tmaps/rooms/64room_000.map\t512\t512\t431\t115\t475\t453\t530.919\n132\tmaps/rooms/64room_000.map\t512\t512\t356\t299\t7\t46\t530.257\n132\tmaps/rooms/64room_000.map\t512\t512\t319\t77\t414\t419\t530.044\n133\tmaps/rooms/64room_000.map\t512\t512\t474\t507\t330\t102\t532.848\n133\tmaps/rooms/64room_000.map\t512\t512\t135\t420\t354\t27\t535.831\n133\tmaps/rooms/64room_000.map\t512\t512\t164\t446\t39\t36\t533.759\n133\tmaps/rooms/64room_000.map\t512\t512\t139\t24\t393\t417\t532.186\n133\tmaps/rooms/64room_000.map\t512\t512\t21\t104\t9\t454\t534.316\n133\tmaps/rooms/64room_000.map\t512\t512\t145\t34\t325\t446\t535.73\n133\tmaps/rooms/64room_000.map\t512\t512\t492\t446\t126\t218\t534.801\n133\tmaps/rooms/64room_000.map\t512\t512\t478\t342\t486\t41\t532.227\n133\tmaps/rooms/64room_000.map\t512\t512\t355\t372\t29\t102\t534.801\n133\tmaps/rooms/64room_000.map\t512\t512\t86\t474\t110\t39\t532.085\n134\tmaps/rooms/64room_000.map\t512\t512\t114\t151\t492\t7\t539.872\n134\tmaps/rooms/64room_000.map\t512\t512\t243\t132\t463\t486\t537.227\n134\tmaps/rooms/64room_000.map\t512\t512\t476\t52\t489\t321\t539.973\n134\tmaps/rooms/64room_000.map\t512\t512\t107\t492\t425\t175\t538.772\n134\tmaps/rooms/64room_000.map\t512\t512\t70\t382\t330\t8\t538.843\n134\tmaps/rooms/64room_000.map\t512\t512\t393\t255\t89\t501\t536.617\n134\tmaps/rooms/64room_000.map\t512\t512\t496\t221\t90\t417\t537.647\n134\tmaps/rooms/64room_000.map\t512\t512\t16\t226\t426\t426\t538.642\n134\tmaps/rooms/64room_000.map\t512\t512\t15\t388\t422\t450\t539.156\n134\tmaps/rooms/64room_000.map\t512\t512\t349\t30\t211\t441\t536.789\n135\tmaps/rooms/64room_000.map\t512\t512\t7\t39\t435\t18\t542.085\n135\tmaps/rooms/64room_000.map\t512\t512\t61\t63\t252\t414\t543.044\n135\tmaps/rooms/64room_000.map\t512\t512\t470\t362\t206\t2\t543.73\n135\tmaps/rooms/64room_000.map\t512\t512\t90\t310\t507\t463\t540.257\n135\tmaps/rooms/64room_000.map\t512\t512\t41\t69\t441\t152\t542.754\n135\tmaps/rooms/64room_000.map\t512\t512\t500\t441\t36\t316\t540.487\n135\tmaps/rooms/64room_000.map\t512\t512\t219\t59\t116\t489\t543.233\n135\tmaps/rooms/64room_000.map\t512\t512\t15\t482\t89\t48\t541.754\n135\tmaps/rooms/64room_000.map\t512\t512\t494\t329\t250\t57\t543.789\n135\tmaps/rooms/64room_000.map\t512\t512\t207\t14\t166\t466\t540.789\n136\tmaps/rooms/64room_000.map\t512\t512\t390\t208\t31\t34\t546.245\n136\tmaps/rooms/64room_000.map\t512\t512\t481\t52\t152\t316\t546.286\n136\tmaps/rooms/64room_000.map\t512\t512\t433\t118\t80\t413\t547.831\n136\tmaps/rooms/64room_000.map\t512\t512\t21\t23\t60\t397\t545.742\n136\tmaps/rooms/64room_000.map\t512\t512\t4\t91\t438\t129\t545.688\n136\tmaps/rooms/64room_000.map\t512\t512\t452\t361\t156\t191\t547.688\n136\tmaps/rooms/64room_000.map\t512\t512\t204\t47\t98\t459\t546.458\n136\tmaps/rooms/64room_000.map\t512\t512\t20\t507\t418\t457\t545.085\n136\tmaps/rooms/64room_000.map\t512\t512\t398\t212\t125\t45\t544.558\n136\tmaps/rooms/64room_000.map\t512\t512\t394\t10\t335\t475\t546.978\n137\tmaps/rooms/64room_000.map\t512\t512\t229\t53\t346\t457\t550.387\n137\tmaps/rooms/64room_000.map\t512\t512\t155\t463\t20\t83\t551.156\n137\tmaps/rooms/64room_000.map\t512\t512\t50\t447\t333\t99\t550.387\n137\tmaps/rooms/64room_000.map\t512\t512\t475\t318\t46\t432\t548.647\n137\tmaps/rooms/64room_000.map\t512\t512\t388\t497\t277\t100\t548.5\n137\tmaps/rooms/64room_000.map\t512\t512\t99\t166\t324\t467\t548.257\n137\tmaps/rooms/64room_000.map\t512\t512\t71\t134\t511\t259\t550.546\n137\tmaps/rooms/64room_000.map\t512\t512\t284\t67\t377\t500\t550.115\n137\tmaps/rooms/64room_000.map\t512\t512\t468\t57\t163\t323\t548.63\n137\tmaps/rooms/64room_000.map\t512\t512\t474\t480\t505\t166\t549.701\n138\tmaps/rooms/64room_000.map\t512\t512\t485\t30\t410\t431\t554.985\n138\tmaps/rooms/64room_000.map\t512\t512\t54\t498\t412\t194\t553.63\n138\tmaps/rooms/64room_000.map\t512\t512\t447\t10\t225\t378\t554.5\n138\tmaps/rooms/64room_000.map\t512\t512\t402\t149\t119\t10\t553.98\n138\tmaps/rooms/64room_000.map\t512\t512\t493\t462\t450\t94\t553.718\n138\tmaps/rooms/64room_000.map\t512\t512\t434\t435\t46\t404\t553.926\n138\tmaps/rooms/64room_000.map\t512\t512\t488\t317\t163\t510\t555.127\n138\tmaps/rooms/64room_000.map\t512\t512\t2\t60\t130\t450\t555.47\n138\tmaps/rooms/64room_000.map\t512\t512\t478\t2\t490\t313\t555.198\n138\tmaps/rooms/64room_000.map\t512\t512\t196\t61\t25\t473\t553.399\n139\tmaps/rooms/64room_000.map\t512\t512\t277\t26\t472\t387\t559.764\n139\tmaps/rooms/64room_000.map\t512\t512\t464\t341\t74\t510\t559.985\n139\tmaps/rooms/64room_000.map\t512\t512\t333\t1\t270\t397\t556.002\n139\tmaps/rooms/64room_000.map\t512\t512\t13\t169\t165\t439\t559.446\n139\tmaps/rooms/64room_000.map\t512\t512\t216\t416\t29\t13\t558.458\n139\tmaps/rooms/64room_000.map\t512\t512\t51\t489\t50\t49\t558.227\n139\tmaps/rooms/64room_000.map\t512\t512\t180\t351\t470\t52\t559.115\n139\tmaps/rooms/64room_000.map\t512\t512\t2\t422\t265\t36\t558.11\n139\tmaps/rooms/64room_000.map\t512\t512\t266\t32\t172\t469\t558.286\n139\tmaps/rooms/64room_000.map\t512\t512\t62\t463\t22\t151\t558.115\n140\tmaps/rooms/64room_000.map\t512\t512\t511\t87\t52\t252\t562.399\n140\tmaps/rooms/64room_000.map\t512\t512\t403\t267\t10\t79\t561.399\n140\tmaps/rooms/64room_000.map\t512\t512\t499\t209\t71\t82\t561.382\n140\tmaps/rooms/64room_000.map\t512\t512\t12\t170\t404\t185\t563.441\n140\tmaps/rooms/64room_000.map\t512\t512\t68\t82\t495\t215\t561.11\n140\tmaps/rooms/64room_000.map\t512\t512\t148\t497\t446\t135\t563.713\n140\tmaps/rooms/64room_000.map\t512\t512\t41\t383\t433\t112\t562.495\n140\tmaps/rooms/64room_000.map\t512\t512\t41\t40\t245\t436\t561.286\n140\tmaps/rooms/64room_000.map\t512\t512\t506\t447\t106\t418\t562.085\n140\tmaps/rooms/64room_000.map\t512\t512\t490\t336\t242\t4\t560.6\n141\tmaps/rooms/64room_000.map\t512\t512\t450\t301\t38\t122\t564.487\n141\tmaps/rooms/64room_000.map\t512\t512\t6\t344\t490\t168\t565.688\n141\tmaps/rooms/64room_000.map\t512\t512\t480\t13\t186\t289\t565.813\n141\tmaps/rooms/64room_000.map\t512\t512\t259\t111\t54\t478\t565.446\n141\tmaps/rooms/64room_000.map\t512\t512\t392\t86\t147\t491\t567.328\n141\tmaps/rooms/64room_000.map\t512\t512\t484\t416\t286\t45\t566.907\n141\tmaps/rooms/64room_000.map\t512\t512\t487\t85\t98\t370\t565.044\n141\tmaps/rooms/64room_000.map\t512\t512\t471\t305\t38\t389\t564.848\n141\tmaps/rooms/64room_000.map\t512\t512\t502\t3\t482\t338\t564.186\n141\tmaps/rooms/64room_000.map\t512\t512\t258\t114\t109\t456\t564.647\n142\tmaps/rooms/64room_000.map\t512\t512\t101\t503\t298\t55\t571.759\n142\tmaps/rooms/64room_000.map\t512\t512\t81\t363\t484\t76\t568.156\n142\tmaps/rooms/64room_000.map\t512\t512\t83\t481\t343\t97\t570.274\n142\tmaps/rooms/64room_000.map\t512\t512\t250\t454\t464\t146\t568.718\n142\tmaps/rooms/64room_000.map\t512\t512\t3\t483\t337\t130\t569.5\n142\tmaps/rooms/64room_000.map\t512\t512\t76\t272\t508\t37\t571.441\n142\tmaps/rooms/64room_000.map\t512\t512\t5\t451\t403\t178\t569.943\n142\tmaps/rooms/64room_000.map\t512\t512\t25\t8\t390\t202\t569.014\n142\tmaps/rooms/64room_000.map\t512\t512\t430\t244\t101\t30\t570.813\n142\tmaps/rooms/64room_000.map\t512\t512\t439\t376\t62\t126\t568.955\n143\tmaps/rooms/64room_000.map\t512\t512\t469\t362\t123\t88\t574.357\n143\tmaps/rooms/64room_000.map\t512\t512\t478\t51\t101\t233\t574.796\n143\tmaps/rooms/64room_000.map\t512\t512\t456\t425\t189\t12\t575.772\n143\tmaps/rooms/64room_000.map\t512\t512\t15\t117\t507\t72\t572.487\n143\tmaps/rooms/64room_000.map\t512\t512\t50\t478\t416\t155\t573.014\n143\tmaps/rooms/64room_000.map\t512\t512\t46\t136\t340\t328\t572.357\n143\tmaps/rooms/64room_000.map\t512\t512\t416\t3\t424\t484\t574.848\n143\tmaps/rooms/64room_000.map\t512\t512\t422\t481\t133\t65\t574.955\n143\tmaps/rooms/64room_000.map\t512\t512\t53\t102\t459\t330\t573.286\n143\tmaps/rooms/64room_000.map\t512\t512\t105\t399\t453\t122\t574.245\n144\tmaps/rooms/64room_000.map\t512\t512\t120\t187\t439\t494\t577.914\n144\tmaps/rooms/64room_000.map\t512\t512\t104\t213\t460\t44\t576.796\n144\tmaps/rooms/64room_000.map\t512\t512\t107\t212\t464\t468\t578.127\n144\tmaps/rooms/64room_000.map\t512\t512\t53\t474\t275\t53\t578.73\n144\tmaps/rooms/64room_000.map\t512\t512\t463\t444\t295\t118\t578.382\n144\tmaps/rooms/64room_000.map\t512\t512\t507\t78\t252\t321\t579.713\n144\tmaps/rooms/64room_000.map\t512\t512\t46\t49\t337\t373\t579.784\n144\tmaps/rooms/64room_000.map\t512\t512\t452\t474\t87\t501\t579.186\n144\tmaps/rooms/64room_000.map\t512\t512\t346\t365\t127\t35\t578.955\n144\tmaps/rooms/64room_000.map\t512\t512\t142\t446\t474\t83\t578.671\n145\tmaps/rooms/64room_000.map\t512\t512\t467\t198\t58\t38\t581.139\n145\tmaps/rooms/64room_000.map\t512\t512\t35\t58\t423\t230\t582.843\n145\tmaps/rooms/64room_000.map\t512\t512\t418\t212\t32\t5\t581.257\n145\tmaps/rooms/64room_000.map\t512\t512\t126\t164\t434\t481\t583.056\n145\tmaps/rooms/64room_000.map\t512\t512\t218\t489\t101\t19\t583.014\n145\tmaps/rooms/64room_000.map\t512\t512\t108\t54\t440\t281\t583.156\n145\tmaps/rooms/64room_000.map\t512\t512\t478\t68\t98\t11\t583.784\n145\tmaps/rooms/64room_000.map\t512\t512\t24\t120\t472\t242\t582.767\n145\tmaps/rooms/64room_000.map\t512\t512\t187\t19\t386\t505\t583.073\n145\tmaps/rooms/64room_000.map\t512\t512\t29\t497\t199\t54\t581.642\n146\tmaps/rooms/64room_000.map\t512\t512\t1\t422\t459\t241\t585.659\n146\tmaps/rooms/64room_000.map\t512\t512\t30\t27\t410\t254\t586.428\n146\tmaps/rooms/64room_000.map\t512\t512\t86\t19\t441\t238\t584.115\n146\tmaps/rooms/64room_000.map\t512\t512\t423\t467\t266\t35\t585.735\n146\tmaps/rooms/64room_000.map\t512\t512\t487\t33\t350\t473\t586.47\n146\tmaps/rooms/64room_000.map\t512\t512\t432\t77\t118\t431\t585.286\n146\tmaps/rooms/64room_000.map\t512\t512\t22\t28\t23\t477\t587.855\n146\tmaps/rooms/64room_000.map\t512\t512\t416\t326\t49\t37\t586.399\n146\tmaps/rooms/64room_000.map\t512\t512\t21\t502\t461\t442\t586.34\n146\tmaps/rooms/64room_000.map\t512\t512\t106\t16\t443\t215\t586.708\n147\tmaps/rooms/64room_000.map\t512\t512\t137\t13\t248\t504\t590.902\n147\tmaps/rooms/64room_000.map\t512\t512\t214\t3\t409\t475\t591.014\n147\tmaps/rooms/64room_000.map\t512\t512\t106\t471\t462\t205\t590.115\n147\tmaps/rooms/64room_000.map\t512\t512\t509\t72\t247\t397\t590.37\n147\tmaps/rooms/64room_000.map\t512\t512\t83\t465\t268\t25\t591.659\n147\tmaps/rooms/64room_000.map\t512\t512\t87\t234\t455\t458\t588.441\n147\tmaps/rooms/64room_000.map\t512\t512\t30\t70\t326\t437\t589.482\n147\tmaps/rooms/64room_000.map\t512\t512\t118\t389\t460\t491\t588.583\n147\tmaps/rooms/64room_000.map\t512\t512\t32\t21\t61\t507\t590.914\n147\tmaps/rooms/64room_000.map\t512\t512\t103\t455\t305\t41\t588.316\n148\tmaps/rooms/64room_000.map\t512\t512\t477\t483\t21\t328\t593.257\n148\tmaps/rooms/64room_000.map\t512\t512\t222\t9\t416\t456\t594.914\n148\tmaps/rooms/64room_000.map\t512\t512\t409\t474\t106\t110\t595.257\n148\tmaps/rooms/64room_000.map\t512\t512\t30\t92\t392\t395\t592.671\n148\tmaps/rooms/64room_000.map\t512\t512\t361\t419\t17\t116\t592.973\n148\tmaps/rooms/64room_000.map\t512\t512\t1\t499\t49\t51\t595.453\n148\tmaps/rooms/64room_000.map\t512\t512\t271\t2\t478\t414\t595.818\n148\tmaps/rooms/64room_000.map\t512\t512\t23\t34\t350\t373\t593.671\n148\tmaps/rooms/64room_000.map\t512\t512\t118\t458\t462\t499\t595.985\n148\tmaps/rooms/64room_000.map\t512\t512\t493\t314\t40\t475\t593.546\n149\tmaps/rooms/64room_000.map\t512\t512\t398\t502\t310\t124\t599.997\n149\tmaps/rooms/64room_000.map\t512\t512\t15\t501\t122\t40\t597.068\n149\tmaps/rooms/64room_000.map\t512\t512\t330\t71\t27\t446\t596.222\n149\tmaps/rooms/64room_000.map\t512\t512\t498\t432\t163\t150\t599.642\n149\tmaps/rooms/64room_000.map\t512\t512\t434\t504\t284\t27\t597.375\n149\tmaps/rooms/64room_000.map\t512\t512\t497\t59\t239\t324\t596.127\n149\tmaps/rooms/64room_000.map\t512\t512\t445\t504\t70\t151\t596.198\n149\tmaps/rooms/64room_000.map\t512\t512\t327\t66\t100\t502\t599.902\n149\tmaps/rooms/64room_000.map\t512\t512\t92\t35\t469\t158\t598.08\n149\tmaps/rooms/64room_000.map\t512\t512\t46\t490\t278\t50\t598.215\n150\tmaps/rooms/64room_000.map\t512\t512\t36\t458\t506\t431\t600.186\n150\tmaps/rooms/64room_000.map\t512\t512\t8\t21\t406\t303\t600.056\n150\tmaps/rooms/64room_000.map\t512\t512\t309\t106\t496\t410\t602.813\n150\tmaps/rooms/64room_000.map\t512\t512\t14\t169\t281\t430\t601.914\n150\tmaps/rooms/64room_000.map\t512\t512\t439\t227\t30\t12\t603.428\n150\tmaps/rooms/64room_000.map\t512\t512\t15\t47\t241\t474\t600.914\n150\tmaps/rooms/64room_000.map\t512\t512\t445\t168\t9\t462\t600.541\n150\tmaps/rooms/64room_000.map\t512\t512\t236\t50\t440\t453\t601.943\n150\tmaps/rooms/64room_000.map\t512\t512\t356\t46\t190\t460\t602.701\n150\tmaps/rooms/64room_000.map\t512\t512\t35\t478\t452\t376\t600.671\n151\tmaps/rooms/64room_000.map\t512\t512\t47\t118\t478\t357\t604.742\n151\tmaps/rooms/64room_000.map\t512\t512\t92\t451\t492\t504\t606.328\n151\tmaps/rooms/64room_000.map\t512\t512\t53\t442\t433\t90\t604.884\n151\tmaps/rooms/64room_000.map\t512\t512\t410\t381\t6\t126\t606.813\n151\tmaps/rooms/64room_000.map\t512\t512\t1\t122\t175\t505\t607.056\n151\tmaps/rooms/64room_000.map\t512\t512\t239\t55\t443\t455\t605.044\n151\tmaps/rooms/64room_000.map\t512\t512\t2\t122\t492\t181\t607.441\n151\tmaps/rooms/64room_000.map\t512\t512\t301\t77\t495\t451\t604.541\n151\tmaps/rooms/64room_000.map\t512\t512\t357\t13\t245\t464\t607.073\n151\tmaps/rooms/64room_000.map\t512\t512\t31\t53\t333\t381\t606.098\n152\tmaps/rooms/64room_000.map\t512\t512\t507\t177\t17\t106\t608.269\n152\tmaps/rooms/64room_000.map\t512\t512\t190\t510\t480\t156\t610.624\n152\tmaps/rooms/64room_000.map\t512\t512\t480\t251\t66\t487\t609.044\n152\tmaps/rooms/64room_000.map\t512\t512\t378\t409\t100\t37\t608.825\n152\tmaps/rooms/64room_000.map\t512\t512\t454\t226\t39\t510\t608.872\n152\tmaps/rooms/64room_000.map\t512\t512\t337\t485\t509\t19\t609.328\n152\tmaps/rooms/64room_000.map\t512\t512\t106\t58\t450\t264\t611.186\n152\tmaps/rooms/64room_000.map\t512\t512\t33\t45\t421\t327\t610.299\n152\tmaps/rooms/64room_000.map\t512\t512\t5\t91\t165\t509\t608.299\n152\tmaps/rooms/64room_000.map\t512\t512\t500\t45\t62\t214\t609.34\n153\tmaps/rooms/64room_000.map\t512\t512\t59\t14\t390\t376\t612.47\n153\tmaps/rooms/64room_000.map\t512\t512\t133\t341\t477\t5\t612.683\n153\tmaps/rooms/64room_000.map\t512\t512\t183\t395\t459\t49\t614.943\n153\tmaps/rooms/64room_000.map\t512\t512\t223\t469\t425\t27\t613.872\n153\tmaps/rooms/64room_000.map\t512\t512\t11\t181\t107\t492\t612.428\n153\tmaps/rooms/64room_000.map\t512\t512\t487\t121\t44\t259\t612.98\n153\tmaps/rooms/64room_000.map\t512\t512\t207\t387\t510\t81\t615.642\n153\tmaps/rooms/64room_000.map\t512\t512\t423\t198\t51\t175\t612.495\n153\tmaps/rooms/64room_000.map\t512\t512\t399\t364\t96\t7\t613.754\n153\tmaps/rooms/64room_000.map\t512\t512\t49\t165\t292\t412\t614.198\n154\tmaps/rooms/64room_000.map\t512\t512\t463\t413\t120\t92\t617.63\n154\tmaps/rooms/64room_000.map\t512\t512\t25\t16\t137\t495\t618.796\n154\tmaps/rooms/64room_000.map\t512\t512\t440\t271\t22\t52\t616.654\n154\tmaps/rooms/64room_000.map\t512\t512\t456\t403\t96\t82\t618.044\n154\tmaps/rooms/64room_000.map\t512\t512\t84\t41\t386\t426\t617.34\n154\tmaps/rooms/64room_000.map\t512\t512\t459\t407\t456\t34\t617.872\n154\tmaps/rooms/64room_000.map\t512\t512\t433\t273\t27\t16\t617.34\n154\tmaps/rooms/64room_000.map\t512\t512\t26\t85\t366\t440\t617.399\n154\tmaps/rooms/64room_000.map\t512\t512\t42\t166\t196\t485\t617.558\n154\tmaps/rooms/64room_000.map\t512\t512\t431\t153\t7\t493\t618.725\n155\tmaps/rooms/64room_000.map\t512\t512\t426\t462\t255\t3\t622.683\n155\tmaps/rooms/64room_000.map\t512\t512\t478\t308\t5\t101\t623.772\n155\tmaps/rooms/64room_000.map\t512\t512\t300\t44\t41\t503\t623.428\n155\tmaps/rooms/64room_000.map\t512\t512\t445\t77\t27\t407\t621.335\n155\tmaps/rooms/64room_000.map\t512\t512\t399\t113\t31\t486\t620.328\n155\tmaps/rooms/64room_000.map\t512\t512\t143\t383\t459\t39\t622.825\n155\tmaps/rooms/64room_000.map\t512\t512\t474\t69\t151\t469\t620.997\n155\tmaps/rooms/64room_000.map\t512\t512\t214\t3\t425\t509\t623.441\n155\tmaps/rooms/64room_000.map\t512\t512\t15\t136\t482\t178\t620.654\n155\tmaps/rooms/64room_000.map\t512\t512\t381\t449\t31\t103\t621.328\n156\tmaps/rooms/64room_000.map\t512\t512\t194\t476\t63\t151\t624.174\n156\tmaps/rooms/64room_000.map\t512\t512\t141\t5\t491\t409\t625.127\n156\tmaps/rooms/64room_000.map\t512\t512\t45\t52\t428\t373\t626.181\n156\tmaps/rooms/64room_000.map\t512\t512\t56\t140\t440\t216\t627.453\n156\tmaps/rooms/64room_000.map\t512\t512\t397\t492\t461\t22\t626.198\n156\tmaps/rooms/64room_000.map\t512\t512\t4\t150\t484\t196\t625.855\n156\tmaps/rooms/64room_000.map\t512\t512\t471\t37\t492\t406\t626.014\n156\tmaps/rooms/64room_000.map\t512\t512\t63\t475\t459\t488\t627.583\n156\tmaps/rooms/64room_000.map\t512\t512\t446\t36\t129\t475\t624.441\n156\tmaps/rooms/64room_000.map\t512\t512\t475\t304\t59\t47\t626.47\n157\tmaps/rooms/64room_000.map\t512\t512\t417\t49\t36\t393\t629.808\n157\tmaps/rooms/64room_000.map\t512\t512\t105\t38\t398\t405\t631.169\n157\tmaps/rooms/64room_000.map\t512\t512\t495\t39\t247\t392\t628.754\n157\tmaps/rooms/64room_000.map\t512\t512\t108\t61\t505\t232\t630.909\n157\tmaps/rooms/64room_000.map\t512\t512\t486\t119\t74\t428\t628.754\n157\tmaps/rooms/64room_000.map\t512\t512\t483\t7\t105\t328\t630.813\n157\tmaps/rooms/64room_000.map\t512\t512\t458\t69\t78\t438\t630.671\n157\tmaps/rooms/64room_000.map\t512\t512\t30\t488\t470\t451\t631.441\n157\tmaps/rooms/64room_000.map\t512\t512\t210\t324\t457\t26\t628.997\n157\tmaps/rooms/64room_000.map\t512\t512\t50\t507\t318\t65\t630.073\n158\tmaps/rooms/64room_000.map\t512\t512\t511\t72\t449\t450\t633.571\n158\tmaps/rooms/64room_000.map\t512\t512\t398\t505\t112\t85\t635.428\n158\tmaps/rooms/64room_000.map\t512\t512\t13\t400\t465\t102\t632.406\n158\tmaps/rooms/64room_000.map\t512\t512\t468\t84\t216\t511\t634.286\n158\tmaps/rooms/64room_000.map\t512\t512\t10\t440\t376\t26\t633.98\n158\tmaps/rooms/64room_000.map\t512\t512\t278\t20\t56\t500\t634.073\n158\tmaps/rooms/64room_000.map\t512\t512\t43\t250\t470\t34\t634.696\n158\tmaps/rooms/64room_000.map\t512\t512\t34\t14\t429\t354\t632.21\n158\tmaps/rooms/64room_000.map\t512\t512\t440\t478\t187\t179\t634.198\n158\tmaps/rooms/64room_000.map\t512\t512\t452\t22\t68\t232\t633.495\n159\tmaps/rooms/64room_000.map\t512\t512\t137\t469\t441\t14\t638.37\n159\tmaps/rooms/64room_000.map\t512\t512\t452\t261\t94\t13\t638.642\n159\tmaps/rooms/64room_000.map\t512\t512\t413\t10\t12\t402\t638.678\n159\tmaps/rooms/64room_000.map\t512\t512\t449\t32\t266\t428\t638.227\n159\tmaps/rooms/64room_000.map\t512\t512\t398\t395\t11\t139\t639.156\n159\tmaps/rooms/64room_000.map\t512\t512\t316\t31\t54\t504\t638.671\n159\tmaps/rooms/64room_000.map\t512\t512\t370\t376\t63\t130\t638.671\n159\tmaps/rooms/64room_000.map\t512\t512\t5\t454\t499\t224\t639.144\n159\tmaps/rooms/64room_000.map\t512\t512\t473\t464\t147\t161\t636.37\n159\tmaps/rooms/64room_000.map\t512\t512\t496\t2\t52\t234\t639.897\n160\tmaps/rooms/64room_000.map\t512\t512\t422\t30\t246\t495\t643.399\n160\tmaps/rooms/64room_000.map\t512\t512\t392\t103\t44\t506\t640.428\n160\tmaps/rooms/64room_000.map\t512\t512\t453\t13\t479\t406\t640.955\n160\tmaps/rooms/64room_000.map\t512\t512\t443\t406\t30\t106\t640.671\n160\tmaps/rooms/64room_000.map\t512\t512\t29\t440\t497\t133\t642.612\n160\tmaps/rooms/64room_000.map\t512\t512\t297\t49\t487\t508\t642.505\n160\tmaps/rooms/64room_000.map\t512\t512\t33\t114\t392\t471\t642.742\n160\tmaps/rooms/64room_000.map\t512\t512\t497\t248\t49\t45\t643.749\n160\tmaps/rooms/64room_000.map\t512\t512\t1\t425\t403\t20\t642.98\n160\tmaps/rooms/64room_000.map\t512\t512\t2\t150\t390\t396\t642.357\n161\tmaps/rooms/64room_000.map\t512\t512\t29\t77\t452\t380\t646.642\n161\tmaps/rooms/64room_000.map\t512\t512\t48\t252\t469\t10\t647.909\n161\tmaps/rooms/64room_000.map\t512\t512\t49\t26\t476\t51\t647.512\n161\tmaps/rooms/64room_000.map\t512\t512\t468\t312\t118\t16\t645.21\n161\tmaps/rooms/64room_000.map\t512\t512\t395\t439\t103\t38\t647.867\n161\tmaps/rooms/64room_000.map\t512\t512\t411\t55\t59\t416\t646.529\n161\tmaps/rooms/64room_000.map\t512\t512\t497\t70\t52\t160\t647.299\n161\tmaps/rooms/64room_000.map\t512\t512\t354\t379\t62\t162\t647.299\n161\tmaps/rooms/64room_000.map\t512\t512\t28\t34\t467\t271\t644.299\n161\tmaps/rooms/64room_000.map\t512\t512\t126\t84\t323\t481\t646.441\n162\tmaps/rooms/64room_000.map\t512\t512\t494\t265\t100\t28\t651.24\n162\tmaps/rooms/64room_000.map\t512\t512\t18\t478\t487\t148\t651.382\n162\tmaps/rooms/64room_000.map\t512\t512\t124\t495\t444\t43\t649.855\n162\tmaps/rooms/64room_000.map\t512\t512\t61\t263\t510\t47\t648.495\n162\tmaps/rooms/64room_000.map\t512\t512\t11\t511\t310\t61\t649.156\n162\tmaps/rooms/64room_000.map\t512\t512\t496\t211\t7\t479\t649.884\n162\tmaps/rooms/64room_000.map\t512\t512\t56\t140\t431\t258\t648.955\n162\tmaps/rooms/64room_000.map\t512\t512\t434\t260\t8\t3\t648.11\n162\tmaps/rooms/64room_000.map\t512\t512\t369\t449\t6\t111\t651.014\n162\tmaps/rooms/64room_000.map\t512\t512\t183\t477\t14\t7\t648.21\n163\tmaps/rooms/64room_000.map\t512\t512\t476\t217\t49\t132\t655.311\n163\tmaps/rooms/64room_000.map\t512\t512\t510\t36\t2\t258\t654.583\n163\tmaps/rooms/64room_000.map\t512\t512\t454\t55\t499\t432\t653.328\n163\tmaps/rooms/64room_000.map\t512\t512\t456\t452\t61\t402\t653.926\n163\tmaps/rooms/64room_000.map\t512\t512\t54\t498\t451\t477\t654.825\n163\tmaps/rooms/64room_000.map\t512\t512\t71\t459\t457\t126\t653.156\n163\tmaps/rooms/64room_000.map\t512\t512\t90\t106\t490\t450\t653.068\n163\tmaps/rooms/64room_000.map\t512\t512\t464\t27\t47\t314\t655.82\n163\tmaps/rooms/64room_000.map\t512\t512\t125\t363\t459\t11\t654.683\n163\tmaps/rooms/64room_000.map\t512\t512\t449\t79\t76\t473\t652.772\n164\tmaps/rooms/64room_000.map\t512\t512\t360\t49\t20\t485\t656.541\n164\tmaps/rooms/64room_000.map\t512\t512\t41\t190\t146\t486\t657.683\n164\tmaps/rooms/64room_000.map\t512\t512\t35\t454\t499\t507\t658.955\n164\tmaps/rooms/64room_000.map\t512\t512\t408\t435\t92\t25\t657.696\n164\tmaps/rooms/64room_000.map\t512\t512\t473\t190\t19\t190\t658.24\n164\tmaps/rooms/64room_000.map\t512\t512\t453\t394\t60\t69\t656.215\n164\tmaps/rooms/64room_000.map\t512\t512\t457\t482\t104\t151\t657.169\n164\tmaps/rooms/64room_000.map\t512\t512\t447\t111\t55\t494\t657.257\n164\tmaps/rooms/64room_000.map\t512\t512\t453\t22\t495\t414\t656.541\n164\tmaps/rooms/64room_000.map\t512\t512\t420\t44\t108\t495\t659.014\n165\tmaps/rooms/64room_000.map\t512\t512\t472\t274\t5\t31\t663.512\n165\tmaps/rooms/64room_000.map\t512\t512\t482\t54\t36\t9\t660.311\n165\tmaps/rooms/64room_000.map\t512\t512\t304\t82\t511\t500\t663.583\n165\tmaps/rooms/64room_000.map\t512\t512\t476\t82\t187\t496\t661.281\n165\tmaps/rooms/64room_000.map\t512\t512\t58\t91\t414\t453\t660.884\n165\tmaps/rooms/64room_000.map\t512\t512\t181\t469\t498\t92\t661.955\n165\tmaps/rooms/64room_000.map\t512\t512\t2\t211\t470\t455\t662.039\n165\tmaps/rooms/64room_000.map\t512\t512\t100\t23\t456\t367\t661.754\n165\tmaps/rooms/64room_000.map\t512\t512\t489\t81\t123\t495\t662.541\n165\tmaps/rooms/64room_000.map\t512\t512\t13\t432\t450\t83\t662.164\n166\tmaps/rooms/64room_000.map\t512\t512\t486\t478\t1\t423\t667.311\n166\tmaps/rooms/64room_000.map\t512\t512\t424\t27\t179\t501\t665.382\n166\tmaps/rooms/64room_000.map\t512\t512\t508\t495\t275\t22\t666.416\n166\tmaps/rooms/64room_000.map\t512\t512\t232\t15\t461\t461\t666.21\n166\tmaps/rooms/64room_000.map\t512\t512\t269\t35\t480\t496\t667.203\n166\tmaps/rooms/64room_000.map\t512\t512\t474\t349\t104\t14\t666.553\n166\tmaps/rooms/64room_000.map\t512\t512\t459\t502\t171\t51\t665.825\n166\tmaps/rooms/64room_000.map\t512\t512\t332\t490\t87\t65\t664.725\n166\tmaps/rooms/64room_000.map\t512\t512\t428\t27\t49\t400\t665.82\n166\tmaps/rooms/64room_000.map\t512\t512\t96\t405\t494\t39\t666.198\n167\tmaps/rooms/64room_000.map\t512\t512\t372\t412\t7\t182\t668.571\n167\tmaps/rooms/64room_000.map\t512\t512\t400\t484\t73\t47\t669.411\n167\tmaps/rooms/64room_000.map\t512\t512\t187\t497\t491\t102\t671.725\n167\tmaps/rooms/64room_000.map\t512\t512\t473\t78\t57\t453\t669.583\n167\tmaps/rooms/64room_000.map\t512\t512\t8\t497\t269\t9\t669.784\n167\tmaps/rooms/64room_000.map\t512\t512\t42\t37\t488\t344\t670.37\n167\tmaps/rooms/64room_000.map\t512\t512\t246\t402\t470\t15\t669.423\n167\tmaps/rooms/64room_000.map\t512\t512\t491\t394\t42\t105\t669.186\n167\tmaps/rooms/64room_000.map\t512\t512\t111\t427\t506\t51\t670.813\n167\tmaps/rooms/64room_000.map\t512\t512\t5\t489\t275\t1\t670.299\n168\tmaps/rooms/64room_000.map\t512\t512\t465\t454\t148\t4\t674.796\n168\tmaps/rooms/64room_000.map\t512\t512\t77\t486\t469\t86\t672.156\n168\tmaps/rooms/64room_000.map\t512\t512\t366\t468\t54\t32\t675.897\n168\tmaps/rooms/64room_000.map\t512\t512\t61\t405\t493\t510\t673.683\n168\tmaps/rooms/64room_000.map\t512\t512\t362\t1\t53\t474\t675.127\n168\tmaps/rooms/64room_000.map\t512\t512\t464\t50\t119\t16\t675.524\n168\tmaps/rooms/64room_000.map\t512\t512\t49\t96\t353\t505\t672.754\n168\tmaps/rooms/64room_000.map\t512\t512\t129\t411\t449\t61\t675.328\n168\tmaps/rooms/64room_000.map\t512\t512\t274\t29\t510\t504\t674.345\n168\tmaps/rooms/64room_000.map\t512\t512\t495\t1\t495\t455\t673.612\n169\tmaps/rooms/64room_000.map\t512\t512\t486\t91\t54\t456\t676.026\n169\tmaps/rooms/64room_000.map\t512\t512\t458\t76\t19\t444\t678.127\n169\tmaps/rooms/64room_000.map\t512\t512\t26\t48\t492\t260\t678.867\n169\tmaps/rooms/64room_000.map\t512\t512\t473\t492\t251\t53\t677.926\n169\tmaps/rooms/64room_000.map\t512\t512\t502\t71\t148\t502\t677.583\n169\tmaps/rooms/64room_000.map\t512\t512\t502\t487\t141\t29\t679.583\n169\tmaps/rooms/64room_000.map\t512\t512\t503\t231\t22\t161\t677.808\n169\tmaps/rooms/64room_000.map\t512\t512\t31\t182\t323\t407\t677.098\n169\tmaps/rooms/64room_000.map\t512\t512\t59\t59\t467\t19\t676.281\n169\tmaps/rooms/64room_000.map\t512\t512\t457\t270\t13\t185\t678.428\n170\tmaps/rooms/64room_000.map\t512\t512\t496\t109\t22\t438\t683.968\n170\tmaps/rooms/64room_000.map\t512\t512\t417\t407\t23\t152\t681.098\n170\tmaps/rooms/64room_000.map\t512\t512\t123\t68\t508\t425\t683.47\n170\tmaps/rooms/64room_000.map\t512\t512\t69\t345\t451\t4\t683.448\n170\tmaps/rooms/64room_000.map\t512\t512\t101\t420\t504\t31\t682.985\n170\tmaps/rooms/64room_000.map\t512\t512\t507\t44\t224\t483\t683.127\n170\tmaps/rooms/64room_000.map\t512\t512\t62\t179\t418\t362\t680.252\n170\tmaps/rooms/64room_000.map\t512\t512\t452\t471\t1\t472\t680.098\n170\tmaps/rooms/64room_000.map\t512\t512\t361\t455\t47\t27\t681.068\n170\tmaps/rooms/64room_000.map\t512\t512\t455\t463\t133\t46\t682.612\n171\tmaps/rooms/64room_000.map\t512\t512\t447\t41\t32\t464\t686.867\n171\tmaps/rooms/64room_000.map\t512\t512\t501\t33\t97\t422\t685.884\n171\tmaps/rooms/64room_000.map\t512\t512\t84\t450\t445\t9\t686.784\n171\tmaps/rooms/64room_000.map\t512\t512\t377\t481\t85\t25\t684.34\n171\tmaps/rooms/64room_000.map\t512\t512\t18\t189\t491\t163\t686.009\n171\tmaps/rooms/64room_000.map\t512\t512\t455\t50\t15\t145\t684.713\n171\tmaps/rooms/64room_000.map\t512\t512\t511\t372\t25\t67\t687.624\n171\tmaps/rooms/64room_000.map\t512\t512\t43\t349\t454\t30\t686.205\n171\tmaps/rooms/64room_000.map\t512\t512\t465\t501\t155\t36\t684.553\n171\tmaps/rooms/64room_000.map\t512\t512\t505\t476\t454\t62\t687.541\n172\tmaps/rooms/64room_000.map\t512\t512\t157\t511\t440\t5\t691.968\n172\tmaps/rooms/64room_000.map\t512\t512\t360\t22\t32\t501\t690.47\n172\tmaps/rooms/64room_000.map\t512\t512\t488\t63\t156\t476\t691.382\n172\tmaps/rooms/64room_000.map\t512\t512\t466\t38\t251\t434\t689.725\n172\tmaps/rooms/64room_000.map\t512\t512\t462\t477\t171\t188\t689.696\n172\tmaps/rooms/64room_000.map\t512\t512\t41\t511\t452\t96\t691.269\n172\tmaps/rooms/64room_000.map\t512\t512\t204\t387\t509\t10\t690.884\n172\tmaps/rooms/64room_000.map\t512\t512\t22\t155\t465\t44\t690.098\n172\tmaps/rooms/64room_000.map\t512\t512\t237\t402\t463\t6\t689.151\n172\tmaps/rooms/64room_000.map\t512\t512\t482\t30\t7\t285\t690.933\n173\tmaps/rooms/64room_000.map\t512\t512\t39\t262\t487\t21\t694.134\n173\tmaps/rooms/64room_000.map\t512\t512\t9\t171\t510\t15\t695.257\n173\tmaps/rooms/64room_000.map\t512\t512\t102\t52\t353\t489\t692.867\n173\tmaps/rooms/64room_000.map\t512\t512\t29\t411\t501\t76\t694.661\n173\tmaps/rooms/64room_000.map\t512\t512\t106\t455\t491\t77\t692.955\n173\tmaps/rooms/64room_000.map\t512\t512\t406\t428\t23\t2\t693.323\n173\tmaps/rooms/64room_000.map\t512\t512\t255\t23\t494\t507\t692.203\n173\tmaps/rooms/64room_000.map\t512\t512\t435\t473\t24\t114\t695.571\n173\tmaps/rooms/64room_000.map\t512\t512\t15\t440\t496\t107\t692.968\n173\tmaps/rooms/64room_000.map\t512\t512\t163\t29\t455\t510\t692.595\n174\tmaps/rooms/64room_000.map\t512\t512\t3\t132\t373\t487\t697.299\n174\tmaps/rooms/64room_000.map\t512\t512\t63\t53\t397\t451\t696.482\n174\tmaps/rooms/64room_000.map\t512\t512\t478\t60\t241\t458\t698.085\n174\tmaps/rooms/64room_000.map\t512\t512\t488\t378\t81\t3\t698.139\n174\tmaps/rooms/64room_000.map\t512\t512\t456\t28\t54\t365\t696.477\n174\tmaps/rooms/64room_000.map\t512\t512\t470\t321\t28\t174\t698.855\n174\tmaps/rooms/64room_000.map\t512\t512\t491\t375\t13\t144\t697.482\n174\tmaps/rooms/64room_000.map\t512\t512\t170\t453\t482\t62\t699.926\n174\tmaps/rooms/64room_000.map\t512\t512\t49\t491\t466\t73\t696.169\n174\tmaps/rooms/64room_000.map\t512\t512\t2\t34\t414\t425\t696.11\n175\tmaps/rooms/64room_000.map\t512\t512\t449\t459\t135\t3\t702.767\n175\tmaps/rooms/64room_000.map\t512\t512\t425\t491\t14\t116\t703.855\n175\tmaps/rooms/64room_000.map\t512\t512\t426\t491\t30\t80\t701.281\n175\tmaps/rooms/64room_000.map\t512\t512\t204\t493\t481\t43\t702.47\n175\tmaps/rooms/64room_000.map\t512\t512\t23\t47\t449\t35\t703.009\n175\tmaps/rooms/64room_000.map\t512\t512\t48\t273\t454\t24\t700.619\n175\tmaps/rooms/64room_000.map\t512\t512\t372\t465\t1\t42\t702.281\n175\tmaps/rooms/64room_000.map\t512\t512\t73\t43\t436\t470\t701.269\n175\tmaps/rooms/64room_000.map\t512\t512\t462\t8\t28\t63\t701.909\n175\tmaps/rooms/64room_000.map\t512\t512\t474\t15\t2\t315\t701.82\n176\tmaps/rooms/64room_000.map\t512\t512\t41\t484\t487\t87\t705.34\n176\tmaps/rooms/64room_000.map\t512\t512\t178\t490\t504\t54\t705.737\n176\tmaps/rooms/64room_000.map\t512\t512\t106\t52\t324\t458\t704.825\n176\tmaps/rooms/64room_000.map\t512\t512\t465\t26\t22\t165\t707.553\n176\tmaps/rooms/64room_000.map\t512\t512\t76\t27\t328\t467\t704.24\n176\tmaps/rooms/64room_000.map\t512\t512\t122\t47\t450\t407\t704.541\n176\tmaps/rooms/64room_000.map\t512\t512\t468\t354\t36\t172\t704.482\n176\tmaps/rooms/64room_000.map\t512\t512\t19\t332\t451\t13\t707.933\n176\tmaps/rooms/64room_000.map\t512\t512\t97\t506\t446\t13\t706.926\n176\tmaps/rooms/64room_000.map\t512\t512\t17\t490\t473\t90\t707.796\n177\tmaps/rooms/64room_000.map\t512\t512\t499\t409\t17\t99\t710.884\n177\tmaps/rooms/64room_000.map\t512\t512\t400\t52\t6\t508\t708.825\n177\tmaps/rooms/64room_000.map\t512\t512\t504\t365\t32\t21\t710.867\n177\tmaps/rooms/64room_000.map\t512\t512\t20\t500\t356\t5\t711.24\n177\tmaps/rooms/64room_000.map\t512\t512\t55\t2\t461\t394\t709.855\n177\tmaps/rooms/64room_000.map\t512\t512\t120\t23\t402\t471\t711.252\n177\tmaps/rooms/64room_000.map\t512\t512\t111\t31\t483\t386\t710.169\n177\tmaps/rooms/64room_000.map\t512\t512\t18\t49\t442\t433\t708.566\n177\tmaps/rooms/64room_000.map\t512\t512\t355\t510\t6\t111\t711.955\n177\tmaps/rooms/64room_000.map\t512\t512\t462\t400\t32\t36\t709.37\n178\tmaps/rooms/64room_000.map\t512\t512\t445\t425\t127\t12\t715.122\n178\tmaps/rooms/64room_000.map\t512\t512\t103\t422\t471\t15\t713.825\n178\tmaps/rooms/64room_000.map\t512\t512\t365\t497\t2\t73\t714.553\n178\tmaps/rooms/64room_000.map\t512\t512\t505\t427\t27\t104\t712.269\n178\tmaps/rooms/64room_000.map\t512\t512\t52\t501\t486\t118\t712.453\n178\tmaps/rooms/64room_000.map\t512\t512\t213\t501\t481\t48\t712.127\n178\tmaps/rooms/64room_000.map\t512\t512\t461\t376\t14\t14\t712.068\n178\tmaps/rooms/64room_000.map\t512\t512\t476\t1\t490\t489\t715.897\n178\tmaps/rooms/64room_000.map\t512\t512\t327\t449\t112\t26\t714.867\n178\tmaps/rooms/64room_000.map\t512\t512\t485\t107\t66\t509\t713.299\n179\tmaps/rooms/64room_000.map\t512\t512\t75\t17\t474\t430\t717.897\n179\tmaps/rooms/64room_000.map\t512\t512\t486\t476\t52\t122\t718.382\n179\tmaps/rooms/64room_000.map\t512\t512\t6\t61\t412\t483\t717.009\n179\tmaps/rooms/64room_000.map\t512\t512\t401\t451\t107\t9\t718.08\n179\tmaps/rooms/64room_000.map\t512\t512\t89\t427\t460\t50\t716.441\n179\tmaps/rooms/64room_000.map\t512\t512\t503\t335\t38\t153\t719.299\n179\tmaps/rooms/64room_000.map\t512\t512\t510\t63\t55\t409\t718.311\n179\tmaps/rooms/64room_000.map\t512\t512\t490\t5\t140\t464\t716.453\n179\tmaps/rooms/64room_000.map\t512\t512\t34\t150\t377\t473\t719.512\n179\tmaps/rooms/64room_000.map\t512\t512\t239\t464\t467\t43\t716.612\n180\tmaps/rooms/64room_000.map\t512\t512\t91\t439\t471\t36\t722.411\n180\tmaps/rooms/64room_000.map\t512\t512\t10\t127\t496\t427\t722.34\n180\tmaps/rooms/64room_000.map\t512\t512\t27\t9\t352\t466\t722.08\n180\tmaps/rooms/64room_000.map\t512\t512\t93\t65\t492\t480\t720.24\n180\tmaps/rooms/64room_000.map\t512\t512\t505\t1\t55\t130\t720.428\n180\tmaps/rooms/64room_000.map\t512\t512\t505\t54\t89\t467\t722.311\n180\tmaps/rooms/64room_000.map\t512\t512\t60\t462\t506\t62\t721.654\n180\tmaps/rooms/64room_000.map\t512\t512\t402\t452\t12\t150\t720.583\n180\tmaps/rooms/64room_000.map\t512\t512\t511\t47\t89\t461\t721.411\n180\tmaps/rooms/64room_000.map\t512\t512\t18\t367\t462\t7\t723.703\n181\tmaps/rooms/64room_000.map\t512\t512\t462\t486\t82\t82\t726.222\n181\tmaps/rooms/64room_000.map\t512\t512\t492\t390\t42\t42\t725.37\n181\tmaps/rooms/64room_000.map\t512\t512\t22\t474\t508\t79\t724.252\n181\tmaps/rooms/64room_000.map\t512\t512\t451\t21\t44\t383\t726.519\n181\tmaps/rooms/64room_000.map\t512\t512\t446\t504\t45\t75\t725.453\n181\tmaps/rooms/64room_000.map\t512\t512\t488\t12\t86\t433\t727.825\n181\tmaps/rooms/64room_000.map\t512\t512\t488\t8\t4\t3\t726.595\n181\tmaps/rooms/64room_000.map\t512\t512\t495\t51\t111\t505\t725.553\n181\tmaps/rooms/64room_000.map\t512\t512\t5\t496\t422\t35\t726.281\n181\tmaps/rooms/64room_000.map\t512\t512\t8\t18\t453\t23\t726.423\n182\tmaps/rooms/64room_000.map\t512\t512\t107\t61\t494\t442\t730.867\n182\tmaps/rooms/64room_000.map\t512\t512\t485\t379\t51\t136\t731.926\n182\tmaps/rooms/64room_000.map\t512\t512\t61\t142\t466\t23\t728.482\n182\tmaps/rooms/64room_000.map\t512\t512\t446\t502\t18\t124\t728.725\n182\tmaps/rooms/64room_000.map\t512\t512\t454\t24\t94\t426\t730.139\n182\tmaps/rooms/64room_000.map\t512\t512\t488\t447\t16\t72\t730.737\n182\tmaps/rooms/64room_000.map\t512\t512\t387\t455\t16\t10\t729.11\n182\tmaps/rooms/64room_000.map\t512\t512\t113\t75\t455\t492\t730.11\n182\tmaps/rooms/64room_000.map\t512\t512\t422\t489\t1\t65\t731.666\n182\tmaps/rooms/64room_000.map\t512\t512\t203\t504\t470\t29\t729.855\n183\tmaps/rooms/64room_000.map\t512\t512\t5\t496\t483\t76\t734.566\n183\tmaps/rooms/64room_000.map\t512\t512\t498\t66\t37\t493\t733.352\n183\tmaps/rooms/64room_000.map\t512\t512\t425\t484\t84\t9\t734.624\n183\tmaps/rooms/64room_000.map\t512\t512\t470\t503\t72\t96\t735.323\n183\tmaps/rooms/64room_000.map\t512\t512\t63\t172\t481\t344\t733.897\n183\tmaps/rooms/64room_000.map\t512\t512\t339\t489\t2\t48\t733.536\n183\tmaps/rooms/64room_000.map\t512\t512\t62\t161\t372\t449\t734.24\n183\tmaps/rooms/64room_000.map\t512\t512\t431\t470\t122\t41\t734.382\n183\tmaps/rooms/64room_000.map\t512\t512\t505\t18\t75\t447\t733.34\n183\tmaps/rooms/64room_000.map\t512\t512\t74\t431\t460\t30\t734.938\n184\tmaps/rooms/64room_000.map\t512\t512\t426\t502\t75\t10\t738.352\n184\tmaps/rooms/64room_000.map\t512\t512\t56\t166\t444\t388\t738.441\n184\tmaps/rooms/64room_000.map\t512\t512\t487\t350\t42\t186\t736.553\n184\tmaps/rooms/64room_000.map\t512\t512\t28\t178\t441\t414\t736.068\n184\tmaps/rooms/64room_000.map\t512\t512\t466\t61\t59\t444\t736.482\n184\tmaps/rooms/64room_000.map\t512\t512\t478\t33\t18\t395\t739.016\n184\tmaps/rooms/64room_000.map\t512\t512\t73\t4\t488\t424\t739.825\n184\tmaps/rooms/64room_000.map\t512\t512\t444\t496\t15\t73\t739.252\n184\tmaps/rooms/64room_000.map\t512\t512\t5\t159\t410\t489\t739.24\n184\tmaps/rooms/64room_000.map\t512\t512\t496\t420\t12\t62\t739.938\n185\tmaps/rooms/64room_000.map\t512\t512\t141\t503\t483\t21\t742.767\n185\tmaps/rooms/64room_000.map\t512\t512\t134\t484\t470\t5\t742.252\n185\tmaps/rooms/64room_000.map\t512\t512\t490\t508\t111\t66\t740.612\n185\tmaps/rooms/64room_000.map\t512\t512\t70\t69\t459\t479\t740.779\n185\tmaps/rooms/64room_000.map\t512\t512\t21\t26\t368\t498\t740.553\n185\tmaps/rooms/64room_000.map\t512\t512\t446\t497\t58\t37\t740.181\n185\tmaps/rooms/64room_000.map\t512\t512\t415\t481\t18\t32\t743.796\n185\tmaps/rooms/64room_000.map\t512\t512\t73\t453\t507\t14\t743.34\n185\tmaps/rooms/64room_000.map\t512\t512\t360\t485\t19\t5\t741.566\n185\tmaps/rooms/64room_000.map\t512\t512\t3\t17\t398\t457\t743.524\n186\tmaps/rooms/64room_000.map\t512\t512\t30\t173\t352\t473\t745.938\n186\tmaps/rooms/64room_000.map\t512\t512\t431\t455\t21\t52\t745.423\n186\tmaps/rooms/64room_000.map\t512\t512\t32\t38\t495\t410\t744.997\n186\tmaps/rooms/64room_000.map\t512\t512\t328\t502\t89\t7\t745.293\n186\tmaps/rooms/64room_000.map\t512\t512\t81\t485\t509\t45\t744.34\n186\tmaps/rooms/64room_000.map\t512\t512\t375\t490\t48\t134\t744.713\n186\tmaps/rooms/64room_000.map\t512\t512\t45\t172\t356\t465\t744.423\n186\tmaps/rooms/64room_000.map\t512\t512\t31\t41\t430\t483\t747.039\n186\tmaps/rooms/64room_000.map\t512\t512\t13\t125\t509\t451\t745.553\n186\tmaps/rooms/64room_000.map\t512\t512\t28\t1\t415\t478\t745.394\n187\tmaps/rooms/64room_000.map\t512\t512\t31\t502\t511\t75\t748.252\n187\tmaps/rooms/64room_000.map\t512\t512\t495\t54\t11\t440\t751.318\n187\tmaps/rooms/64room_000.map\t512\t512\t468\t400\t45\t156\t749.34\n187\tmaps/rooms/64room_000.map\t512\t512\t27\t46\t334\t501\t751.637\n187\tmaps/rooms/64room_000.map\t512\t512\t39\t157\t405\t449\t748.867\n187\tmaps/rooms/64room_000.map\t512\t512\t40\t148\t378\t500\t751.269\n187\tmaps/rooms/64room_000.map\t512\t512\t29\t150\t357\t500\t749.796\n187\tmaps/rooms/64room_000.map\t512\t512\t20\t16\t336\t484\t749.637\n187\tmaps/rooms/64room_000.map\t512\t512\t56\t433\t471\t27\t748.394\n187\tmaps/rooms/64room_000.map\t512\t512\t351\t478\t10\t182\t750.311\n188\tmaps/rooms/64room_000.map\t512\t512\t56\t190\t501\t332\t752.897\n188\tmaps/rooms/64room_000.map\t512\t512\t501\t19\t15\t412\t753.389\n188\tmaps/rooms/64room_000.map\t512\t512\t61\t22\t494\t455\t752.666\n188\tmaps/rooms/64room_000.map\t512\t512\t28\t99\t508\t482\t753.767\n188\tmaps/rooms/64room_000.map\t512\t512\t462\t473\t55\t76\t755.009\n188\tmaps/rooms/64room_000.map\t512\t512\t37\t27\t330\t511\t752.879\n188\tmaps/rooms/64room_000.map\t512\t512\t492\t454\t50\t24\t754.808\n188\tmaps/rooms/64room_000.map\t512\t512\t441\t505\t126\t60\t755.009\n188\tmaps/rooms/64room_000.map\t512\t512\t71\t2\t505\t418\t755.997\n188\tmaps/rooms/64room_000.map\t512\t512\t108\t38\t498\t458\t755.536\n189\tmaps/rooms/64room_000.map\t512\t512\t481\t389\t4\t11\t759.825\n189\tmaps/rooms/64room_000.map\t512\t512\t493\t10\t120\t506\t756.453\n189\tmaps/rooms/64room_000.map\t512\t512\t188\t482\t490\t13\t759.222\n189\tmaps/rooms/64room_000.map\t512\t512\t16\t11\t465\t444\t757.536\n189\tmaps/rooms/64room_000.map\t512\t512\t468\t502\t81\t66\t756.151\n189\tmaps/rooms/64room_000.map\t512\t512\t442\t498\t40\t27\t757.909\n189\tmaps/rooms/64room_000.map\t512\t512\t497\t34\t95\t509\t757.039\n189\tmaps/rooms/64room_000.map\t512\t512\t47\t423\t478\t26\t757.293\n189\tmaps/rooms/64room_000.map\t512\t512\t342\t499\t24\t3\t758.85\n189\tmaps/rooms/64room_000.map\t512\t512\t456\t478\t32\t100\t759.151\n190\tmaps/rooms/64room_000.map\t512\t512\t1\t10\t363\t492\t763.252\n190\tmaps/rooms/64room_000.map\t512\t512\t37\t164\t401\t497\t761.767\n190\tmaps/rooms/64room_000.map\t512\t512\t100\t500\t482\t27\t761.524\n190\tmaps/rooms/64room_000.map\t512\t512\t9\t167\t366\t510\t760.683\n190\tmaps/rooms/64room_000.map\t512\t512\t469\t39\t1\t422\t761.389\n190\tmaps/rooms/64room_000.map\t512\t512\t29\t96\t503\t491\t760.938\n190\tmaps/rooms/64room_000.map\t512\t512\t426\t492\t6\t166\t763.897\n190\tmaps/rooms/64room_000.map\t512\t512\t501\t33\t74\t489\t762.411\n190\tmaps/rooms/64room_000.map\t512\t512\t469\t506\t47\t101\t761.666\n190\tmaps/rooms/64room_000.map\t512\t512\t35\t426\t493\t26\t761.838\n191\tmaps/rooms/64room_000.map\t512\t512\t501\t475\t102\t39\t767.365\n191\tmaps/rooms/64room_000.map\t512\t512\t492\t33\t57\t386\t766.732\n191\tmaps/rooms/64room_000.map\t512\t512\t450\t14\t8\t393\t764.644\n191\tmaps/rooms/64room_000.map\t512\t512\t9\t166\t482\t437\t766.725\n191\tmaps/rooms/64room_000.map\t512\t512\t499\t387\t19\t169\t767.227\n191\tmaps/rooms/64room_000.map\t512\t512\t459\t404\t23\t191\t764.37\n191\tmaps/rooms/64room_000.map\t512\t512\t13\t44\t445\t485\t767.666\n191\tmaps/rooms/64room_000.map\t512\t512\t177\t490\t452\t27\t766.749\n191\tmaps/rooms/64room_000.map\t512\t512\t507\t399\t126\t8\t765.252\n191\tmaps/rooms/64room_000.map\t512\t512\t36\t2\t505\t408\t767.524\n192\tmaps/rooms/64room_000.map\t512\t512\t19\t436\t490\t30\t770.938\n192\tmaps/rooms/64room_000.map\t512\t512\t324\t492\t1\t174\t770.796\n192\tmaps/rooms/64room_000.map\t512\t512\t337\t506\t9\t28\t768.465\n192\tmaps/rooms/64room_000.map\t512\t512\t413\t472\t18\t187\t768.583\n192\tmaps/rooms/64room_000.map\t512\t512\t389\t493\t15\t191\t770.098\n192\tmaps/rooms/64room_000.map\t512\t512\t124\t489\t455\t28\t769.252\n192\tmaps/rooms/64room_000.map\t512\t512\t456\t416\t59\t145\t768.642\n192\tmaps/rooms/64room_000.map\t512\t512\t113\t47\t510\t468\t771.779\n192\tmaps/rooms/64room_000.map\t512\t512\t489\t421\t1\t27\t769.252\n192\tmaps/rooms/64room_000.map\t512\t512\t482\t495\t35\t79\t769.909\n193\tmaps/rooms/64room_000.map\t512\t512\t442\t495\t27\t143\t773.867\n193\tmaps/rooms/64room_000.map\t512\t512\t497\t440\t31\t13\t772.051\n193\tmaps/rooms/64room_000.map\t512\t512\t20\t469\t479\t61\t773.423\n193\tmaps/rooms/64room_000.map\t512\t512\t86\t48\t460\t489\t773.164\n193\tmaps/rooms/64room_000.map\t512\t512\t17\t155\t497\t436\t773.624\n193\tmaps/rooms/64room_000.map\t512\t512\t476\t23\t95\t474\t774.808\n193\tmaps/rooms/64room_000.map\t512\t512\t23\t431\t487\t28\t772.252\n193\tmaps/rooms/64room_000.map\t512\t512\t12\t484\t495\t58\t772.879\n193\tmaps/rooms/64room_000.map\t512\t512\t53\t466\t465\t42\t775.696\n193\tmaps/rooms/64room_000.map\t512\t512\t47\t469\t463\t63\t772.725\n194\tmaps/rooms/64room_000.map\t512\t512\t502\t461\t127\t40\t778.365\n194\tmaps/rooms/64room_000.map\t512\t512\t12\t90\t506\t488\t778.666\n194\tmaps/rooms/64room_000.map\t512\t512\t452\t32\t171\t506\t776.436\n194\tmaps/rooms/64room_000.map\t512\t512\t11\t431\t460\t52\t778.146\n194\tmaps/rooms/64room_000.map\t512\t512\t416\t478\t50\t174\t776.666\n194\tmaps/rooms/64room_000.map\t512\t512\t50\t180\t351\t491\t777.879\n194\tmaps/rooms/64room_000.map\t512\t512\t59\t470\t490\t9\t779.352\n194\tmaps/rooms/64room_000.map\t512\t512\t106\t455\t463\t40\t777.453\n194\tmaps/rooms/64room_000.map\t512\t512\t101\t478\t460\t53\t776.767\n194\tmaps/rooms/64room_000.map\t512\t512\t486\t477\t108\t33\t777.436\n195\tmaps/rooms/64room_000.map\t512\t512\t102\t58\t477\t494\t781.808\n195\tmaps/rooms/64room_000.map\t512\t512\t486\t490\t16\t69\t782.879\n195\tmaps/rooms/64room_000.map\t512\t512\t477\t12\t44\t414\t781.95\n195\tmaps/rooms/64room_000.map\t512\t512\t93\t53\t497\t506\t781.909\n195\tmaps/rooms/64room_000.map\t512\t512\t53\t139\t433\t476\t781.34\n195\tmaps/rooms/64room_000.map\t512\t512\t327\t470\t22\t188\t781.382\n195\tmaps/rooms/64room_000.map\t512\t512\t489\t395\t60\t152\t781.612\n195\tmaps/rooms/64room_000.map\t512\t512\t435\t487\t12\t7\t782.637\n195\tmaps/rooms/64room_000.map\t512\t512\t509\t440\t3\t43\t780.293\n195\tmaps/rooms/64room_000.map\t512\t512\t489\t38\t30\t485\t781.879\n196\tmaps/rooms/64room_000.map\t512\t512\t56\t163\t345\t497\t784.151\n196\tmaps/rooms/64room_000.map\t512\t512\t22\t507\t503\t50\t785.293\n196\tmaps/rooms/64room_000.map\t512\t512\t47\t481\t483\t23\t784.808\n196\tmaps/rooms/64room_000.map\t512\t512\t49\t180\t420\t449\t785.151\n196\tmaps/rooms/64room_000.map\t512\t512\t97\t56\t471\t501\t787.122\n196\tmaps/rooms/64room_000.map\t512\t512\t18\t191\t413\t498\t786.281\n196\tmaps/rooms/64room_000.map\t512\t512\t2\t76\t475\t477\t785.536\n196\tmaps/rooms/64room_000.map\t512\t512\t496\t5\t48\t409\t784.423\n196\tmaps/rooms/64room_000.map\t512\t512\t476\t458\t46\t9\t786.193\n196\tmaps/rooms/64room_000.map\t512\t512\t429\t494\t51\t147\t786.11\n197\tmaps/rooms/64room_000.map\t512\t512\t345\t510\t53\t157\t791.666\n197\tmaps/rooms/64room_000.map\t512\t512\t444\t456\t46\t150\t789.068\n197\tmaps/rooms/64room_000.map\t512\t512\t333\t504\t38\t178\t791.365\n197\tmaps/rooms/64room_000.map\t512\t512\t57\t3\t497\t469\t788.566\n197\tmaps/rooms/64room_000.map\t512\t512\t483\t493\t106\t38\t790.607\n197\tmaps/rooms/64room_000.map\t512\t512\t464\t423\t56\t187\t789.193\n197\tmaps/rooms/64room_000.map\t512\t512\t48\t460\t465\t8\t789.365\n197\tmaps/rooms/64room_000.map\t512\t512\t478\t471\t107\t14\t790.406\n197\tmaps/rooms/64room_000.map\t512\t512\t121\t30\t470\t466\t790.82\n197\tmaps/rooms/64room_000.map\t512\t512\t341\t499\t43\t181\t788.122\n198\tmaps/rooms/64room_000.map\t512\t512\t456\t16\t109\t473\t795.436\n198\tmaps/rooms/64room_000.map\t512\t512\t438\t468\t60\t146\t792.926\n198\tmaps/rooms/64room_000.map\t512\t512\t490\t8\t11\t438\t793.288\n198\tmaps/rooms/64room_000.map\t512\t512\t53\t31\t491\t499\t794.323\n198\tmaps/rooms/64room_000.map\t512\t512\t469\t420\t60\t183\t794.767\n198\tmaps/rooms/64room_000.map\t512\t512\t452\t27\t60\t459\t793.151\n198\tmaps/rooms/64room_000.map\t512\t512\t459\t62\t70\t502\t795.34\n198\tmaps/rooms/64room_000.map\t512\t512\t88\t479\t462\t10\t795.708\n198\tmaps/rooms/64room_000.map\t512\t512\t493\t491\t107\t25\t793.193\n198\tmaps/rooms/64room_000.map\t512\t512\t84\t26\t449\t471\t793.779\n199\tmaps/rooms/64room_000.map\t512\t512\t456\t22\t23\t434\t798.051\n199\tmaps/rooms/64room_000.map\t512\t512\t97\t481\t485\t2\t796.151\n199\tmaps/rooms/64room_000.map\t512\t512\t125\t457\t459\t21\t799.737\n199\tmaps/rooms/64room_000.map\t512\t512\t14\t92\t470\t506\t797.98\n199\tmaps/rooms/64room_000.map\t512\t512\t481\t37\t8\t485\t799.992\n199\tmaps/rooms/64room_000.map\t512\t512\t443\t486\t1\t12\t799.151\n199\tmaps/rooms/64room_000.map\t512\t512\t503\t427\t49\t152\t797.867\n199\tmaps/rooms/64room_000.map\t512\t512\t58\t504\t480\t30\t796.909\n199\tmaps/rooms/64room_000.map\t512\t512\t389\t511\t52\t185\t797.423\n199\tmaps/rooms/64room_000.map\t512\t512\t449\t31\t78\t483\t797.524\n200\tmaps/rooms/64room_000.map\t512\t512\t471\t20\t22\t474\t800.235\n200\tmaps/rooms/64room_000.map\t512\t512\t125\t21\t460\t455\t803.992\n200\tmaps/rooms/64room_000.map\t512\t512\t94\t482\t450\t27\t802.879\n200\tmaps/rooms/64room_000.map\t512\t512\t13\t155\t499\t473\t801.009\n200\tmaps/rooms/64room_000.map\t512\t512\t467\t8\t112\t465\t800.95\n200\tmaps/rooms/64room_000.map\t512\t512\t502\t12\t7\t453\t801.696\n200\tmaps/rooms/64room_000.map\t512\t512\t454\t470\t104\t22\t800.649\n200\tmaps/rooms/64room_000.map\t512\t512\t456\t464\t118\t28\t801.82\n200\tmaps/rooms/64room_000.map\t512\t512\t51\t142\t510\t423\t801.068\n200\tmaps/rooms/64room_000.map\t512\t512\t452\t8\t38\t410\t801.585\n201\tmaps/rooms/64room_000.map\t512\t512\t475\t62\t10\t500\t807.465\n201\tmaps/rooms/64room_000.map\t512\t512\t56\t53\t451\t484\t807.82\n201\tmaps/rooms/64room_000.map\t512\t512\t432\t495\t32\t191\t806.909\n201\tmaps/rooms/64room_000.map\t512\t512\t52\t6\t453\t452\t807.222\n201\tmaps/rooms/64room_000.map\t512\t512\t495\t437\t49\t177\t807.293\n201\tmaps/rooms/64room_000.map\t512\t512\t79\t504\t480\t6\t806.009\n201\tmaps/rooms/64room_000.map\t512\t512\t47\t13\t459\t478\t807.063\n201\tmaps/rooms/64room_000.map\t512\t512\t462\t40\t46\t494\t804.566\n201\tmaps/rooms/64room_000.map\t512\t512\t482\t491\t7\t55\t805.021\n201\tmaps/rooms/64room_000.map\t512\t512\t487\t447\t49\t178\t804.436\n202\tmaps/rooms/64room_000.map\t512\t512\t44\t22\t465\t491\t809.82\n202\tmaps/rooms/64room_000.map\t512\t512\t1\t500\t486\t43\t808.063\n202\tmaps/rooms/64room_000.map\t512\t512\t10\t5\t504\t450\t808.678\n202\tmaps/rooms/64room_000.map\t512\t512\t454\t463\t23\t55\t811.749\n202\tmaps/rooms/64room_000.map\t512\t512\t499\t496\t86\t8\t808.98\n202\tmaps/rooms/64room_000.map\t512\t512\t12\t154\t469\t475\t809.051\n202\tmaps/rooms/64room_000.map\t512\t512\t497\t17\t38\t502\t809.151\n202\tmaps/rooms/64room_000.map\t512\t512\t478\t471\t29\t155\t810.536\n202\tmaps/rooms/64room_000.map\t512\t512\t487\t472\t30\t155\t808.808\n202\tmaps/rooms/64room_000.map\t512\t512\t470\t500\t59\t18\t811.607\n203\tmaps/rooms/64room_000.map\t512\t512\t481\t477\t22\t19\t812.436\n203\tmaps/rooms/64room_000.map\t512\t512\t496\t509\t55\t18\t813.98\n203\tmaps/rooms/64room_000.map\t512\t512\t452\t485\t52\t12\t815.891\n203\tmaps/rooms/64room_000.map\t512\t512\t467\t482\t31\t54\t814.649\n203\tmaps/rooms/64room_000.map\t512\t512\t54\t2\t489\t493\t814.808\n203\tmaps/rooms/64room_000.map\t512\t512\t470\t488\t105\t10\t813.891\n203\tmaps/rooms/64room_000.map\t512\t512\t8\t47\t490\t494\t812.293\n203\tmaps/rooms/64room_000.map\t512\t512\t462\t43\t54\t506\t812.009\n203\tmaps/rooms/64room_000.map\t512\t512\t36\t145\t498\t475\t813.252\n203\tmaps/rooms/64room_000.map\t512\t512\t496\t505\t48\t17\t813.879\n"
  },
  {
    "path": "benchmark/scen/arena.map.scen",
    "content": "version 1\n0\tmaps/dao/arena.map\t49\t49\t1\t11\t1\t12\t1\n0\tmaps/dao/arena.map\t49\t49\t1\t12\t1\t10\t2\n0\tmaps/dao/arena.map\t49\t49\t1\t13\t4\t12\t3.41421\n0\tmaps/dao/arena.map\t49\t49\t1\t3\t3\t1\t3.41421\n0\tmaps/dao/arena.map\t49\t49\t1\t3\t4\t3\t3\n0\tmaps/dao/arena.map\t49\t49\t1\t4\t4\t2\t3.82843\n0\tmaps/dao/arena.map\t49\t49\t1\t40\t2\t39\t1.41421\n0\tmaps/dao/arena.map\t49\t49\t1\t41\t1\t39\t2\n0\tmaps/dao/arena.map\t49\t49\t1\t41\t1\t44\t3\n0\tmaps/dao/arena.map\t49\t49\t1\t42\t4\t43\t3.41421\n1\tmaps/dao/arena.map\t49\t49\t1\t10\t7\t10\t6\n1\tmaps/dao/arena.map\t49\t49\t1\t11\t1\t4\t7\n1\tmaps/dao/arena.map\t49\t49\t1\t11\t7\t14\t7.24264\n1\tmaps/dao/arena.map\t49\t49\t1\t12\t5\t7\t6.65685\n1\tmaps/dao/arena.map\t49\t49\t1\t12\t6\t15\t6.24264\n1\tmaps/dao/arena.map\t49\t49\t1\t12\t8\t11\t7.41421\n1\tmaps/dao/arena.map\t49\t49\t1\t14\t1\t9\t5\n1\tmaps/dao/arena.map\t49\t49\t1\t24\t7\t26\t6.82843\n1\tmaps/dao/arena.map\t49\t49\t1\t25\t5\t25\t4\n1\tmaps/dao/arena.map\t49\t49\t1\t35\t5\t33\t4.82843\n2\tmaps/dao/arena.map\t49\t49\t1\t11\t4\t18\t8.24264\n2\tmaps/dao/arena.map\t49\t49\t1\t12\t12\t14\t11.8284\n2\tmaps/dao/arena.map\t49\t49\t1\t13\t4\t23\t11.8284\n2\tmaps/dao/arena.map\t49\t49\t1\t13\t5\t3\t11.6569\n2\tmaps/dao/arena.map\t49\t49\t1\t13\t6\t7\t8.07107\n2\tmaps/dao/arena.map\t49\t49\t1\t13\t7\t7\t8.48528\n2\tmaps/dao/arena.map\t49\t49\t1\t23\t7\t32\t11.4853\n2\tmaps/dao/arena.map\t49\t49\t1\t24\t11\t25\t10.4142\n2\tmaps/dao/arena.map\t49\t49\t1\t24\t6\t32\t10.0711\n2\tmaps/dao/arena.map\t49\t49\t1\t25\t9\t24\t8.41421\n3\tmaps/dao/arena.map\t49\t49\t1\t10\t11\t19\t13.7279\n3\tmaps/dao/arena.map\t49\t49\t1\t10\t13\t11\t12.4142\n3\tmaps/dao/arena.map\t49\t49\t1\t11\t10\t2\t12.7279\n3\tmaps/dao/arena.map\t49\t49\t1\t12\t11\t21\t13.7279\n3\tmaps/dao/arena.map\t49\t49\t1\t12\t13\t13\t12.4142\n3\tmaps/dao/arena.map\t49\t49\t1\t12\t14\t12\t13\n3\tmaps/dao/arena.map\t49\t49\t1\t12\t6\t25\t15.0711\n3\tmaps/dao/arena.map\t49\t49\t1\t13\t11\t3\t14.1421\n3\tmaps/dao/arena.map\t49\t49\t1\t13\t13\t11\t12.8284\n3\tmaps/dao/arena.map\t49\t49\t1\t14\t6\t23\t12.2426\n4\tmaps/dao/arena.map\t49\t49\t1\t10\t18\t11\t17.4142\n4\tmaps/dao/arena.map\t49\t49\t1\t11\t16\t14\t16.2426\n4\tmaps/dao/arena.map\t49\t49\t1\t12\t14\t2\t17.1421\n4\tmaps/dao/arena.map\t49\t49\t1\t12\t17\t13\t16.4142\n4\tmaps/dao/arena.map\t49\t49\t1\t12\t9\t28\t19.3137\n4\tmaps/dao/arena.map\t49\t49\t1\t13\t4\t30\t18.8284\n4\tmaps/dao/arena.map\t49\t49\t1\t13\t9\t26\t16.8995\n4\tmaps/dao/arena.map\t49\t49\t1\t14\t14\t22\t16.3137\n4\tmaps/dao/arena.map\t49\t49\t1\t23\t10\t8\t19.3137\n4\tmaps/dao/arena.map\t49\t49\t1\t23\t14\t9\t19.9706\n5\tmaps/dao/arena.map\t49\t49\t1\t10\t13\t29\t23.9706\n5\tmaps/dao/arena.map\t49\t49\t1\t10\t18\t22\t21.9706\n5\tmaps/dao/arena.map\t49\t49\t1\t10\t19\t18\t22.1421\n5\tmaps/dao/arena.map\t49\t49\t1\t10\t21\t2\t23.3137\n5\tmaps/dao/arena.map\t49\t49\t1\t10\t5\t32\t23.6569\n5\tmaps/dao/arena.map\t49\t49\t1\t10\t6\t29\t21.0711\n5\tmaps/dao/arena.map\t49\t49\t1\t11\t20\t7\t20.6569\n5\tmaps/dao/arena.map\t49\t49\t1\t11\t21\t17\t23.0711\n5\tmaps/dao/arena.map\t49\t49\t1\t11\t22\t16\t23.0711\n5\tmaps/dao/arena.map\t49\t49\t1\t11\t8\t29\t20.8995\n6\tmaps/dao/arena.map\t49\t49\t1\t10\t22\t22\t25.9706\n6\tmaps/dao/arena.map\t49\t49\t1\t10\t5\t33\t24.6569\n6\tmaps/dao/arena.map\t49\t49\t1\t11\t10\t32\t24.7279\n6\tmaps/dao/arena.map\t49\t49\t1\t11\t20\t31\t27.8701\n6\tmaps/dao/arena.map\t49\t49\t1\t11\t21\t23\t24.9706\n6\tmaps/dao/arena.map\t49\t49\t1\t11\t24\t14\t24.2426\n6\tmaps/dao/arena.map\t49\t49\t1\t11\t25\t4\t26.8995\n6\tmaps/dao/arena.map\t49\t49\t1\t11\t3\t36\t25.8284\n6\tmaps/dao/arena.map\t49\t49\t1\t12\t19\t27\t24.2132\n6\tmaps/dao/arena.map\t49\t49\t1\t12\t2\t37\t26.2426\n7\tmaps/dao/arena.map\t49\t49\t1\t10\t22\t31\t29.6985\n7\tmaps/dao/arena.map\t49\t49\t1\t10\t24\t27\t30.0416\n7\tmaps/dao/arena.map\t49\t49\t1\t10\t28\t15\t29.0711\n7\tmaps/dao/arena.map\t49\t49\t1\t10\t7\t39\t31.4853\n7\tmaps/dao/arena.map\t49\t49\t1\t11\t12\t35\t28.5563\n7\tmaps/dao/arena.map\t49\t49\t1\t11\t28\t18\t29.8995\n7\tmaps/dao/arena.map\t49\t49\t1\t11\t5\t40\t30.6569\n7\tmaps/dao/arena.map\t49\t49\t1\t12\t26\t3\t28.7279\n7\tmaps/dao/arena.map\t49\t49\t1\t12\t29\t14\t28.8284\n7\tmaps/dao/arena.map\t49\t49\t1\t12\t29\t6\t30.4853\n8\tmaps/dao/arena.map\t49\t49\t1\t10\t25\t36\t35.9411\n8\tmaps/dao/arena.map\t49\t49\t1\t10\t27\t25\t32.2132\n8\tmaps/dao/arena.map\t49\t49\t1\t10\t32\t4\t33.4853\n8\tmaps/dao/arena.map\t49\t49\t1\t10\t33\t4\t34.4853\n8\tmaps/dao/arena.map\t49\t49\t1\t11\t10\t42\t34.7279\n8\tmaps/dao/arena.map\t49\t49\t1\t11\t27\t28\t33.0416\n8\tmaps/dao/arena.map\t49\t49\t1\t11\t30\t2\t32.7279\n8\tmaps/dao/arena.map\t49\t49\t1\t11\t31\t3\t33.3137\n8\tmaps/dao/arena.map\t49\t49\t1\t11\t5\t42\t32.6569\n8\tmaps/dao/arena.map\t49\t49\t1\t12\t18\t37\t32.8701\n9\tmaps/dao/arena.map\t49\t49\t1\t10\t15\t43\t38.799\n9\tmaps/dao/arena.map\t49\t49\t1\t10\t21\t41\t39.2843\n9\tmaps/dao/arena.map\t49\t49\t1\t10\t27\t37\t37.7696\n9\tmaps/dao/arena.map\t49\t49\t1\t10\t29\t38\t39.598\n9\tmaps/dao/arena.map\t49\t49\t1\t10\t31\t25\t36.2132\n9\tmaps/dao/arena.map\t49\t49\t1\t10\t38\t13\t38.2426\n9\tmaps/dao/arena.map\t49\t49\t1\t10\t38\t6\t38.6569\n9\tmaps/dao/arena.map\t49\t49\t1\t10\t39\t6\t39.6569\n9\tmaps/dao/arena.map\t49\t49\t1\t10\t40\t9\t39.4142\n9\tmaps/dao/arena.map\t49\t49\t1\t11\t11\t43\t36.1421\n10\tmaps/dao/arena.map\t49\t49\t1\t10\t12\t47\t41.5563\n10\tmaps/dao/arena.map\t49\t49\t1\t10\t14\t47\t42.3848\n10\tmaps/dao/arena.map\t49\t49\t1\t10\t16\t46\t42.2132\n10\tmaps/dao/arena.map\t49\t49\t1\t10\t28\t41\t42.1838\n10\tmaps/dao/arena.map\t49\t49\t1\t10\t37\t21\t40.5563\n10\tmaps/dao/arena.map\t49\t49\t1\t10\t39\t24\t43.799\n10\tmaps/dao/arena.map\t49\t49\t1\t11\t16\t45\t40.2132\n10\tmaps/dao/arena.map\t49\t49\t1\t11\t21\t43\t40.2843\n10\tmaps/dao/arena.map\t49\t49\t1\t11\t32\t39\t42.598\n10\tmaps/dao/arena.map\t49\t49\t1\t11\t34\t29\t40.4558\n11\tmaps/dao/arena.map\t49\t49\t1\t10\t29\t43\t44.598\n11\tmaps/dao/arena.map\t49\t49\t1\t10\t43\t15\t44.0711\n11\tmaps/dao/arena.map\t49\t49\t1\t10\t43\t17\t44.8995\n11\tmaps/dao/arena.map\t49\t49\t1\t10\t45\t10\t44\n11\tmaps/dao/arena.map\t49\t49\t1\t10\t46\t15\t47.0711\n11\tmaps/dao/arena.map\t49\t49\t1\t10\t46\t3\t47.8995\n11\tmaps/dao/arena.map\t49\t49\t1\t11\t30\t45\t46.0122\n11\tmaps/dao/arena.map\t49\t49\t1\t11\t35\t41\t46.4264\n11\tmaps/dao/arena.map\t49\t49\t1\t11\t35\t42\t46.8406\n11\tmaps/dao/arena.map\t49\t49\t1\t11\t43\t3\t45.3137\n12\tmaps/dao/arena.map\t49\t49\t1\t10\t31\t46\t48.4264\n12\tmaps/dao/arena.map\t49\t49\t1\t10\t34\t46\t49.669\n12\tmaps/dao/arena.map\t49\t49\t1\t10\t35\t46\t50.0833\n12\tmaps/dao/arena.map\t49\t49\t1\t10\t36\t42\t48.2548\n12\tmaps/dao/arena.map\t49\t49\t1\t10\t38\t45\t51.4975\n12\tmaps/dao/arena.map\t49\t49\t1\t10\t46\t18\t48.3137\n12\tmaps/dao/arena.map\t49\t49\t1\t11\t37\t44\t49.669\n12\tmaps/dao/arena.map\t49\t49\t1\t11\t41\t35\t49.9411\n12\tmaps/dao/arena.map\t49\t49\t1\t11\t43\t27\t48.6274\n12\tmaps/dao/arena.map\t49\t49\t1\t11\t44\t25\t48.799\n13\tmaps/dao/arena.map\t49\t49\t1\t10\t41\t40\t52.4264\n13\tmaps/dao/arena.map\t49\t49\t1\t10\t43\t40\t54.4264\n13\tmaps/dao/arena.map\t49\t49\t1\t11\t39\t47\t52.9117\n13\tmaps/dao/arena.map\t49\t49\t1\t11\t42\t46\t55.4975\n13\tmaps/dao/arena.map\t49\t49\t1\t11\t45\t33\t53.1127\n13\tmaps/dao/arena.map\t49\t49\t1\t12\t43\t43\t54.8406\n13\tmaps/dao/arena.map\t49\t49\t1\t12\t44\t38\t53.7696\n13\tmaps/dao/arena.map\t49\t49\t1\t12\t46\t34\t54.1127\n13\tmaps/dao/arena.map\t49\t49\t1\t13\t42\t40\t52.1838\n13\tmaps/dao/arena.map\t49\t49\t1\t14\t46\t32\t52.4558\n14\tmaps/dao/arena.map\t49\t49\t1\t14\t44\t46\t56.2548\n14\tmaps/dao/arena.map\t49\t49\t1\t14\t46\t43\t57.0122\n14\tmaps/dao/arena.map\t49\t49\t1\t35\t46\t3\t58.2548\n14\tmaps/dao/arena.map\t49\t49\t1\t37\t43\t1\t56.9117\n14\tmaps/dao/arena.map\t49\t49\t1\t38\t43\t3\t56.4975\n14\tmaps/dao/arena.map\t49\t49\t1\t38\t47\t13\t56.3553\n14\tmaps/dao/arena.map\t49\t49\t1\t39\t47\t14\t56.3553\n14\tmaps/dao/arena.map\t49\t49\t1\t4\t38\t47\t58.3259\n14\tmaps/dao/arena.map\t49\t49\t1\t4\t41\t42\t56.9117\n14\tmaps/dao/arena.map\t49\t49\t1\t42\t44\t5\t58.3259\n15\tmaps/dao/arena.map\t49\t49\t1\t3\t41\t47\t60.5685\n15\tmaps/dao/arena.map\t49\t49\t1\t3\t47\t37\t60.0833\n15\tmaps/dao/arena.map\t49\t49\t1\t39\t46\t1\t60.7401\n15\tmaps/dao/arena.map\t49\t49\t1\t4\t43\t46\t60.5685\n15\tmaps/dao/arena.map\t49\t49\t1\t4\t44\t45\t61.1543\n15\tmaps/dao/arena.map\t49\t49\t1\t40\t47\t3\t61.3259\n15\tmaps/dao/arena.map\t49\t49\t1\t41\t46\t2\t61.1543\n15\tmaps/dao/arena.map\t49\t49\t1\t45\t47\t9\t60.9117\n15\tmaps/dao/arena.map\t49\t49\t1\t7\t47\t44\t61.3259\n15\tmaps/dao/arena.map\t49\t49\t1\t7\t47\t46\t62.1543\n"
  },
  {
    "path": "benchmark/scen/lak304d.map.scen",
    "content": "version 1\n0\tmaps/dao/lak304d.map\t193\t194\t10\t115\t7\t116\t3.41421\n0\tmaps/dao/lak304d.map\t193\t194\t10\t66\t13\t65\t3.41421\n0\tmaps/dao/lak304d.map\t193\t194\t10\t88\t12\t90\t3.41421\n0\tmaps/dao/lak304d.map\t193\t194\t100\t43\t97\t42\t3.41421\n0\tmaps/dao/lak304d.map\t193\t194\t100\t98\t102\t95\t3.82843\n0\tmaps/dao/lak304d.map\t193\t194\t101\t109\t101\t109\t0\n0\tmaps/dao/lak304d.map\t193\t194\t101\t113\t101\t111\t2\n0\tmaps/dao/lak304d.map\t193\t194\t101\t44\t98\t45\t3.41421\n0\tmaps/dao/lak304d.map\t193\t194\t101\t91\t100\t94\t3.41421\n0\tmaps/dao/lak304d.map\t193\t194\t103\t101\t101\t101\t2\n1\tmaps/dao/lak304d.map\t193\t194\t10\t68\t6\t66\t4.82843\n1\tmaps/dao/lak304d.map\t193\t194\t10\t70\t5\t73\t6.24264\n1\tmaps/dao/lak304d.map\t193\t194\t100\t115\t96\t116\t4.41421\n1\tmaps/dao/lak304d.map\t193\t194\t100\t118\t105\t119\t5.41421\n1\tmaps/dao/lak304d.map\t193\t194\t100\t127\t96\t125\t4.82843\n1\tmaps/dao/lak304d.map\t193\t194\t100\t46\t101\t51\t5.41421\n1\tmaps/dao/lak304d.map\t193\t194\t101\t121\t98\t124\t4.24264\n1\tmaps/dao/lak304d.map\t193\t194\t101\t141\t107\t142\t6.41421\n1\tmaps/dao/lak304d.map\t193\t194\t101\t42\t101\t47\t5\n1\tmaps/dao/lak304d.map\t193\t194\t101\t91\t107\t89\t6.82843\n2\tmaps/dao/lak304d.map\t193\t194\t1\t82\t3\t89\t9.24264\n2\tmaps/dao/lak304d.map\t193\t194\t100\t116\t107\t107\t11.8995\n2\tmaps/dao/lak304d.map\t193\t194\t100\t146\t110\t146\t10\n2\tmaps/dao/lak304d.map\t193\t194\t100\t148\t103\t141\t8.24264\n2\tmaps/dao/lak304d.map\t193\t194\t100\t167\t110\t170\t11.2426\n2\tmaps/dao/lak304d.map\t193\t194\t100\t176\t109\t177\t9.41421\n2\tmaps/dao/lak304d.map\t193\t194\t100\t82\t98\t92\t11.4142\n2\tmaps/dao/lak304d.map\t193\t194\t100\t90\t108\t84\t10.4853\n2\tmaps/dao/lak304d.map\t193\t194\t101\t113\t108\t121\t10.8995\n2\tmaps/dao/lak304d.map\t193\t194\t101\t172\t99\t163\t9.82843\n3\tmaps/dao/lak304d.map\t193\t194\t10\t117\t12\t103\t14.8284\n3\tmaps/dao/lak304d.map\t193\t194\t10\t67\t17\t56\t13.8995\n3\tmaps/dao/lak304d.map\t193\t194\t10\t70\t1\t81\t14.7279\n3\tmaps/dao/lak304d.map\t193\t194\t100\t126\t91\t124\t13.4853\n3\tmaps/dao/lak304d.map\t193\t194\t100\t174\t115\t172\t15.8284\n3\tmaps/dao/lak304d.map\t193\t194\t100\t175\t110\t182\t14.0711\n3\tmaps/dao/lak304d.map\t193\t194\t100\t73\t107\t72\t15.6569\n3\tmaps/dao/lak304d.map\t193\t194\t100\t77\t90\t87\t14.1421\n3\tmaps/dao/lak304d.map\t193\t194\t100\t97\t105\t110\t15.0711\n3\tmaps/dao/lak304d.map\t193\t194\t101\t100\t90\t107\t13.8995\n4\tmaps/dao/lak304d.map\t193\t194\t100\t103\t87\t117\t19.3848\n4\tmaps/dao/lak304d.map\t193\t194\t100\t105\t94\t121\t18.4853\n4\tmaps/dao/lak304d.map\t193\t194\t100\t112\t83\t105\t19.8995\n4\tmaps/dao/lak304d.map\t193\t194\t100\t118\t87\t108\t17.1421\n4\tmaps/dao/lak304d.map\t193\t194\t100\t124\t115\t127\t16.2426\n4\tmaps/dao/lak304d.map\t193\t194\t100\t166\t99\t182\t16.4142\n4\tmaps/dao/lak304d.map\t193\t194\t100\t175\t104\t160\t16.6569\n4\tmaps/dao/lak304d.map\t193\t194\t100\t181\t115\t169\t19.9706\n4\tmaps/dao/lak304d.map\t193\t194\t100\t72\t88\t85\t17.9706\n4\tmaps/dao/lak304d.map\t193\t194\t100\t82\t109\t89\t16.8284\n5\tmaps/dao/lak304d.map\t193\t194\t1\t115\t12\t132\t21.5563\n5\tmaps/dao/lak304d.map\t193\t194\t10\t117\t29\t118\t20.2426\n5\tmaps/dao/lak304d.map\t193\t194\t100\t101\t93\t80\t23.8995\n5\tmaps/dao/lak304d.map\t193\t194\t100\t105\t97\t85\t21.2426\n5\tmaps/dao/lak304d.map\t193\t194\t100\t106\t82\t114\t21.3137\n5\tmaps/dao/lak304d.map\t193\t194\t100\t107\t102\t129\t22.8284\n5\tmaps/dao/lak304d.map\t193\t194\t100\t119\t79\t112\t23.8995\n5\tmaps/dao/lak304d.map\t193\t194\t100\t122\t83\t108\t22.799\n5\tmaps/dao/lak304d.map\t193\t194\t100\t147\t81\t143\t20.6569\n5\tmaps/dao/lak304d.map\t193\t194\t100\t38\t116\t49\t20.5563\n6\tmaps/dao/lak304d.map\t193\t194\t1\t78\t25\t70\t27.3137\n6\tmaps/dao/lak304d.map\t193\t194\t10\t122\t19\t104\t24.6569\n6\tmaps/dao/lak304d.map\t193\t194\t10\t62\t28\t50\t25.3137\n6\tmaps/dao/lak304d.map\t193\t194\t10\t66\t30\t57\t25.4853\n6\tmaps/dao/lak304d.map\t193\t194\t100\t182\t122\t168\t27.799\n6\tmaps/dao/lak304d.map\t193\t194\t100\t40\t77\t48\t26.3137\n6\tmaps/dao/lak304d.map\t193\t194\t100\t92\t125\t91\t25.4142\n6\tmaps/dao/lak304d.map\t193\t194\t101\t162\t109\t184\t26.4853\n6\tmaps/dao/lak304d.map\t193\t194\t101\t87\t74\t87\t27.8284\n6\tmaps/dao/lak304d.map\t193\t194\t101\t89\t108\t114\t27.8995\n7\tmaps/dao/lak304d.map\t193\t194\t1\t82\t23\t62\t30.8701\n7\tmaps/dao/lak304d.map\t193\t194\t10\t125\t24\t149\t29.799\n7\tmaps/dao/lak304d.map\t193\t194\t10\t126\t28\t105\t29.0416\n7\tmaps/dao/lak304d.map\t193\t194\t10\t128\t4\t102\t29.6569\n7\tmaps/dao/lak304d.map\t193\t194\t10\t61\t16\t89\t30.4853\n7\tmaps/dao/lak304d.map\t193\t194\t10\t94\t13\t65\t31.8995\n7\tmaps/dao/lak304d.map\t193\t194\t100\t103\t98\t75\t28.8284\n7\tmaps/dao/lak304d.map\t193\t194\t100\t107\t78\t125\t30.6274\n7\tmaps/dao/lak304d.map\t193\t194\t100\t125\t71\t118\t31.8995\n7\tmaps/dao/lak304d.map\t193\t194\t100\t147\t76\t157\t28.1421\n8\tmaps/dao/lak304d.map\t193\t194\t10\t121\t25\t147\t32.2132\n8\tmaps/dao/lak304d.map\t193\t194\t10\t77\t36\t62\t33.9706\n8\tmaps/dao/lak304d.map\t193\t194\t10\t83\t28\t60\t33.9706\n8\tmaps/dao/lak304d.map\t193\t194\t100\t107\t86\t135\t33.799\n8\tmaps/dao/lak304d.map\t193\t194\t100\t114\t90\t84\t34.1421\n8\tmaps/dao/lak304d.map\t193\t194\t100\t122\t102\t88\t34.8284\n8\tmaps/dao/lak304d.map\t193\t194\t100\t124\t75\t102\t34.1127\n8\tmaps/dao/lak304d.map\t193\t194\t100\t127\t75\t106\t34.2843\n8\tmaps/dao/lak304d.map\t193\t194\t100\t152\t128\t140\t32.9706\n8\tmaps/dao/lak304d.map\t193\t194\t100\t73\t112\t103\t35.799\n9\tmaps/dao/lak304d.map\t193\t194\t10\t61\t6\t94\t36.3137\n9\tmaps/dao/lak304d.map\t193\t194\t10\t75\t20\t92\t37.7279\n9\tmaps/dao/lak304d.map\t193\t194\t100\t106\t122\t77\t38.1127\n9\tmaps/dao/lak304d.map\t193\t194\t100\t126\t64\t117\t39.7279\n9\tmaps/dao/lak304d.map\t193\t194\t100\t136\t112\t102\t38.9706\n9\tmaps/dao/lak304d.map\t193\t194\t100\t136\t91\t101\t38.7279\n9\tmaps/dao/lak304d.map\t193\t194\t100\t74\t116\t71\t39.3848\n9\tmaps/dao/lak304d.map\t193\t194\t101\t109\t109\t75\t39.5563\n9\tmaps/dao/lak304d.map\t193\t194\t101\t117\t85\t86\t39.3848\n9\tmaps/dao/lak304d.map\t193\t194\t101\t127\t88\t96\t36.3848\n10\tmaps/dao/lak304d.map\t193\t194\t1\t81\t23\t51\t43.4558\n10\tmaps/dao/lak304d.map\t193\t194\t10\t117\t29\t152\t42.8701\n10\tmaps/dao/lak304d.map\t193\t194\t10\t118\t23\t155\t43.2132\n10\tmaps/dao/lak304d.map\t193\t194\t10\t93\t18\t55\t42.9706\n10\tmaps/dao/lak304d.map\t193\t194\t100\t102\t68\t88\t40.1421\n10\tmaps/dao/lak304d.map\t193\t194\t100\t109\t86\t71\t43.799\n10\tmaps/dao/lak304d.map\t193\t194\t100\t117\t124\t86\t40.9411\n10\tmaps/dao/lak304d.map\t193\t194\t100\t121\t110\t85\t40.1421\n10\tmaps/dao/lak304d.map\t193\t194\t100\t136\t73\t123\t42.3848\n10\tmaps/dao/lak304d.map\t193\t194\t100\t46\t77\t22\t40.5563\n11\tmaps/dao/lak304d.map\t193\t194\t10\t109\t29\t147\t45.8701\n11\tmaps/dao/lak304d.map\t193\t194\t10\t68\t53\t80\t47.9706\n11\tmaps/dao/lak304d.map\t193\t194\t10\t77\t45\t53\t47.8701\n11\tmaps/dao/lak304d.map\t193\t194\t10\t78\t45\t77\t44.3848\n11\tmaps/dao/lak304d.map\t193\t194\t100\t104\t81\t68\t45.0416\n11\tmaps/dao/lak304d.map\t193\t194\t100\t113\t135\t84\t47.598\n11\tmaps/dao/lak304d.map\t193\t194\t100\t114\t78\t82\t44.6274\n11\tmaps/dao/lak304d.map\t193\t194\t100\t134\t98\t89\t45.8284\n11\tmaps/dao/lak304d.map\t193\t194\t100\t146\t61\t167\t47.6985\n11\tmaps/dao/lak304d.map\t193\t194\t100\t148\t63\t132\t44.799\n12\tmaps/dao/lak304d.map\t193\t194\t1\t114\t42\t137\t50.5269\n12\tmaps/dao/lak304d.map\t193\t194\t1\t92\t31\t58\t49.9411\n12\tmaps/dao/lak304d.map\t193\t194\t10\t66\t44\t93\t49.2843\n12\tmaps/dao/lak304d.map\t193\t194\t10\t83\t27\t40\t50.6274\n12\tmaps/dao/lak304d.map\t193\t194\t10\t88\t38\t81\t49.6274\n12\tmaps/dao/lak304d.map\t193\t194\t100\t114\t139\t87\t50.1838\n12\tmaps/dao/lak304d.map\t193\t194\t100\t119\t124\t80\t48.9411\n12\tmaps/dao/lak304d.map\t193\t194\t100\t136\t65\t115\t49.5563\n12\tmaps/dao/lak304d.map\t193\t194\t100\t155\t137\t122\t50.669\n12\tmaps/dao/lak304d.map\t193\t194\t100\t79\t98\t127\t48.8284\n13\tmaps/dao/lak304d.map\t193\t194\t10\t115\t43\t150\t52.1838\n13\tmaps/dao/lak304d.map\t193\t194\t10\t81\t45\t90\t52.8701\n13\tmaps/dao/lak304d.map\t193\t194\t10\t94\t25\t88\t54.5563\n13\tmaps/dao/lak304d.map\t193\t194\t100\t117\t50\t113\t55.799\n13\tmaps/dao/lak304d.map\t193\t194\t100\t123\t74\t86\t55.9706\n13\tmaps/dao/lak304d.map\t193\t194\t100\t148\t145\t125\t54.5269\n13\tmaps/dao/lak304d.map\t193\t194\t100\t149\t69\t183\t54.4558\n13\tmaps/dao/lak304d.map\t193\t194\t100\t44\t52\t62\t55.4558\n13\tmaps/dao/lak304d.map\t193\t194\t100\t78\t61\t108\t55.5269\n13\tmaps/dao/lak304d.map\t193\t194\t101\t120\t114\t71\t54.3848\n14\tmaps/dao/lak304d.map\t193\t194\t10\t124\t53\t131\t56.6274\n14\tmaps/dao/lak304d.map\t193\t194\t10\t72\t58\t68\t56.2843\n14\tmaps/dao/lak304d.map\t193\t194\t10\t76\t50\t100\t59.9411\n14\tmaps/dao/lak304d.map\t193\t194\t10\t79\t51\t44\t59.598\n14\tmaps/dao/lak304d.map\t193\t194\t10\t81\t50\t47\t59.3553\n14\tmaps/dao/lak304d.map\t193\t194\t10\t82\t46\t95\t59.2843\n14\tmaps/dao/lak304d.map\t193\t194\t100\t125\t73\t89\t57.7279\n14\tmaps/dao/lak304d.map\t193\t194\t100\t127\t127\t82\t56.1838\n14\tmaps/dao/lak304d.map\t193\t194\t100\t130\t93\t74\t58.8995\n14\tmaps/dao/lak304d.map\t193\t194\t100\t154\t91\t186\t56.3137\n15\tmaps/dao/lak304d.map\t193\t194\t1\t82\t27\t33\t60.3553\n15\tmaps/dao/lak304d.map\t193\t194\t10\t55\t52\t68\t60.0122\n15\tmaps/dao/lak304d.map\t193\t194\t100\t112\t45\t121\t63.799\n15\tmaps/dao/lak304d.map\t193\t194\t100\t131\t91\t72\t62.7279\n15\tmaps/dao/lak304d.map\t193\t194\t100\t135\t79\t92\t62.9706\n15\tmaps/dao/lak304d.map\t193\t194\t100\t163\t151\t135\t63.1838\n15\tmaps/dao/lak304d.map\t193\t194\t100\t176\t150\t167\t63.5269\n15\tmaps/dao/lak304d.map\t193\t194\t100\t46\t50\t74\t61.598\n15\tmaps/dao/lak304d.map\t193\t194\t100\t47\t48\t71\t61.9411\n15\tmaps/dao/lak304d.map\t193\t194\t100\t76\t113\t132\t62.2132\n16\tmaps/dao/lak304d.map\t193\t194\t10\t123\t46\t172\t64.4975\n16\tmaps/dao/lak304d.map\t193\t194\t10\t128\t59\t125\t65.9411\n16\tmaps/dao/lak304d.map\t193\t194\t10\t76\t60\t61\t64.0122\n16\tmaps/dao/lak304d.map\t193\t194\t100\t104\t145\t103\t66.7696\n16\tmaps/dao/lak304d.map\t193\t194\t100\t118\t144\t71\t66.9828\n16\tmaps/dao/lak304d.map\t193\t194\t100\t154\t47\t151\t67.1127\n16\tmaps/dao/lak304d.map\t193\t194\t100\t155\t140\t109\t65.4975\n16\tmaps/dao/lak304d.map\t193\t194\t101\t101\t47\t121\t65.2132\n16\tmaps/dao/lak304d.map\t193\t194\t101\t108\t51\t89\t67.4853\n16\tmaps/dao/lak304d.map\t193\t194\t101\t112\t56\t125\t66.7279\n17\tmaps/dao/lak304d.map\t193\t194\t10\t119\t71\t142\t70.5269\n17\tmaps/dao/lak304d.map\t193\t194\t100\t104\t50\t87\t68.0711\n17\tmaps/dao/lak304d.map\t193\t194\t100\t106\t128\t63\t70.2548\n17\tmaps/dao/lak304d.map\t193\t194\t100\t112\t133\t62\t71.669\n17\tmaps/dao/lak304d.map\t193\t194\t100\t129\t52\t122\t70.6985\n17\tmaps/dao/lak304d.map\t193\t194\t100\t133\t47\t103\t69.5269\n17\tmaps/dao/lak304d.map\t193\t194\t100\t141\t55\t113\t70.9411\n17\tmaps/dao/lak304d.map\t193\t194\t100\t163\t146\t126\t70.9411\n17\tmaps/dao/lak304d.map\t193\t194\t100\t82\t127\t62\t70.799\n17\tmaps/dao/lak304d.map\t193\t194\t100\t94\t44\t90\t71.6985\n18\tmaps/dao/lak304d.map\t193\t194\t10\t104\t58\t152\t74.9117\n18\tmaps/dao/lak304d.map\t193\t194\t10\t64\t62\t50\t75.4975\n18\tmaps/dao/lak304d.map\t193\t194\t10\t74\t62\t105\t74.598\n18\tmaps/dao/lak304d.map\t193\t194\t10\t79\t51\t109\t72.3553\n18\tmaps/dao/lak304d.map\t193\t194\t100\t101\t146\t110\t72.1127\n18\tmaps/dao/lak304d.map\t193\t194\t100\t102\t137\t54\t73.8701\n18\tmaps/dao/lak304d.map\t193\t194\t100\t135\t52\t119\t73.6985\n18\tmaps/dao/lak304d.map\t193\t194\t100\t152\t167\t143\t74.0416\n18\tmaps/dao/lak304d.map\t193\t194\t100\t51\t52\t90\t74.3553\n18\tmaps/dao/lak304d.map\t193\t194\t100\t80\t46\t119\t74.2548\n19\tmaps/dao/lak304d.map\t193\t194\t1\t112\t64\t131\t77.4975\n19\tmaps/dao/lak304d.map\t193\t194\t10\t63\t55\t115\t77.0833\n19\tmaps/dao/lak304d.map\t193\t194\t10\t94\t59\t68\t79.7696\n19\tmaps/dao/lak304d.map\t193\t194\t100\t105\t164\t81\t79.4975\n19\tmaps/dao/lak304d.map\t193\t194\t100\t106\t152\t61\t79.669\n19\tmaps/dao/lak304d.map\t193\t194\t100\t149\t162\t110\t78.1543\n19\tmaps/dao/lak304d.map\t193\t194\t100\t151\t144\t170\t77.5269\n19\tmaps/dao/lak304d.map\t193\t194\t100\t155\t152\t101\t78.468\n19\tmaps/dao/lak304d.map\t193\t194\t100\t161\t148\t121\t76.7696\n19\tmaps/dao/lak304d.map\t193\t194\t100\t164\t164\t150\t78.2843\n20\tmaps/dao/lak304d.map\t193\t194\t10\t88\t60\t42\t80.669\n20\tmaps/dao/lak304d.map\t193\t194\t100\t101\t163\t86\t82.4264\n20\tmaps/dao/lak304d.map\t193\t194\t100\t106\t62\t138\t80.3848\n20\tmaps/dao/lak304d.map\t193\t194\t100\t107\t53\t142\t80.2426\n20\tmaps/dao/lak304d.map\t193\t194\t100\t115\t134\t54\t80.4975\n20\tmaps/dao/lak304d.map\t193\t194\t100\t119\t146\t57\t82.8112\n20\tmaps/dao/lak304d.map\t193\t194\t100\t124\t144\t104\t80.5685\n20\tmaps/dao/lak304d.map\t193\t194\t100\t143\t33\t161\t81.7696\n20\tmaps/dao/lak304d.map\t193\t194\t100\t146\t26\t127\t81.8701\n20\tmaps/dao/lak304d.map\t193\t194\t100\t149\t59\t103\t80.8406\n21\tmaps/dao/lak304d.map\t193\t194\t10\t64\t65\t119\t87.1543\n21\tmaps/dao/lak304d.map\t193\t194\t10\t70\t73\t113\t87.2548\n21\tmaps/dao/lak304d.map\t193\t194\t10\t70\t75\t104\t87.1838\n21\tmaps/dao/lak304d.map\t193\t194\t100\t106\t34\t76\t84.8701\n21\tmaps/dao/lak304d.map\t193\t194\t100\t118\t138\t113\t86.0538\n21\tmaps/dao/lak304d.map\t193\t194\t100\t144\t27\t121\t84.5269\n21\tmaps/dao/lak304d.map\t193\t194\t100\t153\t169\t117\t86.397\n21\tmaps/dao/lak304d.map\t193\t194\t100\t154\t122\t175\t87.9117\n21\tmaps/dao/lak304d.map\t193\t194\t100\t81\t155\t50\t86.5269\n21\tmaps/dao/lak304d.map\t193\t194\t100\t89\t168\t50\t87.669\n22\tmaps/dao/lak304d.map\t193\t194\t10\t105\t74\t148\t89.4264\n22\tmaps/dao/lak304d.map\t193\t194\t10\t114\t48\t106\t89.0122\n22\tmaps/dao/lak304d.map\t193\t194\t100\t108\t57\t66\t91.9706\n22\tmaps/dao/lak304d.map\t193\t194\t100\t116\t159\t116\t90.0538\n22\tmaps/dao/lak304d.map\t193\t194\t100\t135\t151\t102\t89.9828\n22\tmaps/dao/lak304d.map\t193\t194\t100\t151\t23\t158\t89.8406\n22\tmaps/dao/lak304d.map\t193\t194\t100\t152\t67\t105\t88.669\n22\tmaps/dao/lak304d.map\t193\t194\t100\t161\t103\t144\t91.9411\n22\tmaps/dao/lak304d.map\t193\t194\t100\t168\t108\t146\t89.8406\n22\tmaps/dao/lak304d.map\t193\t194\t100\t170\t169\t156\t88.8406\n23\tmaps/dao/lak304d.map\t193\t194\t1\t78\t70\t111\t94.9117\n23\tmaps/dao/lak304d.map\t193\t194\t1\t82\t68\t106\t92.4975\n23\tmaps/dao/lak304d.map\t193\t194\t1\t89\t53\t114\t92.4975\n23\tmaps/dao/lak304d.map\t193\t194\t10\t124\t91\t153\t93.0122\n23\tmaps/dao/lak304d.map\t193\t194\t10\t63\t83\t49\t92.0538\n23\tmaps/dao/lak304d.map\t193\t194\t10\t65\t86\t46\t95.468\n23\tmaps/dao/lak304d.map\t193\t194\t10\t74\t63\t128\t93.0833\n23\tmaps/dao/lak304d.map\t193\t194\t100\t100\t42\t135\t92.2132\n23\tmaps/dao/lak304d.map\t193\t194\t100\t110\t179\t69\t95.9828\n23\tmaps/dao/lak304d.map\t193\t194\t100\t110\t71\t149\t95.1127\n24\tmaps/dao/lak304d.map\t193\t194\t1\t115\t88\t143\t98.598\n24\tmaps/dao/lak304d.map\t193\t194\t1\t92\t45\t120\t97.598\n24\tmaps/dao/lak304d.map\t193\t194\t10\t104\t43\t109\t98.0833\n24\tmaps/dao/lak304d.map\t193\t194\t10\t125\t68\t119\t98.7696\n24\tmaps/dao/lak304d.map\t193\t194\t10\t128\t70\t158\t96.669\n24\tmaps/dao/lak304d.map\t193\t194\t10\t55\t61\t123\t97.3259\n24\tmaps/dao/lak304d.map\t193\t194\t10\t65\t78\t34\t99.3675\n24\tmaps/dao/lak304d.map\t193\t194\t10\t73\t84\t33\t99.5391\n24\tmaps/dao/lak304d.map\t193\t194\t10\t90\t73\t50\t97.2254\n24\tmaps/dao/lak304d.map\t193\t194\t10\t92\t73\t51\t99.397\n25\tmaps/dao/lak304d.map\t193\t194\t10\t103\t58\t107\t100.184\n25\tmaps/dao/lak304d.map\t193\t194\t10\t72\t47\t141\t103.598\n25\tmaps/dao/lak304d.map\t193\t194\t10\t83\t74\t123\t102.225\n25\tmaps/dao/lak304d.map\t193\t194\t100\t105\t149\t33\t101.083\n25\tmaps/dao/lak304d.map\t193\t194\t100\t109\t185\t82\t101.983\n25\tmaps/dao/lak304d.map\t193\t194\t100\t109\t19\t86\t101.698\n25\tmaps/dao/lak304d.map\t193\t194\t100\t112\t141\t33\t103.983\n25\tmaps/dao/lak304d.map\t193\t194\t100\t115\t20\t82\t100.941\n25\tmaps/dao/lak304d.map\t193\t194\t100\t118\t168\t121\t102.539\n25\tmaps/dao/lak304d.map\t193\t194\t100\t125\t175\t73\t101.225\n26\tmaps/dao/lak304d.map\t193\t194\t1\t116\t67\t112\t106.426\n26\tmaps/dao/lak304d.map\t193\t194\t10\t124\t75\t121\t105.841\n26\tmaps/dao/lak304d.map\t193\t194\t10\t60\t46\t139\t107.912\n26\tmaps/dao/lak304d.map\t193\t194\t10\t68\t48\t146\t107.255\n26\tmaps/dao/lak304d.map\t193\t194\t10\t70\t68\t140\t104.569\n26\tmaps/dao/lak304d.map\t193\t194\t10\t71\t63\t143\t105.083\n26\tmaps/dao/lak304d.map\t193\t194\t10\t71\t94\t103\t106.184\n26\tmaps/dao/lak304d.map\t193\t194\t10\t72\t91\t102\t104.012\n26\tmaps/dao/lak304d.map\t193\t194\t100\t103\t141\t27\t106.255\n26\tmaps/dao/lak304d.map\t193\t194\t100\t103\t32\t158\t107.184\n27\tmaps/dao/lak304d.map\t193\t194\t1\t113\t69\t161\t111.64\n27\tmaps/dao/lak304d.map\t193\t194\t1\t78\t85\t116\t111.983\n27\tmaps/dao/lak304d.map\t193\t194\t10\t117\t53\t83\t110.012\n27\tmaps/dao/lak304d.map\t193\t194\t10\t117\t79\t114\t109.841\n27\tmaps/dao/lak304d.map\t193\t194\t10\t121\t44\t81\t111.598\n27\tmaps/dao/lak304d.map\t193\t194\t10\t62\t77\t26\t109.024\n27\tmaps/dao/lak304d.map\t193\t194\t10\t66\t95\t99\t110.912\n27\tmaps/dao/lak304d.map\t193\t194\t10\t71\t99\t39\t108.882\n27\tmaps/dao/lak304d.map\t193\t194\t10\t73\t72\t144\t110.64\n27\tmaps/dao/lak304d.map\t193\t194\t10\t77\t87\t26\t111.196\n28\tmaps/dao/lak304d.map\t193\t194\t1\t80\t75\t29\t115.853\n28\tmaps/dao/lak304d.map\t193\t194\t1\t82\t68\t137\t114.711\n28\tmaps/dao/lak304d.map\t193\t194\t10\t102\t71\t164\t114.64\n28\tmaps/dao/lak304d.map\t193\t194\t10\t111\t79\t115\t115.669\n28\tmaps/dao/lak304d.map\t193\t194\t10\t112\t74\t174\t113.397\n28\tmaps/dao/lak304d.map\t193\t194\t10\t63\t94\t116\t112.397\n28\tmaps/dao/lak304d.map\t193\t194\t10\t69\t98\t117\t114.326\n28\tmaps/dao/lak304d.map\t193\t194\t10\t74\t87\t128\t113.569\n28\tmaps/dao/lak304d.map\t193\t194\t10\t83\t90\t111\t113.255\n28\tmaps/dao/lak304d.map\t193\t194\t10\t90\t90\t47\t115.468\n29\tmaps/dao/lak304d.map\t193\t194\t1\t112\t104\t141\t118.326\n29\tmaps/dao/lak304d.map\t193\t194\t1\t114\t64\t164\t117.468\n29\tmaps/dao/lak304d.map\t193\t194\t1\t79\t87\t120\t116.64\n29\tmaps/dao/lak304d.map\t193\t194\t10\t108\t41\t86\t117.912\n29\tmaps/dao/lak304d.map\t193\t194\t10\t79\t39\t146\t119.497\n29\tmaps/dao/lak304d.map\t193\t194\t100\t102\t6\t78\t119.497\n29\tmaps/dao/lak304d.map\t193\t194\t100\t105\t125\t144\t116.468\n29\tmaps/dao/lak304d.map\t193\t194\t100\t109\t18\t144\t117.042\n29\tmaps/dao/lak304d.map\t193\t194\t100\t110\t179\t137\t116.267\n29\tmaps/dao/lak304d.map\t193\t194\t100\t110\t47\t48\t119.912\n30\tmaps/dao/lak304d.map\t193\t194\t1\t79\t82\t20\t123.196\n30\tmaps/dao/lak304d.map\t193\t194\t1\t81\t65\t145\t121.054\n30\tmaps/dao/lak304d.map\t193\t194\t10\t106\t74\t128\t123.983\n30\tmaps/dao/lak304d.map\t193\t194\t10\t106\t77\t121\t121.154\n30\tmaps/dao/lak304d.map\t193\t194\t10\t111\t78\t128\t120.64\n30\tmaps/dao/lak304d.map\t193\t194\t10\t117\t92\t108\t120.355\n30\tmaps/dao/lak304d.map\t193\t194\t10\t120\t91\t122\t123.912\n30\tmaps/dao/lak304d.map\t193\t194\t10\t122\t122\t141\t123.184\n30\tmaps/dao/lak304d.map\t193\t194\t10\t67\t101\t87\t121.468\n30\tmaps/dao/lak304d.map\t193\t194\t10\t68\t37\t156\t121.811\n31\tmaps/dao/lak304d.map\t193\t194\t1\t79\t36\t140\t126.083\n31\tmaps/dao/lak304d.map\t193\t194\t1\t82\t97\t114\t124.811\n31\tmaps/dao/lak304d.map\t193\t194\t1\t91\t92\t112\t127.397\n31\tmaps/dao/lak304d.map\t193\t194\t1\t92\t96\t44\t126.782\n31\tmaps/dao/lak304d.map\t193\t194\t10\t103\t110\t149\t126.669\n31\tmaps/dao/lak304d.map\t193\t194\t10\t110\t43\t76\t125.083\n31\tmaps/dao/lak304d.map\t193\t194\t10\t121\t57\t66\t127.012\n31\tmaps/dao/lak304d.map\t193\t194\t10\t123\t92\t191\t125.983\n31\tmaps/dao/lak304d.map\t193\t194\t10\t72\t94\t78\t124.569\n31\tmaps/dao/lak304d.map\t193\t194\t10\t76\t83\t153\t127.196\n32\tmaps/dao/lak304d.map\t193\t194\t1\t90\t82\t21\t130.853\n32\tmaps/dao/lak304d.map\t193\t194\t10\t109\t35\t76\t129.397\n32\tmaps/dao/lak304d.map\t193\t194\t10\t122\t59\t62\t131.426\n32\tmaps/dao/lak304d.map\t193\t194\t10\t61\t36\t122\t130.397\n32\tmaps/dao/lak304d.map\t193\t194\t10\t62\t111\t95\t130.225\n32\tmaps/dao/lak304d.map\t193\t194\t10\t66\t110\t120\t128.811\n32\tmaps/dao/lak304d.map\t193\t194\t10\t69\t89\t5\t129.61\n32\tmaps/dao/lak304d.map\t193\t194\t10\t72\t76\t93\t128.983\n32\tmaps/dao/lak304d.map\t193\t194\t10\t73\t116\t103\t129.012\n32\tmaps/dao/lak304d.map\t193\t194\t10\t79\t31\t150\t129.154\n33\tmaps/dao/lak304d.map\t193\t194\t1\t116\t91\t93\t135.569\n33\tmaps/dao/lak304d.map\t193\t194\t1\t89\t82\t18\t133.439\n33\tmaps/dao/lak304d.map\t193\t194\t1\t91\t90\t125\t132.539\n33\tmaps/dao/lak304d.map\t193\t194\t10\t71\t111\t133\t133.125\n33\tmaps/dao/lak304d.map\t193\t194\t10\t92\t94\t121\t132.64\n33\tmaps/dao/lak304d.map\t193\t194\t100\t129\t13\t84\t133.054\n33\tmaps/dao/lak304d.map\t193\t194\t100\t133\t149\t22\t134.468\n33\tmaps/dao/lak304d.map\t193\t194\t100\t134\t5\t63\t135.539\n33\tmaps/dao/lak304d.map\t193\t194\t100\t134\t7\t62\t133.953\n33\tmaps/dao/lak304d.map\t193\t194\t100\t136\t81\t168\t134.882\n34\tmaps/dao/lak304d.map\t193\t194\t1\t114\t46\t66\t137.669\n34\tmaps/dao/lak304d.map\t193\t194\t1\t77\t32\t125\t136.397\n34\tmaps/dao/lak304d.map\t193\t194\t1\t77\t86\t149\t136.782\n34\tmaps/dao/lak304d.map\t193\t194\t10\t102\t33\t79\t136.569\n34\tmaps/dao/lak304d.map\t193\t194\t10\t117\t103\t123\t137.569\n34\tmaps/dao/lak304d.map\t193\t194\t10\t122\t96\t80\t139.154\n34\tmaps/dao/lak304d.map\t193\t194\t10\t123\t133\t126\t139.983\n34\tmaps/dao/lak304d.map\t193\t194\t10\t123\t68\t58\t138.74\n34\tmaps/dao/lak304d.map\t193\t194\t10\t127\t18\t67\t139.64\n34\tmaps/dao/lak304d.map\t193\t194\t10\t55\t61\t9\t138.48\n35\tmaps/dao/lak304d.map\t193\t194\t1\t114\t103\t109\t142.012\n35\tmaps/dao/lak304d.map\t193\t194\t10\t118\t61\t53\t142.912\n35\tmaps/dao/lak304d.map\t193\t194\t10\t118\t80\t84\t142.811\n35\tmaps/dao/lak304d.map\t193\t194\t10\t128\t15\t67\t143.054\n35\tmaps/dao/lak304d.map\t193\t194\t10\t63\t83\t167\t140.681\n35\tmaps/dao/lak304d.map\t193\t194\t10\t65\t109\t74\t142.024\n35\tmaps/dao/lak304d.map\t193\t194\t10\t81\t91\t2\t140.853\n35\tmaps/dao/lak304d.map\t193\t194\t10\t88\t80\t154\t140.61\n35\tmaps/dao/lak304d.map\t193\t194\t10\t93\t115\t46\t143.882\n35\tmaps/dao/lak304d.map\t193\t194\t10\t93\t34\t130\t140.983\n36\tmaps/dao/lak304d.map\t193\t194\t1\t114\t24\t67\t147.539\n36\tmaps/dao/lak304d.map\t193\t194\t1\t81\t112\t86\t144.368\n36\tmaps/dao/lak304d.map\t193\t194\t1\t92\t107\t121\t147.125\n36\tmaps/dao/lak304d.map\t193\t194\t10\t105\t97\t89\t145.225\n36\tmaps/dao/lak304d.map\t193\t194\t10\t106\t130\t137\t145.326\n36\tmaps/dao/lak304d.map\t193\t194\t10\t112\t96\t80\t145.64\n36\tmaps/dao/lak304d.map\t193\t194\t10\t113\t108\t123\t145.983\n36\tmaps/dao/lak304d.map\t193\t194\t10\t120\t112\t91\t146.154\n36\tmaps/dao/lak304d.map\t193\t194\t10\t122\t110\t89\t144.154\n36\tmaps/dao/lak304d.map\t193\t194\t10\t124\t74\t89\t144.255\n37\tmaps/dao/lak304d.map\t193\t194\t1\t114\t107\t117\t149.326\n37\tmaps/dao/lak304d.map\t193\t194\t1\t92\t113\t103\t148.154\n37\tmaps/dao/lak304d.map\t193\t194\t10\t105\t21\t70\t149.296\n37\tmaps/dao/lak304d.map\t193\t194\t10\t106\t24\t65\t149.711\n37\tmaps/dao/lak304d.map\t193\t194\t10\t121\t68\t47\t150.569\n37\tmaps/dao/lak304d.map\t193\t194\t10\t127\t15\t57\t149.711\n37\tmaps/dao/lak304d.map\t193\t194\t10\t55\t15\t139\t151.368\n37\tmaps/dao/lak304d.map\t193\t194\t10\t73\t67\t173\t148.338\n37\tmaps/dao/lak304d.map\t193\t194\t10\t89\t34\t116\t150.983\n37\tmaps/dao/lak304d.map\t193\t194\t100\t112\t106\t40\t151.64\n38\tmaps/dao/lak304d.map\t193\t194\t1\t115\t135\t123\t155.539\n38\tmaps/dao/lak304d.map\t193\t194\t1\t78\t112\t71\t154.024\n38\tmaps/dao/lak304d.map\t193\t194\t1\t89\t24\t142\t152.125\n38\tmaps/dao/lak304d.map\t193\t194\t1\t92\t98\t74\t152.782\n38\tmaps/dao/lak304d.map\t193\t194\t10\t106\t69\t55\t155.054\n38\tmaps/dao/lak304d.map\t193\t194\t10\t110\t141\t143\t153.154\n38\tmaps/dao/lak304d.map\t193\t194\t10\t115\t105\t72\t155.539\n38\tmaps/dao/lak304d.map\t193\t194\t10\t120\t145\t123\t154.468\n38\tmaps/dao/lak304d.map\t193\t194\t10\t123\t123\t95\t154.255\n38\tmaps/dao/lak304d.map\t193\t194\t10\t124\t148\t134\t155.012\n39\tmaps/dao/lak304d.map\t193\t194\t1\t89\t21\t138\t157.368\n39\tmaps/dao/lak304d.map\t193\t194\t1\t90\t100\t145\t158.61\n39\tmaps/dao/lak304d.map\t193\t194\t10\t104\t138\t127\t159.468\n39\tmaps/dao/lak304d.map\t193\t194\t10\t104\t41\t54\t159.711\n39\tmaps/dao/lak304d.map\t193\t194\t10\t111\t13\t79\t159.711\n39\tmaps/dao/lak304d.map\t193\t194\t10\t124\t136\t156\t158.083\n39\tmaps/dao/lak304d.map\t193\t194\t10\t127\t117\t71\t159.953\n39\tmaps/dao/lak304d.map\t193\t194\t10\t54\t108\t148\t156.853\n39\tmaps/dao/lak304d.map\t193\t194\t10\t54\t128\t83\t158.439\n39\tmaps/dao/lak304d.map\t193\t194\t10\t89\t117\t75\t158.681\n40\tmaps/dao/lak304d.map\t193\t194\t1\t76\t72\t179\t162.51\n40\tmaps/dao/lak304d.map\t193\t194\t10\t112\t10\t81\t161.125\n40\tmaps/dao/lak304d.map\t193\t194\t10\t122\t85\t45\t161.539\n40\tmaps/dao/lak304d.map\t193\t194\t10\t128\t22\t43\t161.368\n40\tmaps/dao/lak304d.map\t193\t194\t10\t54\t11\t112\t162.439\n40\tmaps/dao/lak304d.map\t193\t194\t10\t54\t73\t178\t160.823\n40\tmaps/dao/lak304d.map\t193\t194\t10\t70\t9\t102\t163.711\n40\tmaps/dao/lak304d.map\t193\t194\t10\t72\t141\t91\t163.054\n40\tmaps/dao/lak304d.map\t193\t194\t10\t79\t118\t149\t163.539\n40\tmaps/dao/lak304d.map\t193\t194\t100\t100\t100\t170\t161.539\n41\tmaps/dao/lak304d.map\t193\t194\t1\t76\t79\t187\t167.61\n41\tmaps/dao/lak304d.map\t193\t194\t1\t80\t112\t137\t166.267\n41\tmaps/dao/lak304d.map\t193\t194\t1\t89\t105\t147\t164.024\n41\tmaps/dao/lak304d.map\t193\t194\t10\t106\t125\t98\t167.912\n41\tmaps/dao/lak304d.map\t193\t194\t10\t113\t147\t156\t165.64\n41\tmaps/dao/lak304d.map\t193\t194\t10\t114\t142\t109\t166.196\n41\tmaps/dao/lak304d.map\t193\t194\t10\t118\t145\t160\t164.983\n41\tmaps/dao/lak304d.map\t193\t194\t10\t74\t143\t93\t166.711\n41\tmaps/dao/lak304d.map\t193\t194\t10\t88\t110\t147\t165.953\n41\tmaps/dao/lak304d.map\t193\t194\t10\t89\t119\t68\t165.924\n42\tmaps/dao/lak304d.map\t193\t194\t1\t92\t20\t106\t171.853\n42\tmaps/dao/lak304d.map\t193\t194\t10\t101\t145\t122\t171.539\n42\tmaps/dao/lak304d.map\t193\t194\t10\t108\t154\t149\t170.64\n42\tmaps/dao/lak304d.map\t193\t194\t10\t113\t20\t43\t168.61\n42\tmaps/dao/lak304d.map\t193\t194\t10\t119\t140\t103\t168.125\n42\tmaps/dao/lak304d.map\t193\t194\t10\t124\t151\t104\t169.61\n42\tmaps/dao/lak304d.map\t193\t194\t10\t69\t128\t137\t169.782\n42\tmaps/dao/lak304d.map\t193\t194\t10\t78\t9\t102\t168.539\n42\tmaps/dao/lak304d.map\t193\t194\t100\t148\t40\t24\t170.61\n42\tmaps/dao/lak304d.map\t193\t194\t100\t153\t99\t48\t168.853\n43\tmaps/dao/lak304d.map\t193\t194\t1\t115\t82\t40\t174.853\n43\tmaps/dao/lak304d.map\t193\t194\t1\t116\t27\t42\t172.61\n43\tmaps/dao/lak304d.map\t193\t194\t1\t78\t122\t149\t173.196\n43\tmaps/dao/lak304d.map\t193\t194\t10\t101\t3\t75\t172.539\n43\tmaps/dao/lak304d.map\t193\t194\t10\t102\t125\t94\t173.569\n43\tmaps/dao/lak304d.map\t193\t194\t10\t114\t93\t46\t173.61\n43\tmaps/dao/lak304d.map\t193\t194\t10\t116\t149\t104\t172.095\n43\tmaps/dao/lak304d.map\t193\t194\t10\t128\t72\t31\t175.024\n43\tmaps/dao/lak304d.map\t193\t194\t10\t68\t133\t139\t174.368\n43\tmaps/dao/lak304d.map\t193\t194\t10\t93\t12\t111\t174.953\n44\tmaps/dao/lak304d.map\t193\t194\t1\t90\t117\t150\t177.681\n44\tmaps/dao/lak304d.map\t193\t194\t10\t110\t128\t76\t176.024\n44\tmaps/dao/lak304d.map\t193\t194\t10\t112\t137\t86\t178.882\n44\tmaps/dao/lak304d.map\t193\t194\t10\t112\t151\t166\t178.296\n44\tmaps/dao/lak304d.map\t193\t194\t10\t126\t166\t119\t179.61\n44\tmaps/dao/lak304d.map\t193\t194\t10\t127\t85\t24\t179.782\n44\tmaps/dao/lak304d.map\t193\t194\t10\t60\t150\t75\t178.338\n44\tmaps/dao/lak304d.map\t193\t194\t10\t73\t139\t65\t177.125\n44\tmaps/dao/lak304d.map\t193\t194\t10\t77\t145\t70\t178.024\n44\tmaps/dao/lak304d.map\t193\t194\t10\t92\t138\t83\t179.953\n45\tmaps/dao/lak304d.map\t193\t194\t1\t92\t64\t184\t182.723\n45\tmaps/dao/lak304d.map\t193\t194\t10\t115\t163\t123\t183.167\n45\tmaps/dao/lak304d.map\t193\t194\t10\t118\t116\t162\t180.125\n45\tmaps/dao/lak304d.map\t193\t194\t10\t123\t72\t25\t180.024\n45\tmaps/dao/lak304d.map\t193\t194\t10\t124\t76\t21\t181.953\n45\tmaps/dao/lak304d.map\t193\t194\t10\t126\t120\t172\t180.711\n45\tmaps/dao/lak304d.map\t193\t194\t10\t127\t47\t29\t182.054\n45\tmaps/dao/lak304d.map\t193\t194\t10\t78\t151\t69\t183.681\n45\tmaps/dao/lak304d.map\t193\t194\t100\t163\t32\t168\t183.125\n45\tmaps/dao/lak304d.map\t193\t194\t100\t164\t38\t98\t183.681\n46\tmaps/dao/lak304d.map\t193\t194\t1\t89\t145\t93\t186.853\n46\tmaps/dao/lak304d.map\t193\t194\t10\t109\t119\t162\t184.953\n46\tmaps/dao/lak304d.map\t193\t194\t10\t123\t136\t72\t184.64\n46\tmaps/dao/lak304d.map\t193\t194\t10\t75\t147\t111\t187.953\n46\tmaps/dao/lak304d.map\t193\t194\t10\t80\t154\t102\t187.439\n46\tmaps/dao/lak304d.map\t193\t194\t100\t129\t100\t180\t184.723\n46\tmaps/dao/lak304d.map\t193\t194\t100\t132\t101\t174\t184.238\n46\tmaps/dao/lak304d.map\t193\t194\t100\t164\t71\t116\t187.61\n46\tmaps/dao/lak304d.map\t193\t194\t100\t172\t23\t155\t185.196\n46\tmaps/dao/lak304d.map\t193\t194\t100\t173\t102\t134\t185.995\n47\tmaps/dao/lak304d.map\t193\t194\t1\t115\t122\t169\t189.61\n47\tmaps/dao/lak304d.map\t193\t194\t1\t78\t139\t140\t191.439\n47\tmaps/dao/lak304d.map\t193\t194\t10\t105\t118\t165\t191.196\n47\tmaps/dao/lak304d.map\t193\t194\t10\t119\t90\t17\t190.51\n47\tmaps/dao/lak304d.map\t193\t194\t10\t121\t83\t15\t188.782\n47\tmaps/dao/lak304d.map\t193\t194\t10\t126\t80\t12\t190.125\n47\tmaps/dao/lak304d.map\t193\t194\t10\t73\t142\t118\t191.652\n47\tmaps/dao/lak304d.map\t193\t194\t10\t74\t156\t59\t191.752\n47\tmaps/dao/lak304d.map\t193\t194\t10\t80\t145\t106\t188.782\n47\tmaps/dao/lak304d.map\t193\t194\t100\t164\t14\t127\t190.882\n48\tmaps/dao/lak304d.map\t193\t194\t10\t109\t48\t30\t192.539\n48\tmaps/dao/lak304d.map\t193\t194\t10\t127\t105\t170\t192.368\n48\tmaps/dao/lak304d.map\t193\t194\t10\t127\t141\t64\t193.882\n48\tmaps/dao/lak304d.map\t193\t194\t10\t63\t160\t61\t193.48\n48\tmaps/dao/lak304d.map\t193\t194\t10\t76\t144\t149\t193.267\n48\tmaps/dao/lak304d.map\t193\t194\t10\t76\t161\t83\t194.853\n48\tmaps/dao/lak304d.map\t193\t194\t10\t79\t144\t112\t194.196\n48\tmaps/dao/lak304d.map\t193\t194\t100\t165\t26\t107\t195.296\n48\tmaps/dao/lak304d.map\t193\t194\t100\t166\t27\t106\t195.711\n48\tmaps/dao/lak304d.map\t193\t194\t100\t179\t37\t94\t194.894\n49\tmaps/dao/lak304d.map\t193\t194\t10\t104\t93\t29\t197.095\n49\tmaps/dao/lak304d.map\t193\t194\t10\t118\t133\t63\t196.953\n49\tmaps/dao/lak304d.map\t193\t194\t10\t70\t168\t62\t197.581\n49\tmaps/dao/lak304d.map\t193\t194\t10\t75\t152\t132\t199.853\n49\tmaps/dao/lak304d.map\t193\t194\t100\t114\t66\t36\t196.752\n49\tmaps/dao/lak304d.map\t193\t194\t100\t153\t88\t3\t196.995\n49\tmaps/dao/lak304d.map\t193\t194\t100\t182\t25\t113\t196.167\n49\tmaps/dao/lak304d.map\t193\t194\t100\t44\t126\t131\t199.995\n49\tmaps/dao/lak304d.map\t193\t194\t101\t142\t93\t4\t197.581\n49\tmaps/dao/lak304d.map\t193\t194\t101\t165\t12\t114\t198.368\n50\tmaps/dao/lak304d.map\t193\t194\t1\t112\t156\t88\t201.652\n50\tmaps/dao/lak304d.map\t193\t194\t1\t79\t144\t127\t201.409\n50\tmaps/dao/lak304d.map\t193\t194\t1\t89\t131\t63\t200.51\n50\tmaps/dao/lak304d.map\t193\t194\t1\t92\t137\t134\t202.167\n50\tmaps/dao/lak304d.map\t193\t194\t10\t105\t50\t23\t200.853\n50\tmaps/dao/lak304d.map\t193\t194\t10\t109\t127\t186\t202.953\n50\tmaps/dao/lak304d.map\t193\t194\t10\t121\t187\t104\t203.924\n50\tmaps/dao/lak304d.map\t193\t194\t10\t62\t140\t47\t202.581\n50\tmaps/dao/lak304d.map\t193\t194\t10\t62\t143\t157\t201.338\n50\tmaps/dao/lak304d.map\t193\t194\t10\t62\t150\t156\t203.238\n51\tmaps/dao/lak304d.map\t193\t194\t1\t113\t68\t12\t207.823\n51\tmaps/dao/lak304d.map\t193\t194\t1\t76\t151\t50\t207.338\n51\tmaps/dao/lak304d.map\t193\t194\t1\t82\t154\t114\t205.167\n51\tmaps/dao/lak304d.map\t193\t194\t10\t111\t159\t73\t207.267\n51\tmaps/dao/lak304d.map\t193\t194\t10\t125\t191\t103\t206.681\n51\tmaps/dao/lak304d.map\t193\t194\t10\t61\t157\t45\t207.894\n51\tmaps/dao/lak304d.map\t193\t194\t10\t61\t167\t113\t207.752\n51\tmaps/dao/lak304d.map\t193\t194\t10\t62\t149\t43\t206.167\n51\tmaps/dao/lak304d.map\t193\t194\t10\t71\t162\t144\t204.196\n51\tmaps/dao/lak304d.map\t193\t194\t10\t76\t137\t44\t206.338\n52\tmaps/dao/lak304d.map\t193\t194\t1\t112\t118\t54\t208.095\n52\tmaps/dao/lak304d.map\t193\t194\t1\t76\t148\t48\t208.095\n52\tmaps/dao/lak304d.map\t193\t194\t1\t76\t158\t136\t211.267\n52\tmaps/dao/lak304d.map\t193\t194\t1\t80\t148\t155\t210.409\n52\tmaps/dao/lak304d.map\t193\t194\t1\t92\t138\t54\t209.853\n52\tmaps/dao/lak304d.map\t193\t194\t10\t102\t103\t160\t209.368\n52\tmaps/dao/lak304d.map\t193\t194\t10\t115\t126\t56\t208.681\n52\tmaps/dao/lak304d.map\t193\t194\t10\t122\t166\t84\t210.853\n52\tmaps/dao/lak304d.map\t193\t194\t10\t83\t158\t139\t209.196\n52\tmaps/dao/lak304d.map\t193\t194\t101\t168\t31\t84\t210.167\n53\tmaps/dao/lak304d.map\t193\t194\t1\t76\t161\t48\t215.238\n53\tmaps/dao/lak304d.map\t193\t194\t1\t82\t161\t93\t215.167\n53\tmaps/dao/lak304d.map\t193\t194\t1\t90\t138\t114\t213.409\n53\tmaps/dao/lak304d.map\t193\t194\t10\t102\t158\t73\t215.267\n53\tmaps/dao/lak304d.map\t193\t194\t10\t113\t189\t126\t214.309\n53\tmaps/dao/lak304d.map\t193\t194\t10\t120\t154\t50\t214.51\n53\tmaps/dao/lak304d.map\t193\t194\t10\t124\t146\t45\t214.539\n53\tmaps/dao/lak304d.map\t193\t194\t10\t60\t155\t162\t212.137\n53\tmaps/dao/lak304d.map\t193\t194\t10\t61\t123\t163\t214.137\n53\tmaps/dao/lak304d.map\t193\t194\t10\t68\t147\t30\t215.853\n54\tmaps/dao/lak304d.map\t193\t194\t1\t116\t150\t57\t217.095\n54\tmaps/dao/lak304d.map\t193\t194\t1\t91\t147\t48\t218.581\n54\tmaps/dao/lak304d.map\t193\t194\t10\t63\t140\t32\t217.167\n54\tmaps/dao/lak304d.map\t193\t194\t10\t81\t182\t85\t218.167\n54\tmaps/dao/lak304d.map\t193\t194\t10\t90\t135\t159\t219.338\n54\tmaps/dao/lak304d.map\t193\t194\t10\t92\t154\t52\t216.995\n54\tmaps/dao/lak304d.map\t193\t194\t10\t93\t156\t117\t217.338\n54\tmaps/dao/lak304d.map\t193\t194\t100\t165\t59\t64\t216.853\n54\tmaps/dao/lak304d.map\t193\t194\t100\t44\t129\t55\t219.338\n54\tmaps/dao/lak304d.map\t193\t194\t100\t46\t161\t68\t217.409\n55\tmaps/dao/lak304d.map\t193\t194\t1\t76\t183\t65\t221.995\n55\tmaps/dao/lak304d.map\t193\t194\t1\t91\t167\t89\t222.066\n55\tmaps/dao/lak304d.map\t193\t194\t10\t106\t166\t79\t220.095\n55\tmaps/dao/lak304d.map\t193\t194\t10\t60\t153\t174\t223.309\n55\tmaps/dao/lak304d.map\t193\t194\t10\t66\t179\t101\t221.823\n55\tmaps/dao/lak304d.map\t193\t194\t10\t71\t112\t166\t222.238\n55\tmaps/dao/lak304d.map\t193\t194\t10\t73\t163\t157\t220.439\n55\tmaps/dao/lak304d.map\t193\t194\t10\t82\t159\t39\t220.409\n55\tmaps/dao/lak304d.map\t193\t194\t10\t88\t155\t158\t222.238\n55\tmaps/dao/lak304d.map\t193\t194\t100\t42\t145\t117\t223.924\n56\tmaps/dao/lak304d.map\t193\t194\t1\t78\t188\t67\t226.995\n56\tmaps/dao/lak304d.map\t193\t194\t1\t91\t163\t121\t224.894\n56\tmaps/dao/lak304d.map\t193\t194\t10\t108\t159\t51\t226.409\n56\tmaps/dao/lak304d.map\t193\t194\t10\t123\t132\t43\t224.267\n56\tmaps/dao/lak304d.map\t193\t194\t10\t125\t184\t85\t226.853\n56\tmaps/dao/lak304d.map\t193\t194\t10\t61\t150\t24\t225.995\n56\tmaps/dao/lak304d.map\t193\t194\t10\t70\t157\t24\t225.167\n56\tmaps/dao/lak304d.map\t193\t194\t10\t72\t122\t177\t224.238\n56\tmaps/dao/lak304d.map\t193\t194\t10\t76\t111\t163\t225.238\n56\tmaps/dao/lak304d.map\t193\t194\t10\t82\t127\t171\t226.409\n57\tmaps/dao/lak304d.map\t193\t194\t10\t110\t118\t190\t229.238\n57\tmaps/dao/lak304d.map\t193\t194\t10\t111\t145\t38\t229.439\n57\tmaps/dao/lak304d.map\t193\t194\t10\t112\t149\t40\t228.095\n57\tmaps/dao/lak304d.map\t193\t194\t10\t117\t170\t45\t229.723\n57\tmaps/dao/lak304d.map\t193\t194\t10\t61\t131\t177\t228.38\n57\tmaps/dao/lak304d.map\t193\t194\t10\t63\t185\t130\t231.966\n57\tmaps/dao/lak304d.map\t193\t194\t10\t78\t125\t180\t230.823\n57\tmaps/dao/lak304d.map\t193\t194\t100\t165\t61\t51\t230.681\n57\tmaps/dao/lak304d.map\t193\t194\t100\t178\t20\t91\t229.794\n57\tmaps/dao/lak304d.map\t193\t194\t100\t181\t25\t67\t228.865\n58\tmaps/dao/lak304d.map\t193\t194\t10\t101\t173\t65\t234.581\n58\tmaps/dao/lak304d.map\t193\t194\t10\t65\t187\t125\t234.38\n58\tmaps/dao/lak304d.map\t193\t194\t10\t82\t169\t34\t232.48\n58\tmaps/dao/lak304d.map\t193\t194\t10\t89\t190\t77\t234.167\n58\tmaps/dao/lak304d.map\t193\t194\t100\t174\t16\t69\t232.38\n58\tmaps/dao/lak304d.map\t193\t194\t100\t42\t162\t106\t232.652\n58\tmaps/dao/lak304d.map\t193\t194\t100\t43\t174\t85\t232.894\n58\tmaps/dao/lak304d.map\t193\t194\t100\t50\t173\t55\t233.137\n58\tmaps/dao/lak304d.map\t193\t194\t100\t51\t179\t69\t233.752\n58\tmaps/dao/lak304d.map\t193\t194\t101\t42\t146\t160\t234.238\n59\tmaps/dao/lak304d.map\t193\t194\t1\t112\t178\t56\t238.966\n59\tmaps/dao/lak304d.map\t193\t194\t10\t106\t146\t35\t237.853\n59\tmaps/dao/lak304d.map\t193\t194\t10\t118\t140\t27\t236.681\n59\tmaps/dao/lak304d.map\t193\t194\t10\t73\t101\t177\t238.622\n59\tmaps/dao/lak304d.map\t193\t194\t10\t82\t107\t168\t237.309\n59\tmaps/dao/lak304d.map\t193\t194\t10\t93\t155\t169\t236.48\n59\tmaps/dao/lak304d.map\t193\t194\t100\t37\t178\t82\t238.137\n59\tmaps/dao/lak304d.map\t193\t194\t100\t51\t150\t165\t236.995\n59\tmaps/dao/lak304d.map\t193\t194\t100\t51\t174\t110\t239.51\n59\tmaps/dao/lak304d.map\t193\t194\t101\t161\t28\t47\t239.894\n60\tmaps/dao/lak304d.map\t193\t194\t1\t82\t184\t125\t243.037\n60\tmaps/dao/lak304d.map\t193\t194\t1\t89\t180\t103\t240.48\n60\tmaps/dao/lak304d.map\t193\t194\t10\t78\t99\t166\t240.48\n60\tmaps/dao/lak304d.map\t193\t194\t100\t182\t13\t65\t240.35\n60\tmaps/dao/lak304d.map\t193\t194\t100\t38\t127\t163\t240.794\n60\tmaps/dao/lak304d.map\t193\t194\t101\t165\t11\t54\t241.794\n60\tmaps/dao/lak304d.map\t193\t194\t101\t39\t166\t126\t242.208\n60\tmaps/dao/lak304d.map\t193\t194\t101\t48\t146\t33\t241.095\n60\tmaps/dao/lak304d.map\t193\t194\t101\t52\t135\t36\t241.823\n60\tmaps/dao/lak304d.map\t193\t194\t102\t165\t23\t49\t243.309\n61\tmaps/dao/lak304d.map\t193\t194\t1\t113\t171\t40\t245.794\n61\tmaps/dao/lak304d.map\t193\t194\t1\t114\t174\t40\t246.622\n61\tmaps/dao/lak304d.map\t193\t194\t10\t113\t160\t27\t244.652\n61\tmaps/dao/lak304d.map\t193\t194\t100\t178\t69\t44\t246.38\n61\tmaps/dao/lak304d.map\t193\t194\t100\t48\t174\t128\t245.723\n61\tmaps/dao/lak304d.map\t193\t194\t101\t179\t75\t48\t244.279\n61\tmaps/dao/lak304d.map\t193\t194\t101\t41\t142\t32\t245.823\n61\tmaps/dao/lak304d.map\t193\t194\t101\t45\t156\t167\t244.137\n61\tmaps/dao/lak304d.map\t193\t194\t101\t46\t148\t28\t247.752\n61\tmaps/dao/lak304d.map\t193\t194\t101\t50\t184\t60\t244.723\n62\tmaps/dao/lak304d.map\t193\t194\t1\t90\t108\t174\t250.522\n62\tmaps/dao/lak304d.map\t193\t194\t1\t90\t111\t176\t248.35\n62\tmaps/dao/lak304d.map\t193\t194\t10\t111\t154\t21\t250.167\n62\tmaps/dao/lak304d.map\t193\t194\t100\t172\t43\t42\t248.38\n62\tmaps/dao/lak304d.map\t193\t194\t100\t42\t112\t161\t251.551\n62\tmaps/dao/lak304d.map\t193\t194\t100\t42\t174\t134\t251.279\n62\tmaps/dao/lak304d.map\t193\t194\t100\t44\t166\t156\t249.581\n62\tmaps/dao/lak304d.map\t193\t194\t100\t47\t129\t172\t248.894\n62\tmaps/dao/lak304d.map\t193\t194\t101\t167\t26\t40\t249.38\n62\tmaps/dao/lak304d.map\t193\t194\t101\t174\t79\t41\t250.865\n63\tmaps/dao/lak304d.map\t193\t194\t1\t92\t186\t128\t252.622\n63\tmaps/dao/lak304d.map\t193\t194\t10\t81\t109\t183\t252.279\n63\tmaps/dao/lak304d.map\t193\t194\t100\t169\t24\t37\t255.037\n63\tmaps/dao/lak304d.map\t193\t194\t101\t174\t89\t53\t252.38\n63\tmaps/dao/lak304d.map\t193\t194\t101\t179\t15\t86\t252.279\n63\tmaps/dao/lak304d.map\t193\t194\t101\t48\t185\t103\t254.823\n63\tmaps/dao/lak304d.map\t193\t194\t102\t181\t22\t44\t253.593\n63\tmaps/dao/lak304d.map\t193\t194\t102\t38\t143\t25\t254.652\n63\tmaps/dao/lak304d.map\t193\t194\t102\t47\t181\t102\t252.652\n63\tmaps/dao/lak304d.map\t193\t194\t103\t165\t83\t34\t253.794\n64\tmaps/dao/lak304d.map\t193\t194\t10\t75\t115\t192\t258.936\n64\tmaps/dao/lak304d.map\t193\t194\t10\t89\t100\t181\t258.35\n64\tmaps/dao/lak304d.map\t193\t194\t100\t176\t30\t33\t259.451\n64\tmaps/dao/lak304d.map\t193\t194\t101\t178\t29\t35\t257.693\n64\tmaps/dao/lak304d.map\t193\t194\t101\t182\t30\t36\t258.522\n64\tmaps/dao/lak304d.map\t193\t194\t102\t164\t24\t32\t256.551\n64\tmaps/dao/lak304d.map\t193\t194\t102\t165\t55\t33\t257.451\n64\tmaps/dao/lak304d.map\t193\t194\t103\t179\t33\t30\t259.451\n64\tmaps/dao/lak304d.map\t193\t194\t103\t182\t89\t46\t258.35\n64\tmaps/dao/lak304d.map\t193\t194\t103\t190\t48\t44\t259.35\n65\tmaps/dao/lak304d.map\t193\t194\t100\t42\t135\t181\t261.279\n65\tmaps/dao/lak304d.map\t193\t194\t100\t43\t127\t186\t262.551\n65\tmaps/dao/lak304d.map\t193\t194\t100\t50\t188\t116\t263.581\n65\tmaps/dao/lak304d.map\t193\t194\t102\t190\t43\t42\t260.279\n65\tmaps/dao/lak304d.map\t193\t194\t102\t48\t188\t127\t262.966\n65\tmaps/dao/lak304d.map\t193\t194\t104\t179\t81\t32\t260.35\n65\tmaps/dao/lak304d.map\t193\t194\t104\t39\t110\t158\t260.622\n65\tmaps/dao/lak304d.map\t193\t194\t104\t45\t155\t22\t260.066\n65\tmaps/dao/lak304d.map\t193\t194\t105\t162\t46\t25\t263.723\n65\tmaps/dao/lak304d.map\t193\t194\t105\t41\t185\t103\t261.723\n66\tmaps/dao/lak304d.map\t193\t194\t100\t164\t85\t25\t266.208\n66\tmaps/dao/lak304d.map\t193\t194\t100\t42\t103\t172\t265.108\n66\tmaps/dao/lak304d.map\t193\t194\t102\t165\t41\t21\t266.966\n66\tmaps/dao/lak304d.map\t193\t194\t102\t181\t97\t46\t265.764\n66\tmaps/dao/lak304d.map\t193\t194\t102\t46\t136\t183\t264.037\n66\tmaps/dao/lak304d.map\t193\t194\t103\t162\t105\t40\t266.794\n66\tmaps/dao/lak304d.map\t193\t194\t103\t39\t106\t175\t267.593\n66\tmaps/dao/lak304d.map\t193\t194\t103\t40\t108\t176\t265.593\n66\tmaps/dao/lak304d.map\t193\t194\t103\t45\t103\t170\t266.037\n66\tmaps/dao/lak304d.map\t193\t194\t104\t175\t38\t24\t264.865\n67\tmaps/dao/lak304d.map\t193\t194\t1\t82\t118\t188\t270.421\n67\tmaps/dao/lak304d.map\t193\t194\t100\t162\t91\t21\t271.865\n67\tmaps/dao/lak304d.map\t193\t194\t100\t166\t43\t20\t271.208\n67\tmaps/dao/lak304d.map\t193\t194\t100\t173\t88\t28\t268.764\n67\tmaps/dao/lak304d.map\t193\t194\t101\t163\t84\t20\t269.38\n67\tmaps/dao/lak304d.map\t193\t194\t101\t175\t44\t32\t269.037\n67\tmaps/dao/lak304d.map\t193\t194\t102\t166\t76\t20\t269.622\n67\tmaps/dao/lak304d.map\t193\t194\t103\t164\t105\t53\t269.309\n67\tmaps/dao/lak304d.map\t193\t194\t103\t179\t88\t28\t268.25\n67\tmaps/dao/lak304d.map\t193\t194\t103\t190\t55\t35\t271.25\n68\tmaps/dao/lak304d.map\t193\t194\t100\t176\t87\t22\t275.007\n68\tmaps/dao/lak304d.map\t193\t194\t101\t167\t110\t53\t273.794\n68\tmaps/dao/lak304d.map\t193\t194\t102\t176\t106\t42\t273.764\n68\tmaps/dao/lak304d.map\t193\t194\t102\t178\t93\t32\t273.593\n68\tmaps/dao/lak304d.map\t193\t194\t105\t175\t72\t20\t272.007\n68\tmaps/dao/lak304d.map\t193\t194\t106\t168\t115\t48\t272.966\n68\tmaps/dao/lak304d.map\t193\t194\t107\t177\t80\t13\t275.936\n68\tmaps/dao/lak304d.map\t193\t194\t109\t176\t82\t10\t275.936\n68\tmaps/dao/lak304d.map\t193\t194\t109\t181\t88\t30\t274.007\n68\tmaps/dao/lak304d.map\t193\t194\t109\t53\t102\t173\t274.865\n69\tmaps/dao/lak304d.map\t193\t194\t102\t182\t108\t47\t277.35\n69\tmaps/dao/lak304d.map\t193\t194\t103\t164\t71\t13\t279.936\n69\tmaps/dao/lak304d.map\t193\t194\t103\t168\t113\t42\t276.451\n69\tmaps/dao/lak304d.map\t193\t194\t103\t184\t90\t22\t279.492\n69\tmaps/dao/lak304d.map\t193\t194\t104\t166\t113\t56\t279.551\n69\tmaps/dao/lak304d.map\t193\t194\t104\t167\t105\t62\t279.38\n69\tmaps/dao/lak304d.map\t193\t194\t104\t174\t116\t52\t279.279\n69\tmaps/dao/lak304d.map\t193\t194\t104\t181\t109\t54\t278.936\n69\tmaps/dao/lak304d.map\t193\t194\t105\t172\t115\t45\t276.865\n69\tmaps/dao/lak304d.map\t193\t194\t105\t174\t116\t47\t277.865\n70\tmaps/dao/lak304d.map\t193\t194\t100\t166\t116\t42\t281.622\n70\tmaps/dao/lak304d.map\t193\t194\t100\t178\t112\t46\t280.936\n70\tmaps/dao/lak304d.map\t193\t194\t102\t168\t87\t9\t282.693\n70\tmaps/dao/lak304d.map\t193\t194\t102\t41\t103\t190\t281.421\n70\tmaps/dao/lak304d.map\t193\t194\t103\t186\t89\t20\t283.078\n70\tmaps/dao/lak304d.map\t193\t194\t103\t190\t75\t25\t280.421\n70\tmaps/dao/lak304d.map\t193\t194\t103\t46\t113\t181\t282.764\n70\tmaps/dao/lak304d.map\t193\t194\t105\t188\t106\t48\t280.522\n70\tmaps/dao/lak304d.map\t193\t194\t106\t177\t65\t14\t281.321\n70\tmaps/dao/lak304d.map\t193\t194\t107\t181\t43\t17\t281.179\n71\tmaps/dao/lak304d.map\t193\t194\t100\t181\t118\t48\t287.35\n71\tmaps/dao/lak304d.map\t193\t194\t101\t175\t85\t7\t287.764\n71\tmaps/dao/lak304d.map\t193\t194\t102\t173\t121\t46\t285.865\n71\tmaps/dao/lak304d.map\t193\t194\t103\t163\t92\t4\t286.693\n71\tmaps/dao/lak304d.map\t193\t194\t103\t170\t88\t4\t287.936\n71\tmaps/dao/lak304d.map\t193\t194\t103\t179\t86\t9\t285.836\n71\tmaps/dao/lak304d.map\t193\t194\t103\t183\t116\t52\t286.35\n71\tmaps/dao/lak304d.map\t193\t194\t103\t188\t108\t53\t284.936\n71\tmaps/dao/lak304d.map\t193\t194\t105\t173\t61\t12\t285.492\n71\tmaps/dao/lak304d.map\t193\t194\t109\t181\t87\t17\t284.836\n72\tmaps/dao/lak304d.map\t193\t194\t101\t182\t118\t53\t288.593\n72\tmaps/dao/lak304d.map\t193\t194\t103\t171\t89\t4\t288.764\n72\tmaps/dao/lak304d.map\t193\t194\t103\t178\t123\t44\t289.764\n72\tmaps/dao/lak304d.map\t193\t194\t104\t188\t116\t48\t290.108\n72\tmaps/dao/lak304d.map\t193\t194\t105\t189\t113\t41\t291.421\n72\tmaps/dao/lak304d.map\t193\t194\t112\t41\t112\t183\t290.836\n72\tmaps/dao/lak304d.map\t193\t194\t114\t183\t89\t17\t291.492\n72\tmaps/dao/lak304d.map\t193\t194\t114\t53\t111\t184\t291.764\n72\tmaps/dao/lak304d.map\t193\t194\t115\t46\t111\t183\t290.764\n72\tmaps/dao/lak304d.map\t193\t194\t116\t172\t60\t24\t289.321\n73\tmaps/dao/lak304d.map\t193\t194\t100\t171\t92\t4\t293.007\n73\tmaps/dao/lak304d.map\t193\t194\t102\t182\t60\t11\t294.806\n73\tmaps/dao/lak304d.map\t193\t194\t102\t190\t90\t16\t292.492\n73\tmaps/dao/lak304d.map\t193\t194\t105\t61\t109\t188\t295.593\n73\tmaps/dao/lak304d.map\t193\t194\t107\t188\t117\t53\t293.593\n73\tmaps/dao/lak304d.map\t193\t194\t109\t180\t118\t43\t292.593\n73\tmaps/dao/lak304d.map\t193\t194\t116\t182\t114\t47\t294.764\n73\tmaps/dao/lak304d.map\t193\t194\t118\t187\t93\t29\t292.078\n73\tmaps/dao/lak304d.map\t193\t194\t119\t47\t109\t188\t295.593\n73\tmaps/dao/lak304d.map\t193\t194\t128\t175\t60\t27\t292.007\n74\tmaps/dao/lak304d.map\t193\t194\t101\t178\t55\t13\t297.149\n74\tmaps/dao/lak304d.map\t193\t194\t101\t182\t58\t9\t298.049\n74\tmaps/dao/lak304d.map\t193\t194\t103\t185\t60\t9\t298.22\n74\tmaps/dao/lak304d.map\t193\t194\t107\t184\t61\t11\t296.22\n74\tmaps/dao/lak304d.map\t193\t194\t109\t163\t62\t28\t296.836\n74\tmaps/dao/lak304d.map\t193\t194\t110\t186\t72\t10\t298.635\n74\tmaps/dao/lak304d.map\t193\t194\t110\t192\t118\t48\t299.179\n74\tmaps/dao/lak304d.map\t193\t194\t112\t49\t114\t192\t296.179\n74\tmaps/dao/lak304d.map\t193\t194\t114\t161\t66\t33\t298.25\n74\tmaps/dao/lak304d.map\t193\t194\t114\t182\t92\t12\t298.149\n75\tmaps/dao/lak304d.map\t193\t194\t100\t176\t78\t2\t300.593\n75\tmaps/dao/lak304d.map\t193\t194\t103\t186\t55\t13\t302.563\n75\tmaps/dao/lak304d.map\t193\t194\t106\t63\t114\t179\t301.764\n75\tmaps/dao/lak304d.map\t193\t194\t109\t164\t64\t31\t301.078\n75\tmaps/dao/lak304d.map\t193\t194\t111\t192\t116\t42\t300.078\n75\tmaps/dao/lak304d.map\t193\t194\t113\t182\t88\t7\t301.078\n75\tmaps/dao/lak304d.map\t193\t194\t116\t182\t87\t9\t301.078\n75\tmaps/dao/lak304d.map\t193\t194\t125\t176\t64\t33\t300.25\n75\tmaps/dao/lak304d.map\t193\t194\t173\t39\t67\t38\t303.635\n75\tmaps/dao/lak304d.map\t193\t194\t185\t120\t75\t2\t300.108\n76\tmaps/dao/lak304d.map\t193\t194\t109\t181\t79\t1\t304.836\n76\tmaps/dao/lak304d.map\t193\t194\t136\t174\t63\t31\t305.907\n76\tmaps/dao/lak304d.map\t193\t194\t61\t9\t110\t190\t304.877\n76\tmaps/dao/lak304d.map\t193\t194\t63\t27\t135\t184\t305.735\n76\tmaps/dao/lak304d.map\t193\t194\t64\t32\t184\t131\t305.735\n76\tmaps/dao/lak304d.map\t193\t194\t67\t38\t162\t158\t305.936\n77\tmaps/dao/lak304d.map\t193\t194\t106\t186\t58\t21\t308.22\n77\tmaps/dao/lak304d.map\t193\t194\t108\t181\t71\t2\t311.421\n77\tmaps/dao/lak304d.map\t193\t194\t108\t185\t59\t20\t308.049\n77\tmaps/dao/lak304d.map\t193\t194\t118\t188\t87\t5\t310.492\n77\tmaps/dao/lak304d.map\t193\t194\t135\t175\t67\t35\t310.149\n77\tmaps/dao/lak304d.map\t193\t194\t186\t126\t65\t34\t310.563\n77\tmaps/dao/lak304d.map\t193\t194\t55\t12\t116\t182\t310.806\n"
  },
  {
    "path": "benchmark/scen/losttemple.map.scen",
    "content": "version 1.0\n66 maps/wc3maps/losttemple.map 512 512 242 400 121 216 265.58\n60 maps/wc3maps/losttemple.map 512 512 360 249 145 312 241.10\n34 maps/wc3maps/losttemple.map 512 512 108 204 222 264 138.85\n77 maps/wc3maps/losttemple.map 512 512 358 110 137 303 309.97\n70 maps/wc3maps/losttemple.map 512 512 402 269 188 370 282.06\n54 maps/wc3maps/losttemple.map 512 512 279 218 279 422 218.67\n45 maps/wc3maps/losttemple.map 512 512 327 241 287 77 183.50\n45 maps/wc3maps/losttemple.map 512 512 210 208 175 366 183.04\n17 maps/wc3maps/losttemple.map 512 512 74 264 90 328 70.63\n61 maps/wc3maps/losttemple.map 512 512 414 323 234 408 244.66\n53 maps/wc3maps/losttemple.map 512 512 396 251 228 142 213.15\n28 maps/wc3maps/losttemple.map 512 512 152 317 196 231 112.81\n97 maps/wc3maps/losttemple.map 512 512 111 377 400 180 388.42\n57 maps/wc3maps/losttemple.map 512 512 208 237 401 146 230.69\n31 maps/wc3maps/losttemple.map 512 512 202 282 112 225 127.81\n44 maps/wc3maps/losttemple.map 512 512 92 257 214 366 176.52\n21 maps/wc3maps/losttemple.map 512 512 190 175 265 149 85.77\n96 maps/wc3maps/losttemple.map 512 512 424 103 178 380 385.93\n58 maps/wc3maps/losttemple.map 512 512 203 125 403 152 235.55\n71 maps/wc3maps/losttemple.map 512 512 111 243 301 391 286.01\n21 maps/wc3maps/losttemple.map 512 512 186 289 215 364 87.01\n88 maps/wc3maps/losttemple.map 512 512 281 413 231 81 352.71\n90 maps/wc3maps/losttemple.map 512 512 392 119 83 215 361.79\n20 maps/wc3maps/losttemple.map 512 512 238 431 304 391 82.57\n27 maps/wc3maps/losttemple.map 512 512 402 201 335 280 109.68\n30 maps/wc3maps/losttemple.map 512 512 405 291 303 239 123.54\n104 maps/wc3maps/losttemple.map 512 512 144 336 438 92 417.33\n54 maps/wc3maps/losttemple.map 512 512 398 290 302 416 217.14\n13 maps/wc3maps/losttemple.map 512 512 140 361 152 312 53.97\n70 maps/wc3maps/losttemple.map 512 512 378 145 197 321 280.26\n72 maps/wc3maps/losttemple.map 512 512 261 349 343 98 288.28\n14 maps/wc3maps/losttemple.map 512 512 179 247 158 297 58.70\n33 maps/wc3maps/losttemple.map 512 512 158 331 58 252 132.72\n33 maps/wc3maps/losttemple.map 512 512 301 251 387 179 132.23\n57 maps/wc3maps/losttemple.map 512 512 427 196 439 128 230.74\n46 maps/wc3maps/losttemple.map 512 512 87 304 269 311 186.90\n44 maps/wc3maps/losttemple.map 512 512 142 354 176 189 179.08\n70 maps/wc3maps/losttemple.map 512 512 205 161 263 416 281.95\n26 maps/wc3maps/losttemple.map 512 512 350 290 273 297 107.78\n91 maps/wc3maps/losttemple.map 512 512 419 211 121 372 364.69\n4 maps/wc3maps/losttemple.map 512 512 390 443 377 432 17.56\n62 maps/wc3maps/losttemple.map 512 512 210 380 388 278 248.53\n93 maps/wc3maps/losttemple.map 512 512 313 176 100 428 372.45\n3 maps/wc3maps/losttemple.map 512 512 76 430 77 415 15.41\n54 maps/wc3maps/losttemple.map 512 512 135 258 266 290 219.81\n34 maps/wc3maps/losttemple.map 512 512 304 301 414 255 139.58\n14 maps/wc3maps/losttemple.map 512 512 287 399 288 351 57.49\n15 maps/wc3maps/losttemple.map 512 512 142 126 89 145 63.36\n35 maps/wc3maps/losttemple.map 512 512 189 109 210 202 141.36\n36 maps/wc3maps/losttemple.map 512 512 294 429 232 309 145.68\n46 maps/wc3maps/losttemple.map 512 512 111 216 253 324 187.32\n37 maps/wc3maps/losttemple.map 512 512 280 293 230 163 150.71\n65 maps/wc3maps/losttemple.map 512 512 404 253 200 117 260.33\n86 maps/wc3maps/losttemple.map 512 512 393 282 67 229 347.95\n58 maps/wc3maps/losttemple.map 512 512 75 396 122 216 232.92\n35 maps/wc3maps/losttemple.map 512 512 326 154 200 188 140.08\n46 maps/wc3maps/losttemple.map 512 512 327 353 156 316 186.33\n95 maps/wc3maps/losttemple.map 512 512 73 425 225 108 382.45\n30 maps/wc3maps/losttemple.map 512 512 218 411 146 350 122.50\n68 maps/wc3maps/losttemple.map 512 512 339 71 136 238 272.76\n34 maps/wc3maps/losttemple.map 512 512 175 140 176 248 137.95\n58 maps/wc3maps/losttemple.map 512 512 424 92 259 211 235.38\n100 maps/wc3maps/losttemple.map 512 512 76 387 290 106 403.03\n52 maps/wc3maps/losttemple.map 512 512 139 338 298 235 208.11\n48 maps/wc3maps/losttemple.map 512 512 269 291 115 271 193.50\n69 maps/wc3maps/losttemple.map 512 512 273 179 206 421 276.82\n43 maps/wc3maps/losttemple.map 512 512 221 249 320 122 175.87\n19 maps/wc3maps/losttemple.map 512 512 193 304 231 269 78.07\n67 maps/wc3maps/losttemple.map 512 512 104 308 367 298 271.28\n56 maps/wc3maps/losttemple.map 512 512 349 195 278 389 225.75\n59 maps/wc3maps/losttemple.map 512 512 353 134 241 305 238.14\n9 maps/wc3maps/losttemple.map 512 512 277 375 294 349 39.49\n35 maps/wc3maps/losttemple.map 512 512 312 335 194 387 141.30\n41 maps/wc3maps/losttemple.map 512 512 317 340 338 182 166.70\n55 maps/wc3maps/losttemple.map 512 512 228 272 86 402 223.91\n3 maps/wc3maps/losttemple.map 512 512 435 307 428 317 12.90\n31 maps/wc3maps/losttemple.map 512 512 255 266 361 218 125.88\n49 maps/wc3maps/losttemple.map 512 512 81 203 192 349 196.66\n76 maps/wc3maps/losttemple.map 512 512 366 77 266 335 307.42\n20 maps/wc3maps/losttemple.map 512 512 243 127 275 194 80.25\n36 maps/wc3maps/losttemple.map 512 512 303 395 189 331 144.02\n43 maps/wc3maps/losttemple.map 512 512 144 216 76 344 172.57\n119 maps/wc3maps/losttemple.map 512 512 411 149 70 437 476.70\n7 maps/wc3maps/losttemple.map 512 512 334 256 349 280 30.21\n38 maps/wc3maps/losttemple.map 512 512 146 389 77 298 152.33\n65 maps/wc3maps/losttemple.map 512 512 437 246 234 121 261.22\n37 maps/wc3maps/losttemple.map 512 512 269 223 162 305 150.92\n6 maps/wc3maps/losttemple.map 512 512 71 299 87 319 26.63\n41 maps/wc3maps/losttemple.map 512 512 135 397 82 265 166.10\n48 maps/wc3maps/losttemple.map 512 512 183 389 141 212 194.40\n51 maps/wc3maps/losttemple.map 512 512 402 315 226 239 207.48\n36 maps/wc3maps/losttemple.map 512 512 358 111 371 223 147.37\n66 maps/wc3maps/losttemple.map 512 512 376 155 136 221 267.34\n11 maps/wc3maps/losttemple.map 512 512 98 317 136 299 46.04\n69 maps/wc3maps/losttemple.map 512 512 124 357 355 243 278.22\n45 maps/wc3maps/losttemple.map 512 512 207 191 68 274 180.99\n36 maps/wc3maps/losttemple.map 512 512 398 143 386 249 145.52\n31 maps/wc3maps/losttemple.map 512 512 341 190 227 219 127.67\n57 maps/wc3maps/losttemple.map 512 512 245 309 346 131 230.04\n18 maps/wc3maps/losttemple.map 512 512 244 319 184 297 73.25\n39 maps/wc3maps/losttemple.map 512 512 429 300 320 370 158.50\n9 maps/wc3maps/losttemple.map 512 512 352 420 383 439 38.87\n40 maps/wc3maps/losttemple.map 512 512 272 116 385 174 160.20\n60 maps/wc3maps/losttemple.map 512 512 295 418 321 204 241.34\n99 maps/wc3maps/losttemple.map 512 512 174 445 285 102 397.18\n59 maps/wc3maps/losttemple.map 512 512 243 411 420 309 237.11\n35 maps/wc3maps/losttemple.map 512 512 344 128 221 170 140.40\n47 maps/wc3maps/losttemple.map 512 512 270 121 408 136 188.92\n65 maps/wc3maps/losttemple.map 512 512 92 311 208 125 260.41\n13 maps/wc3maps/losttemple.map 512 512 232 104 252 147 53.04\n43 maps/wc3maps/losttemple.map 512 512 404 118 286 101 175.51\n89 maps/wc3maps/losttemple.map 512 512 197 432 240 93 356.81\n83 maps/wc3maps/losttemple.map 512 512 130 306 338 80 333.83\n47 maps/wc3maps/losttemple.map 512 512 434 215 261 257 190.40\n45 maps/wc3maps/losttemple.map 512 512 106 389 258 363 182.57\n102 maps/wc3maps/losttemple.map 512 512 123 387 406 130 408.20\n37 maps/wc3maps/losttemple.map 512 512 342 93 200 117 151.94\n70 maps/wc3maps/losttemple.map 512 512 179 246 426 159 283.04\n18 maps/wc3maps/losttemple.map 512 512 387 389 399 436 72.21\n61 maps/wc3maps/losttemple.map 512 512 334 353 252 146 246.62\n92 maps/wc3maps/losttemple.map 512 512 421 162 122 314 370.16\n72 maps/wc3maps/losttemple.map 512 512 83 439 88 197 290.46\n24 maps/wc3maps/losttemple.map 512 512 408 218 350 180 97.94\n90 maps/wc3maps/losttemple.map 512 512 86 333 426 318 362.78\n20 maps/wc3maps/losttemple.map 512 512 431 235 426 164 82.18\n55 maps/wc3maps/losttemple.map 512 512 210 160 306 334 221.38\n55 maps/wc3maps/losttemple.map 512 512 275 186 131 328 220.78\n53 maps/wc3maps/losttemple.map 512 512 309 271 187 392 215.15\n51 maps/wc3maps/losttemple.map 512 512 321 245 424 83 205.84\n52 maps/wc3maps/losttemple.map 512 512 338 131 177 252 211.12\n49 maps/wc3maps/losttemple.map 512 512 263 86 417 154 199.54\n19 maps/wc3maps/losttemple.map 512 512 265 291 287 356 77.18\n25 maps/wc3maps/losttemple.map 512 512 281 359 215 435 103.92\n75 maps/wc3maps/losttemple.map 512 512 280 366 336 91 301.51\n53 maps/wc3maps/losttemple.map 512 512 307 194 206 338 215.15\n39 maps/wc3maps/losttemple.map 512 512 273 322 278 187 159.80\n60 maps/wc3maps/losttemple.map 512 512 89 293 172 140 242.84\n46 maps/wc3maps/losttemple.map 512 512 193 328 355 270 186.02\n43 maps/wc3maps/losttemple.map 512 512 316 239 291 118 175.11\n84 maps/wc3maps/losttemple.map 512 512 224 86 337 374 338.32\n38 maps/wc3maps/losttemple.map 512 512 99 377 88 335 152.40\n43 maps/wc3maps/losttemple.map 512 512 176 430 106 412 173.68\n31 maps/wc3maps/losttemple.map 512 512 292 213 366 298 124.44\n57 maps/wc3maps/losttemple.map 512 512 278 386 177 213 228.49\n13 maps/wc3maps/losttemple.map 512 512 268 265 257 310 53.07\n42 maps/wc3maps/losttemple.map 512 512 277 364 135 300 168.51\n9 maps/wc3maps/losttemple.map 512 512 319 109 352 111 39.49\n52 maps/wc3maps/losttemple.map 512 512 337 128 336 327 210.18\n37 maps/wc3maps/losttemple.map 512 512 348 250 236 165 148.38\n52 maps/wc3maps/losttemple.map 512 512 446 110 266 175 211.07\n44 maps/wc3maps/losttemple.map 512 512 156 284 321 318 179.91\n26 maps/wc3maps/losttemple.map 512 512 321 330 229 312 104.14\n21 maps/wc3maps/losttemple.map 512 512 207 296 287 307 85.38\n24 maps/wc3maps/losttemple.map 512 512 151 171 167 83 97.94\n56 maps/wc3maps/losttemple.map 512 512 275 126 98 202 225.88\n3 maps/wc3maps/losttemple.map 512 512 449 217 452 204 14.24\n50 maps/wc3maps/losttemple.map 512 512 405 242 206 247 201.07\n50 maps/wc3maps/losttemple.map 512 512 212 155 355 290 201.26\n64 maps/wc3maps/losttemple.map 512 512 137 253 199 132 256.38\n22 maps/wc3maps/losttemple.map 512 512 87 321 168 336 88.87\n87 maps/wc3maps/losttemple.map 512 512 289 98 280 409 351.10\n67 maps/wc3maps/losttemple.map 512 512 364 273 122 328 268.92\n36 maps/wc3maps/losttemple.map 512 512 262 330 256 187 145.49\n79 maps/wc3maps/losttemple.map 512 512 440 196 152 272 319.48\n59 maps/wc3maps/losttemple.map 512 512 173 151 112 322 237.38\n100 maps/wc3maps/losttemple.map 512 512 335 90 121 387 400.29\n50 maps/wc3maps/losttemple.map 512 512 117 234 190 406 203.99\n28 maps/wc3maps/losttemple.map 512 512 225 334 142 377 114.57\n50 maps/wc3maps/losttemple.map 512 512 128 229 267 94 201.95\n68 maps/wc3maps/losttemple.map 512 512 348 67 141 226 272.86\n50 maps/wc3maps/losttemple.map 512 512 92 222 283 242 200.94\n58 maps/wc3maps/losttemple.map 512 512 85 301 239 398 232.52\n59 maps/wc3maps/losttemple.map 512 512 261 384 76 330 236.88\n73 maps/wc3maps/losttemple.map 512 512 393 248 115 212 293.74\n103 maps/wc3maps/losttemple.map 512 512 63 433 242 94 413.73\n43 maps/wc3maps/losttemple.map 512 512 118 392 163 454 175.61\n53 maps/wc3maps/losttemple.map 512 512 285 350 182 198 212.46\n70 maps/wc3maps/losttemple.map 512 512 378 280 121 331 283.44\n29 maps/wc3maps/losttemple.map 512 512 427 315 353 231 116.99\n22 maps/wc3maps/losttemple.map 512 512 359 340 341 421 88.46\n88 maps/wc3maps/losttemple.map 512 512 272 113 281 436 355.30\n20 maps/wc3maps/losttemple.map 512 512 196 331 198 413 82.83\n30 maps/wc3maps/losttemple.map 512 512 363 167 333 278 123.43\n19 maps/wc3maps/losttemple.map 512 512 262 145 280 98 79.43\n57 maps/wc3maps/losttemple.map 512 512 321 239 198 409 230.46\n86 maps/wc3maps/losttemple.map 512 512 405 277 81 243 345.05\n63 maps/wc3maps/losttemple.map 512 512 399 155 163 202 255.47\n75 maps/wc3maps/losttemple.map 512 512 88 205 346 306 301.49\n74 maps/wc3maps/losttemple.map 512 512 347 259 81 339 299.14\n47 maps/wc3maps/losttemple.map 512 512 110 267 109 424 191.58\n55 maps/wc3maps/losttemple.map 512 512 231 153 132 331 221.94\n30 maps/wc3maps/losttemple.map 512 512 241 351 207 244 121.08\n50 maps/wc3maps/losttemple.map 512 512 412 140 247 212 201.85\n70 maps/wc3maps/losttemple.map 512 512 326 373 347 105 282.50\n54 maps/wc3maps/losttemple.map 512 512 411 150 227 225 217.99\n51 maps/wc3maps/losttemple.map 512 512 403 316 393 163 206.28\n36 maps/wc3maps/losttemple.map 512 512 438 141 313 168 146.12\n56 maps/wc3maps/losttemple.map 512 512 281 382 159 214 225.56\n77 maps/wc3maps/losttemple.map 512 512 164 265 441 186 309.72\n65 maps/wc3maps/losttemple.map 512 512 403 293 436 92 263.89\n83 maps/wc3maps/losttemple.map 512 512 74 447 239 187 334.79\n76 maps/wc3maps/losttemple.map 512 512 64 436 255 229 306.03\n81 maps/wc3maps/losttemple.map 512 512 196 376 293 109 324.17\n43 maps/wc3maps/losttemple.map 512 512 137 268 145 379 174.44\n8 maps/wc3maps/losttemple.map 512 512 255 104 283 121 35.04\n65 maps/wc3maps/losttemple.map 512 512 329 140 201 332 260.84\n20 maps/wc3maps/losttemple.map 512 512 237 350 317 352 80.83\n69 maps/wc3maps/losttemple.map 512 512 347 282 100 345 278.41\n63 maps/wc3maps/losttemple.map 512 512 419 319 193 250 254.58\n14 maps/wc3maps/losttemple.map 512 512 53 347 71 295 59.46\n42 maps/wc3maps/losttemple.map 512 512 273 183 153 289 168.59\n27 maps/wc3maps/losttemple.map 512 512 164 326 105 411 109.44\n49 maps/wc3maps/losttemple.map 512 512 415 104 286 93 197.38\n110 maps/wc3maps/losttemple.map 512 512 89 422 430 182 441.00\n20 maps/wc3maps/losttemple.map 512 512 133 354 73 395 82.84\n67 maps/wc3maps/losttemple.map 512 512 210 338 190 112 268.95\n24 maps/wc3maps/losttemple.map 512 512 354 95 376 159 98.28\n73 maps/wc3maps/losttemple.map 512 512 176 328 440 253 295.07\n22 maps/wc3maps/losttemple.map 512 512 181 200 166 283 89.21\n77 maps/wc3maps/losttemple.map 512 512 128 383 367 214 309.59\n37 maps/wc3maps/losttemple.map 512 512 149 348 271 278 150.99\n36 maps/wc3maps/losttemple.map 512 512 139 358 181 237 144.25\n35 maps/wc3maps/losttemple.map 512 512 171 208 89 283 143.23\n85 maps/wc3maps/losttemple.map 512 512 145 353 292 70 343.89\n39 maps/wc3maps/losttemple.map 512 512 293 274 345 156 156.27\n61 maps/wc3maps/losttemple.map 512 512 298 319 180 138 245.69\n47 maps/wc3maps/losttemple.map 512 512 323 215 162 251 188.46\n41 maps/wc3maps/losttemple.map 512 512 416 269 280 216 166.15\n34 maps/wc3maps/losttemple.map 512 512 341 189 222 230 139.74\n30 maps/wc3maps/losttemple.map 512 512 253 228 144 264 123.91\n9 maps/wc3maps/losttemple.map 512 512 84 258 106 234 39.56\n25 maps/wc3maps/losttemple.map 512 512 230 87 269 174 103.15\n55 maps/wc3maps/losttemple.map 512 512 206 262 406 314 221.54\n47 maps/wc3maps/losttemple.map 512 512 80 299 251 277 190.11\n18 maps/wc3maps/losttemple.map 512 512 426 379 365 409 74.01\n18 maps/wc3maps/losttemple.map 512 512 344 305 337 235 72.90\n46 maps/wc3maps/losttemple.map 512 512 232 287 76 278 187.43\n61 maps/wc3maps/losttemple.map 512 512 424 75 323 63 247.49\n24 maps/wc3maps/losttemple.map 512 512 281 231 201 186 98.64\n11 maps/wc3maps/losttemple.map 512 512 293 250 265 214 47.60\n18 maps/wc3maps/losttemple.map 512 512 145 283 94 310 73.90\n35 maps/wc3maps/losttemple.map 512 512 355 301 282 198 142.61\n78 maps/wc3maps/losttemple.map 512 512 68 253 336 142 313.98\n50 maps/wc3maps/losttemple.map 512 512 176 367 214 188 202.30\n30 maps/wc3maps/losttemple.map 512 512 317 200 419 250 122.71\n40 maps/wc3maps/losttemple.map 512 512 271 148 280 291 160.77\n31 maps/wc3maps/losttemple.map 512 512 236 256 306 193 126.30\n25 maps/wc3maps/losttemple.map 512 512 317 342 256 275 101.64\n57 maps/wc3maps/losttemple.map 512 512 385 309 181 363 231.34\n4 maps/wc3maps/losttemple.map 512 512 229 111 217 101 16.14\n40 maps/wc3maps/losttemple.map 512 512 248 296 191 183 160.63\n20 maps/wc3maps/losttemple.map 512 512 141 237 78 189 82.88\n53 maps/wc3maps/losttemple.map 512 512 74 203 260 210 213.75\n50 maps/wc3maps/losttemple.map 512 512 255 358 107 261 203.99\n31 maps/wc3maps/losttemple.map 512 512 234 160 157 254 125.89\n53 maps/wc3maps/losttemple.map 512 512 273 402 418 310 214.10\n30 maps/wc3maps/losttemple.map 512 512 94 366 129 304 120.54\n43 maps/wc3maps/losttemple.map 512 512 95 292 83 402 175.48\n95 maps/wc3maps/losttemple.map 512 512 150 378 352 121 381.90\n84 maps/wc3maps/losttemple.map 512 512 170 317 349 70 336.62\n40 maps/wc3maps/losttemple.map 512 512 208 323 88 224 161.59\n92 maps/wc3maps/losttemple.map 512 512 404 242 99 400 370.45\n40 maps/wc3maps/losttemple.map 512 512 339 289 208 367 163.31\n53 maps/wc3maps/losttemple.map 512 512 313 102 194 252 215.05\n18 maps/wc3maps/losttemple.map 512 512 48 85 102 54 74.46\n46 maps/wc3maps/losttemple.map 512 512 314 188 174 272 187.10\n74 maps/wc3maps/losttemple.map 512 512 416 291 224 89 296.17\n42 maps/wc3maps/losttemple.map 512 512 253 309 124 213 169.94\n88 maps/wc3maps/losttemple.map 512 512 132 333 390 148 352.20\n89 maps/wc3maps/losttemple.map 512 512 247 427 286 118 357.40\n15 maps/wc3maps/losttemple.map 512 512 160 126 187 76 61.18\n34 maps/wc3maps/losttemple.map 512 512 360 159 281 225 136.64\n67 maps/wc3maps/losttemple.map 512 512 109 320 353 254 271.34\n15 maps/wc3maps/losttemple.map 512 512 407 395 373 432 61.77\n48 maps/wc3maps/losttemple.map 512 512 396 246 234 172 192.65\n49 maps/wc3maps/losttemple.map 512 512 69 397 75 321 197.05\n93 maps/wc3maps/losttemple.map 512 512 186 114 222 376 373.42\n60 maps/wc3maps/losttemple.map 512 512 269 222 428 94 243.05\n57 maps/wc3maps/losttemple.map 512 512 425 117 253 120 230.38\n92 maps/wc3maps/losttemple.map 512 512 411 312 67 262 369.68\n45 maps/wc3maps/losttemple.map 512 512 438 69 326 162 183.79\n47 maps/wc3maps/losttemple.map 512 512 425 242 236 241 191.07\n56 maps/wc3maps/losttemple.map 512 512 254 154 61 233 225.72\n71 maps/wc3maps/losttemple.map 512 512 426 304 187 400 284.87\n18 maps/wc3maps/losttemple.map 512 512 119 301 190 295 75.97\n49 maps/wc3maps/losttemple.map 512 512 387 175 422 306 197.87\n83 maps/wc3maps/losttemple.map 512 512 339 88 171 336 333.89\n45 maps/wc3maps/losttemple.map 512 512 331 245 185 332 182.04\n9 maps/wc3maps/losttemple.map 512 512 204 353 167 346 39.90\n31 maps/wc3maps/losttemple.map 512 512 299 419 311 380 126.84\n57 maps/wc3maps/losttemple.map 512 512 426 219 293 98 228.71\n68 maps/wc3maps/losttemple.map 512 512 444 111 299 315 272.85\n44 maps/wc3maps/losttemple.map 512 512 148 257 255 365 178.42\n62 maps/wc3maps/losttemple.map 512 512 159 243 383 179 251.34\n21 maps/wc3maps/losttemple.map 512 512 326 290 312 371 86.80\n64 maps/wc3maps/losttemple.map 512 512 215 93 361 291 258.48\n71 maps/wc3maps/losttemple.map 512 512 79 218 344 272 287.37\n56 maps/wc3maps/losttemple.map 512 512 112 300 312 248 224.85\n94 maps/wc3maps/losttemple.map 512 512 137 391 327 105 379.35\n59 maps/wc3maps/losttemple.map 512 512 401 279 261 430 237.11\n80 maps/wc3maps/losttemple.map 512 512 218 137 140 399 320.01\n23 maps/wc3maps/losttemple.map 512 512 413 220 346 188 92.46\n31 maps/wc3maps/losttemple.map 512 512 308 403 229 450 127.21\n54 maps/wc3maps/losttemple.map 512 512 86 257 263 191 216.78\n92 maps/wc3maps/losttemple.map 512 512 338 77 72 287 370.56\n47 maps/wc3maps/losttemple.map 512 512 271 220 369 83 191.98\n82 maps/wc3maps/losttemple.map 512 512 66 333 264 116 328.89\n87 maps/wc3maps/losttemple.map 512 512 353 96 64 241 349.06\n41 maps/wc3maps/losttemple.map 512 512 133 365 120 212 167.50\n58 maps/wc3maps/losttemple.map 512 512 104 396 309 366 232.20\n64 maps/wc3maps/losttemple.map 512 512 171 286 308 122 256.62\n51 maps/wc3maps/losttemple.map 512 512 267 124 414 122 204.97\n22 maps/wc3maps/losttemple.map 512 512 312 164 297 119 91.70\n10 maps/wc3maps/losttemple.map 512 512 256 306 216 303 42.07\n22 maps/wc3maps/losttemple.map 512 512 317 205 265 218 89.87\n30 maps/wc3maps/losttemple.map 512 512 294 417 297 308 121.01\n74 maps/wc3maps/losttemple.map 512 512 340 375 105 262 296.45\n73 maps/wc3maps/losttemple.map 512 512 230 135 61 332 292.78\n93 maps/wc3maps/losttemple.map 512 512 327 117 174 423 375.48\n46 maps/wc3maps/losttemple.map 512 512 133 333 304 361 184.94\n22 maps/wc3maps/losttemple.map 512 512 154 259 115 332 89.74\n85 maps/wc3maps/losttemple.map 512 512 305 180 89 395 341.96\n68 maps/wc3maps/losttemple.map 512 512 374 292 139 376 272.72\n63 maps/wc3maps/losttemple.map 512 512 197 330 233 101 253.67\n59 maps/wc3maps/losttemple.map 512 512 204 352 415 315 236.27\n91 maps/wc3maps/losttemple.map 512 512 109 335 351 85 367.23\n98 maps/wc3maps/losttemple.map 512 512 436 320 62 328 395.54\n18 maps/wc3maps/losttemple.map 512 512 131 348 196 325 74.53\n18 maps/wc3maps/losttemple.map 512 512 281 193 250 235 74.80\n25 maps/wc3maps/losttemple.map 512 512 404 267 340 281 100.81\n54 maps/wc3maps/losttemple.map 512 512 230 435 329 258 218.01\n25 maps/wc3maps/losttemple.map 512 512 180 236 159 323 100.38\n24 maps/wc3maps/losttemple.map 512 512 272 370 204 434 99.78\n71 maps/wc3maps/losttemple.map 512 512 67 257 315 170 284.04\n28 maps/wc3maps/losttemple.map 512 512 252 314 158 264 114.71\n18 maps/wc3maps/losttemple.map 512 512 360 105 301 126 74.73\n65 maps/wc3maps/losttemple.map 512 512 375 293 137 237 261.20\n94 maps/wc3maps/losttemple.map 512 512 171 428 233 80 376.99\n14 maps/wc3maps/losttemple.map 512 512 152 255 102 231 59.94\n41 maps/wc3maps/losttemple.map 512 512 392 299 235 292 167.36\n78 maps/wc3maps/losttemple.map 512 512 265 109 182 390 315.97\n107 maps/wc3maps/losttemple.map 512 512 441 129 182 430 431.13\n62 maps/wc3maps/losttemple.map 512 512 104 337 319 256 248.55\n93 maps/wc3maps/losttemple.map 512 512 418 221 118 271 374.49\n65 maps/wc3maps/losttemple.map 512 512 193 418 195 177 261.71\n19 maps/wc3maps/losttemple.map 512 512 291 168 291 221 77.33\n71 maps/wc3maps/losttemple.map 512 512 143 266 388 169 285.18\n26 maps/wc3maps/losttemple.map 512 512 315 286 286 377 107.15\n67 maps/wc3maps/losttemple.map 512 512 411 113 248 312 271.79\n32 maps/wc3maps/losttemple.map 512 512 259 285 154 344 129.44\n35 maps/wc3maps/losttemple.map 512 512 276 188 238 306 143.70\n74 maps/wc3maps/losttemple.map 512 512 400 286 164 423 298.02\n36 maps/wc3maps/losttemple.map 512 512 268 365 243 228 147.36\n4 maps/wc3maps/losttemple.map 512 512 359 302 347 287 19.97\n31 maps/wc3maps/losttemple.map 512 512 226 296 230 196 125.80\n48 maps/wc3maps/losttemple.map 512 512 342 374 316 197 192.25\n6 maps/wc3maps/losttemple.map 512 512 240 290 238 264 26.83\n66 maps/wc3maps/losttemple.map 512 512 377 287 193 107 265.59\n70 maps/wc3maps/losttemple.map 512 512 72 276 332 288 282.37\n94 maps/wc3maps/losttemple.map 512 512 68 322 341 106 377.70\n73 maps/wc3maps/losttemple.map 512 512 211 433 394 231 294.20\n67 maps/wc3maps/losttemple.map 512 512 121 251 317 336 271.85\n64 maps/wc3maps/losttemple.map 512 512 104 283 280 421 257.76\n38 maps/wc3maps/losttemple.map 512 512 290 110 245 230 154.46\n43 maps/wc3maps/losttemple.map 512 512 207 255 324 135 175.49\n51 maps/wc3maps/losttemple.map 512 512 170 368 250 198 204.31\n67 maps/wc3maps/losttemple.map 512 512 80 226 90 443 269.39\n72 maps/wc3maps/losttemple.map 512 512 75 208 347 249 288.98\n22 maps/wc3maps/losttemple.map 512 512 244 405 286 334 89.57\n73 maps/wc3maps/losttemple.map 512 512 100 216 275 423 294.13\n42 maps/wc3maps/losttemple.map 512 512 294 90 353 228 168.88\n61 maps/wc3maps/losttemple.map 512 512 438 113 283 283 244.16\n16 maps/wc3maps/losttemple.map 512 512 82 228 149 226 67.83\n28 maps/wc3maps/losttemple.map 512 512 431 209 325 226 113.04\n33 maps/wc3maps/losttemple.map 512 512 109 220 230 226 135.08\n63 maps/wc3maps/losttemple.map 512 512 66 232 89 429 255.61\n48 maps/wc3maps/losttemple.map 512 512 359 239 293 73 193.34\n48 maps/wc3maps/losttemple.map 512 512 274 169 209 336 195.10\n4 maps/wc3maps/losttemple.map 512 512 416 103 428 117 18.97\n71 maps/wc3maps/losttemple.map 512 512 224 424 438 328 285.61\n37 maps/wc3maps/losttemple.map 512 512 102 319 159 209 149.43\n57 maps/wc3maps/losttemple.map 512 512 279 265 440 135 231.25\n48 maps/wc3maps/losttemple.map 512 512 202 151 184 327 195.88\n73 maps/wc3maps/losttemple.map 512 512 100 215 375 229 293.23\n45 maps/wc3maps/losttemple.map 512 512 370 176 301 324 180.10\n56 maps/wc3maps/losttemple.map 512 512 197 156 370 280 224.36\n68 maps/wc3maps/losttemple.map 512 512 191 316 341 145 275.79\n27 maps/wc3maps/losttemple.map 512 512 279 211 183 199 110.08\n56 maps/wc3maps/losttemple.map 512 512 257 240 184 437 227.24\n19 maps/wc3maps/losttemple.map 512 512 251 281 199 337 78.71\n68 maps/wc3maps/losttemple.map 512 512 290 365 140 271 273.42\n75 maps/wc3maps/losttemple.map 512 512 321 158 122 343 302.72\n43 maps/wc3maps/losttemple.map 512 512 169 429 283 315 172.94\n115 maps/wc3maps/losttemple.map 512 512 368 74 109 414 461.93\n77 maps/wc3maps/losttemple.map 512 512 253 315 440 89 308.73\n23 maps/wc3maps/losttemple.map 512 512 414 231 330 251 92.28\n38 maps/wc3maps/losttemple.map 512 512 442 280 331 189 152.79\n114 maps/wc3maps/losttemple.map 512 512 138 362 446 72 458.00\n85 maps/wc3maps/losttemple.map 512 512 207 398 407 166 343.10\n97 maps/wc3maps/losttemple.map 512 512 421 83 104 226 390.88\n80 maps/wc3maps/losttemple.map 512 512 275 422 259 121 322.50\n11 maps/wc3maps/losttemple.map 512 512 183 430 181 383 47.83\n33 maps/wc3maps/losttemple.map 512 512 266 170 346 82 134.61\n51 maps/wc3maps/losttemple.map 512 512 114 330 290 262 204.17\n19 maps/wc3maps/losttemple.map 512 512 123 213 83 272 79.67\n61 maps/wc3maps/losttemple.map 512 512 147 383 262 211 246.66\n105 maps/wc3maps/losttemple.map 512 512 402 251 75 447 421.84\n63 maps/wc3maps/losttemple.map 512 512 370 165 290 379 254.59\n13 maps/wc3maps/losttemple.map 512 512 243 87 284 122 55.50\n78 maps/wc3maps/losttemple.map 512 512 225 367 389 127 313.20\n21 maps/wc3maps/losttemple.map 512 512 83 269 142 237 86.56\n77 maps/wc3maps/losttemple.map 512 512 215 107 262 395 308.30\n3 maps/wc3maps/losttemple.map 512 512 207 254 215 245 12.31\n17 maps/wc3maps/losttemple.map 512 512 355 216 416 202 70.94\n33 maps/wc3maps/losttemple.map 512 512 346 271 283 379 135.75\n45 maps/wc3maps/losttemple.map 512 512 229 329 394 286 182.81\n46 maps/wc3maps/losttemple.map 512 512 229 425 104 385 187.89\n35 maps/wc3maps/losttemple.map 512 512 416 298 333 195 143.24\n76 maps/wc3maps/losttemple.map 512 512 218 309 427 116 305.35\n19 maps/wc3maps/losttemple.map 512 512 316 361 334 290 78.46\n58 maps/wc3maps/losttemple.map 512 512 180 298 196 120 232.55\n19 maps/wc3maps/losttemple.map 512 512 235 176 244 250 77.73\n39 maps/wc3maps/losttemple.map 512 512 326 202 433 87 159.91\n75 maps/wc3maps/losttemple.map 512 512 214 195 211 382 301.10\n85 maps/wc3maps/losttemple.map 512 512 376 129 239 412 341.40\n55 maps/wc3maps/losttemple.map 512 512 234 87 108 199 220.35\n74 maps/wc3maps/losttemple.map 512 512 183 211 426 293 296.02\n61 maps/wc3maps/losttemple.map 512 512 371 77 184 200 244.39\n85 maps/wc3maps/losttemple.map 512 512 276 387 312 77 341.48\n29 maps/wc3maps/losttemple.map 512 512 201 184 217 262 119.94\n97 maps/wc3maps/losttemple.map 512 512 411 240 138 264 390.18\n50 maps/wc3maps/losttemple.map 512 512 217 270 224 80 203.67\n48 maps/wc3maps/losttemple.map 512 512 147 341 312 288 192.23\n56 maps/wc3maps/losttemple.map 512 512 68 444 113 268 227.98\n50 maps/wc3maps/losttemple.map 512 512 377 244 175 244 202.83\n11 maps/wc3maps/losttemple.map 512 512 261 160 246 120 46.21\n55 maps/wc3maps/losttemple.map 512 512 272 208 77 257 221.54\n24 maps/wc3maps/losttemple.map 512 512 317 154 348 238 96.84\n31 maps/wc3maps/losttemple.map 512 512 145 275 251 225 126.71\n88 maps/wc3maps/losttemple.map 512 512 178 418 239 90 353.27\n95 maps/wc3maps/losttemple.map 512 512 281 122 152 433 383.42\n7 maps/wc3maps/losttemple.map 512 512 240 109 262 88 30.70\n15 maps/wc3maps/losttemple.map 512 512 277 284 290 325 63.50\n53 maps/wc3maps/losttemple.map 512 512 416 306 214 288 213.60\n6 maps/wc3maps/losttemple.map 512 512 396 165 412 144 27.63\n72 maps/wc3maps/losttemple.map 512 512 335 370 329 93 288.36\n53 maps/wc3maps/losttemple.map 512 512 179 370 246 183 215.92\n57 maps/wc3maps/losttemple.map 512 512 111 251 191 442 230.14\n78 maps/wc3maps/losttemple.map 512 512 318 165 109 360 313.79\n28 maps/wc3maps/losttemple.map 512 512 309 161 216 132 113.30\n15 maps/wc3maps/losttemple.map 512 512 121 86 70 64 60.11\n12 maps/wc3maps/losttemple.map 512 512 301 261 321 285 48.38\n11 maps/wc3maps/losttemple.map 512 512 158 144 144 103 46.80\n42 maps/wc3maps/losttemple.map 512 512 244 174 234 339 169.14\n66 maps/wc3maps/losttemple.map 512 512 317 234 154 416 265.86\n32 maps/wc3maps/losttemple.map 512 512 300 215 334 323 131.74\n52 maps/wc3maps/losttemple.map 512 512 163 443 81 299 211.44\n61 maps/wc3maps/losttemple.map 512 512 167 315 266 110 247.76\n74 maps/wc3maps/losttemple.map 512 512 139 357 334 183 296.95\n42 maps/wc3maps/losttemple.map 512 512 414 144 407 219 169.58\n64 maps/wc3maps/losttemple.map 512 512 313 395 166 215 256.71\n63 maps/wc3maps/losttemple.map 512 512 76 254 316 235 255.08\n20 maps/wc3maps/losttemple.map 512 512 269 250 340 221 83.01\n44 maps/wc3maps/losttemple.map 512 512 147 224 139 398 178.97\n32 maps/wc3maps/losttemple.map 512 512 155 302 281 308 129.31\n68 maps/wc3maps/losttemple.map 512 512 410 272 158 292 272.23\n78 maps/wc3maps/losttemple.map 512 512 287 73 137 326 315.13\n58 maps/wc3maps/losttemple.map 512 512 148 273 266 88 233.88\n12 maps/wc3maps/losttemple.map 512 512 116 396 150 360 50.08\n113 maps/wc3maps/losttemple.map 512 512 407 112 114 408 455.00\n46 maps/wc3maps/losttemple.map 512 512 327 180 320 362 184.90\n41 maps/wc3maps/losttemple.map 512 512 152 301 86 439 165.34\n67 maps/wc3maps/losttemple.map 512 512 316 61 240 296 268.82\n29 maps/wc3maps/losttemple.map 512 512 255 329 355 290 116.15\n54 maps/wc3maps/losttemple.map 512 512 297 111 329 294 218.21\n21 maps/wc3maps/losttemple.map 512 512 188 326 104 317 87.73\n21 maps/wc3maps/losttemple.map 512 512 191 305 267 313 84.49\n52 maps/wc3maps/losttemple.map 512 512 419 296 375 141 209.94\n6 maps/wc3maps/losttemple.map 512 512 175 285 180 307 24.07\n5 maps/wc3maps/losttemple.map 512 512 140 312 148 294 21.31\n54 maps/wc3maps/losttemple.map 512 512 99 385 263 272 216.66\n66 maps/wc3maps/losttemple.map 512 512 220 332 437 212 267.88\n96 maps/wc3maps/losttemple.map 512 512 132 263 376 173 385.30\n9 maps/wc3maps/losttemple.map 512 512 434 260 421 292 37.38\n63 maps/wc3maps/losttemple.map 512 512 215 349 380 181 253.92\n10 maps/wc3maps/losttemple.map 512 512 179 390 180 431 41.41\n66 maps/wc3maps/losttemple.map 512 512 331 99 332 350 264.28\n39 maps/wc3maps/losttemple.map 512 512 286 253 183 364 158.94\n62 maps/wc3maps/losttemple.map 512 512 271 408 323 184 248.85\n29 maps/wc3maps/losttemple.map 512 512 169 311 241 246 116.50\n25 maps/wc3maps/losttemple.map 512 512 428 131 344 178 103.47\n55 maps/wc3maps/losttemple.map 512 512 198 158 277 340 220.58\n62 maps/wc3maps/losttemple.map 512 512 90 219 324 254 248.50\n65 maps/wc3maps/losttemple.map 512 512 233 220 79 393 261.98\n80 maps/wc3maps/losttemple.map 512 512 80 304 386 273 322.98\n77 maps/wc3maps/losttemple.map 512 512 170 291 360 77 308.17\n77 maps/wc3maps/losttemple.map 512 512 312 368 281 106 311.53\n25 maps/wc3maps/losttemple.map 512 512 90 287 175 279 102.40\n62 maps/wc3maps/losttemple.map 512 512 253 294 343 87 251.31\n21 maps/wc3maps/losttemple.map 512 512 321 173 377 236 86.78\n39 maps/wc3maps/losttemple.map 512 512 224 160 254 307 159.43\n74 maps/wc3maps/losttemple.map 512 512 127 405 347 252 296.26\n17 maps/wc3maps/losttemple.map 512 512 130 346 196 335 70.56\n5 maps/wc3maps/losttemple.map 512 512 279 210 263 220 20.14\n49 maps/wc3maps/losttemple.map 512 512 356 230 204 337 197.49\n63 maps/wc3maps/losttemple.map 512 512 313 342 361 110 255.20\n28 maps/wc3maps/losttemple.map 512 512 244 208 205 114 113.67\n27 maps/wc3maps/losttemple.map 512 512 274 85 199 151 110.54\n15 maps/wc3maps/losttemple.map 512 512 148 230 182 274 62.77\n59 maps/wc3maps/losttemple.map 512 512 81 252 232 102 238.32\n8 maps/wc3maps/losttemple.map 512 512 200 244 232 248 33.66\n60 maps/wc3maps/losttemple.map 512 512 406 306 356 109 242.52\n42 maps/wc3maps/losttemple.map 512 512 213 222 104 336 170.28\n53 maps/wc3maps/losttemple.map 512 512 294 348 371 167 212.89\n0 maps/wc3maps/losttemple.map 512 512 362 235 365 233 3.83\n30 maps/wc3maps/losttemple.map 512 512 140 220 74 296 121.50\n52 maps/wc3maps/losttemple.map 512 512 400 188 226 244 209.50\n29 maps/wc3maps/losttemple.map 512 512 285 247 167 244 119.24\n48 maps/wc3maps/losttemple.map 512 512 389 127 285 271 194.11\n99 maps/wc3maps/losttemple.map 512 512 86 329 430 194 399.92\n59 maps/wc3maps/losttemple.map 512 512 247 128 253 362 237.31\n55 maps/wc3maps/losttemple.map 512 512 241 263 89 374 221.21\n47 maps/wc3maps/losttemple.map 512 512 410 235 247 304 191.58\n94 maps/wc3maps/losttemple.map 512 512 227 406 358 98 376.12\n89 maps/wc3maps/losttemple.map 512 512 72 414 191 119 357.36\n70 maps/wc3maps/losttemple.map 512 512 418 252 219 397 283.81\n91 maps/wc3maps/losttemple.map 512 512 87 430 303 193 366.93\n20 maps/wc3maps/losttemple.map 512 512 188 385 134 370 83.57\n109 maps/wc3maps/losttemple.map 512 512 88 439 325 113 438.81\n68 maps/wc3maps/losttemple.map 512 512 195 361 211 122 273.02\n77 maps/wc3maps/losttemple.map 512 512 163 351 441 273 310.31\n47 maps/wc3maps/losttemple.map 512 512 270 425 302 254 191.47\n35 maps/wc3maps/losttemple.map 512 512 205 138 117 228 140.51\n64 maps/wc3maps/losttemple.map 512 512 435 189 361 78 258.04\n105 maps/wc3maps/losttemple.map 512 512 72 447 404 247 423.43\n39 maps/wc3maps/losttemple.map 512 512 268 255 415 286 159.84\n88 maps/wc3maps/losttemple.map 512 512 384 141 69 230 354.21\n72 maps/wc3maps/losttemple.map 512 512 102 388 355 302 288.62\n73 maps/wc3maps/losttemple.map 512 512 86 258 319 368 292.91\n58 maps/wc3maps/losttemple.map 512 512 361 117 216 274 235.22\n59 maps/wc3maps/losttemple.map 512 512 118 243 284 311 236.08\n25 maps/wc3maps/losttemple.map 512 512 132 249 205 319 101.99\n40 maps/wc3maps/losttemple.map 512 512 407 127 272 167 162.34\n68 maps/wc3maps/losttemple.map 512 512 129 318 239 89 275.15\n46 maps/wc3maps/losttemple.map 512 512 216 265 108 386 185.65\n97 maps/wc3maps/losttemple.map 512 512 418 233 101 409 389.90\n34 maps/wc3maps/losttemple.map 512 512 199 447 265 343 136.61\n19 maps/wc3maps/losttemple.map 512 512 233 331 214 265 76.70\n24 maps/wc3maps/losttemple.map 512 512 145 217 86 269 98.25\n13 maps/wc3maps/losttemple.map 512 512 324 375 334 326 55.14\n3 maps/wc3maps/losttemple.map 512 512 240 166 251 171 13.07\n37 maps/wc3maps/losttemple.map 512 512 404 204 310 141 151.75\n24 maps/wc3maps/losttemple.map 512 512 112 227 191 178 99.30\n52 maps/wc3maps/losttemple.map 512 512 254 367 427 283 208.62\n34 maps/wc3maps/losttemple.map 512 512 405 280 277 271 139.18\n73 maps/wc3maps/losttemple.map 512 512 283 180 67 345 292.55\n20 maps/wc3maps/losttemple.map 512 512 355 119 282 101 80.46\n36 maps/wc3maps/losttemple.map 512 512 291 213 167 269 147.20\n56 maps/wc3maps/losttemple.map 512 512 115 409 288 383 225.31\n36 maps/wc3maps/losttemple.map 512 512 139 246 273 233 144.36\n78 maps/wc3maps/losttemple.map 512 512 164 442 231 159 314.07\n62 maps/wc3maps/losttemple.map 512 512 280 351 81 246 250.78\n112 maps/wc3maps/losttemple.map 512 512 78 432 309 99 449.19\n22 maps/wc3maps/losttemple.map 512 512 298 158 309 119 89.36\n78 maps/wc3maps/losttemple.map 512 512 271 368 295 98 312.37\n38 maps/wc3maps/losttemple.map 512 512 322 212 195 149 153.10\n45 maps/wc3maps/losttemple.map 512 512 125 318 264 212 183.49\n72 maps/wc3maps/losttemple.map 512 512 408 289 167 205 289.85\n65 maps/wc3maps/losttemple.map 512 512 202 406 79 200 260.46\n26 maps/wc3maps/losttemple.map 512 512 324 271 331 369 105.97\n42 maps/wc3maps/losttemple.map 512 512 377 246 330 376 168.88\n33 maps/wc3maps/losttemple.map 512 512 317 216 254 116 132.72\n51 maps/wc3maps/losttemple.map 512 512 314 133 164 252 206.32\n54 maps/wc3maps/losttemple.map 512 512 111 265 291 292 219.43\n60 maps/wc3maps/losttemple.map 512 512 346 295 237 99 241.15\n62 maps/wc3maps/losttemple.map 512 512 431 283 232 202 251.76\n66 maps/wc3maps/losttemple.map 512 512 328 271 111 373 265.11\n63 maps/wc3maps/losttemple.map 512 512 77 310 299 238 254.65\n59 maps/wc3maps/losttemple.map 512 512 203 435 327 257 236.98\n67 maps/wc3maps/losttemple.map 512 512 66 231 327 234 270.53\n90 maps/wc3maps/losttemple.map 512 512 392 142 139 353 360.32\n42 maps/wc3maps/losttemple.map 512 512 168 301 277 400 168.75\n37 maps/wc3maps/losttemple.map 512 512 302 401 214 464 150.84\n41 maps/wc3maps/losttemple.map 512 512 361 226 226 154 164.82\n10 maps/wc3maps/losttemple.map 512 512 232 125 272 121 41.66\n26 maps/wc3maps/losttemple.map 512 512 436 213 335 215 106.80\n21 maps/wc3maps/losttemple.map 512 512 239 265 163 288 86.11\n66 maps/wc3maps/losttemple.map 512 512 217 398 385 233 265.53\n23 maps/wc3maps/losttemple.map 512 512 252 302 161 295 95.56\n29 maps/wc3maps/losttemple.map 512 512 249 220 146 259 119.15\n60 maps/wc3maps/losttemple.map 512 512 372 289 425 90 243.32\n76 maps/wc3maps/losttemple.map 512 512 201 369 392 148 305.39\n78 maps/wc3maps/losttemple.map 512 512 320 147 55 257 313.05\n51 maps/wc3maps/losttemple.map 512 512 362 296 184 366 206.99\n91 maps/wc3maps/losttemple.map 512 512 129 358 435 215 365.23\n71 maps/wc3maps/losttemple.map 512 512 213 189 230 425 285.85\n70 maps/wc3maps/losttemple.map 512 512 397 224 160 333 282.15\n56 maps/wc3maps/losttemple.map 512 512 203 379 351 220 227.33\n52 maps/wc3maps/losttemple.map 512 512 357 107 252 265 211.45\n30 maps/wc3maps/losttemple.map 512 512 355 163 410 219 120.01\n47 maps/wc3maps/losttemple.map 512 512 241 291 412 280 189.64\n86 maps/wc3maps/losttemple.map 512 512 380 240 79 343 344.25\n92 maps/wc3maps/losttemple.map 512 512 283 416 277 73 371.17\n42 maps/wc3maps/losttemple.map 512 512 126 321 240 205 170.25\n74 maps/wc3maps/losttemple.map 512 512 326 374 113 245 299.28\n94 maps/wc3maps/losttemple.map 512 512 195 395 330 79 378.02\n14 maps/wc3maps/losttemple.map 512 512 381 128 435 116 58.97\n39 maps/wc3maps/losttemple.map 512 512 78 223 172 326 157.75\n68 maps/wc3maps/losttemple.map 512 512 278 244 76 395 273.92\n51 maps/wc3maps/losttemple.map 512 512 266 254 150 380 207.66\n58 maps/wc3maps/losttemple.map 512 512 149 292 366 255 232.33\n85 maps/wc3maps/losttemple.map 512 512 432 258 115 298 342.68\n55 maps/wc3maps/losttemple.map 512 512 336 319 177 220 220.55\n41 maps/wc3maps/losttemple.map 512 512 180 201 179 359 166.70\n58 maps/wc3maps/losttemple.map 512 512 276 323 82 417 232.94\n78 maps/wc3maps/losttemple.map 512 512 309 171 134 386 314.43\n76 maps/wc3maps/losttemple.map 512 512 376 300 82 319 306.01\n14 maps/wc3maps/losttemple.map 512 512 265 217 226 199 58.50\n35 maps/wc3maps/losttemple.map 512 512 240 302 210 189 142.66\n74 maps/wc3maps/losttemple.map 512 512 173 305 307 64 299.82\n82 maps/wc3maps/losttemple.map 512 512 323 125 83 308 330.45\n74 maps/wc3maps/losttemple.map 512 512 275 92 148 337 297.61\n91 maps/wc3maps/losttemple.map 512 512 435 189 121 319 367.85\n72 maps/wc3maps/losttemple.map 512 512 202 190 286 422 290.12\n40 maps/wc3maps/losttemple.map 512 512 314 115 237 211 160.70\n45 maps/wc3maps/losttemple.map 512 512 134 345 301 313 180.25\n69 maps/wc3maps/losttemple.map 512 512 312 235 101 250 276.33\n54 maps/wc3maps/losttemple.map 512 512 414 148 391 307 219.52\n61 maps/wc3maps/losttemple.map 512 512 187 183 414 211 246.88\n51 maps/wc3maps/losttemple.map 512 512 89 203 259 288 205.21\n77 maps/wc3maps/losttemple.map 512 512 279 437 234 145 310.64\n52 maps/wc3maps/losttemple.map 512 512 328 206 268 393 211.85\n44 maps/wc3maps/losttemple.map 512 512 254 226 428 239 179.38\n48 maps/wc3maps/losttemple.map 512 512 71 327 83 410 194.92\n25 maps/wc3maps/losttemple.map 512 512 347 289 277 295 101.30\n64 maps/wc3maps/losttemple.map 512 512 145 242 396 230 257.63\n17 maps/wc3maps/losttemple.map 512 512 169 235 110 213 68.11\n29 maps/wc3maps/losttemple.map 512 512 326 192 277 288 119.81\n64 maps/wc3maps/losttemple.map 512 512 352 254 188 424 256.09\n71 maps/wc3maps/losttemple.map 512 512 108 312 197 111 286.39\n8 maps/wc3maps/losttemple.map 512 512 207 228 233 210 33.46\n49 maps/wc3maps/losttemple.map 512 512 299 191 307 370 198.88\n41 maps/wc3maps/losttemple.map 512 512 253 212 323 337 167.85\n100 maps/wc3maps/losttemple.map 512 512 420 130 127 356 403.01\n41 maps/wc3maps/losttemple.map 512 512 278 295 365 167 167.55\n49 maps/wc3maps/losttemple.map 512 512 202 335 318 208 198.76\n49 maps/wc3maps/losttemple.map 512 512 419 191 393 118 199.94\n14 maps/wc3maps/losttemple.map 512 512 94 132 67 86 59.53\n49 maps/wc3maps/losttemple.map 512 512 394 310 224 366 198.99\n44 maps/wc3maps/losttemple.map 512 512 247 265 410 300 179.98\n69 maps/wc3maps/losttemple.map 512 512 225 167 102 369 277.39\n103 maps/wc3maps/losttemple.map 512 512 354 184 58 423 412.57\n26 maps/wc3maps/losttemple.map 512 512 390 296 351 207 106.33\n44 maps/wc3maps/losttemple.map 512 512 256 121 219 283 179.67\n77 maps/wc3maps/losttemple.map 512 512 85 430 321 257 310.59\n91 maps/wc3maps/losttemple.map 512 512 317 96 237 422 367.42\n76 maps/wc3maps/losttemple.map 512 512 347 121 82 212 307.66\n89 maps/wc3maps/losttemple.map 512 512 314 114 113 351 358.92\n37 maps/wc3maps/losttemple.map 512 512 142 216 279 241 149.84\n99 maps/wc3maps/losttemple.map 512 512 210 117 69 439 397.66\n34 maps/wc3maps/losttemple.map 512 512 241 240 109 224 139.46\n23 maps/wc3maps/losttemple.map 512 512 194 248 166 327 95.28\n44 maps/wc3maps/losttemple.map 512 512 290 239 430 335 179.76\n44 maps/wc3maps/losttemple.map 512 512 259 105 367 148 178.15\n81 maps/wc3maps/losttemple.map 512 512 174 236 439 96 326.30\n38 maps/wc3maps/losttemple.map 512 512 216 372 158 340 155.64\n40 maps/wc3maps/losttemple.map 512 512 256 252 221 103 163.50\n24 maps/wc3maps/losttemple.map 512 512 90 200 84 294 97.31\n40 maps/wc3maps/losttemple.map 512 512 206 117 274 244 162.68\n5 maps/wc3maps/losttemple.map 512 512 271 201 292 199 21.83\n67 maps/wc3maps/losttemple.map 512 512 300 330 212 101 271.89\n27 maps/wc3maps/losttemple.map 512 512 296 415 284 311 111.46\n40 maps/wc3maps/losttemple.map 512 512 281 358 368 231 163.04\n39 maps/wc3maps/losttemple.map 512 512 179 415 104 340 159.78\n34 maps/wc3maps/losttemple.map 512 512 78 290 120 371 139.95\n34 maps/wc3maps/losttemple.map 512 512 272 246 323 144 139.27\n33 maps/wc3maps/losttemple.map 512 512 321 251 217 324 135.41\n32 maps/wc3maps/losttemple.map 512 512 189 348 81 395 129.23\n64 maps/wc3maps/losttemple.map 512 512 269 231 120 404 256.92\n39 maps/wc3maps/losttemple.map 512 512 238 286 302 165 159.23\n17 maps/wc3maps/losttemple.map 512 512 147 322 210 342 71.28\n38 maps/wc3maps/losttemple.map 512 512 373 221 402 109 155.89\n82 maps/wc3maps/losttemple.map 512 512 99 341 288 107 329.86\n94 maps/wc3maps/losttemple.map 512 512 73 439 225 127 377.45\n93 maps/wc3maps/losttemple.map 512 512 413 325 95 411 375.36\n38 maps/wc3maps/losttemple.map 512 512 92 207 232 236 155.33\n10 maps/wc3maps/losttemple.map 512 512 279 242 299 208 42.28\n66 maps/wc3maps/losttemple.map 512 512 242 403 404 263 264.09\n60 maps/wc3maps/losttemple.map 512 512 192 305 424 295 240.28\n25 maps/wc3maps/losttemple.map 512 512 240 147 296 213 100.33\n38 maps/wc3maps/losttemple.map 512 512 402 123 280 199 155.82\n38 maps/wc3maps/losttemple.map 512 512 289 196 419 258 155.68\n89 maps/wc3maps/losttemple.map 512 512 323 89 292 422 358.27\n37 maps/wc3maps/losttemple.map 512 512 187 315 332 330 151.21\n96 maps/wc3maps/losttemple.map 512 512 432 251 98 352 387.74\n33 maps/wc3maps/losttemple.map 512 512 240 258 308 166 135.98\n29 maps/wc3maps/losttemple.map 512 512 249 216 345 272 119.20\n22 maps/wc3maps/losttemple.map 512 512 328 269 398 224 88.64\n15 maps/wc3maps/losttemple.map 512 512 221 319 209 280 61.43\n33 maps/wc3maps/losttemple.map 512 512 406 110 307 139 134.71\n15 maps/wc3maps/losttemple.map 512 512 397 144 428 95 61.84\n33 maps/wc3maps/losttemple.map 512 512 398 292 334 371 135.12\n70 maps/wc3maps/losttemple.map 512 512 416 266 154 229 282.25\n32 maps/wc3maps/losttemple.map 512 512 317 126 224 197 131.78\n32 maps/wc3maps/losttemple.map 512 512 341 253 404 164 131.50\n32 maps/wc3maps/losttemple.map 512 512 296 179 413 145 131.91\n60 maps/wc3maps/losttemple.map 512 512 318 260 104 283 242.10\n29 maps/wc3maps/losttemple.map 512 512 214 253 102 235 119.46\n32 maps/wc3maps/losttemple.map 512 512 261 353 189 251 131.82\n92 maps/wc3maps/losttemple.map 512 512 433 301 105 400 369.01\n69 maps/wc3maps/losttemple.map 512 512 150 216 405 217 277.78\n87 maps/wc3maps/losttemple.map 512 512 184 386 376 124 348.46\n21 maps/wc3maps/losttemple.map 512 512 323 181 305 252 85.73\n9 maps/wc3maps/losttemple.map 512 512 350 347 378 370 37.53\n32 maps/wc3maps/losttemple.map 512 512 262 389 348 308 130.68\n73 maps/wc3maps/losttemple.map 512 512 183 265 431 156 293.74\n60 maps/wc3maps/losttemple.map 512 512 194 191 99 392 243.87\n14 maps/wc3maps/losttemple.map 512 512 134 303 183 322 56.87\n23 maps/wc3maps/losttemple.map 512 512 250 205 178 262 95.61\n94 maps/wc3maps/losttemple.map 512 512 309 94 226 424 379.88\n32 maps/wc3maps/losttemple.map 512 512 224 297 281 399 131.47\n29 maps/wc3maps/losttemple.map 512 512 379 222 393 146 119.92\n5 maps/wc3maps/losttemple.map 512 512 232 285 218 268 22.80\n28 maps/wc3maps/losttemple.map 512 512 250 284 231 197 115.21\n19 maps/wc3maps/losttemple.map 512 512 359 293 428 311 76.46\n16 maps/wc3maps/losttemple.map 512 512 279 231 279 297 66.00\n28 maps/wc3maps/losttemple.map 512 512 340 266 378 173 115.18\n28 maps/wc3maps/losttemple.map 512 512 237 261 208 158 115.01\n63 maps/wc3maps/losttemple.map 512 512 305 64 230 285 252.07\n66 maps/wc3maps/losttemple.map 512 512 328 214 113 310 264.14\n28 maps/wc3maps/losttemple.map 512 512 278 284 366 219 115.51\n100 maps/wc3maps/losttemple.map 512 512 75 282 371 125 402.56\n65 maps/wc3maps/losttemple.map 512 512 301 153 75 200 263.31\n24 maps/wc3maps/losttemple.map 512 512 317 314 288 277 99.60\n27 maps/wc3maps/losttemple.map 512 512 180 256 262 185 111.41\n75 maps/wc3maps/losttemple.map 512 512 307 144 293 414 302.31\n94 maps/wc3maps/losttemple.map 512 512 427 314 119 249 378.88\n27 maps/wc3maps/losttemple.map 512 512 284 278 190 321 111.81\n64 maps/wc3maps/losttemple.map 512 512 221 124 418 273 259.89\n17 maps/wc3maps/losttemple.map 512 512 238 124 197 179 71.98\n100 maps/wc3maps/losttemple.map 512 512 398 230 83 431 400.60\n27 maps/wc3maps/losttemple.map 512 512 354 246 431 323 111.24\n76 maps/wc3maps/losttemple.map 512 512 303 348 431 94 307.02\n27 maps/wc3maps/losttemple.map 512 512 327 225 331 118 111.97\n27 maps/wc3maps/losttemple.map 512 512 186 370 255 427 110.77\n26 maps/wc3maps/losttemple.map 512 512 315 234 422 233 107.41\n26 maps/wc3maps/losttemple.map 512 512 324 160 324 267 107.83\n14 maps/wc3maps/losttemple.map 512 512 165 277 145 325 56.28\n26 maps/wc3maps/losttemple.map 512 512 189 304 293 311 107.73\n26 maps/wc3maps/losttemple.map 512 512 219 328 229 231 107.28\n69 maps/wc3maps/losttemple.map 512 512 219 83 398 266 278.82\n23 maps/wc3maps/losttemple.map 512 512 122 213 196 173 94.71\n23 maps/wc3maps/losttemple.map 512 512 133 229 207 178 95.12\n23 maps/wc3maps/losttemple.map 512 512 263 370 279 287 95.14\n23 maps/wc3maps/losttemple.map 512 512 324 307 377 243 95.33\n17 maps/wc3maps/losttemple.map 512 512 400 443 436 387 70.91\n23 maps/wc3maps/losttemple.map 512 512 269 248 178 259 95.56\n75 maps/wc3maps/losttemple.map 512 512 270 80 412 309 303.63\n22 maps/wc3maps/losttemple.map 512 512 320 158 286 95 91.14\n17 maps/wc3maps/losttemple.map 512 512 169 278 209 333 71.57\n95 maps/wc3maps/losttemple.map 512 512 102 388 367 161 382.46\n103 maps/wc3maps/losttemple.map 512 512 156 433 333 100 412.42\n17 maps/wc3maps/losttemple.map 512 512 142 289 112 235 71.70\n62 maps/wc3maps/losttemple.map 512 512 405 227 256 86 251.34\n17 maps/wc3maps/losttemple.map 512 512 327 178 391 166 70.63\n16 maps/wc3maps/losttemple.map 512 512 235 298 226 234 67.73\n16 maps/wc3maps/losttemple.map 512 512 322 244 271 285 67.98\n75 maps/wc3maps/losttemple.map 512 512 137 370 205 124 302.59\n62 maps/wc3maps/losttemple.map 512 512 355 244 181 405 251.23\n16 maps/wc3maps/losttemple.map 512 512 144 274 109 298 67.49\n16 maps/wc3maps/losttemple.map 512 512 297 85 315 139 67.36\n16 maps/wc3maps/losttemple.map 512 512 240 351 262 397 67.66\n16 maps/wc3maps/losttemple.map 512 512 318 293 318 360 67.00\n16 maps/wc3maps/losttemple.map 512 512 297 333 281 394 67.63\n12 maps/wc3maps/losttemple.map 512 512 392 438 419 400 49.18\n82 maps/wc3maps/losttemple.map 512 512 420 330 116 325 330.78\n93 maps/wc3maps/losttemple.map 512 512 167 447 260 114 372.11\n16 maps/wc3maps/losttemple.map 512 512 209 416 267 435 67.63\n15 maps/wc3maps/losttemple.map 512 512 249 303 308 302 63.56\n15 maps/wc3maps/losttemple.map 512 512 318 143 310 203 63.31\n14 maps/wc3maps/losttemple.map 512 512 329 304 385 297 58.90\n13 maps/wc3maps/losttemple.map 512 512 350 207 383 249 55.67\n61 maps/wc3maps/losttemple.map 512 512 228 416 410 286 246.98\n13 maps/wc3maps/losttemple.map 512 512 169 244 193 198 55.94\n81 maps/wc3maps/losttemple.map 512 512 278 211 73 433 325.66\n69 maps/wc3maps/losttemple.map 512 512 103 326 278 144 279.09\n13 maps/wc3maps/losttemple.map 512 512 258 280 278 327 55.87\n78 maps/wc3maps/losttemple.map 512 512 236 348 334 80 314.69\n13 maps/wc3maps/losttemple.map 512 512 355 306 407 309 55.73\n13 maps/wc3maps/losttemple.map 512 512 262 353 247 304 55.21\n12 maps/wc3maps/losttemple.map 512 512 201 174 206 127 51.90\n12 maps/wc3maps/losttemple.map 512 512 190 209 229 178 51.84\n12 maps/wc3maps/losttemple.map 512 512 323 171 333 124 51.14\n12 maps/wc3maps/losttemple.map 512 512 288 170 274 149 51.38\n80 maps/wc3maps/losttemple.map 512 512 341 385 310 123 323.08\n12 maps/wc3maps/losttemple.map 512 512 201 399 228 433 51.04\n76 maps/wc3maps/losttemple.map 512 512 293 97 331 374 307.18\n12 maps/wc3maps/losttemple.map 512 512 251 203 216 166 51.50\n12 maps/wc3maps/losttemple.map 512 512 283 336 321 367 50.84\n118 maps/wc3maps/losttemple.map 512 512 432 66 132 380 472.24\n76 maps/wc3maps/losttemple.map 512 512 192 420 310 178 307.75\n69 maps/wc3maps/losttemple.map 512 512 320 85 144 270 276.65\n80 maps/wc3maps/losttemple.map 512 512 324 132 268 429 323.51\n4 maps/wc3maps/losttemple.map 512 512 267 388 270 371 18.24\n11 maps/wc3maps/losttemple.map 512 512 264 384 273 428 47.73\n86 maps/wc3maps/losttemple.map 512 512 258 97 59 334 345.20\n11 maps/wc3maps/losttemple.map 512 512 121 354 96 378 47.83\n93 maps/wc3maps/losttemple.map 512 512 427 232 75 259 372.74\n3 maps/wc3maps/losttemple.map 512 512 250 169 248 183 14.83\n8 maps/wc3maps/losttemple.map 512 512 220 143 237 124 33.56\n11 maps/wc3maps/losttemple.map 512 512 204 393 206 437 47.31\n11 maps/wc3maps/losttemple.map 512 512 259 215 275 176 47.97\n11 maps/wc3maps/losttemple.map 512 512 235 345 269 316 47.18\n10 maps/wc3maps/losttemple.map 512 512 246 329 203 330 43.41\n10 maps/wc3maps/losttemple.map 512 512 140 319 106 339 43.46\n10 maps/wc3maps/losttemple.map 512 512 263 188 246 222 43.38\n10 maps/wc3maps/losttemple.map 512 512 266 306 302 323 43.04\n75 maps/wc3maps/losttemple.map 512 512 317 185 220 439 302.46\n10 maps/wc3maps/losttemple.map 512 512 280 282 265 314 43.04\n10 maps/wc3maps/losttemple.map 512 512 298 77 290 117 43.31\n79 maps/wc3maps/losttemple.map 512 512 367 182 109 304 316.74\n90 maps/wc3maps/losttemple.map 512 512 147 248 431 81 363.13\n9 maps/wc3maps/losttemple.map 512 512 157 326 162 289 39.07\n76 maps/wc3maps/losttemple.map 512 512 162 339 284 85 304.53\n9 maps/wc3maps/losttemple.map 512 512 279 265 293 299 39.80\n9 maps/wc3maps/losttemple.map 512 512 319 105 286 120 39.21\n8 maps/wc3maps/losttemple.map 512 512 320 104 350 91 35.38\n8 maps/wc3maps/losttemple.map 512 512 219 159 244 134 35.36\n8 maps/wc3maps/losttemple.map 512 512 347 114 362 85 35.21\n75 maps/wc3maps/losttemple.map 512 512 229 106 424 323 303.63\n104 maps/wc3maps/losttemple.map 512 512 62 440 422 299 418.40\n99 maps/wc3maps/losttemple.map 512 512 138 399 306 81 396.62\n8 maps/wc3maps/losttemple.map 512 512 273 368 275 403 35.83\n8 maps/wc3maps/losttemple.map 512 512 299 352 268 340 35.97\n4 maps/wc3maps/losttemple.map 512 512 346 89 356 74 19.14\n8 maps/wc3maps/losttemple.map 512 512 247 272 218 287 35.21\n7 maps/wc3maps/losttemple.map 512 512 93 403 71 425 31.11\n7 maps/wc3maps/losttemple.map 512 512 390 289 411 311 30.70\n75 maps/wc3maps/losttemple.map 512 512 375 279 94 224 303.78\n7 maps/wc3maps/losttemple.map 512 512 282 319 260 341 31.11\n7 maps/wc3maps/losttemple.map 512 512 199 156 191 128 31.31\n7 maps/wc3maps/losttemple.map 512 512 202 416 171 416 31.00\n7 maps/wc3maps/losttemple.map 512 512 82 244 78 214 31.66\n7 maps/wc3maps/losttemple.map 512 512 322 164 321 195 31.41\n7 maps/wc3maps/losttemple.map 512 512 379 145 400 123 30.70\n6 maps/wc3maps/losttemple.map 512 512 227 202 201 205 27.24\n6 maps/wc3maps/losttemple.map 512 512 383 242 403 260 27.46\n6 maps/wc3maps/losttemple.map 512 512 88 260 98 237 27.14\n126 maps/wc3maps/losttemple.map 512 512 70 379 438 94 507.14\n95 maps/wc3maps/losttemple.map 512 512 404 194 80 285 383.88\n85 maps/wc3maps/losttemple.map 512 512 316 79 215 367 342.72\n104 maps/wc3maps/losttemple.map 512 512 333 103 81 380 417.11\n73 maps/wc3maps/losttemple.map 512 512 263 350 410 116 294.89\n69 maps/wc3maps/losttemple.map 512 512 404 306 288 81 278.91\n6 maps/wc3maps/losttemple.map 512 512 185 269 196 257 27.24\n6 maps/wc3maps/losttemple.map 512 512 193 154 168 147 27.90\n6 maps/wc3maps/losttemple.map 512 512 271 362 261 385 27.14\n5 maps/wc3maps/losttemple.map 512 512 225 432 206 441 22.73\n5 maps/wc3maps/losttemple.map 512 512 182 288 181 272 23.14\n5 maps/wc3maps/losttemple.map 512 512 233 234 222 215 23.56\n112 maps/wc3maps/losttemple.map 512 512 432 97 94 243 448.62\n5 maps/wc3maps/losttemple.map 512 512 277 202 269 188 23.41\n5 maps/wc3maps/losttemple.map 512 512 184 204 162 207 23.24\n71 maps/wc3maps/losttemple.map 512 512 88 243 358 272 287.81\n5 maps/wc3maps/losttemple.map 512 512 369 160 381 141 23.97\n4 maps/wc3maps/losttemple.map 512 512 137 319 118 320 19.41\n4 maps/wc3maps/losttemple.map 512 512 266 303 283 309 19.49\n4 maps/wc3maps/losttemple.map 512 512 271 256 285 244 18.97\n72 maps/wc3maps/losttemple.map 512 512 319 140 105 300 291.79\n88 maps/wc3maps/losttemple.map 512 512 328 138 218 370 353.76\n4 maps/wc3maps/losttemple.map 512 512 264 297 263 313 19.00\n3 maps/wc3maps/losttemple.map 512 512 100 329 87 333 14.66\n3 maps/wc3maps/losttemple.map 512 512 263 403 263 418 15.00\n3 maps/wc3maps/losttemple.map 512 512 378 151 373 148 15.66\n3 maps/wc3maps/losttemple.map 512 512 175 279 168 267 14.90\n2 maps/wc3maps/losttemple.map 512 512 304 252 312 244 11.31\n91 maps/wc3maps/losttemple.map 512 512 66 437 211 132 365.06\n2 maps/wc3maps/losttemple.map 512 512 295 236 291 245 11.24\n2 maps/wc3maps/losttemple.map 512 512 283 390 289 399 11.49\n2 maps/wc3maps/losttemple.map 512 512 221 253 232 253 11.00\n2 maps/wc3maps/losttemple.map 512 512 347 252 349 263 11.83\n2 maps/wc3maps/losttemple.map 512 512 268 335 274 344 11.49\n93 maps/wc3maps/losttemple.map 512 512 87 300 355 92 372.70\n2 maps/wc3maps/losttemple.map 512 512 229 283 218 285 11.83\n2 maps/wc3maps/losttemple.map 512 512 254 103 262 95 11.31\n2 maps/wc3maps/losttemple.map 512 512 173 322 166 313 11.90\n2 maps/wc3maps/losttemple.map 512 512 89 236 78 234 11.83\n1 maps/wc3maps/losttemple.map 512 512 200 153 204 147 7.66\n1 maps/wc3maps/losttemple.map 512 512 262 162 256 158 7.66\n1 maps/wc3maps/losttemple.map 512 512 250 297 255 292 7.07\n1 maps/wc3maps/losttemple.map 512 512 315 90 310 85 7.07\n90 maps/wc3maps/losttemple.map 512 512 91 233 424 163 361.99\n82 maps/wc3maps/losttemple.map 512 512 417 254 136 348 329.05\n1 maps/wc3maps/losttemple.map 512 512 404 138 409 133 7.07\n100 maps/wc3maps/losttemple.map 512 512 102 418 399 197 402.01\n1 maps/wc3maps/losttemple.map 512 512 218 388 217 381 7.41\n1 maps/wc3maps/losttemple.map 512 512 91 324 84 326 7.83\n82 maps/wc3maps/losttemple.map 512 512 195 406 197 120 331.68\n1 maps/wc3maps/losttemple.map 512 512 157 254 150 254 7.00\n1 maps/wc3maps/losttemple.map 512 512 103 207 98 202 7.07\n1 maps/wc3maps/losttemple.map 512 512 350 283 355 287 6.66\n0 maps/wc3maps/losttemple.map 512 512 182 296 182 293 3.00\n0 maps/wc3maps/losttemple.map 512 512 340 304 342 306 2.83\n0 maps/wc3maps/losttemple.map 512 512 412 304 415 305 3.41\n0 maps/wc3maps/losttemple.map 512 512 398 275 401 274 3.41\n0 maps/wc3maps/losttemple.map 512 512 339 273 338 276 3.41\n80 maps/wc3maps/losttemple.map 512 512 411 117 133 219 320.84\n0 maps/wc3maps/losttemple.map 512 512 303 83 306 83 3.00\n72 maps/wc3maps/losttemple.map 512 512 149 334 333 143 291.82\n0 maps/wc3maps/losttemple.map 512 512 325 361 327 363 2.83\n0 maps/wc3maps/losttemple.map 512 512 279 312 281 310 2.83\n0 maps/wc3maps/losttemple.map 512 512 268 311 268 314 3.00\n72 maps/wc3maps/losttemple.map 512 512 280 359 327 90 291.78\n71 maps/wc3maps/losttemple.map 512 512 337 144 126 308 287.96\n87 maps/wc3maps/losttemple.map 512 512 286 407 349 92 348.55\n90 maps/wc3maps/losttemple.map 512 512 146 376 364 155 360.83\n80 maps/wc3maps/losttemple.map 512 512 421 88 305 360 320.05\n99 maps/wc3maps/losttemple.map 512 512 412 139 92 268 399.63\n80 maps/wc3maps/losttemple.map 512 512 333 132 237 408 322.59\n117 maps/wc3maps/losttemple.map 512 512 427 97 101 376 469.00\n84 maps/wc3maps/losttemple.map 512 512 83 383 300 179 338.40\n98 maps/wc3maps/losttemple.map 512 512 405 143 59 260 394.46\n94 maps/wc3maps/losttemple.map 512 512 289 118 116 403 376.58\n82 maps/wc3maps/losttemple.map 512 512 315 164 208 374 329.15\n84 maps/wc3maps/losttemple.map 512 512 223 126 89 403 339.58\n88 maps/wc3maps/losttemple.map 512 512 82 437 371 292 354.33\n96 maps/wc3maps/losttemple.map 512 512 219 411 314 86 387.42\n79 maps/wc3maps/losttemple.map 512 512 169 417 309 175 317.69\n82 maps/wc3maps/losttemple.map 512 512 393 259 80 223 331.67\n79 maps/wc3maps/losttemple.map 512 512 287 435 89 225 318.37\n79 maps/wc3maps/losttemple.map 512 512 104 418 338 230 318.90\n86 maps/wc3maps/losttemple.map 512 512 430 318 140 391 347.45\n79 maps/wc3maps/losttemple.map 512 512 89 202 380 269 319.92\n79 maps/wc3maps/losttemple.map 512 512 226 306 445 104 319.07\n92 maps/wc3maps/losttemple.map 512 512 294 412 417 103 370.72\n87 maps/wc3maps/losttemple.map 512 512 354 268 80 439 350.10\n80 maps/wc3maps/losttemple.map 512 512 286 62 211 353 322.07\n84 maps/wc3maps/losttemple.map 512 512 140 304 431 195 336.15\n101 maps/wc3maps/losttemple.map 512 512 412 131 147 377 407.06\n107 maps/wc3maps/losttemple.map 512 512 268 95 74 443 428.36\n82 maps/wc3maps/losttemple.map 512 512 285 437 65 239 329.55\n89 maps/wc3maps/losttemple.map 512 512 109 250 391 253 358.62\n100 maps/wc3maps/losttemple.map 512 512 338 126 150 445 402.97\n79 maps/wc3maps/losttemple.map 512 512 81 267 312 88 316.27\n80 maps/wc3maps/losttemple.map 512 512 428 254 176 407 322.40\n97 maps/wc3maps/losttemple.map 512 512 131 260 433 325 390.68\n81 maps/wc3maps/losttemple.map 512 512 319 91 67 265 325.83\n93 maps/wc3maps/losttemple.map 512 512 72 206 423 260 374.20\n101 maps/wc3maps/losttemple.map 512 512 447 86 172 355 406.93\n87 maps/wc3maps/losttemple.map 512 512 83 242 403 198 349.54\n94 maps/wc3maps/losttemple.map 512 512 86 245 420 141 378.25\n109 maps/wc3maps/losttemple.map 512 512 102 415 364 107 438.20\n86 maps/wc3maps/losttemple.map 512 512 171 136 226 419 346.45\n89 maps/wc3maps/losttemple.map 512 512 74 224 396 133 359.69\n79 maps/wc3maps/losttemple.map 512 512 101 320 399 283 317.47\n83 maps/wc3maps/losttemple.map 512 512 171 375 285 93 333.32\n93 maps/wc3maps/losttemple.map 512 512 82 300 386 154 375.99\n102 maps/wc3maps/losttemple.map 512 512 440 100 84 202 411.50\n84 maps/wc3maps/losttemple.map 512 512 308 69 97 278 336.11\n96 maps/wc3maps/losttemple.map 512 512 360 94 285 442 385.69\n116 maps/wc3maps/losttemple.map 512 512 422 101 131 250 465.13\n92 maps/wc3maps/losttemple.map 512 512 121 353 316 73 370.73\n98 maps/wc3maps/losttemple.map 512 512 76 398 363 184 393.22\n92 maps/wc3maps/losttemple.map 512 512 296 75 240 404 370.38\n90 maps/wc3maps/losttemple.map 512 512 406 238 67 269 362.57\n89 maps/wc3maps/losttemple.map 512 512 358 68 75 248 357.56\n83 maps/wc3maps/losttemple.map 512 512 335 208 96 404 334.83\n79 maps/wc3maps/losttemple.map 512 512 70 426 220 170 318.72\n89 maps/wc3maps/losttemple.map 512 512 227 120 74 398 356.85\n82 maps/wc3maps/losttemple.map 512 512 237 125 103 399 329.50\n95 maps/wc3maps/losttemple.map 512 512 284 416 354 68 382.79\n83 maps/wc3maps/losttemple.map 512 512 350 72 196 326 334.19\n90 maps/wc3maps/losttemple.map 512 512 121 375 293 88 362.93\n81 maps/wc3maps/losttemple.map 512 512 421 282 110 311 327.15\n85 maps/wc3maps/losttemple.map 512 512 426 126 269 396 342.06\n114 maps/wc3maps/losttemple.map 512 512 100 394 424 113 458.55\n83 maps/wc3maps/losttemple.map 512 512 368 157 220 431 335.30\n96 maps/wc3maps/losttemple.map 512 512 418 139 212 421 387.83\n99 maps/wc3maps/losttemple.map 512 512 63 330 363 114 397.67\n84 maps/wc3maps/losttemple.map 512 512 126 375 329 144 337.93\n91 maps/wc3maps/losttemple.map 512 512 395 242 96 238 364.01\n81 maps/wc3maps/losttemple.map 512 512 338 132 193 393 327.16\n90 maps/wc3maps/losttemple.map 512 512 99 243 395 237 362.33\n86 maps/wc3maps/losttemple.map 512 512 372 154 143 371 345.83\n97 maps/wc3maps/losttemple.map 512 512 433 212 73 263 391.85\n86 maps/wc3maps/losttemple.map 512 512 427 203 112 212 345.24\n91 maps/wc3maps/losttemple.map 512 512 305 121 294 414 364.41\n103 maps/wc3maps/losttemple.map 512 512 438 329 83 424 415.89\n92 maps/wc3maps/losttemple.map 512 512 94 313 413 192 371.46\n114 maps/wc3maps/losttemple.map 512 512 93 416 343 78 456.20\n101 maps/wc3maps/losttemple.map 512 512 223 395 364 73 407.19\n91 maps/wc3maps/losttemple.map 512 512 426 97 150 295 367.97\n101 maps/wc3maps/losttemple.map 512 512 174 440 287 79 407.81\n100 maps/wc3maps/losttemple.map 512 512 70 438 314 163 401.26\n85 maps/wc3maps/losttemple.map 512 512 152 352 310 90 343.26\n90 maps/wc3maps/losttemple.map 512 512 299 166 68 397 363.59\n83 maps/wc3maps/losttemple.map 512 512 96 255 336 123 333.02\n100 maps/wc3maps/losttemple.map 512 512 132 262 362 99 400.96\n89 maps/wc3maps/losttemple.map 512 512 111 397 395 216 358.97\n86 maps/wc3maps/losttemple.map 512 512 436 303 99 313 345.28\n99 maps/wc3maps/losttemple.map 512 512 225 407 435 109 398.46\n88 maps/wc3maps/losttemple.map 512 512 245 407 419 128 355.17\n83 maps/wc3maps/losttemple.map 512 512 311 122 102 317 334.53\n98 maps/wc3maps/losttemple.map 512 512 407 307 70 438 394.58\n111 maps/wc3maps/losttemple.map 512 512 429 87 94 261 444.89\n104 maps/wc3maps/losttemple.map 512 512 420 85 220 394 418.49\n83 maps/wc3maps/losttemple.map 512 512 186 144 214 396 335.62\n81 maps/wc3maps/losttemple.map 512 512 373 148 150 313 327.75\n88 maps/wc3maps/losttemple.map 512 512 337 97 243 407 352.84\n101 maps/wc3maps/losttemple.map 512 512 411 188 108 248 404.12\n81 maps/wc3maps/losttemple.map 512 512 65 256 293 440 327.65\n88 maps/wc3maps/losttemple.map 512 512 78 323 411 278 355.78\n87 maps/wc3maps/losttemple.map 512 512 86 263 386 172 351.89\n81 maps/wc3maps/losttemple.map 512 512 332 140 226 414 327.66\n81 maps/wc3maps/losttemple.map 512 512 424 277 113 239 327.91\n84 maps/wc3maps/losttemple.map 512 512 173 150 159 448 338.61\n120 maps/wc3maps/losttemple.map 512 512 97 389 445 103 482.87\n107 maps/wc3maps/losttemple.map 512 512 303 105 99 431 431.00\n87 maps/wc3maps/losttemple.map 512 512 324 139 170 421 351.89\n95 maps/wc3maps/losttemple.map 512 512 90 383 432 320 382.18\n87 maps/wc3maps/losttemple.map 512 512 420 220 126 359 351.58\n102 maps/wc3maps/losttemple.map 512 512 88 423 417 225 411.60\n117 maps/wc3maps/losttemple.map 512 512 118 250 440 101 470.20\n85 maps/wc3maps/losttemple.map 512 512 297 425 405 152 340.95\n104 maps/wc3maps/losttemple.map 512 512 402 242 62 432 418.70\n98 maps/wc3maps/losttemple.map 512 512 174 405 322 80 394.16\n110 maps/wc3maps/losttemple.map 512 512 91 286 438 113 441.77\n108 maps/wc3maps/losttemple.map 512 512 433 296 61 444 433.30\n86 maps/wc3maps/losttemple.map 512 512 319 205 95 421 346.90\n97 maps/wc3maps/losttemple.map 512 512 411 135 104 313 388.93\n87 maps/wc3maps/losttemple.map 512 512 262 110 213 390 350.78\n84 maps/wc3maps/losttemple.map 512 512 290 124 184 393 339.41\n84 maps/wc3maps/losttemple.map 512 512 153 344 340 97 339.10\n105 maps/wc3maps/losttemple.map 512 512 94 420 347 128 420.81\n98 maps/wc3maps/losttemple.map 512 512 421 163 89 266 394.87\n101 maps/wc3maps/losttemple.map 512 512 149 363 434 110 407.37\n117 maps/wc3maps/losttemple.map 512 512 432 182 64 430 470.72\n98 maps/wc3maps/losttemple.map 512 512 83 375 296 125 394.99\n100 maps/wc3maps/losttemple.map 512 512 266 419 429 86 400.52\n98 maps/wc3maps/losttemple.map 512 512 322 150 80 421 393.50\n96 maps/wc3maps/losttemple.map 512 512 126 317 406 105 386.56\n96 maps/wc3maps/losttemple.map 512 512 382 130 96 267 386.91\n114 maps/wc3maps/losttemple.map 512 512 317 109 59 425 456.20\n104 maps/wc3maps/losttemple.map 512 512 411 106 128 361 418.50\n96 maps/wc3maps/losttemple.map 512 512 348 76 294 426 386.45\n95 maps/wc3maps/losttemple.map 512 512 98 246 401 201 383.92\n110 maps/wc3maps/losttemple.map 512 512 159 343 446 63 443.98\n96 maps/wc3maps/losttemple.map 512 512 204 443 286 106 385.75\n105 maps/wc3maps/losttemple.map 512 512 406 118 166 434 420.68\n116 maps/wc3maps/losttemple.map 512 512 393 129 92 437 466.65\n110 maps/wc3maps/losttemple.map 512 512 159 449 314 83 442.20\n98 maps/wc3maps/losttemple.map 512 512 212 398 286 73 395.41\n103 maps/wc3maps/losttemple.map 512 512 135 322 422 81 415.53\n113 maps/wc3maps/losttemple.map 512 512 341 153 66 448 455.27\n109 maps/wc3maps/losttemple.map 512 512 76 287 432 133 439.71\n95 maps/wc3maps/losttemple.map 512 512 289 123 214 379 380.54\n98 maps/wc3maps/losttemple.map 512 512 108 263 369 147 392.45\n124 maps/wc3maps/losttemple.map 512 512 349 65 82 439 499.24\n103 maps/wc3maps/losttemple.map 512 512 79 337 354 69 415.30\n97 maps/wc3maps/losttemple.map 512 512 113 355 352 81 391.74\n95 maps/wc3maps/losttemple.map 512 512 108 330 402 138 381.73\n120 maps/wc3maps/losttemple.map 512 512 72 427 339 72 480.24\n103 maps/wc3maps/losttemple.map 512 512 292 445 291 67 415.69\n106 maps/wc3maps/losttemple.map 512 512 418 87 329 425 425.07\n102 maps/wc3maps/losttemple.map 512 512 177 432 416 130 409.78\n99 maps/wc3maps/losttemple.map 512 512 315 73 222 401 399.49\n113 maps/wc3maps/losttemple.map 512 512 412 120 90 369 453.68\n108 maps/wc3maps/losttemple.map 512 512 251 85 57 434 432.87\n110 maps/wc3maps/losttemple.map 512 512 114 253 435 140 443.81\n107 maps/wc3maps/losttemple.map 512 512 427 123 115 272 428.87\n97 maps/wc3maps/losttemple.map 512 512 435 64 198 332 388.43\n102 maps/wc3maps/losttemple.map 512 512 394 239 63 425 408.04\n102 maps/wc3maps/losttemple.map 512 512 429 71 313 399 409.59\n97 maps/wc3maps/losttemple.map 512 512 428 108 183 393 391.75\n105 maps/wc3maps/losttemple.map 512 512 70 402 401 207 421.91\n101 maps/wc3maps/losttemple.map 512 512 80 383 430 255 405.36\n108 maps/wc3maps/losttemple.map 512 512 77 446 318 126 434.47\n101 maps/wc3maps/losttemple.map 512 512 323 161 85 439 405.87\n101 maps/wc3maps/losttemple.map 512 512 413 151 104 259 404.76\n106 maps/wc3maps/losttemple.map 512 512 96 373 319 71 424.87\n114 maps/wc3maps/losttemple.map 512 512 304 96 56 430 458.98\n106 maps/wc3maps/losttemple.map 512 512 59 425 425 278 426.89\n102 maps/wc3maps/losttemple.map 512 512 77 426 406 256 410.19\n99 maps/wc3maps/losttemple.map 512 512 182 428 409 128 399.30\n99 maps/wc3maps/losttemple.map 512 512 81 378 292 99 399.20\n113 maps/wc3maps/losttemple.map 512 512 93 453 303 105 455.49\n101 maps/wc3maps/losttemple.map 512 512 68 420 324 144 407.23\n113 maps/wc3maps/losttemple.map 512 512 443 103 148 388 454.38\n108 maps/wc3maps/losttemple.map 512 512 426 205 70 395 434.70\n111 maps/wc3maps/losttemple.map 512 512 343 76 175 445 444.69\n119 maps/wc3maps/losttemple.map 512 512 439 93 67 326 476.71\n122 maps/wc3maps/losttemple.map 512 512 81 426 430 123 490.91\n103 maps/wc3maps/losttemple.map 512 512 283 81 71 380 413.76\n108 maps/wc3maps/losttemple.map 512 512 66 442 329 131 435.17\n105 maps/wc3maps/losttemple.map 512 512 107 407 436 184 423.71\n112 maps/wc3maps/losttemple.map 512 512 364 79 88 389 450.68\n102 maps/wc3maps/losttemple.map 512 512 65 325 429 213 410.39\n116 maps/wc3maps/losttemple.map 512 512 95 442 329 89 464.57\n105 maps/wc3maps/losttemple.map 512 512 310 99 148 431 420.86\n104 maps/wc3maps/losttemple.map 512 512 71 419 414 235 419.22\n102 maps/wc3maps/losttemple.map 512 512 440 79 168 345 410.88\n112 maps/wc3maps/losttemple.map 512 512 214 384 442 73 450.33\n102 maps/wc3maps/losttemple.map 512 512 363 150 104 362 410.14\n107 maps/wc3maps/losttemple.map 512 512 308 112 344 455 428.42\n108 maps/wc3maps/losttemple.map 512 512 421 104 239 373 434.04\n109 maps/wc3maps/losttemple.map 512 512 383 141 78 400 438.06\n104 maps/wc3maps/losttemple.map 512 512 99 439 416 238 416.66\n104 maps/wc3maps/losttemple.map 512 512 444 102 154 361 416.61\n105 maps/wc3maps/losttemple.map 512 512 363 83 140 267 422.24\n111 maps/wc3maps/losttemple.map 512 512 300 92 65 430 447.64\n103 maps/wc3maps/losttemple.map 512 512 74 230 438 109 414.12\n106 maps/wc3maps/losttemple.map 512 512 433 74 300 430 426.83\n120 maps/wc3maps/losttemple.map 512 512 446 62 81 270 482.20\n106 maps/wc3maps/losttemple.map 512 512 93 427 385 158 425.68\n106 maps/wc3maps/losttemple.map 512 512 79 331 414 130 426.46\n111 maps/wc3maps/losttemple.map 512 512 438 75 142 357 445.03\n114 maps/wc3maps/losttemple.map 512 512 429 201 66 429 457.44\n109 maps/wc3maps/losttemple.map 512 512 139 399 433 139 436.16\n103 maps/wc3maps/losttemple.map 512 512 242 437 319 76 412.98\n110 maps/wc3maps/losttemple.map 512 512 68 434 334 115 443.83\n114 maps/wc3maps/losttemple.map 512 512 98 427 343 86 457.13\n121 maps/wc3maps/losttemple.map 512 512 424 80 63 329 486.98\n111 maps/wc3maps/losttemple.map 512 512 323 76 101 414 445.19\n106 maps/wc3maps/losttemple.map 512 512 364 150 105 404 425.54\n113 maps/wc3maps/losttemple.map 512 512 65 446 445 281 455.66\n107 maps/wc3maps/losttemple.map 512 512 440 73 261 429 430.14\n109 maps/wc3maps/losttemple.map 512 512 420 112 115 383 438.34\n106 maps/wc3maps/losttemple.map 512 512 93 300 431 116 425.73\n109 maps/wc3maps/losttemple.map 512 512 435 74 215 399 438.63\n118 maps/wc3maps/losttemple.map 512 512 194 441 441 73 475.58\n112 maps/wc3maps/losttemple.map 512 512 409 199 60 444 451.07\n127 maps/wc3maps/losttemple.map 512 512 444 91 85 413 511.71\n112 maps/wc3maps/losttemple.map 512 512 424 211 74 442 449.20\n113 maps/wc3maps/losttemple.map 512 512 311 67 76 422 455.27\n110 maps/wc3maps/losttemple.map 512 512 110 311 432 74 441.84\n114 maps/wc3maps/losttemple.map 512 512 434 93 110 356 456.96\n127 maps/wc3maps/losttemple.map 512 512 435 70 113 409 508.01\n108 maps/wc3maps/losttemple.map 512 512 307 106 69 399 432.00\n115 maps/wc3maps/losttemple.map 512 512 122 256 435 103 463.47\n110 maps/wc3maps/losttemple.map 512 512 428 112 109 374 443.93\n112 maps/wc3maps/losttemple.map 512 512 70 378 333 80 450.29\n117 maps/wc3maps/losttemple.map 512 512 447 108 112 247 469.55\n110 maps/wc3maps/losttemple.map 512 512 435 122 155 430 443.70\n124 maps/wc3maps/losttemple.map 512 512 430 75 98 390 499.38\n124 maps/wc3maps/losttemple.map 512 512 418 118 71 438 498.29\n127 maps/wc3maps/losttemple.map 512 512 422 73 89 396 509.55\n127 maps/wc3maps/losttemple.map 512 512 70 441 409 107 508.39\n123 maps/wc3maps/losttemple.map 512 512 110 240 433 65 492.42\n111 maps/wc3maps/losttemple.map 512 512 351 101 75 416 447.48\n111 maps/wc3maps/losttemple.map 512 512 358 65 100 376 446.47\n107 maps/wc3maps/losttemple.map 512 512 402 254 58 442 430.98\n123 maps/wc3maps/losttemple.map 512 512 414 84 99 402 493.28\n110 maps/wc3maps/losttemple.map 512 512 417 133 73 346 440.43\n109 maps/wc3maps/losttemple.map 512 512 307 101 75 423 438.60\n105 maps/wc3maps/losttemple.map 512 512 325 163 58 443 422.23\n113 maps/wc3maps/losttemple.map 512 512 418 93 181 444 454.44\n107 maps/wc3maps/losttemple.map 512 512 424 92 86 263 430.65\n112 maps/wc3maps/losttemple.map 512 512 105 329 437 79 451.37\n125 maps/wc3maps/losttemple.map 512 512 82 387 433 87 503.38\n107 maps/wc3maps/losttemple.map 512 512 87 418 306 94 430.53\n114 maps/wc3maps/losttemple.map 512 512 408 128 84 406 457.90\n108 maps/wc3maps/losttemple.map 512 512 433 219 84 422 433.09\n109 maps/wc3maps/losttemple.map 512 512 84 316 433 118 439.22\n109 maps/wc3maps/losttemple.map 512 512 444 117 205 438 438.64\n105 maps/wc3maps/losttemple.map 512 512 430 73 143 319 420.53\n111 maps/wc3maps/losttemple.map 512 512 349 131 89 442 445.64\n107 maps/wc3maps/losttemple.map 512 512 85 440 419 230 429.77\n106 maps/wc3maps/losttemple.map 512 512 106 329 437 121 427.84\n104 maps/wc3maps/losttemple.map 512 512 425 71 251 418 419.07\n108 maps/wc3maps/losttemple.map 512 512 426 73 293 442 434.03\n113 maps/wc3maps/losttemple.map 512 512 367 86 109 417 453.34\n106 maps/wc3maps/losttemple.map 512 512 73 401 297 113 426.90\n108 maps/wc3maps/losttemple.map 512 512 122 308 444 75 432.57\n112 maps/wc3maps/losttemple.map 512 512 378 135 78 424 451.93\n114 maps/wc3maps/losttemple.map 512 512 435 79 70 269 458.35\n111 maps/wc3maps/losttemple.map 512 512 70 416 311 93 447.43\n116 maps/wc3maps/losttemple.map 512 512 352 110 93 451 464.68\n113 maps/wc3maps/losttemple.map 512 512 81 410 368 129 453.27\n115 maps/wc3maps/losttemple.map 512 512 68 451 424 209 461.51\n127 maps/wc3maps/losttemple.map 512 512 442 104 82 429 511.61\n117 maps/wc3maps/losttemple.map 512 512 109 412 432 109 471.35\n123 maps/wc3maps/losttemple.map 512 512 415 116 92 444 495.77\n119 maps/wc3maps/losttemple.map 512 512 433 68 122 375 477.41\n112 maps/wc3maps/losttemple.map 512 512 418 78 124 345 450.43\n119 maps/wc3maps/losttemple.map 512 512 83 447 358 97 478.55\n117 maps/wc3maps/losttemple.map 512 512 84 405 421 125 469.38\n111 maps/wc3maps/losttemple.map 512 512 441 93 93 263 446.62\n116 maps/wc3maps/losttemple.map 512 512 422 158 65 382 466.19\n115 maps/wc3maps/losttemple.map 512 512 319 109 64 440 460.68\n123 maps/wc3maps/losttemple.map 512 512 71 327 431 69 492.06\n116 maps/wc3maps/losttemple.map 512 512 103 381 430 100 465.65\n118 maps/wc3maps/losttemple.map 512 512 125 404 416 88 475.58\n118 maps/wc3maps/losttemple.map 512 512 313 82 74 446 475.88\n117 maps/wc3maps/losttemple.map 512 512 117 411 423 106 471.87\n119 maps/wc3maps/losttemple.map 512 512 414 119 80 420 479.18\n127 maps/wc3maps/losttemple.map 512 512 431 114 64 420 510.15\n127 maps/wc3maps/losttemple.map 512 512 420 76 84 399 511.97\n121 maps/wc3maps/losttemple.map 512 512 75 429 399 115 485.70\n117 maps/wc3maps/losttemple.map 512 512 364 78 78 411 470.80\n121 maps/wc3maps/losttemple.map 512 512 433 93 101 403 485.01\n121 maps/wc3maps/losttemple.map 512 512 434 79 121 401 485.62\n117 maps/wc3maps/losttemple.map 512 512 436 87 177 443 468.55\n119 maps/wc3maps/losttemple.map 512 512 72 298 441 80 477.16\n127 maps/wc3maps/losttemple.map 512 512 73 335 445 62 511.44\n120 maps/wc3maps/losttemple.map 512 512 437 114 84 384 481.24\n119 maps/wc3maps/losttemple.map 512 512 426 82 64 316 479.43\n124 maps/wc3maps/losttemple.map 512 512 426 84 87 386 498.07\n118 maps/wc3maps/losttemple.map 512 512 440 134 86 381 472.71\n116 maps/wc3maps/losttemple.map 512 512 68 447 342 108 467.14\n117 maps/wc3maps/losttemple.map 512 512 417 162 75 434 471.65\n115 maps/wc3maps/losttemple.map 512 512 73 384 406 126 460.96\n116 maps/wc3maps/losttemple.map 512 512 400 115 89 417 467.72\n122 maps/wc3maps/losttemple.map 512 512 444 74 174 446 489.11\n120 maps/wc3maps/losttemple.map 512 512 124 399 441 81 483.28\n127 maps/wc3maps/losttemple.map 512 512 70 447 412 112 510.64\n121 maps/wc3maps/losttemple.map 512 512 136 260 444 102 484.88\n116 maps/wc3maps/losttemple.map 512 512 65 433 357 101 467.60\n116 maps/wc3maps/losttemple.map 512 512 95 427 411 126 465.87\n119 maps/wc3maps/losttemple.map 512 512 118 401 420 84 476.07\n119 maps/wc3maps/losttemple.map 512 512 376 127 66 440 479.38\n119 maps/wc3maps/losttemple.map 512 512 87 371 419 101 477.75\n118 maps/wc3maps/losttemple.map 512 512 424 130 83 409 472.97\n122 maps/wc3maps/losttemple.map 512 512 138 275 444 115 491.81\n124 maps/wc3maps/losttemple.map 512 512 419 85 95 414 498.60\n124 maps/wc3maps/losttemple.map 512 512 432 70 161 452 499.52\n118 maps/wc3maps/losttemple.map 512 512 380 129 67 438 475.55\n118 maps/wc3maps/losttemple.map 512 512 80 443 441 187 474.65\n123 maps/wc3maps/losttemple.map 512 512 357 75 70 437 495.52\n115 maps/wc3maps/losttemple.map 512 512 412 164 73 426 463.93\n115 maps/wc3maps/losttemple.map 512 512 420 84 103 240 463.37\n115 maps/wc3maps/losttemple.map 512 512 440 79 85 276 462.86\n127 maps/wc3maps/losttemple.map 512 512 423 91 77 415 511.84\n122 maps/wc3maps/losttemple.map 512 512 416 86 115 408 489.62\n118 maps/wc3maps/losttemple.map 512 512 70 397 421 137 475.10\n115 maps/wc3maps/losttemple.map 512 512 432 94 117 393 463.45\n122 maps/wc3maps/losttemple.map 512 512 89 283 443 61 489.71\n115 maps/wc3maps/losttemple.map 512 512 440 115 76 332 462.09\n121 maps/wc3maps/losttemple.map 512 512 162 449 442 85 485.25\n"
  },
  {
    "path": "benchmark/test_cases.js",
    "content": "/**\n * the `select` field indicates which scenarios in the `scen` file are chosen \n * to be included in the benchmark.\n */\nmodule.exports = [\n  {\n    map: './map/64room_000.map',\n    scen: './scen/64room_000.map.scen',\n    select: [ 245, 1996 ]\n  },\n]\n"
  },
  {
    "path": "docs/contributor-guide/authors.md",
    "content": "# Authors\n\nThis is the alphabetically sorted list of contributors to PathFinding.js:\n\nAnders Riutta <https://github.com/ariutta><br>\nChris Khoo <https://github.com/chriskck><br>\nGerjo <https://github.com/Gerjo><br>\nJuan Pablo Canepa <https://github.com/jpcanepa><br>\nMat Gadd <https://github.com/Drarok><br>\nMurilo Pereira <https://github.com/mpereira><br>\nNathan Witmer <https://github.com/zerowidth><br>\nrafaelcastrocouto <https://github.com/rafaelcastrocouto><br>\nRaminder Singh <https://github.com/imor><br>\nRicardo Tomasi <https://github.com/ricardobeat><br>\nRodrigo Navarro <https://github.com/reu><br>\nRory O'Kane <https://github.com/roryokane><br>\nStuart Lee <https://github.com/beeglebug><br>\nsurrim <https://github.com/surrim><br>\nTapio Vierros <https://github.com/tapio><br>\nThomas Hunter II <https://github.com/tlhunter><br>\nWillem Mulder <https://github.com/willemmulder><br>\nXueqiao Xu <https://github.com/qiao>\n"
  },
  {
    "path": "docs/contributor-guide/contributing.md",
    "content": "If you have added a new feature or fixed a bug please open a pull request.\n\nDon't forget to add yourself to the \n[list of contributors](https://github.com/qiao/PathFinding.js/blob/master/docs/contributor-guide/authors.md)."
  },
  {
    "path": "docs/contributor-guide/developing.md",
    "content": ""
  },
  {
    "path": "docs/custom.css",
    "content": "/*This is a hack to prevent mkdocs from creating useless subheadings in table of\ncontents.\nE.g. If there is a page called introduction.md and it contains the following:\n\n# Introduction\nBlah Blah Blah\n\nThen mkdocs created a table of contents like this:\n\nIntroduction\n    Introduction\n\t\nThis hack hides the second level heading\n\n*/\n.toctree-l2 {\n    display: none;\n}\n"
  },
  {
    "path": "docs/index.md",
    "content": "#Welcome to PathFinding.js documentation\n\nTable of Contents\n\n* User Guide\n    * [Introduction](./user-guide/introduction.md)\n    * [Installation](./user-guide/installation.md)\n\t* [Getting Started](./user-guide/getting-started.md)\n\t* [Obstacles](./user-guide/obstacles.md)\n\t* [Diagonal Movement](./user-guide/diagonal-movement.md)\n\t* [FAQ](./user-guide/faq.md)\n* Contributor Guide\n    * [Contributing](./contributor-guide/contributing.md)\n\t* [Developing](./contributor-guide/developing.md)\n\t* [Authors](./contributor-guide/authors.md)"
  },
  {
    "path": "docs/user-guide/diagonal-movement.md",
    "content": "# Diagonal Movement\nTo disable diagonal movement you need to configure the finder. The finder takes\na configuration object with an option called `diagonalMovement`. Setting this\noption to `DiagonalMovement.Never` will disable diagonal movement completely.\nLet us try it.\n\n```javascript\nvar finder = new PF.AStarFinder({\n    diagonalMovement: PF.DiagonalMovement.Never\n});\n```\n\nSee that the path is straight now:\n\n![Screenshot](user-guide/images/DiagonalMovementDisabled.png)\n\nThe `diagonalMovement` option can take any of the following values:\n\n* Always\n* Never\n* IfAtMostOneObstacle\n* OnlyWhenNoObstacles\n\nTo understand them consider the following four simple maps labelled A, B, C and\nD. A has no obstacles for diagonal movement from green to orange cell, B and C\nhave one obstacle and D has two obstacles.\n\n![Screenshot](user-guide/images/DiagonalMaps.png)\n\n## Always\nWith this option PathFinding.js will always find a diagonal path, irrespective\nof the obstacles when moving diagonally.\n\n![Screenshot](user-guide/images/AllMapsWithAPath.png)\n\n## Never\nWith this option PathFinding.js will only find straight paths and will never\nfind any diagonal paths.\n\n![Screenshot](user-guide/images/AllMapsWithStraightPaths.png)\n\n## IfAtMostOneObstacle\nWith this option PathFinding.js will find diagonal paths only if there is at\nmost one obstacle for the diagonal path.\n\n![Screenshot](user-guide/images/DiagonalPathsForAtMostOneObstacle.png)\n\n## OnlyWhenNoObstacles\nWith this option PathFinding.js will find diagonal paths only if there are no\nobstacles for the diagonal path.\n\n![Screenshot](user-guide/images/DiagonalPathsForOnlyWhenNoObstacles.png)\n"
  },
  {
    "path": "docs/user-guide/faq.md",
    "content": ""
  },
  {
    "path": "docs/user-guide/getting-started.md",
    "content": "# Getting Started\nThis section explains the basic usage of PathFinding.js.\n\n## Importing in Node.js\nTo import PathFinding.js in your file do:\n\n```javascript\nvar PF = require('pathfinding');\n```\n\n## Including in Browser\nTo include PathFinding.js in your page, add a script tag to your page:\n\n```html\n<script type=\"text/javascript\" src=\"path/to/pathfinding-browser.min.js\"></script>\n```\n\n## Finding a Path\nTo find a path you need a grid first. Create a 5 by 7 grid:\n\n```javascript\nvar grid = new PF.Grid(5, 7);\n```\nThis will create a grid which is walkable all over.\n\n![Screenshot](user-guide/images/5x7EmptyGrid.png)\n\nIn this grid, the green cell at the top left is [0, 0] and the orange cell at\nthe bottom right is [4, 6].\n\nNow create an instance of a finder. There are many finders available in\nPathFinding.js but use the famous A* for now:\n\n```javascript\nvar finder = new PF.AStarFinder();\n```\n\nNow find the path from the green cell to the orange cell:\n\n```javascript\nvar path = finder.findPath(0, 0, 4, 6, grid);\n```\n\nThis will return the following path:\n\n```javascript\n[[0, 0], [1, 1], [2, 2], [3, 3], [4, 4], [4, 5], [4, 6]]\n```\n\nWhich when plotted on the grid looks like:\n\n![Screenshot](user-guide/images/5x7GridWithPath.png)"
  },
  {
    "path": "docs/user-guide/installation.md",
    "content": "# Installation\nThis section describes how to install PathFinding.js.\n\n## Using Package Managers\nPathFinding.js supports installation using npm and bower command line tools.\n\n### For Server\n[Node.js](http://nodejs.org/) is an environment for running javascript on the\nserver. [Download](http://nodejs.org/download/) and install Node.js for your OS\nand confirm that it works from the command line:\n\n```bash\nnode -v\n```\n\nIf Node.js was installed correctly this should print the installed version of]\nNode.js.\n\nNode.js comes with a [Node Package Manager](https://www.npmjs.com/) command line\ntool called _npm_. It is used to install packages for Node.js. Check that it\nworks:\n\n```bash\nnpm -v\n```\n\nThis should print the installed version of npm.\n\nnpm installs the packages in the current folder by default. Make sure you are\nin your project folder before continuing:\n\n```bash\ncd <my_new_project>\n```\n\nNow you are ready to install PathFinding.js. The npm command to install\nPathFinding.js is:\n\n```bash\nnpm install pathfinding\n```\n\nThis will create a _node_modules_ folder inside the my_new_project folder.\nPathFinding.js is now installed in the _pathfinding_ folder inside the\nnode_modules folder.\n\n### For Client\n[Bower](http://bower.io/) is a front-end package manager. Install it by running\nthe command:\n\n```bash\nnpm install -g bower\n```\n\nConfirm that you can run the bower command:\n\n```bash\nbower -v\n```\n\nThis should print the installed version of bower.\n\nNavigate to your project folder:\n\n```bash\ncd <my_new_project>\n```\n\nInstall pathfinding:\n\n```bash\nbower install pathfinding\n```\n\nThis will create a _bower_components_ folder inside the my_new_project folder.\nPathFinding.js is now installed in the pathfinding folder inside the\nbower_components folder.\n\n## Manual Installation\nIf you want to use the latest development version you will have to install\nPathFinding.js manually.\n\n### For Server\n[Download](https://github.com/qiao/PathFinding.js/archive/master.zip) the zip\nfrom github and extract the contents into the node_modules folder. Don't forget\nto rename the extracted folder from PathFinding.js-master to pathfinding.\n\n### For Client\n[Download](https://github.com/qiao/PathFinding.js/archive/master.zip) the zip\nfrom github, extract it in a temporary folder and navigate to this folder:\n\n```bash\ncd <temp_folder>\n```\n\nNow install all the dependencies of PathFinding.js:\n\n```bash\nnpm install\n```\n\nNow compile the browser builds:\n\n```bash\ngulp compile\n```\n\nThis will create _pathfinding-browser.js_ and _pathfinding-browser.min.js_ files\nin the temp_folder/lib folder. You can use these files in your project now."
  },
  {
    "path": "docs/user-guide/introduction.md",
    "content": "# Introduction\n\nPathFinding.js is a javascript library to find paths on a 2D square grid. It\nworks in both node.js and browser environments.\n\n```javascript\n//Walkability matrix. Zero is walkable, One is not\nvar matrix = [\n    [0, 0, 0, 1, 0],\n    [1, 0, 0, 0, 1],\n    [0, 0, 1, 0, 0],\n];\nvar grid = new PF.Grid(matrix);\nvar finder = new PF.AStarFinder();\n//Find path from (1, 2) to (4, 2)\nvar path = finder.findPath(1, 2, 4, 2, grid);\n```\n\n## Getting Help\n\nIf you stumble upon a bug or don't understand some feature of PathFinding.js,\nopen an issue in the \n[Issue Tracker](https://github.com/qiao/PathFinding.js/issues).\n\nBrowsing the [source](https://github.com/qiao/PathFinding.js) might also help.\nA great visualization of the different pathfinding algorithms is available\n[here](http://qiao.github.io/PathFinding.js/visual/).\n\n## License\n\nPathFinding.js is released under the \n[MIT License](http://opensource.org/licenses/mit-license.php).\n\n(c) 2011-2012 Xueqiao Xu <xueqiaoxu@gmail.com>\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of\nthis software and associated documentation files (the \"Software\"), to deal in\nthe Software without restriction, including without limitation the rights to\nuse, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\nthe Software, and to permit persons to whom the Software is furnished to do so,\nsubject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\nFOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\nCOPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\nIN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\nCONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n"
  },
  {
    "path": "docs/user-guide/obstacles.md",
    "content": "# Obstacles\nA grid without any obstacles is boring. Let us create a grid with obstacles:\n\n```javascript\nvar walkabilityMatrix = [[0, 0, 0, 0, 0],\n                         [1, 1, 1, 1, 0],\n                         [0, 0, 0, 0, 0],\n                         [0, 1, 1, 1, 1],\n                         [0, 0, 0, 0, 0],\n                         [1, 1, 1, 1, 0],\n                         [0, 0, 0, 0, 0]];\nvar grid = new PF.Grid(matrix);\n```\n\nThe _walkabilityMatrix_ defines which cells are walkable and which have\nobstacles. Ones are obstacles and zeroes are walkable. Alternatively, you can\nalso set the obstacles on the grid by calling the `setWalkableAt` function:\n\n```javascript\nvar grid = new PF.Grid(5, 7);\ngrid.setWalkableAt(0, 1, false);\ngrid.setWalkableAt(1, 1, false);\ngrid.setWalkableAt(2, 1, false);\n...\n```\n\nAfter setting the obstacles the grid should look like this.\n\n![Screenshot](user-guide/images/5x7GridWithObstacles.png)\n\nLet us find a path now.\n\n```javascript\nvar finder = new PF.AStarFinder();\nvar path = finder.findPath(0, 0, 4, 6, grid);\n```\n\nPathFinding.js will find the following path:\n\n![Screenshot](user-guide/images/5x7GridWithObstaclesAndPath.png)\n\nNotice how the path moves diagonally where it can, thus making it shorter. This\nmay not be always desirable and you may want to create a path without any\ndiagonal movement. Read the next section to find out how to achieve that.\n"
  },
  {
    "path": "gulpfile.js",
    "content": "var gulp = require('gulp'),\n    uglify = require('gulp-uglify'),\n    rename = require('gulp-rename'),\n    browserify = require('gulp-browserify'),\n    concat = require('gulp-concat'),\n    mocha = require('gulp-mocha'),\n    shell = require('shelljs'),\n    del = require('del'),\n    jshint = require('gulp-jshint'),\n    stylish = require('jshint-stylish'),\n    semver = require('semver'),\n    jsonfile = require('jsonfile'),\n    inquirer = require(\"inquirer\"),\n    fs = require('fs');\n\ngulp.task('clean', function(cb) {\n    del('lib/**/*.*', cb);\n});\n\ngulp.task('browserify', ['clean'], function(cb) {\n    return gulp.src('./src/PathFinding.js')\n    .pipe(browserify({ standalone: 'PF' }))\n    .pipe(rename('pathfinding-browserified.js'))\n    .pipe(gulp.dest('./lib/'), cb);\n});\n\ngulp.task('uglify', ['browserify'], function(cb) {\n    return gulp.src('./lib/pathfinding-browserified.js')\n    .pipe(uglify())\n    .pipe(rename('pathfinding-browser.min.js'))\n    .pipe(gulp.dest('./lib/'), cb);\n});\n\ngulp.task('scripts', ['clean', 'browserify', 'uglify'], function(cb) {\n    return gulp.src(['./src/banner', './lib/pathfinding-browserified.js'])\n    .pipe(concat('pathfinding-browser.js'))\n    .pipe(gulp.dest('./lib/'), cb);\n});\n\ngulp.task('compile', ['scripts'], function() {\n    del('./lib/pathfinding-browserified.js');\n});\n\ngulp.task('test', function () {\n    return gulp.src('./test/**/*.js', {read: false})\n        .pipe(mocha({reporter: 'spec', bail: true, globals: { should: require('should') }}));\n});\n\ngulp.task('bench', function() {\n    shell.exec('node benchmark/benchmark.js');\n});\n\ngulp.task('lint', function() {\n  return gulp.src('./src/**/*.js')\n    .pipe(jshint())\n    .pipe(jshint.reporter(stylish))\n    .pipe(jshint.reporter('fail'));\n});\n\ngulp.task('release', ['compile'], function(cb) {\n  inquirer.prompt({\n      type: 'list',\n      name: 'bumpType',\n      message: 'Which version do you want to bump?',\n      choices: ['patch', 'minor', 'major'],\n      //default is patch\n      default: 0\n    }, function (result) {\n      var f = jsonfile.readFileSync('./package.json');\n      f.version = semver.inc(f.version, result.bumpType);\n      jsonfile.writeFileSync('./package.json', f);\n\n      shell.exec('git add .');\n      shell.exec('git commit -m \"Bumping version to ' + f.version + '\"');\n      shell.exec('git push origin master');\n      shell.exec('git tag -a ' + f.version + ' -m \"Creating tag for version ' + f.version + '\"');\n      shell.exec('git push origin ' + f.version);\n      shell.exec('npm publish');\n\n      shell.exec('git clone https://github.com/imor/pathfinding-bower.git release');\n      process.chdir('release');\n      fs.writeFileSync('pathfinding-browser.js', fs.readFileSync('../lib/pathfinding-browser.js'));\n      fs.writeFileSync('pathfinding-browser.min.js', fs.readFileSync('../lib/pathfinding-browser.min.js'));\n\n      f = jsonfile.readFileSync('bower.json');\n      f.version = semver.inc(f.version, result.bumpType);\n      jsonfile.writeFileSync('bower.json', f);\n\n      shell.exec('git add .');\n      shell.exec('git commit -m \"Bumping version to ' + f.version + '\"');\n      shell.exec('git push origin master');\n      shell.exec('git tag -a ' + f.version + ' -m \"Creating tag for version ' + f.version + '\"');\n      shell.exec('git push origin ' + f.version);\n\n      process.chdir('../');\n      del('release');\n      del('lib/**/*.*', cb);\n    });\n});\n\ngulp.task('default', ['lint', 'test', 'compile'], function() {\n});\n"
  },
  {
    "path": "index.js",
    "content": "module.exports = require('./src/PathFinding');\n"
  },
  {
    "path": "mkdocs.yml",
    "content": "site_name: PathFinding.js\nrepo_url: https://github.com/qiao/PathFinding.js\nsite_description: PathFinding.js is a javascript library to find paths on a 2D square grid\nsite_favicon: favicon.ico\nsite_author: Raminder Singh\n\npages:\n- [index.md, Home]\n- ['user-guide/introduction.md', 'User Guide', 'Introduction']\n- ['user-guide/installation.md', 'User Guide', 'Installation']\n- ['user-guide/getting-started.md', 'User Guide', 'Getting Started']\n- ['user-guide/obstacles.md', 'User Guide', 'Obstacles']\n- ['user-guide/diagonal-movement.md', 'User Guide', 'Diagonal Movement']\n- ['user-guide/faq.md', 'User Guide', 'FAQ']\n- ['contributor-guide/contributing.md', 'Contributor Guide', 'Contributing']\n- ['contributor-guide/developing.md', 'Contributor Guide', 'Developing']\n- ['contributor-guide/authors.md', 'Contributor Guide', 'Authors']\ntheme: readthedocs"
  },
  {
    "path": "package.json",
    "content": "{\"name\":\"pathfinding\",\"version\":\"0.4.18\",\"description\":\"Comprehensive pathfinding library for grid based games\",\"homepage\":\"https://github.com/qiao/PathFinding.js\",\"keywords\":[\"pathfinding\",\"astar\",\"dijkstra\",\"game\",\"algorithm\",\"jumppoint\",\"depthfirst\",\"breadthfirst\"],\"author\":\"Xueqiao Xu <xueqiaoxu@gmail.com>\",\"main\":\"./index.js\",\"dependencies\":{\"heap\":\"0.2.5\"},\"devDependencies\":{\"colors\":\"^1.0.3\",\"del\":\"^0.1.3\",\"gulp\":\"^3.8.10\",\"gulp-browserify\":\"^0.5.0\",\"gulp-concat\":\"^2.4.1\",\"gulp-jshint\":\"^1.9.0\",\"gulp-mocha\":\"^2.0.0\",\"gulp-rename\":\"^1.2.0\",\"gulp-uglify\":\"^1.0.1\",\"inquirer\":\"^0.8.0\",\"jshint-stylish\":\"^1.0.0\",\"jsonfile\":\"^2.0.0\",\"mocha\":\"2.0.x\",\"semver\":\"^4.2.0\",\"shelljs\":\"^0.3.0\",\"should\":\"4.3.x\"},\"scripts\":{\"test\":\"gulp test\"},\"repository\":{\"type\":\"git\",\"url\":\"git://github.com/qiao/PathFinding.js.git\"},\"licenses\":[{\"type\":\"MIT\",\"url\":\"http://opensource.org/licenses/mit-license.php\"}]}\n"
  },
  {
    "path": "src/PathFinding.js",
    "content": "module.exports = {\n    'Heap'                      : require('heap'),\n    'Node'                      : require('./core/Node'),\n    'Grid'                      : require('./core/Grid'),\n    'Util'                      : require('./core/Util'),\n    'DiagonalMovement'          : require('./core/DiagonalMovement'),\n    'Heuristic'                 : require('./core/Heuristic'),\n    'AStarFinder'               : require('./finders/AStarFinder'),\n    'BestFirstFinder'           : require('./finders/BestFirstFinder'),\n    'BreadthFirstFinder'        : require('./finders/BreadthFirstFinder'),\n    'DijkstraFinder'            : require('./finders/DijkstraFinder'),\n    'BiAStarFinder'             : require('./finders/BiAStarFinder'),\n    'BiBestFirstFinder'         : require('./finders/BiBestFirstFinder'),\n    'BiBreadthFirstFinder'      : require('./finders/BiBreadthFirstFinder'),\n    'BiDijkstraFinder'          : require('./finders/BiDijkstraFinder'),\n    'IDAStarFinder'             : require('./finders/IDAStarFinder'),\n    'JumpPointFinder'           : require('./finders/JumpPointFinder'),\n};\n"
  },
  {
    "path": "src/banner",
    "content": "/**\n *    ____       _   _     _____ _           _ _                _         \n *   |  _ \\ __ _| |_| |__ |  ___(_)_ __   __| (_)_ __   __ _   (_)___     \n *   | |_) / _` | __| '_ \\| |_  | | '_ \\ / _` | | '_ \\ / _` |  | / __|    \n *   |  __/ (_| | |_| | | |  _| | | | | | (_| | | | | | (_| |_ | \\__ \\    \n *   |_|   \\__,_|\\__|_| |_|_|   |_|_| |_|\\__,_|_|_| |_|\\__, (_)/ |___/    \n *                                                     |___/ |__/         \n *   https://github.com/qiao/PathFinding.js\n */\n"
  },
  {
    "path": "src/core/DiagonalMovement.js",
    "content": "var DiagonalMovement = {\n    Always: 1,\n    Never: 2,\n    IfAtMostOneObstacle: 3,\n    OnlyWhenNoObstacles: 4\n};\n\nmodule.exports = DiagonalMovement;"
  },
  {
    "path": "src/core/Grid.js",
    "content": "var Node = require('./Node');\nvar DiagonalMovement = require('./DiagonalMovement');\n\n/**\n * The Grid class, which serves as the encapsulation of the layout of the nodes.\n * @constructor\n * @param {number|Array<Array<(number|boolean)>>} width_or_matrix Number of columns of the grid, or matrix\n * @param {number} height Number of rows of the grid.\n * @param {Array<Array<(number|boolean)>>} [matrix] - A 0-1 matrix\n *     representing the walkable status of the nodes(0 or false for walkable).\n *     If the matrix is not supplied, all the nodes will be walkable.  */\nfunction Grid(width_or_matrix, height, matrix) {\n    var width;\n\n    if (typeof width_or_matrix !== 'object') {\n        width = width_or_matrix;\n    } else {\n        height = width_or_matrix.length;\n        width = width_or_matrix[0].length;\n        matrix = width_or_matrix;\n    }\n\n    /**\n     * The number of columns of the grid.\n     * @type number\n     */\n    this.width = width;\n    /**\n     * The number of rows of the grid.\n     * @type number\n     */\n    this.height = height;\n\n    /**\n     * A 2D array of nodes.\n     */\n    this.nodes = this._buildNodes(width, height, matrix);\n}\n\n/**\n * Build and return the nodes.\n * @private\n * @param {number} width\n * @param {number} height\n * @param {Array<Array<number|boolean>>} [matrix] - A 0-1 matrix representing\n *     the walkable status of the nodes.\n * @see Grid\n */\nGrid.prototype._buildNodes = function(width, height, matrix) {\n    var i, j,\n        nodes = new Array(height);\n\n    for (i = 0; i < height; ++i) {\n        nodes[i] = new Array(width);\n        for (j = 0; j < width; ++j) {\n            nodes[i][j] = new Node(j, i);\n        }\n    }\n\n\n    if (matrix === undefined) {\n        return nodes;\n    }\n\n    if (matrix.length !== height || matrix[0].length !== width) {\n        throw new Error('Matrix size does not fit');\n    }\n\n    for (i = 0; i < height; ++i) {\n        for (j = 0; j < width; ++j) {\n            if (matrix[i][j]) {\n                // 0, false, null will be walkable\n                // while others will be un-walkable\n                nodes[i][j].walkable = false;\n            }\n        }\n    }\n\n    return nodes;\n};\n\n\nGrid.prototype.getNodeAt = function(x, y) {\n    return this.nodes[y][x];\n};\n\n\n/**\n * Determine whether the node at the given position is walkable.\n * (Also returns false if the position is outside the grid.)\n * @param {number} x - The x coordinate of the node.\n * @param {number} y - The y coordinate of the node.\n * @return {boolean} - The walkability of the node.\n */\nGrid.prototype.isWalkableAt = function(x, y) {\n    return this.isInside(x, y) && this.nodes[y][x].walkable;\n};\n\n\n/**\n * Determine whether the position is inside the grid.\n * XXX: `grid.isInside(x, y)` is wierd to read.\n * It should be `(x, y) is inside grid`, but I failed to find a better\n * name for this method.\n * @param {number} x\n * @param {number} y\n * @return {boolean}\n */\nGrid.prototype.isInside = function(x, y) {\n    return (x >= 0 && x < this.width) && (y >= 0 && y < this.height);\n};\n\n\n/**\n * Set whether the node on the given position is walkable.\n * NOTE: throws exception if the coordinate is not inside the grid.\n * @param {number} x - The x coordinate of the node.\n * @param {number} y - The y coordinate of the node.\n * @param {boolean} walkable - Whether the position is walkable.\n */\nGrid.prototype.setWalkableAt = function(x, y, walkable) {\n    this.nodes[y][x].walkable = walkable;\n};\n\n\n/**\n * Get the neighbors of the given node.\n *\n *     offsets      diagonalOffsets:\n *  +---+---+---+    +---+---+---+\n *  |   | 0 |   |    | 0 |   | 1 |\n *  +---+---+---+    +---+---+---+\n *  | 3 |   | 1 |    |   |   |   |\n *  +---+---+---+    +---+---+---+\n *  |   | 2 |   |    | 3 |   | 2 |\n *  +---+---+---+    +---+---+---+\n *\n *  When allowDiagonal is true, if offsets[i] is valid, then\n *  diagonalOffsets[i] and\n *  diagonalOffsets[(i + 1) % 4] is valid.\n * @param {Node} node\n * @param {DiagonalMovement} diagonalMovement\n */\nGrid.prototype.getNeighbors = function(node, diagonalMovement) {\n    var x = node.x,\n        y = node.y,\n        neighbors = [],\n        s0 = false, d0 = false,\n        s1 = false, d1 = false,\n        s2 = false, d2 = false,\n        s3 = false, d3 = false,\n        nodes = this.nodes;\n\n    // ↑\n    if (this.isWalkableAt(x, y - 1)) {\n        neighbors.push(nodes[y - 1][x]);\n        s0 = true;\n    }\n    // →\n    if (this.isWalkableAt(x + 1, y)) {\n        neighbors.push(nodes[y][x + 1]);\n        s1 = true;\n    }\n    // ↓\n    if (this.isWalkableAt(x, y + 1)) {\n        neighbors.push(nodes[y + 1][x]);\n        s2 = true;\n    }\n    // ←\n    if (this.isWalkableAt(x - 1, y)) {\n        neighbors.push(nodes[y][x - 1]);\n        s3 = true;\n    }\n\n    if (diagonalMovement === DiagonalMovement.Never) {\n        return neighbors;\n    }\n\n    if (diagonalMovement === DiagonalMovement.OnlyWhenNoObstacles) {\n        d0 = s3 && s0;\n        d1 = s0 && s1;\n        d2 = s1 && s2;\n        d3 = s2 && s3;\n    } else if (diagonalMovement === DiagonalMovement.IfAtMostOneObstacle) {\n        d0 = s3 || s0;\n        d1 = s0 || s1;\n        d2 = s1 || s2;\n        d3 = s2 || s3;\n    } else if (diagonalMovement === DiagonalMovement.Always) {\n        d0 = true;\n        d1 = true;\n        d2 = true;\n        d3 = true;\n    } else {\n        throw new Error('Incorrect value of diagonalMovement');\n    }\n\n    // ↖\n    if (d0 && this.isWalkableAt(x - 1, y - 1)) {\n        neighbors.push(nodes[y - 1][x - 1]);\n    }\n    // ↗\n    if (d1 && this.isWalkableAt(x + 1, y - 1)) {\n        neighbors.push(nodes[y - 1][x + 1]);\n    }\n    // ↘\n    if (d2 && this.isWalkableAt(x + 1, y + 1)) {\n        neighbors.push(nodes[y + 1][x + 1]);\n    }\n    // ↙\n    if (d3 && this.isWalkableAt(x - 1, y + 1)) {\n        neighbors.push(nodes[y + 1][x - 1]);\n    }\n\n    return neighbors;\n};\n\n\n/**\n * Get a clone of this grid.\n * @return {Grid} Cloned grid.\n */\nGrid.prototype.clone = function() {\n    var i, j,\n\n        width = this.width,\n        height = this.height,\n        thisNodes = this.nodes,\n\n        newGrid = new Grid(width, height),\n        newNodes = new Array(height);\n\n    for (i = 0; i < height; ++i) {\n        newNodes[i] = new Array(width);\n        for (j = 0; j < width; ++j) {\n            newNodes[i][j] = new Node(j, i, thisNodes[i][j].walkable);\n        }\n    }\n\n    newGrid.nodes = newNodes;\n\n    return newGrid;\n};\n\nmodule.exports = Grid;\n"
  },
  {
    "path": "src/core/Heuristic.js",
    "content": "/**\n * @namespace PF.Heuristic\n * @description A collection of heuristic functions.\n */\nmodule.exports = {\n\n  /**\n   * Manhattan distance.\n   * @param {number} dx - Difference in x.\n   * @param {number} dy - Difference in y.\n   * @return {number} dx + dy\n   */\n  manhattan: function(dx, dy) {\n      return dx + dy;\n  },\n\n  /**\n   * Euclidean distance.\n   * @param {number} dx - Difference in x.\n   * @param {number} dy - Difference in y.\n   * @return {number} sqrt(dx * dx + dy * dy)\n   */\n  euclidean: function(dx, dy) {\n      return Math.sqrt(dx * dx + dy * dy);\n  },\n\n  /**\n   * Octile distance.\n   * @param {number} dx - Difference in x.\n   * @param {number} dy - Difference in y.\n   * @return {number} sqrt(dx * dx + dy * dy) for grids\n   */\n  octile: function(dx, dy) {\n      var F = Math.SQRT2 - 1;\n      return (dx < dy) ? F * dx + dy : F * dy + dx;\n  },\n\n  /**\n   * Chebyshev distance.\n   * @param {number} dx - Difference in x.\n   * @param {number} dy - Difference in y.\n   * @return {number} max(dx, dy)\n   */\n  chebyshev: function(dx, dy) {\n      return Math.max(dx, dy);\n  }\n\n};\n"
  },
  {
    "path": "src/core/Node.js",
    "content": "/**\n * A node in grid. \n * This class holds some basic information about a node and custom \n * attributes may be added, depending on the algorithms' needs.\n * @constructor\n * @param {number} x - The x coordinate of the node on the grid.\n * @param {number} y - The y coordinate of the node on the grid.\n * @param {boolean} [walkable] - Whether this node is walkable.\n */\nfunction Node(x, y, walkable) {\n    /**\n     * The x coordinate of the node on the grid.\n     * @type number\n     */\n    this.x = x;\n    /**\n     * The y coordinate of the node on the grid.\n     * @type number\n     */\n    this.y = y;\n    /**\n     * Whether this node can be walked through.\n     * @type boolean\n     */\n    this.walkable = (walkable === undefined ? true : walkable);\n}\n\nmodule.exports = Node;\n"
  },
  {
    "path": "src/core/Util.js",
    "content": "/**\n * Backtrace according to the parent records and return the path.\n * (including both start and end nodes)\n * @param {Node} node End node\n * @return {Array<Array<number>>} the path\n */\nfunction backtrace(node) {\n    var path = [[node.x, node.y]];\n    while (node.parent) {\n        node = node.parent;\n        path.push([node.x, node.y]);\n    }\n    return path.reverse();\n}\nexports.backtrace = backtrace;\n\n/**\n * Backtrace from start and end node, and return the path.\n * (including both start and end nodes)\n * @param {Node}\n * @param {Node}\n */\nfunction biBacktrace(nodeA, nodeB) {\n    var pathA = backtrace(nodeA),\n        pathB = backtrace(nodeB);\n    return pathA.concat(pathB.reverse());\n}\nexports.biBacktrace = biBacktrace;\n\n/**\n * Compute the length of the path.\n * @param {Array<Array<number>>} path The path\n * @return {number} The length of the path\n */\nfunction pathLength(path) {\n    var i, sum = 0, a, b, dx, dy;\n    for (i = 1; i < path.length; ++i) {\n        a = path[i - 1];\n        b = path[i];\n        dx = a[0] - b[0];\n        dy = a[1] - b[1];\n        sum += Math.sqrt(dx * dx + dy * dy);\n    }\n    return sum;\n}\nexports.pathLength = pathLength;\n\n\n/**\n * Given the start and end coordinates, return all the coordinates lying\n * on the line formed by these coordinates, based on Bresenham's algorithm.\n * http://en.wikipedia.org/wiki/Bresenham's_line_algorithm#Simplification\n * @param {number} x0 Start x coordinate\n * @param {number} y0 Start y coordinate\n * @param {number} x1 End x coordinate\n * @param {number} y1 End y coordinate\n * @return {Array<Array<number>>} The coordinates on the line\n */\nfunction interpolate(x0, y0, x1, y1) {\n    var abs = Math.abs,\n        line = [],\n        sx, sy, dx, dy, err, e2;\n\n    dx = abs(x1 - x0);\n    dy = abs(y1 - y0);\n\n    sx = (x0 < x1) ? 1 : -1;\n    sy = (y0 < y1) ? 1 : -1;\n\n    err = dx - dy;\n\n    while (true) {\n        line.push([x0, y0]);\n\n        if (x0 === x1 && y0 === y1) {\n            break;\n        }\n        \n        e2 = 2 * err;\n        if (e2 > -dy) {\n            err = err - dy;\n            x0 = x0 + sx;\n        }\n        if (e2 < dx) {\n            err = err + dx;\n            y0 = y0 + sy;\n        }\n    }\n\n    return line;\n}\nexports.interpolate = interpolate;\n\n\n/**\n * Given a compressed path, return a new path that has all the segments\n * in it interpolated.\n * @param {Array<Array<number>>} path The path\n * @return {Array<Array<number>>} expanded path\n */\nfunction expandPath(path) {\n    var expanded = [],\n        len = path.length,\n        coord0, coord1,\n        interpolated,\n        interpolatedLen,\n        i, j;\n\n    if (len < 2) {\n        return expanded;\n    }\n\n    for (i = 0; i < len - 1; ++i) {\n        coord0 = path[i];\n        coord1 = path[i + 1];\n\n        interpolated = interpolate(coord0[0], coord0[1], coord1[0], coord1[1]);\n        interpolatedLen = interpolated.length;\n        for (j = 0; j < interpolatedLen - 1; ++j) {\n            expanded.push(interpolated[j]);\n        }\n    }\n    expanded.push(path[len - 1]);\n\n    return expanded;\n}\nexports.expandPath = expandPath;\n\n\n/**\n * Smoothen the give path.\n * The original path will not be modified; a new path will be returned.\n * @param {PF.Grid} grid\n * @param {Array<Array<number>>} path The path\n */\nfunction smoothenPath(grid, path) {\n    var len = path.length,\n        x0 = path[0][0],        // path start x\n        y0 = path[0][1],        // path start y\n        x1 = path[len - 1][0],  // path end x\n        y1 = path[len - 1][1],  // path end y\n        sx, sy,                 // current start coordinate\n        ex, ey,                 // current end coordinate\n        newPath,\n        i, j, coord, line, testCoord, blocked;\n\n    sx = x0;\n    sy = y0;\n    newPath = [[sx, sy]];\n\n    for (i = 2; i < len; ++i) {\n        coord = path[i];\n        ex = coord[0];\n        ey = coord[1];\n        line = interpolate(sx, sy, ex, ey);\n\n        blocked = false;\n        for (j = 1; j < line.length; ++j) {\n            testCoord = line[j];\n\n            if (!grid.isWalkableAt(testCoord[0], testCoord[1])) {\n                blocked = true;\n                break;\n            }\n        }\n        if (blocked) {\n            lastValidCoord = path[i - 1];\n            newPath.push(lastValidCoord);\n            sx = lastValidCoord[0];\n            sy = lastValidCoord[1];\n        }\n    }\n    newPath.push([x1, y1]);\n\n    return newPath;\n}\nexports.smoothenPath = smoothenPath;\n\n\n/**\n * Compress a path, remove redundant nodes without altering the shape\n * The original path is not modified\n * @param {Array<Array<number>>} path The path\n * @return {Array<Array<number>>} The compressed path\n */\nfunction compressPath(path) {\n\n    // nothing to compress\n    if(path.length < 3) {\n        return path;\n    }\n\n    var compressed = [],\n        sx = path[0][0], // start x\n        sy = path[0][1], // start y\n        px = path[1][0], // second point x\n        py = path[1][1], // second point y\n        dx = px - sx, // direction between the two points\n        dy = py - sy, // direction between the two points\n        lx, ly,\n        ldx, ldy,\n        sq, i;\n\n    // normalize the direction\n    sq = Math.sqrt(dx*dx + dy*dy);\n    dx /= sq;\n    dy /= sq;\n\n    // start the new path\n    compressed.push([sx,sy]);\n\n    for(i = 2; i < path.length; i++) {\n\n        // store the last point\n        lx = px;\n        ly = py;\n\n        // store the last direction\n        ldx = dx;\n        ldy = dy;\n\n        // next point\n        px = path[i][0];\n        py = path[i][1];\n\n        // next direction\n        dx = px - lx;\n        dy = py - ly;\n\n        // normalize\n        sq = Math.sqrt(dx*dx + dy*dy);\n        dx /= sq;\n        dy /= sq;\n\n        // if the direction has changed, store the point\n        if ( dx !== ldx || dy !== ldy ) {\n            compressed.push([lx,ly]);\n        }\n    }\n\n    // store the last point\n    compressed.push([px,py]);\n\n    return compressed;\n}\nexports.compressPath = compressPath;\n"
  },
  {
    "path": "src/finders/AStarFinder.js",
    "content": "var Heap       = require('heap');\nvar Util       = require('../core/Util');\nvar Heuristic  = require('../core/Heuristic');\nvar DiagonalMovement = require('../core/DiagonalMovement');\n\n/**\n * A* path-finder. Based upon https://github.com/bgrins/javascript-astar\n * @constructor\n * @param {Object} opt\n * @param {boolean} opt.allowDiagonal Whether diagonal movement is allowed.\n *     Deprecated, use diagonalMovement instead.\n * @param {boolean} opt.dontCrossCorners Disallow diagonal movement touching \n *     block corners. Deprecated, use diagonalMovement instead.\n * @param {DiagonalMovement} opt.diagonalMovement Allowed diagonal movement.\n * @param {function} opt.heuristic Heuristic function to estimate the distance\n *     (defaults to manhattan).\n * @param {number} opt.weight Weight to apply to the heuristic to allow for\n *     suboptimal paths, in order to speed up the search.\n */\nfunction AStarFinder(opt) {\n    opt = opt || {};\n    this.allowDiagonal = opt.allowDiagonal;\n    this.dontCrossCorners = opt.dontCrossCorners;\n    this.heuristic = opt.heuristic || Heuristic.manhattan;\n    this.weight = opt.weight || 1;\n    this.diagonalMovement = opt.diagonalMovement;\n\n    if (!this.diagonalMovement) {\n        if (!this.allowDiagonal) {\n            this.diagonalMovement = DiagonalMovement.Never;\n        } else {\n            if (this.dontCrossCorners) {\n                this.diagonalMovement = DiagonalMovement.OnlyWhenNoObstacles;\n            } else {\n                this.diagonalMovement = DiagonalMovement.IfAtMostOneObstacle;\n            }\n        }\n    }\n\n    // When diagonal movement is allowed the manhattan heuristic is not\n    //admissible. It should be octile instead\n    if (this.diagonalMovement === DiagonalMovement.Never) {\n        this.heuristic = opt.heuristic || Heuristic.manhattan;\n    } else {\n        this.heuristic = opt.heuristic || Heuristic.octile;\n    }\n}\n\n/**\n * Find and return the the path.\n * @return {Array<Array<number>>} The path, including both start and\n *     end positions.\n */\nAStarFinder.prototype.findPath = function(startX, startY, endX, endY, grid) {\n    var openList = new Heap(function(nodeA, nodeB) {\n            return nodeA.f - nodeB.f;\n        }),\n        startNode = grid.getNodeAt(startX, startY),\n        endNode = grid.getNodeAt(endX, endY),\n        heuristic = this.heuristic,\n        diagonalMovement = this.diagonalMovement,\n        weight = this.weight,\n        abs = Math.abs, SQRT2 = Math.SQRT2,\n        node, neighbors, neighbor, i, l, x, y, ng;\n\n    // set the `g` and `f` value of the start node to be 0\n    startNode.g = 0;\n    startNode.f = 0;\n\n    // push the start node into the open list\n    openList.push(startNode);\n    startNode.opened = true;\n\n    // while the open list is not empty\n    while (!openList.empty()) {\n        // pop the position of node which has the minimum `f` value.\n        node = openList.pop();\n        node.closed = true;\n\n        // if reached the end position, construct the path and return it\n        if (node === endNode) {\n            return Util.backtrace(endNode);\n        }\n\n        // get neigbours of the current node\n        neighbors = grid.getNeighbors(node, diagonalMovement);\n        for (i = 0, l = neighbors.length; i < l; ++i) {\n            neighbor = neighbors[i];\n\n            if (neighbor.closed) {\n                continue;\n            }\n\n            x = neighbor.x;\n            y = neighbor.y;\n\n            // get the distance between current node and the neighbor\n            // and calculate the next g score\n            ng = node.g + ((x - node.x === 0 || y - node.y === 0) ? 1 : SQRT2);\n\n            // check if the neighbor has not been inspected yet, or\n            // can be reached with smaller cost from the current node\n            if (!neighbor.opened || ng < neighbor.g) {\n                neighbor.g = ng;\n                neighbor.h = neighbor.h || weight * heuristic(abs(x - endX), abs(y - endY));\n                neighbor.f = neighbor.g + neighbor.h;\n                neighbor.parent = node;\n\n                if (!neighbor.opened) {\n                    openList.push(neighbor);\n                    neighbor.opened = true;\n                } else {\n                    // the neighbor can be reached with smaller cost.\n                    // Since its f value has been updated, we have to\n                    // update its position in the open list\n                    openList.updateItem(neighbor);\n                }\n            }\n        } // end for each neighbor\n    } // end while not open list empty\n\n    // fail to find the path\n    return [];\n};\n\nmodule.exports = AStarFinder;\n"
  },
  {
    "path": "src/finders/BestFirstFinder.js",
    "content": "var AStarFinder = require('./AStarFinder');\n\n/**\n * Best-First-Search path-finder.\n * @constructor\n * @extends AStarFinder\n * @param {Object} opt\n * @param {boolean} opt.allowDiagonal Whether diagonal movement is allowed.\n *     Deprecated, use diagonalMovement instead.\n * @param {boolean} opt.dontCrossCorners Disallow diagonal movement touching\n *     block corners. Deprecated, use diagonalMovement instead.\n * @param {DiagonalMovement} opt.diagonalMovement Allowed diagonal movement.\n * @param {function} opt.heuristic Heuristic function to estimate the distance\n *     (defaults to manhattan).\n */\nfunction BestFirstFinder(opt) {\n    AStarFinder.call(this, opt);\n\n    var orig = this.heuristic;\n    this.heuristic = function(dx, dy) {\n        return orig(dx, dy) * 1000000;\n    };\n}\n\nBestFirstFinder.prototype = new AStarFinder();\nBestFirstFinder.prototype.constructor = BestFirstFinder;\n\nmodule.exports = BestFirstFinder;\n"
  },
  {
    "path": "src/finders/BiAStarFinder.js",
    "content": "var Heap       = require('heap');\nvar Util       = require('../core/Util');\nvar Heuristic  = require('../core/Heuristic');\nvar DiagonalMovement = require('../core/DiagonalMovement');\n\n/**\n * A* path-finder.\n * based upon https://github.com/bgrins/javascript-astar\n * @constructor\n * @param {Object} opt\n * @param {boolean} opt.allowDiagonal Whether diagonal movement is allowed.\n *     Deprecated, use diagonalMovement instead.\n * @param {boolean} opt.dontCrossCorners Disallow diagonal movement touching\n *     block corners. Deprecated, use diagonalMovement instead.\n * @param {DiagonalMovement} opt.diagonalMovement Allowed diagonal movement.\n * @param {function} opt.heuristic Heuristic function to estimate the distance\n *     (defaults to manhattan).\n * @param {number} opt.weight Weight to apply to the heuristic to allow for\n *     suboptimal paths, in order to speed up the search.\n */\nfunction BiAStarFinder(opt) {\n    opt = opt || {};\n    this.allowDiagonal = opt.allowDiagonal;\n    this.dontCrossCorners = opt.dontCrossCorners;\n    this.diagonalMovement = opt.diagonalMovement;\n    this.heuristic = opt.heuristic || Heuristic.manhattan;\n    this.weight = opt.weight || 1;\n\n    if (!this.diagonalMovement) {\n        if (!this.allowDiagonal) {\n            this.diagonalMovement = DiagonalMovement.Never;\n        } else {\n            if (this.dontCrossCorners) {\n                this.diagonalMovement = DiagonalMovement.OnlyWhenNoObstacles;\n            } else {\n                this.diagonalMovement = DiagonalMovement.IfAtMostOneObstacle;\n            }\n        }\n    }\n\n    //When diagonal movement is allowed the manhattan heuristic is not admissible\n    //It should be octile instead\n    if (this.diagonalMovement === DiagonalMovement.Never) {\n        this.heuristic = opt.heuristic || Heuristic.manhattan;\n    } else {\n        this.heuristic = opt.heuristic || Heuristic.octile;\n    }\n}\n\n/**\n * Find and return the the path.\n * @return {Array<Array<number>>} The path, including both start and\n *     end positions.\n */\nBiAStarFinder.prototype.findPath = function(startX, startY, endX, endY, grid) {\n    var cmp = function(nodeA, nodeB) {\n            return nodeA.f - nodeB.f;\n        },\n        startOpenList = new Heap(cmp),\n        endOpenList = new Heap(cmp),\n        startNode = grid.getNodeAt(startX, startY),\n        endNode = grid.getNodeAt(endX, endY),\n        heuristic = this.heuristic,\n        diagonalMovement = this.diagonalMovement,\n        weight = this.weight,\n        abs = Math.abs, SQRT2 = Math.SQRT2,\n        node, neighbors, neighbor, i, l, x, y, ng,\n        BY_START = 1, BY_END = 2;\n\n    // set the `g` and `f` value of the start node to be 0\n    // and push it into the start open list\n    startNode.g = 0;\n    startNode.f = 0;\n    startOpenList.push(startNode);\n    startNode.opened = BY_START;\n\n    // set the `g` and `f` value of the end node to be 0\n    // and push it into the open open list\n    endNode.g = 0;\n    endNode.f = 0;\n    endOpenList.push(endNode);\n    endNode.opened = BY_END;\n\n    // while both the open lists are not empty\n    while (!startOpenList.empty() && !endOpenList.empty()) {\n\n        // pop the position of start node which has the minimum `f` value.\n        node = startOpenList.pop();\n        node.closed = true;\n\n        // get neigbours of the current node\n        neighbors = grid.getNeighbors(node, diagonalMovement);\n        for (i = 0, l = neighbors.length; i < l; ++i) {\n            neighbor = neighbors[i];\n\n            if (neighbor.closed) {\n                continue;\n            }\n            if (neighbor.opened === BY_END) {\n                return Util.biBacktrace(node, neighbor);\n            }\n\n            x = neighbor.x;\n            y = neighbor.y;\n\n            // get the distance between current node and the neighbor\n            // and calculate the next g score\n            ng = node.g + ((x - node.x === 0 || y - node.y === 0) ? 1 : SQRT2);\n\n            // check if the neighbor has not been inspected yet, or\n            // can be reached with smaller cost from the current node\n            if (!neighbor.opened || ng < neighbor.g) {\n                neighbor.g = ng;\n                neighbor.h = neighbor.h ||\n                    weight * heuristic(abs(x - endX), abs(y - endY));\n                neighbor.f = neighbor.g + neighbor.h;\n                neighbor.parent = node;\n\n                if (!neighbor.opened) {\n                    startOpenList.push(neighbor);\n                    neighbor.opened = BY_START;\n                } else {\n                    // the neighbor can be reached with smaller cost.\n                    // Since its f value has been updated, we have to\n                    // update its position in the open list\n                    startOpenList.updateItem(neighbor);\n                }\n            }\n        } // end for each neighbor\n\n\n        // pop the position of end node which has the minimum `f` value.\n        node = endOpenList.pop();\n        node.closed = true;\n\n        // get neigbours of the current node\n        neighbors = grid.getNeighbors(node, diagonalMovement);\n        for (i = 0, l = neighbors.length; i < l; ++i) {\n            neighbor = neighbors[i];\n\n            if (neighbor.closed) {\n                continue;\n            }\n            if (neighbor.opened === BY_START) {\n                return Util.biBacktrace(neighbor, node);\n            }\n\n            x = neighbor.x;\n            y = neighbor.y;\n\n            // get the distance between current node and the neighbor\n            // and calculate the next g score\n            ng = node.g + ((x - node.x === 0 || y - node.y === 0) ? 1 : SQRT2);\n\n            // check if the neighbor has not been inspected yet, or\n            // can be reached with smaller cost from the current node\n            if (!neighbor.opened || ng < neighbor.g) {\n                neighbor.g = ng;\n                neighbor.h = neighbor.h ||\n                    weight * heuristic(abs(x - startX), abs(y - startY));\n                neighbor.f = neighbor.g + neighbor.h;\n                neighbor.parent = node;\n\n                if (!neighbor.opened) {\n                    endOpenList.push(neighbor);\n                    neighbor.opened = BY_END;\n                } else {\n                    // the neighbor can be reached with smaller cost.\n                    // Since its f value has been updated, we have to\n                    // update its position in the open list\n                    endOpenList.updateItem(neighbor);\n                }\n            }\n        } // end for each neighbor\n    } // end while not open list empty\n\n    // fail to find the path\n    return [];\n};\n\nmodule.exports = BiAStarFinder;\n"
  },
  {
    "path": "src/finders/BiBestFirstFinder.js",
    "content": "var BiAStarFinder = require('./BiAStarFinder');\n\n/**\n * Bi-direcitional Best-First-Search path-finder.\n * @constructor\n * @extends BiAStarFinder\n * @param {Object} opt\n * @param {boolean} opt.allowDiagonal Whether diagonal movement is allowed.\n *     Deprecated, use diagonalMovement instead.\n * @param {boolean} opt.dontCrossCorners Disallow diagonal movement touching\n *     block corners. Deprecated, use diagonalMovement instead.\n * @param {DiagonalMovement} opt.diagonalMovement Allowed diagonal movement.\n * @param {function} opt.heuristic Heuristic function to estimate the distance\n *     (defaults to manhattan).\n */\nfunction BiBestFirstFinder(opt) {\n    BiAStarFinder.call(this, opt);\n\n    var orig = this.heuristic;\n    this.heuristic = function(dx, dy) {\n        return orig(dx, dy) * 1000000;\n    };\n}\n\nBiBestFirstFinder.prototype = new BiAStarFinder();\nBiBestFirstFinder.prototype.constructor = BiBestFirstFinder;\n\nmodule.exports = BiBestFirstFinder;\n"
  },
  {
    "path": "src/finders/BiBreadthFirstFinder.js",
    "content": "var Util = require('../core/Util');\nvar DiagonalMovement = require('../core/DiagonalMovement');\n\n/**\n * Bi-directional Breadth-First-Search path finder.\n * @constructor\n * @param {object} opt\n * @param {boolean} opt.allowDiagonal Whether diagonal movement is allowed.\n *     Deprecated, use diagonalMovement instead.\n * @param {boolean} opt.dontCrossCorners Disallow diagonal movement touching\n *     block corners. Deprecated, use diagonalMovement instead.\n * @param {DiagonalMovement} opt.diagonalMovement Allowed diagonal movement.\n */\nfunction BiBreadthFirstFinder(opt) {\n    opt = opt || {};\n    this.allowDiagonal = opt.allowDiagonal;\n    this.dontCrossCorners = opt.dontCrossCorners;\n    this.diagonalMovement = opt.diagonalMovement;\n\n    if (!this.diagonalMovement) {\n        if (!this.allowDiagonal) {\n            this.diagonalMovement = DiagonalMovement.Never;\n        } else {\n            if (this.dontCrossCorners) {\n                this.diagonalMovement = DiagonalMovement.OnlyWhenNoObstacles;\n            } else {\n                this.diagonalMovement = DiagonalMovement.IfAtMostOneObstacle;\n            }\n        }\n    }\n}\n\n\n/**\n * Find and return the the path.\n * @return {Array<Array<number>>} The path, including both start and\n *     end positions.\n */\nBiBreadthFirstFinder.prototype.findPath = function(startX, startY, endX, endY, grid) {\n    var startNode = grid.getNodeAt(startX, startY),\n        endNode = grid.getNodeAt(endX, endY),\n        startOpenList = [], endOpenList = [],\n        neighbors, neighbor, node,\n        diagonalMovement = this.diagonalMovement,\n        BY_START = 0, BY_END = 1,\n        i, l;\n\n    // push the start and end nodes into the queues\n    startOpenList.push(startNode);\n    startNode.opened = true;\n    startNode.by = BY_START;\n\n    endOpenList.push(endNode);\n    endNode.opened = true;\n    endNode.by = BY_END;\n\n    // while both the queues are not empty\n    while (startOpenList.length && endOpenList.length) {\n\n        // expand start open list\n\n        node = startOpenList.shift();\n        node.closed = true;\n\n        neighbors = grid.getNeighbors(node, diagonalMovement);\n        for (i = 0, l = neighbors.length; i < l; ++i) {\n            neighbor = neighbors[i];\n\n            if (neighbor.closed) {\n                continue;\n            }\n            if (neighbor.opened) {\n                // if this node has been inspected by the reversed search,\n                // then a path is found.\n                if (neighbor.by === BY_END) {\n                    return Util.biBacktrace(node, neighbor);\n                }\n                continue;\n            }\n            startOpenList.push(neighbor);\n            neighbor.parent = node;\n            neighbor.opened = true;\n            neighbor.by = BY_START;\n        }\n\n        // expand end open list\n\n        node = endOpenList.shift();\n        node.closed = true;\n\n        neighbors = grid.getNeighbors(node, diagonalMovement);\n        for (i = 0, l = neighbors.length; i < l; ++i) {\n            neighbor = neighbors[i];\n\n            if (neighbor.closed) {\n                continue;\n            }\n            if (neighbor.opened) {\n                if (neighbor.by === BY_START) {\n                    return Util.biBacktrace(neighbor, node);\n                }\n                continue;\n            }\n            endOpenList.push(neighbor);\n            neighbor.parent = node;\n            neighbor.opened = true;\n            neighbor.by = BY_END;\n        }\n    }\n\n    // fail to find the path\n    return [];\n};\n\nmodule.exports = BiBreadthFirstFinder;\n"
  },
  {
    "path": "src/finders/BiDijkstraFinder.js",
    "content": "var BiAStarFinder = require('./BiAStarFinder');\n\n/**\n * Bi-directional Dijkstra path-finder.\n * @constructor\n * @extends BiAStarFinder\n * @param {Object} opt\n * @param {boolean} opt.allowDiagonal Whether diagonal movement is allowed.\n *     Deprecated, use diagonalMovement instead.\n * @param {boolean} opt.dontCrossCorners Disallow diagonal movement touching\n *     block corners. Deprecated, use diagonalMovement instead.\n * @param {DiagonalMovement} opt.diagonalMovement Allowed diagonal movement.\n */\nfunction BiDijkstraFinder(opt) {\n    BiAStarFinder.call(this, opt);\n    this.heuristic = function(dx, dy) {\n        return 0;\n    };\n}\n\nBiDijkstraFinder.prototype = new BiAStarFinder();\nBiDijkstraFinder.prototype.constructor = BiDijkstraFinder;\n\nmodule.exports = BiDijkstraFinder;\n"
  },
  {
    "path": "src/finders/BreadthFirstFinder.js",
    "content": "var Util = require('../core/Util');\nvar DiagonalMovement = require('../core/DiagonalMovement');\n\n/**\n * Breadth-First-Search path finder.\n * @constructor\n * @param {Object} opt\n * @param {boolean} opt.allowDiagonal Whether diagonal movement is allowed.\n *     Deprecated, use diagonalMovement instead.\n * @param {boolean} opt.dontCrossCorners Disallow diagonal movement touching\n *     block corners. Deprecated, use diagonalMovement instead.\n * @param {DiagonalMovement} opt.diagonalMovement Allowed diagonal movement.\n */\nfunction BreadthFirstFinder(opt) {\n    opt = opt || {};\n    this.allowDiagonal = opt.allowDiagonal;\n    this.dontCrossCorners = opt.dontCrossCorners;\n    this.diagonalMovement = opt.diagonalMovement;\n\n    if (!this.diagonalMovement) {\n        if (!this.allowDiagonal) {\n            this.diagonalMovement = DiagonalMovement.Never;\n        } else {\n            if (this.dontCrossCorners) {\n                this.diagonalMovement = DiagonalMovement.OnlyWhenNoObstacles;\n            } else {\n                this.diagonalMovement = DiagonalMovement.IfAtMostOneObstacle;\n            }\n        }\n    }\n}\n\n/**\n * Find and return the the path.\n * @return {Array<Array<number>>} The path, including both start and\n *     end positions.\n */\nBreadthFirstFinder.prototype.findPath = function(startX, startY, endX, endY, grid) {\n    var openList = [],\n        diagonalMovement = this.diagonalMovement,\n        startNode = grid.getNodeAt(startX, startY),\n        endNode = grid.getNodeAt(endX, endY),\n        neighbors, neighbor, node, i, l;\n\n    // push the start pos into the queue\n    openList.push(startNode);\n    startNode.opened = true;\n\n    // while the queue is not empty\n    while (openList.length) {\n        // take the front node from the queue\n        node = openList.shift();\n        node.closed = true;\n\n        // reached the end position\n        if (node === endNode) {\n            return Util.backtrace(endNode);\n        }\n\n        neighbors = grid.getNeighbors(node, diagonalMovement);\n        for (i = 0, l = neighbors.length; i < l; ++i) {\n            neighbor = neighbors[i];\n\n            // skip this neighbor if it has been inspected before\n            if (neighbor.closed || neighbor.opened) {\n                continue;\n            }\n\n            openList.push(neighbor);\n            neighbor.opened = true;\n            neighbor.parent = node;\n        }\n    }\n    \n    // fail to find the path\n    return [];\n};\n\nmodule.exports = BreadthFirstFinder;\n"
  },
  {
    "path": "src/finders/DijkstraFinder.js",
    "content": "var AStarFinder = require('./AStarFinder');\n\n/**\n * Dijkstra path-finder.\n * @constructor\n * @extends AStarFinder\n * @param {Object} opt\n * @param {boolean} opt.allowDiagonal Whether diagonal movement is allowed.\n *     Deprecated, use diagonalMovement instead.\n * @param {boolean} opt.dontCrossCorners Disallow diagonal movement touching\n *     block corners. Deprecated, use diagonalMovement instead.\n * @param {DiagonalMovement} opt.diagonalMovement Allowed diagonal movement.\n */\nfunction DijkstraFinder(opt) {\n    AStarFinder.call(this, opt);\n    this.heuristic = function(dx, dy) {\n        return 0;\n    };\n}\n\nDijkstraFinder.prototype = new AStarFinder();\nDijkstraFinder.prototype.constructor = DijkstraFinder;\n\nmodule.exports = DijkstraFinder;\n"
  },
  {
    "path": "src/finders/IDAStarFinder.js",
    "content": "var Util       = require('../core/Util');\nvar Heuristic  = require('../core/Heuristic');\nvar Node       = require('../core/Node');\nvar DiagonalMovement = require('../core/DiagonalMovement');\n\n/**\n * Iterative Deeping A Star (IDA*) path-finder.\n *\n * Recursion based on:\n *   http://www.apl.jhu.edu/~hall/AI-Programming/IDA-Star.html\n *\n * Path retracing based on:\n *  V. Nageshwara Rao, Vipin Kumar and K. Ramesh\n *  \"A Parallel Implementation of Iterative-Deeping-A*\", January 1987.\n *  ftp://ftp.cs.utexas.edu/.snapshot/hourly.1/pub/AI-Lab/tech-reports/UT-AI-TR-87-46.pdf\n *\n * @author Gerard Meier (www.gerardmeier.com)\n *\n * @constructor\n * @param {Object} opt\n * @param {boolean} opt.allowDiagonal Whether diagonal movement is allowed.\n *     Deprecated, use diagonalMovement instead.\n * @param {boolean} opt.dontCrossCorners Disallow diagonal movement touching\n *     block corners. Deprecated, use diagonalMovement instead.\n * @param {DiagonalMovement} opt.diagonalMovement Allowed diagonal movement.\n * @param {function} opt.heuristic Heuristic function to estimate the distance\n *     (defaults to manhattan).\n * @param {number} opt.weight Weight to apply to the heuristic to allow for\n *     suboptimal paths, in order to speed up the search.\n * @param {boolean} opt.trackRecursion Whether to track recursion for\n *     statistical purposes.\n * @param {number} opt.timeLimit Maximum execution time. Use <= 0 for infinite.\n */\nfunction IDAStarFinder(opt) {\n    opt = opt || {};\n    this.allowDiagonal = opt.allowDiagonal;\n    this.dontCrossCorners = opt.dontCrossCorners;\n    this.diagonalMovement = opt.diagonalMovement;\n    this.heuristic = opt.heuristic || Heuristic.manhattan;\n    this.weight = opt.weight || 1;\n    this.trackRecursion = opt.trackRecursion || false;\n    this.timeLimit = opt.timeLimit || Infinity; // Default: no time limit.\n\n    if (!this.diagonalMovement) {\n        if (!this.allowDiagonal) {\n            this.diagonalMovement = DiagonalMovement.Never;\n        } else {\n            if (this.dontCrossCorners) {\n                this.diagonalMovement = DiagonalMovement.OnlyWhenNoObstacles;\n            } else {\n                this.diagonalMovement = DiagonalMovement.IfAtMostOneObstacle;\n            }\n        }\n    }\n\n    // When diagonal movement is allowed the manhattan heuristic is not\n    // admissible, it should be octile instead\n    if (this.diagonalMovement === DiagonalMovement.Never) {\n        this.heuristic = opt.heuristic || Heuristic.manhattan;\n    } else {\n        this.heuristic = opt.heuristic || Heuristic.octile;\n    }\n}\n\n/**\n * Find and return the the path. When an empty array is returned, either\n * no path is possible, or the maximum execution time is reached.\n *\n * @return {Array<Array<number>>} The path, including both start and\n *     end positions.\n */\nIDAStarFinder.prototype.findPath = function(startX, startY, endX, endY, grid) {\n    // Used for statistics:\n    var nodesVisited = 0;\n\n    // Execution time limitation:\n    var startTime = new Date().getTime();\n\n    // Heuristic helper:\n    var h = function(a, b) {\n        return this.heuristic(Math.abs(b.x - a.x), Math.abs(b.y - a.y));\n    }.bind(this);\n\n    // Step cost from a to b:\n    var cost = function(a, b) {\n        return (a.x === b.x || a.y === b.y) ? 1 : Math.SQRT2;\n    };\n\n    /**\n     * IDA* search implementation.\n     *\n     * @param {Node} The node currently expanding from.\n     * @param {number} Cost to reach the given node.\n     * @param {number} Maximum search depth (cut-off value).\n     * @param {Array<Array<number>>} The found route.\n     * @param {number} Recursion depth.\n     *\n     * @return {Object} either a number with the new optimal cut-off depth,\n     * or a valid node instance, in which case a path was found.\n     */\n    var search = function(node, g, cutoff, route, depth) {\n        nodesVisited++;\n\n        // Enforce timelimit:\n        if (this.timeLimit > 0 &&\n            new Date().getTime() - startTime > this.timeLimit * 1000) {\n            // Enforced as \"path-not-found\".\n            return Infinity;\n        }\n\n        var f = g + h(node, end) * this.weight;\n\n        // We've searched too deep for this iteration.\n        if (f > cutoff) {\n            return f;\n        }\n\n        if (node == end) {\n            route[depth] = [node.x, node.y];\n            return node;\n        }\n\n        var min, t, k, neighbour;\n\n        var neighbours = grid.getNeighbors(node, this.diagonalMovement);\n\n        // Sort the neighbours, gives nicer paths. But, this deviates\n        // from the original algorithm - so I left it out.\n        //neighbours.sort(function(a, b){\n        //    return h(a, end) - h(b, end);\n        //});\n\n        \n        /*jshint -W084 *///Disable warning: Expected a conditional expression and instead saw an assignment\n        for (k = 0, min = Infinity; neighbour = neighbours[k]; ++k) {\n        /*jshint +W084 *///Enable warning: Expected a conditional expression and instead saw an assignment\n            if (this.trackRecursion) {\n                // Retain a copy for visualisation. Due to recursion, this\n                // node may be part of other paths too.\n                neighbour.retainCount = neighbour.retainCount + 1 || 1;\n\n                if(neighbour.tested !== true) {\n                    neighbour.tested = true;\n                }\n            }\n\n            t = search(neighbour, g + cost(node, neighbour), cutoff, route, depth + 1);\n\n            if (t instanceof Node) {\n                route[depth] = [node.x, node.y];\n\n                // For a typical A* linked list, this would work:\n                // neighbour.parent = node;\n                return t;\n            }\n\n            // Decrement count, then determine whether it's actually closed.\n            if (this.trackRecursion && (--neighbour.retainCount) === 0) {\n                neighbour.tested = false;\n            }\n\n            if (t < min) {\n                min = t;\n            }\n        }\n\n        return min;\n\n    }.bind(this);\n\n    // Node instance lookups:\n    var start = grid.getNodeAt(startX, startY);\n    var end   = grid.getNodeAt(endX, endY);\n\n    // Initial search depth, given the typical heuristic contraints,\n    // there should be no cheaper route possible.\n    var cutOff = h(start, end);\n\n    var j, route, t;\n\n    // With an overflow protection.\n    for (j = 0; true; ++j) {\n\n        route = [];\n\n        // Search till cut-off depth:\n        t = search(start, 0, cutOff, route, 0);\n\n        // Route not possible, or not found in time limit.\n        if (t === Infinity) {\n            return [];\n        }\n\n        // If t is a node, it's also the end node. Route is now\n        // populated with a valid path to the end node.\n        if (t instanceof Node) {\n            return route;\n        }\n\n        // Try again, this time with a deeper cut-off. The t score\n        // is the closest we got to the end node.\n        cutOff = t;\n    }\n\n    // This _should_ never to be reached.\n    return [];\n};\n\nmodule.exports = IDAStarFinder;\n"
  },
  {
    "path": "src/finders/JPFAlwaysMoveDiagonally.js",
    "content": "/**\n * @author imor / https://github.com/imor\n */\nvar JumpPointFinderBase = require('./JumpPointFinderBase');\nvar DiagonalMovement = require('../core/DiagonalMovement');\n\n/**\n * Path finder using the Jump Point Search algorithm which always moves\n * diagonally irrespective of the number of obstacles.\n */\nfunction JPFAlwaysMoveDiagonally(opt) {\n    JumpPointFinderBase.call(this, opt);\n}\n\nJPFAlwaysMoveDiagonally.prototype = new JumpPointFinderBase();\nJPFAlwaysMoveDiagonally.prototype.constructor = JPFAlwaysMoveDiagonally;\n\n/**\n * Search recursively in the direction (parent -> child), stopping only when a\n * jump point is found.\n * @protected\n * @return {Array<Array<number>>} The x, y coordinate of the jump point\n *     found, or null if not found\n */\nJPFAlwaysMoveDiagonally.prototype._jump = function(x, y, px, py) {\n    var grid = this.grid,\n        dx = x - px, dy = y - py;\n\n    if (!grid.isWalkableAt(x, y)) {\n        return null;\n    }\n\n    if(this.trackJumpRecursion === true) {\n        grid.getNodeAt(x, y).tested = true;\n    }\n\n    if (grid.getNodeAt(x, y) === this.endNode) {\n        return [x, y];\n    }\n\n    // check for forced neighbors\n    // along the diagonal\n    if (dx !== 0 && dy !== 0) {\n        if ((grid.isWalkableAt(x - dx, y + dy) && !grid.isWalkableAt(x - dx, y)) ||\n            (grid.isWalkableAt(x + dx, y - dy) && !grid.isWalkableAt(x, y - dy))) {\n            return [x, y];\n        }\n        // when moving diagonally, must check for vertical/horizontal jump points\n        if (this._jump(x + dx, y, x, y) || this._jump(x, y + dy, x, y)) {\n            return [x, y];\n        }\n    }\n    // horizontally/vertically\n    else {\n        if( dx !== 0 ) { // moving along x\n            if((grid.isWalkableAt(x + dx, y + 1) && !grid.isWalkableAt(x, y + 1)) ||\n               (grid.isWalkableAt(x + dx, y - 1) && !grid.isWalkableAt(x, y - 1))) {\n                return [x, y];\n            }\n        }\n        else {\n            if((grid.isWalkableAt(x + 1, y + dy) && !grid.isWalkableAt(x + 1, y)) ||\n               (grid.isWalkableAt(x - 1, y + dy) && !grid.isWalkableAt(x - 1, y))) {\n                return [x, y];\n            }\n        }\n    }\n\n    return this._jump(x + dx, y + dy, x, y);\n};\n\n/**\n * Find the neighbors for the given node. If the node has a parent,\n * prune the neighbors based on the jump point search algorithm, otherwise\n * return all available neighbors.\n * @return {Array<Array<number>>} The neighbors found.\n */\nJPFAlwaysMoveDiagonally.prototype._findNeighbors = function(node) {\n    var parent = node.parent,\n        x = node.x, y = node.y,\n        grid = this.grid,\n        px, py, nx, ny, dx, dy,\n        neighbors = [], neighborNodes, neighborNode, i, l;\n\n    // directed pruning: can ignore most neighbors, unless forced.\n    if (parent) {\n        px = parent.x;\n        py = parent.y;\n        // get the normalized direction of travel\n        dx = (x - px) / Math.max(Math.abs(x - px), 1);\n        dy = (y - py) / Math.max(Math.abs(y - py), 1);\n\n        // search diagonally\n        if (dx !== 0 && dy !== 0) {\n            if (grid.isWalkableAt(x, y + dy)) {\n                neighbors.push([x, y + dy]);\n            }\n            if (grid.isWalkableAt(x + dx, y)) {\n                neighbors.push([x + dx, y]);\n            }\n            if (grid.isWalkableAt(x + dx, y + dy)) {\n                neighbors.push([x + dx, y + dy]);\n            }\n            if (!grid.isWalkableAt(x - dx, y)) {\n                neighbors.push([x - dx, y + dy]);\n            }\n            if (!grid.isWalkableAt(x, y - dy)) {\n                neighbors.push([x + dx, y - dy]);\n            }\n        }\n        // search horizontally/vertically\n        else {\n            if(dx === 0) {\n                if (grid.isWalkableAt(x, y + dy)) {\n                    neighbors.push([x, y + dy]);\n                }\n                if (!grid.isWalkableAt(x + 1, y)) {\n                    neighbors.push([x + 1, y + dy]);\n                }\n                if (!grid.isWalkableAt(x - 1, y)) {\n                    neighbors.push([x - 1, y + dy]);\n                }\n            }\n            else {\n                if (grid.isWalkableAt(x + dx, y)) {\n                    neighbors.push([x + dx, y]);\n                }\n                if (!grid.isWalkableAt(x, y + 1)) {\n                    neighbors.push([x + dx, y + 1]);\n                }\n                if (!grid.isWalkableAt(x, y - 1)) {\n                    neighbors.push([x + dx, y - 1]);\n                }\n            }\n        }\n    }\n    // return all neighbors\n    else {\n        neighborNodes = grid.getNeighbors(node, DiagonalMovement.Always);\n        for (i = 0, l = neighborNodes.length; i < l; ++i) {\n            neighborNode = neighborNodes[i];\n            neighbors.push([neighborNode.x, neighborNode.y]);\n        }\n    }\n\n    return neighbors;\n};\n\nmodule.exports = JPFAlwaysMoveDiagonally;\n"
  },
  {
    "path": "src/finders/JPFMoveDiagonallyIfAtMostOneObstacle.js",
    "content": "/**\n * @author imor / https://github.com/imor\n */\nvar JumpPointFinderBase = require('./JumpPointFinderBase');\nvar DiagonalMovement = require('../core/DiagonalMovement');\n\n/**\n * Path finder using the Jump Point Search algorithm which moves\n * diagonally only when there is at most one obstacle.\n */\nfunction JPFMoveDiagonallyIfAtMostOneObstacle(opt) {\n    JumpPointFinderBase.call(this, opt);\n}\n\nJPFMoveDiagonallyIfAtMostOneObstacle.prototype = new JumpPointFinderBase();\nJPFMoveDiagonallyIfAtMostOneObstacle.prototype.constructor = JPFMoveDiagonallyIfAtMostOneObstacle;\n\n/**\n * Search recursively in the direction (parent -> child), stopping only when a\n * jump point is found.\n * @protected\n * @return {Array<Array<number>>} The x, y coordinate of the jump point\n *     found, or null if not found\n */\nJPFMoveDiagonallyIfAtMostOneObstacle.prototype._jump = function(x, y, px, py) {\n    var grid = this.grid,\n        dx = x - px, dy = y - py;\n\n    if (!grid.isWalkableAt(x, y)) {\n        return null;\n    }\n\n    if(this.trackJumpRecursion === true) {\n        grid.getNodeAt(x, y).tested = true;\n    }\n\n    if (grid.getNodeAt(x, y) === this.endNode) {\n        return [x, y];\n    }\n\n    // check for forced neighbors\n    // along the diagonal\n    if (dx !== 0 && dy !== 0) {\n        if ((grid.isWalkableAt(x - dx, y + dy) && !grid.isWalkableAt(x - dx, y)) ||\n            (grid.isWalkableAt(x + dx, y - dy) && !grid.isWalkableAt(x, y - dy))) {\n            return [x, y];\n        }\n        // when moving diagonally, must check for vertical/horizontal jump points\n        if (this._jump(x + dx, y, x, y) || this._jump(x, y + dy, x, y)) {\n            return [x, y];\n        }\n    }\n    // horizontally/vertically\n    else {\n        if( dx !== 0 ) { // moving along x\n            if((grid.isWalkableAt(x + dx, y + 1) && !grid.isWalkableAt(x, y + 1)) ||\n               (grid.isWalkableAt(x + dx, y - 1) && !grid.isWalkableAt(x, y - 1))) {\n                return [x, y];\n            }\n        }\n        else {\n            if((grid.isWalkableAt(x + 1, y + dy) && !grid.isWalkableAt(x + 1, y)) ||\n               (grid.isWalkableAt(x - 1, y + dy) && !grid.isWalkableAt(x - 1, y))) {\n                return [x, y];\n            }\n        }\n    }\n\n    // moving diagonally, must make sure one of the vertical/horizontal\n    // neighbors is open to allow the path\n    if (grid.isWalkableAt(x + dx, y) || grid.isWalkableAt(x, y + dy)) {\n        return this._jump(x + dx, y + dy, x, y);\n    } else {\n        return null;\n    }\n};\n\n/**\n * Find the neighbors for the given node. If the node has a parent,\n * prune the neighbors based on the jump point search algorithm, otherwise\n * return all available neighbors.\n * @return {Array<Array<number>>} The neighbors found.\n */\nJPFMoveDiagonallyIfAtMostOneObstacle.prototype._findNeighbors = function(node) {\n    var parent = node.parent,\n        x = node.x, y = node.y,\n        grid = this.grid,\n        px, py, nx, ny, dx, dy,\n        neighbors = [], neighborNodes, neighborNode, i, l;\n\n    // directed pruning: can ignore most neighbors, unless forced.\n    if (parent) {\n        px = parent.x;\n        py = parent.y;\n        // get the normalized direction of travel\n        dx = (x - px) / Math.max(Math.abs(x - px), 1);\n        dy = (y - py) / Math.max(Math.abs(y - py), 1);\n\n        // search diagonally\n        if (dx !== 0 && dy !== 0) {\n            if (grid.isWalkableAt(x, y + dy)) {\n                neighbors.push([x, y + dy]);\n            }\n            if (grid.isWalkableAt(x + dx, y)) {\n                neighbors.push([x + dx, y]);\n            }\n            if (grid.isWalkableAt(x, y + dy) || grid.isWalkableAt(x + dx, y)) {\n                neighbors.push([x + dx, y + dy]);\n            }\n            if (!grid.isWalkableAt(x - dx, y) && grid.isWalkableAt(x, y + dy)) {\n                neighbors.push([x - dx, y + dy]);\n            }\n            if (!grid.isWalkableAt(x, y - dy) && grid.isWalkableAt(x + dx, y)) {\n                neighbors.push([x + dx, y - dy]);\n            }\n        }\n        // search horizontally/vertically\n        else {\n            if(dx === 0) {\n                if (grid.isWalkableAt(x, y + dy)) {\n                    neighbors.push([x, y + dy]);\n                    if (!grid.isWalkableAt(x + 1, y)) {\n                        neighbors.push([x + 1, y + dy]);\n                    }\n                    if (!grid.isWalkableAt(x - 1, y)) {\n                        neighbors.push([x - 1, y + dy]);\n                    }\n                }\n            }\n            else {\n                if (grid.isWalkableAt(x + dx, y)) {\n                    neighbors.push([x + dx, y]);\n                    if (!grid.isWalkableAt(x, y + 1)) {\n                        neighbors.push([x + dx, y + 1]);\n                    }\n                    if (!grid.isWalkableAt(x, y - 1)) {\n                        neighbors.push([x + dx, y - 1]);\n                    }\n                }\n            }\n        }\n    }\n    // return all neighbors\n    else {\n        neighborNodes = grid.getNeighbors(node, DiagonalMovement.IfAtMostOneObstacle);\n        for (i = 0, l = neighborNodes.length; i < l; ++i) {\n            neighborNode = neighborNodes[i];\n            neighbors.push([neighborNode.x, neighborNode.y]);\n        }\n    }\n\n    return neighbors;\n};\n\nmodule.exports = JPFMoveDiagonallyIfAtMostOneObstacle;\n"
  },
  {
    "path": "src/finders/JPFMoveDiagonallyIfNoObstacles.js",
    "content": "/**\n * @author imor / https://github.com/imor\n */\nvar JumpPointFinderBase = require('./JumpPointFinderBase');\nvar DiagonalMovement = require('../core/DiagonalMovement');\n\n/**\n * Path finder using the Jump Point Search algorithm which moves\n * diagonally only when there are no obstacles.\n */\nfunction JPFMoveDiagonallyIfNoObstacles(opt) {\n    JumpPointFinderBase.call(this, opt);\n}\n\nJPFMoveDiagonallyIfNoObstacles.prototype = new JumpPointFinderBase();\nJPFMoveDiagonallyIfNoObstacles.prototype.constructor = JPFMoveDiagonallyIfNoObstacles;\n\n/**\n * Search recursively in the direction (parent -> child), stopping only when a\n * jump point is found.\n * @protected\n * @return {Array<Array<number>>} The x, y coordinate of the jump point\n *     found, or null if not found\n */\nJPFMoveDiagonallyIfNoObstacles.prototype._jump = function(x, y, px, py) {\n    var grid = this.grid,\n        dx = x - px, dy = y - py;\n\n    if (!grid.isWalkableAt(x, y)) {\n        return null;\n    }\n\n    if(this.trackJumpRecursion === true) {\n        grid.getNodeAt(x, y).tested = true;\n    }\n\n    if (grid.getNodeAt(x, y) === this.endNode) {\n        return [x, y];\n    }\n\n    // check for forced neighbors\n    // along the diagonal\n    if (dx !== 0 && dy !== 0) {\n        // if ((grid.isWalkableAt(x - dx, y + dy) && !grid.isWalkableAt(x - dx, y)) ||\n            // (grid.isWalkableAt(x + dx, y - dy) && !grid.isWalkableAt(x, y - dy))) {\n            // return [x, y];\n        // }\n        // when moving diagonally, must check for vertical/horizontal jump points\n        if (this._jump(x + dx, y, x, y) || this._jump(x, y + dy, x, y)) {\n            return [x, y];\n        }\n    }\n    // horizontally/vertically\n    else {\n        if (dx !== 0) {\n            if ((grid.isWalkableAt(x, y - 1) && !grid.isWalkableAt(x - dx, y - 1)) ||\n                (grid.isWalkableAt(x, y + 1) && !grid.isWalkableAt(x - dx, y + 1))) {\n                return [x, y];\n            }\n        }\n        else if (dy !== 0) {\n            if ((grid.isWalkableAt(x - 1, y) && !grid.isWalkableAt(x - 1, y - dy)) ||\n                (grid.isWalkableAt(x + 1, y) && !grid.isWalkableAt(x + 1, y - dy))) {\n                return [x, y];\n            }\n            // When moving vertically, must check for horizontal jump points\n            // if (this._jump(x + 1, y, x, y) || this._jump(x - 1, y, x, y)) {\n                // return [x, y];\n            // }\n        }\n    }\n\n    // moving diagonally, must make sure one of the vertical/horizontal\n    // neighbors is open to allow the path\n    if (grid.isWalkableAt(x + dx, y) && grid.isWalkableAt(x, y + dy)) {\n        return this._jump(x + dx, y + dy, x, y);\n    } else {\n        return null;\n    }\n};\n\n/**\n * Find the neighbors for the given node. If the node has a parent,\n * prune the neighbors based on the jump point search algorithm, otherwise\n * return all available neighbors.\n * @return {Array<Array<number>>} The neighbors found.\n */\nJPFMoveDiagonallyIfNoObstacles.prototype._findNeighbors = function(node) {\n    var parent = node.parent,\n        x = node.x, y = node.y,\n        grid = this.grid,\n        px, py, nx, ny, dx, dy,\n        neighbors = [], neighborNodes, neighborNode, i, l;\n\n    // directed pruning: can ignore most neighbors, unless forced.\n    if (parent) {\n        px = parent.x;\n        py = parent.y;\n        // get the normalized direction of travel\n        dx = (x - px) / Math.max(Math.abs(x - px), 1);\n        dy = (y - py) / Math.max(Math.abs(y - py), 1);\n\n        // search diagonally\n        if (dx !== 0 && dy !== 0) {\n            if (grid.isWalkableAt(x, y + dy)) {\n                neighbors.push([x, y + dy]);\n            }\n            if (grid.isWalkableAt(x + dx, y)) {\n                neighbors.push([x + dx, y]);\n            }\n            if (grid.isWalkableAt(x, y + dy) && grid.isWalkableAt(x + dx, y)) {\n                neighbors.push([x + dx, y + dy]);\n            }\n        }\n        // search horizontally/vertically\n        else {\n            var isNextWalkable;\n            if (dx !== 0) {\n                isNextWalkable = grid.isWalkableAt(x + dx, y);\n                var isTopWalkable = grid.isWalkableAt(x, y + 1);\n                var isBottomWalkable = grid.isWalkableAt(x, y - 1);\n\n                if (isNextWalkable) {\n                    neighbors.push([x + dx, y]);\n                    if (isTopWalkable) {\n                        neighbors.push([x + dx, y + 1]);\n                    }\n                    if (isBottomWalkable) {\n                        neighbors.push([x + dx, y - 1]);\n                    }\n                }\n                if (isTopWalkable) {\n                    neighbors.push([x, y + 1]);\n                }\n                if (isBottomWalkable) {\n                    neighbors.push([x, y - 1]);\n                }\n            }\n            else if (dy !== 0) {\n                isNextWalkable = grid.isWalkableAt(x, y + dy);\n                var isRightWalkable = grid.isWalkableAt(x + 1, y);\n                var isLeftWalkable = grid.isWalkableAt(x - 1, y);\n\n                if (isNextWalkable) {\n                    neighbors.push([x, y + dy]);\n                    if (isRightWalkable) {\n                        neighbors.push([x + 1, y + dy]);\n                    }\n                    if (isLeftWalkable) {\n                        neighbors.push([x - 1, y + dy]);\n                    }\n                }\n                if (isRightWalkable) {\n                    neighbors.push([x + 1, y]);\n                }\n                if (isLeftWalkable) {\n                    neighbors.push([x - 1, y]);\n                }\n            }\n        }\n    }\n    // return all neighbors\n    else {\n        neighborNodes = grid.getNeighbors(node, DiagonalMovement.OnlyWhenNoObstacles);\n        for (i = 0, l = neighborNodes.length; i < l; ++i) {\n            neighborNode = neighborNodes[i];\n            neighbors.push([neighborNode.x, neighborNode.y]);\n        }\n    }\n\n    return neighbors;\n};\n\nmodule.exports = JPFMoveDiagonallyIfNoObstacles;\n"
  },
  {
    "path": "src/finders/JPFNeverMoveDiagonally.js",
    "content": "/**\n * @author imor / https://github.com/imor\n */\nvar JumpPointFinderBase = require('./JumpPointFinderBase');\nvar DiagonalMovement = require('../core/DiagonalMovement');\n\n/**\n * Path finder using the Jump Point Search algorithm allowing only horizontal\n * or vertical movements.\n */\nfunction JPFNeverMoveDiagonally(opt) {\n    JumpPointFinderBase.call(this, opt);\n}\n\nJPFNeverMoveDiagonally.prototype = new JumpPointFinderBase();\nJPFNeverMoveDiagonally.prototype.constructor = JPFNeverMoveDiagonally;\n\n/**\n * Search recursively in the direction (parent -> child), stopping only when a\n * jump point is found.\n * @protected\n * @return {Array<Array<number>>} The x, y coordinate of the jump point\n *     found, or null if not found\n */\nJPFNeverMoveDiagonally.prototype._jump = function(x, y, px, py) {\n    var grid = this.grid,\n        dx = x - px, dy = y - py;\n\n    if (!grid.isWalkableAt(x, y)) {\n        return null;\n    }\n\n    if(this.trackJumpRecursion === true) {\n        grid.getNodeAt(x, y).tested = true;\n    }\n\n    if (grid.getNodeAt(x, y) === this.endNode) {\n        return [x, y];\n    }\n\n    if (dx !== 0) {\n        if ((grid.isWalkableAt(x, y - 1) && !grid.isWalkableAt(x - dx, y - 1)) ||\n            (grid.isWalkableAt(x, y + 1) && !grid.isWalkableAt(x - dx, y + 1))) {\n            return [x, y];\n        }\n    }\n    else if (dy !== 0) {\n        if ((grid.isWalkableAt(x - 1, y) && !grid.isWalkableAt(x - 1, y - dy)) ||\n            (grid.isWalkableAt(x + 1, y) && !grid.isWalkableAt(x + 1, y - dy))) {\n            return [x, y];\n        }\n        //When moving vertically, must check for horizontal jump points\n        if (this._jump(x + 1, y, x, y) || this._jump(x - 1, y, x, y)) {\n            return [x, y];\n        }\n    }\n    else {\n        throw new Error(\"Only horizontal and vertical movements are allowed\");\n    }\n\n    return this._jump(x + dx, y + dy, x, y);\n};\n\n/**\n * Find the neighbors for the given node. If the node has a parent,\n * prune the neighbors based on the jump point search algorithm, otherwise\n * return all available neighbors.\n * @return {Array<Array<number>>} The neighbors found.\n */\nJPFNeverMoveDiagonally.prototype._findNeighbors = function(node) {\n    var parent = node.parent,\n        x = node.x, y = node.y,\n        grid = this.grid,\n        px, py, nx, ny, dx, dy,\n        neighbors = [], neighborNodes, neighborNode, i, l;\n\n    // directed pruning: can ignore most neighbors, unless forced.\n    if (parent) {\n        px = parent.x;\n        py = parent.y;\n        // get the normalized direction of travel\n        dx = (x - px) / Math.max(Math.abs(x - px), 1);\n        dy = (y - py) / Math.max(Math.abs(y - py), 1);\n\n        if (dx !== 0) {\n            if (grid.isWalkableAt(x, y - 1)) {\n                neighbors.push([x, y - 1]);\n            }\n            if (grid.isWalkableAt(x, y + 1)) {\n                neighbors.push([x, y + 1]);\n            }\n            if (grid.isWalkableAt(x + dx, y)) {\n                neighbors.push([x + dx, y]);\n            }\n        }\n        else if (dy !== 0) {\n            if (grid.isWalkableAt(x - 1, y)) {\n                neighbors.push([x - 1, y]);\n            }\n            if (grid.isWalkableAt(x + 1, y)) {\n                neighbors.push([x + 1, y]);\n            }\n            if (grid.isWalkableAt(x, y + dy)) {\n                neighbors.push([x, y + dy]);\n            }\n        }\n    }\n    // return all neighbors\n    else {\n        neighborNodes = grid.getNeighbors(node, DiagonalMovement.Never);\n        for (i = 0, l = neighborNodes.length; i < l; ++i) {\n            neighborNode = neighborNodes[i];\n            neighbors.push([neighborNode.x, neighborNode.y]);\n        }\n    }\n\n    return neighbors;\n};\n\nmodule.exports = JPFNeverMoveDiagonally;\n"
  },
  {
    "path": "src/finders/JumpPointFinder.js",
    "content": "/**\n * @author aniero / https://github.com/aniero\n */\nvar DiagonalMovement = require('../core/DiagonalMovement');\nvar JPFNeverMoveDiagonally = require('./JPFNeverMoveDiagonally');\nvar JPFAlwaysMoveDiagonally = require('./JPFAlwaysMoveDiagonally');\nvar JPFMoveDiagonallyIfNoObstacles = require('./JPFMoveDiagonallyIfNoObstacles');\nvar JPFMoveDiagonallyIfAtMostOneObstacle = require('./JPFMoveDiagonallyIfAtMostOneObstacle');\n\n/**\n * Path finder using the Jump Point Search algorithm\n * @param {Object} opt\n * @param {function} opt.heuristic Heuristic function to estimate the distance\n *     (defaults to manhattan).\n * @param {DiagonalMovement} opt.diagonalMovement Condition under which diagonal\n *      movement will be allowed.\n */\nfunction JumpPointFinder(opt) {\n    opt = opt || {};\n    if (opt.diagonalMovement === DiagonalMovement.Never) {\n        return new JPFNeverMoveDiagonally(opt);\n    } else if (opt.diagonalMovement === DiagonalMovement.Always) {\n        return new JPFAlwaysMoveDiagonally(opt);\n    } else if (opt.diagonalMovement === DiagonalMovement.OnlyWhenNoObstacles) {\n        return new JPFMoveDiagonallyIfNoObstacles(opt);\n    } else {\n        return new JPFMoveDiagonallyIfAtMostOneObstacle(opt);\n    }\n}\n\nmodule.exports = JumpPointFinder;\n"
  },
  {
    "path": "src/finders/JumpPointFinderBase.js",
    "content": "/**\n * @author imor / https://github.com/imor\n */\nvar Heap       = require('heap');\nvar Util       = require('../core/Util');\nvar Heuristic  = require('../core/Heuristic');\nvar DiagonalMovement = require('../core/DiagonalMovement');\n\n/**\n * Base class for the Jump Point Search algorithm\n * @param {object} opt\n * @param {function} opt.heuristic Heuristic function to estimate the distance\n *     (defaults to manhattan).\n */\nfunction JumpPointFinderBase(opt) {\n    opt = opt || {};\n    this.heuristic = opt.heuristic || Heuristic.manhattan;\n    this.trackJumpRecursion = opt.trackJumpRecursion || false;\n}\n\n/**\n * Find and return the path.\n * @return {Array<Array<number>>} The path, including both start and\n *     end positions.\n */\nJumpPointFinderBase.prototype.findPath = function(startX, startY, endX, endY, grid) {\n    var openList = this.openList = new Heap(function(nodeA, nodeB) {\n            return nodeA.f - nodeB.f;\n        }),\n        startNode = this.startNode = grid.getNodeAt(startX, startY),\n        endNode = this.endNode = grid.getNodeAt(endX, endY), node;\n\n    this.grid = grid;\n\n\n    // set the `g` and `f` value of the start node to be 0\n    startNode.g = 0;\n    startNode.f = 0;\n\n    // push the start node into the open list\n    openList.push(startNode);\n    startNode.opened = true;\n\n    // while the open list is not empty\n    while (!openList.empty()) {\n        // pop the position of node which has the minimum `f` value.\n        node = openList.pop();\n        node.closed = true;\n\n        if (node === endNode) {\n            return Util.expandPath(Util.backtrace(endNode));\n        }\n\n        this._identifySuccessors(node);\n    }\n\n    // fail to find the path\n    return [];\n};\n\n/**\n * Identify successors for the given node. Runs a jump point search in the\n * direction of each available neighbor, adding any points found to the open\n * list.\n * @protected\n */\nJumpPointFinderBase.prototype._identifySuccessors = function(node) {\n    var grid = this.grid,\n        heuristic = this.heuristic,\n        openList = this.openList,\n        endX = this.endNode.x,\n        endY = this.endNode.y,\n        neighbors, neighbor,\n        jumpPoint, i, l,\n        x = node.x, y = node.y,\n        jx, jy, dx, dy, d, ng, jumpNode,\n        abs = Math.abs, max = Math.max;\n\n    neighbors = this._findNeighbors(node);\n    for(i = 0, l = neighbors.length; i < l; ++i) {\n        neighbor = neighbors[i];\n        jumpPoint = this._jump(neighbor[0], neighbor[1], x, y);\n        if (jumpPoint) {\n\n            jx = jumpPoint[0];\n            jy = jumpPoint[1];\n            jumpNode = grid.getNodeAt(jx, jy);\n\n            if (jumpNode.closed) {\n                continue;\n            }\n\n            // include distance, as parent may not be immediately adjacent:\n            d = Heuristic.octile(abs(jx - x), abs(jy - y));\n            ng = node.g + d; // next `g` value\n\n            if (!jumpNode.opened || ng < jumpNode.g) {\n                jumpNode.g = ng;\n                jumpNode.h = jumpNode.h || heuristic(abs(jx - endX), abs(jy - endY));\n                jumpNode.f = jumpNode.g + jumpNode.h;\n                jumpNode.parent = node;\n\n                if (!jumpNode.opened) {\n                    openList.push(jumpNode);\n                    jumpNode.opened = true;\n                } else {\n                    openList.updateItem(jumpNode);\n                }\n            }\n        }\n    }\n};\n\nmodule.exports = JumpPointFinderBase;\n"
  },
  {
    "path": "test/Grid.js",
    "content": "var PF = require('..');\nvar Grid = PF.Grid;\nvar DiagonalMovement = PF.DiagonalMovement;\n\ndescribe('Grid', function() {\n    describe('generate without matrix', function() {\n        var width, height, grid;\n\n        beforeEach(function() {\n            width = 10;\n            height = 20;\n            grid = new Grid(width, height);\n        });\n\n        it('should have correct size', function() {\n            grid.width.should.equal(width);\n            grid.height.should.equal(height);\n\n            grid.nodes.length.should.equal(height);\n            for (var i = 0; i < height; ++i) {\n                grid.nodes[i].length.should.equal(width); \n            }\n        });\n\n        it('should set all nodes\\' walkable attribute', function() {\n            for (var i = 0; i < height; ++i) {\n                for (var j = 0; j < width; ++j) {\n                    grid.isWalkableAt(j, i).should.be.true;\n                }\n            }\n        });\n    });\n\n    describe('generate with matrix', function() {\n        var matrix, grid, width, height;\n\n        var enumPos = function(f, o) {\n            for (var y = 0; y < height; ++y) {\n                for (var x = 0; x < width; ++x) {\n                    if (o) {\n                        f.call(o, x, y, grid);\n                    } else {\n                        f(x, y, grid);\n                    }\n                }\n            }\n        };\n\n        beforeEach(function() {\n            matrix = [\n                [1, 0, 0, 1],\n                [0, 1, 0, 0],\n                [0, 1, 0, 0],\n                [0, 0, 0, 0],\n                [1, 0, 0, 1],\n            ];\n            height = matrix.length;\n            width = matrix[0].length;\n            grid = new Grid(width, height, matrix);\n        });\n\n        it('should have correct size', function() {\n            grid.width.should.equal(width);\n            grid.height.should.equal(height);\n\n            grid.nodes.length.should.equal(height);\n            for (var i = 0; i < height; ++i) {\n                grid.nodes[i].length.should.equal(width); \n            }\n        });\n\n        it('should initiate all nodes\\' walkable attribute', function() {\n            enumPos(function(x, y, g) {\n                if (matrix[y][x]) {\n                    g.isWalkableAt(x, y).should.be.false;\n                } else {\n                    g.isWalkableAt(x, y).should.be.true;\n                }\n            });\n        });\n\n        it('should be able to set nodes\\' walkable attribute', function() {\n            enumPos(function(x, y) {\n                grid.setWalkableAt(x, y, false); \n            });\n            enumPos(function(x, y) {\n                grid.isWalkableAt(x, y).should.be.false;\n            })\n            enumPos(function(x, y) {\n                grid.setWalkableAt(x, y, true); \n            });\n            enumPos(function(x, y) {\n                grid.isWalkableAt(x, y).should.be.true;\n            })\n        });\n\n        it('should return correct answer for position validity query', function() {\n            var asserts = [\n                [0, 0, true],\n                [0, height - 1, true],\n                [width - 1, 0, true],\n                [width - 1, height - 1, true],\n                [-1, -1, false],\n                [0, -1, false],\n                [-1, 0, false],\n                [0, height, false],\n                [width, 0, false],\n                [width, height, false],\n            ];\n\n            asserts.forEach(function(v, i, a) {\n                grid.isInside(v[0], v[1]).should.equal(v[2]);\n            });\n        });\n\n        it('should return correct neighbors', function() {\n            grid.getNeighbors(grid.nodes[1][0], DiagonalMovement.Never).should.eql([ grid.nodes[2][0] ]);\n            var cmp = function(a, b) {\n                return a.x * 100 + a.y - b.x * 100 - b.y;\n            };\n            grid.getNeighbors(grid.nodes[0][2], DiagonalMovement.IfAtMostOneObstacle).sort(cmp).should.eql([\n                grid.nodes[0][1], grid.nodes[1][2], grid.nodes[1][3]\n            ].sort(cmp))\n        });\n    });\n\n    describe('generate with matrix and no width or height', function() {\n        var matrix, grid;\n\n        beforeEach(function() {\n            matrix = [\n                [1, 0, 0, 1],\n                [0, 1, 0, 0],\n                [0, 1, 0, 0],\n                [0, 0, 0, 0],\n                [1, 0, 0, 1],\n            ];\n\n            grid = new Grid(matrix);\n        });\n\n        it('should have correct size', function() {\n            var height = matrix.length;\n            var width = matrix[0].length;\n\n            grid.width.should.equal(width);\n            grid.height.should.equal(height);\n\n            grid.nodes.length.should.equal(height);\n            for (var i = 0; i < height; ++i) {\n                grid.nodes[i].length.should.equal(width);\n            }\n        });\n    });\n});\n"
  },
  {
    "path": "test/PathTest.js",
    "content": "var PF        = require('..')\nvar scenarios = require('./PathTestScenarios');\n\n/**\n * Path-finding tests for the path-finders.\n * @param {boolean} opt.optimal - Whether the finder is guaranteed to find the shortest path\n */\nfunction pathTest(opt) {\n    var name = opt.name,\n        finder = opt.finder,\n        optimal = opt.optimal;\n\n    describe(name, function() {\n        var startX, startY, endX, endY, grid, expectedLength,\n            width, height, matrix, path, i, scen;\n\n        var test = (function() {\n            var testId = 0;\n\n            return function(startX, startY, endX, endY, grid, expectedLength) {\n                it('should solve maze '+ ++testId, function() {\n                    path = finder.findPath(startX, startY, endX, endY, grid);\n                    if (optimal) {\n                        path.length.should.equal(expectedLength);\n                    } else {\n                        path[0].should.eql([startX, startY]);\n                        path[path.length - 1].should.eql([endX, endY]);\n                    }\n                });\n            };\n        })();\n\n        // Load all the scenarios and test against the finder.\n        for (i = 0; i < scenarios.length; ++i) {\n            scen = scenarios[i];\n\n            matrix = scen.matrix;\n            height = matrix.length;\n            width = matrix[0].length;\n\n            grid = new PF.Grid(width, height, matrix);\n\n            test(\n                scen.startX, scen.startY, \n                scen.endX, scen.endY, \n                grid, \n                scen.expectedLength\n            );\n        }\n    });\n}\n\nfunction pathTests(tests) {\n    for (i = 0; i < arguments.length; ++i) {\n        pathTest(arguments[i]);\n    }\n}\n\n\n// finders guaranteed to find the shortest path\npathTests({\n    name: 'AStar',\n    finder: new PF.AStarFinder(),\n    optimal: true\n}, {\n    name: 'BreadthFirst',\n    finder: new PF.BreadthFirstFinder(),\n    optimal: true\n}, {\n    name: 'Dijkstra',\n    finder: new PF.DijkstraFinder(),\n    optimal: true\n}, {\n    name: 'BiBreadthFirst',\n    finder: new PF.BiBreadthFirstFinder(),\n    optimal: true\n}, {\n    name: 'BiDijkstra',\n    finder: new PF.BiDijkstraFinder(),\n    optimal: true\n});\n\n// finders NOT guaranteed to find the shortest path\npathTests({\n    name: 'BiAStar',\n    finder: new PF.BiAStarFinder(),\n    optimal: false\n}, {\n    name: 'BestFirst',\n    finder: new PF.BestFirstFinder(),\n    optimal: false\n}, {\n    name: 'BiBestFirst',\n    finder: new PF.BiBestFirstFinder(),\n    optimal: false\n}, {\n    name: 'IDAStar',\n    finder: new PF.IDAStarFinder(),\n    optimal: false\n}, {\n    name: 'JPFMoveDiagonallyIfAtMostOneObstacle',\n    finder: new PF.JumpPointFinder({\n      diagonalMovement: PF.DiagonalMovement.IfAtMostOneObstacle\n    }),\n    optimal: false\n},  {\n    name: 'JPFNeverMoveDiagonally',\n    finder: new PF.JumpPointFinder({\n      diagonalMovement: PF.DiagonalMovement.Never\n    }),\n    optimal: false\n});\n"
  },
  {
    "path": "test/PathTestScenarios.js",
    "content": "module.exports = [\n    {\n        startX: 0,\n        startY: 0,\n        endX: 1,\n        endY: 1,\n        matrix: [[0, 0],\n                 [1, 0]],\n        expectedLength: 3,\n    },\n    {\n        startX: 1,\n        startY: 1,\n        endX: 4,\n        endY: 4,\n        matrix: [[0, 0, 0, 0, 0],\n                 [1, 0, 1, 1, 0],\n                 [1, 0, 1, 0, 0],\n                 [0, 1, 0, 0, 0],\n                 [1, 0, 1, 1, 0],\n                 [0, 0, 1, 0, 0]],\n        expectedLength: 9,\n    },\n    {\n        startX: 0,\n        startY: 3,\n        endX: 3,\n        endY: 3,\n        matrix: [[0, 0, 0, 0, 0],\n                 [0, 0, 1, 1, 0],\n                 [0, 0, 1, 0, 0],\n                 [0, 0, 1, 0, 0],\n                 [1, 0, 1, 1, 0],\n                 [0, 0, 0, 0, 0]],\n        expectedLength: 10,\n    },\n    {\n        startX: 4,\n        startY: 4,\n        endX: 19,\n        endY: 19,\n        matrix: [[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n                 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n                 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n                 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n                 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n                 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n                 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n                 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n                 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n                 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n                 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n                 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n                 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n                 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n                 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n                 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n                 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n                 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n                 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n                 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]],\n        expectedLength: 31,\n    },\n];\n"
  },
  {
    "path": "test/Util.js",
    "content": "var PF = require('..');\n\ndescribe('Utility functions', function () {\n    describe('interpolate', function () {\n        it('should return the interpolated path', function () {\n            PF.Util.interpolate(0, 1, 0, 4).should.eql([\n                [0, 1], [0, 2], [0, 3], [0, 4]\n            ]);\n        });\n    });\n\n    describe('expandPath', function () {\n        it('should return an empty array given an empty array', function () {\n            PF.Util.expandPath([]).should.eql([]);\n        });\n\n        it('should return the expanded path', function () {\n            PF.Util.expandPath([\n                [0, 1], [0, 4]\n            ]).should.eql([\n                [0, 1], [0, 2], [0, 3], [0, 4]\n            ]);\n\n            PF.Util.expandPath([\n                [0, 1], [0, 4], [2, 6]\n            ]).should.eql([\n                [0, 1], [0, 2], [0, 3], [0, 4], [1, 5], [2, 6]\n            ]);\n        });\n    });\n\n    describe('compressPath', function () {\n        it('should return the original path if it is too short to compress', function () {\n            PF.Util.compressPath([]).should.eql([]);\n        });\n\n        it('should return a compressed path', function () {\n            PF.Util.compressPath([\n                [0, 1], [0, 2], [0, 3], [0, 4]\n            ]).should.eql([\n                [0, 1], [0, 4]\n            ]);\n\n            PF.Util.compressPath([\n                [0, 1], [0, 2], [0, 3], [0, 4], [1, 5], [2, 6]\n            ]).should.eql([\n                [0, 1], [0, 4], [2, 6]\n            ]);\n        });\n    });\n\n});\n"
  },
  {
    "path": "visual/Makefile",
    "content": "\ndoc: doc/state-diagram.gv\n\tdot -Tpng -odoc/state-diagram.png doc/state-diagram.gv\n\n.PHONY: doc\n"
  },
  {
    "path": "visual/css/style.css",
    "content": "body {\n    padding: 0px;\n    margin: 0px;\n    overflow: hidden;\n}\n\ninput {\n    cursor: pointer;\n}\n\nh1, h2, h3, h4, h5, h6 {\n    margin: 0px;\n    padding: 0px;\n    font-weight: normal;\n}\n\n.header_title {\n    font-size: 120%;\n    font-weight: bold;\n    padding-bottom: 5px;\n    margin-top: -10px;\n}\n\n\n.panel {\n    position: fixed;\n    padding: 20px;\n    background-color: rgba(0, 0, 0, 0.6);\n    color: #fff;\n    border-radius: 8px;\n    box-shadow: 5px 5px 10px rgba(0, 0, 0, 0.5);\n    cursor: default;\n}\n\n.right_panel {\n    width: 250px;\n    right: 20px;\n}\n\n#algorithm_panel {\n    right: 20px;\n    top: 20px;\n}\n\n#instructions_panel {\n    top: 20px;\n    left: 20px;\n    width: 550px;\n}\n\n#hide_instructions {\n    position: absolute;\n    right: 25px;\n    top: 10px;\n    font-size: 90%;\n    cursor: pointer;\n}\n\n#hide_instruction:hover {\n    color: #fff;\n    text-decoration: underline;\n}\n\n.option_header {\n    font-size: 80%;\n    margin-left: 20px;\n}\n\n.option_label {\n    cursor: pointer;\n}\n\nbutton {\n    border: none;\n    background: rgba(255, 255, 255, 0.7);\n    border-radius: 5px;\n    font-size: 90%;\n    cursor: pointer;\n    padding: 2px 8px;\n    margin: 0 2%;\n    width: 28%;\n}\n\nbutton:hover {\n    background: rgba(255, 255, 255, 0.9);\n}\n\n.finder_section {\n    border: solid 1px #ddd;\n    border-radius: 5px;\n    margin: 5px;\n}\n\n.sub_options {\n    padding: 2px;\n    font-size: 14px;\n    margin: 2px 30px 0;\n}\n\n#stats {\n    position: fixed;\n    bottom: 40px;\n    left: 35px;\n    color: #0a0;\n    font-size: 85%;\n    padding: 5px;\n    background: rgba(255, 255, 255, 0.5);\n    border-radius: 5px;\n}\n\na {\n    color: #33f;\n}\n\nfooter {\n    color: #333;\n    font-size: 70%;\n    text-align: center;\n    position: fixed;\n    width: 200px;\n    bottom: 10px;\n    left: 50%;\n    margin-left: -100px;\n    background: rgba(255, 255, 255, 0.5);\n    padding: 5px;\n    border-radius: 5px;\n}\n\n.white {\n    color: #fff;\n}\n\n.green {\n    color: #0d0;\n}\n\n.red {\n    color: #ff9166;\n}\n\n.spinner {\n    width: 2em;\n}\n"
  },
  {
    "path": "visual/doc/state-description.md",
    "content": "From [issue 6](https://github.com/qiao/PathFinding.js/issues/6)\n\n#### states and button labels/actions\n\n##### before searching; no colored squares - state B\n- **Start Search** - to N\n- **Pause Search** - button disabled (grayed out)\n\n##### starting a new search - state N\nThis state clears any existing search progress and then immediately goes to state S.\n\n##### during searching - state S\n- **Restart Search** - to N\n- **Pause Search** - to P\n\nwhen search has finished - to F\n\n##### search is paused - state P\n- **Resume Search** - to S\n- **Cancel Search** - to B\n\n##### search has finished - state F\n- **Restart Search** - to N\n- **Clear Path** - to B\n\nselecting a different algorithm or adding or deleting walls - to M\n\n##### after search has finished and user has changed settings - state M\n- **Start Search** - to N\n- **Clear Path** - to B\n"
  },
  {
    "path": "visual/doc/state-diagram.gv",
    "content": "digraph controller_states {\n\trankdir=LR;\n\tsize=\"10,8\"\n\tnode [shape = circle];\n    none       -> before    [ label = \"init\"    ];\n\tbefore     -> starting  [ label = \"start\"   ];\n\tstarting   -> searching [ label = \"search\"  ];\n\tsearching  -> starting  [ label = \"restart\" ];\n\tsearching  -> paused    [ label = \"pause\"   ];\n\tsearching  -> finished  [ label = \"finish\"  ];\n\tpaused     -> searching [ label = \"resume\"  ];\n\tpaused     -> before    [ label = \"cancel\"  ];\n\tfinished   -> starting  [ label = \"restart\" ];\n\tfinished   -> before    [ label = \"clear\"   ];\n\tfinished   -> modified  [ label = \"modify\"  ];\n\tmodified   -> starting  [ label = \"start\"   ];\n\tmodified   -> before    [ label = \"clear\"   ];\n}\n\n"
  },
  {
    "path": "visual/index.html",
    "content": "<!DOCTYPE HTML>\n<html lang=\"en\">\n  <head>\n    <meta charset=\"UTF-8\">\n    <title>PathFinding.js</title>\n\n    <link rel=\"stylesheet\" href=\"./css/style.css\" />\n    <link rel=\"stylesheet\" href=\"./lib/themes/jquery.ui.all.css\" />\n\n    <script type=\"text/javascript\" src=\"./lib/raphael-min.js\"></script>\n    <script type=\"text/javascript\" src=\"./lib/es5-shim.min.js\"></script>\n    <script type=\"text/javascript\" src=\"./lib/jquery-1.7.2.min.js\"></script>\n    <script type=\"text/javascript\" src=\"./lib/state-machine.min.js\"></script>\n    <script type=\"text/javascript\" src=\"./lib/async.min.js\"></script>\n\n    <script type=\"text/javascript\" src=\"./lib/ui/jquery.ui.core.min.js\"></script>\n    <script type=\"text/javascript\" src=\"./lib/ui/jquery.ui.widget.min.js\"></script>\n    <script type=\"text/javascript\" src=\"./lib/ui/jquery.ui.mouse.min.js\"></script>\n    <script type=\"text/javascript\" src=\"./lib/ui/jquery.ui.draggable.min.js\"></script>\n    <script type=\"text/javascript\" src=\"./lib/ui/jquery.ui.accordion.min.js\"></script>\n    <script type=\"text/javascript\" src=\"./lib/ui/jquery.ui.slider.min.js\"></script>\n\n    <script type=\"text/javascript\" src=\"./lib/pathfinding-browser.min.js\"></script>\n\n    <script type=\"text/javascript\" src=\"./js/view.js\"></script>\n    <script type=\"text/javascript\" src=\"./js/controller.js\"></script>\n    <script type=\"text/javascript\" src=\"./js/panel.js\"></script>\n    <script type=\"text/javascript\" src=\"./js/main.js\"></script>\n  </head>\n  <body>\n    <div id=\"draw_area\"></div>\n\n    <div id=\"instructions_panel\" class=\"panel\">\n      <header>\n        <h2 class=\"header_title\">Instructions</h2>\n        <span id=\"hide_instructions\">hide</span>\n      </header>\n      Click within the <span class=\"white\">white</span> grid and drag your mouse to draw obstacles. <br>\n      Drag the <span class=\"green\">green</span> node to set the start position. <br>\n      Drag the <span class=\"red\">red</span> node to set the end position. <br>\n      Choose an algorithm from the right-hand panel. <br>\n      Click Start Search in the lower-right corner to start the animation.\n    </div>\n\n    <div id=\"algorithm_panel\" class=\"panel right_panel\">\n      <header><h2 class=\"header_title\">Select Algorithm</h2></header>\n\n      <div class=\"accordion\">\n        <h3 id=\"astar_header\"><a href=\"#\">A*</a></h3>\n        <div id=\"astar_section\" class=\"finder_section\">\n          <header class=\"option_header\">\n            <h3>Heuristic</h3>\n          </header>\n          <div id=\"astar_heuristic\" class=\"sub_options\">\n            <input type=\"radio\" name=\"astar_heuristic\" value=\"manhattan\" checked />\n            <label class=\"option_label\">Manhattan</label> <br>\n            <input type=\"radio\" name=\"astar_heuristic\" value=\"euclidean\"/>\n            <label class=\"option_label\">Euclidean</label> <br>\n            <input type=\"radio\" name=\"astar_heuristic\" value=\"octile\"/>\n            <label class=\"option_label\">Octile</label> <br>\n            <input type=\"radio\" name=\"astar_heuristic\" value=\"chebyshev\"/>\n            <label class=\"option_label\">Chebyshev</label> <br>\n          </div>\n\n          <header class=\"option_header\">\n            <h3>Options</h3>\n          </header>\n          <div class=\"optional sub_options\">\n            <input type=\"checkbox\" class=\"allow_diagonal\" checked>\n            <label class=\"option_label\">Allow Diagonal</label> <br>\n            <input type=\"checkbox\" class=\"bi-directional\">\n            <label class=\"option_label\">Bi-directional</label> <br>\n            <input type=\"checkbox\" class=\"dont_cross_corners\">\n            <label class=\"option_label\">Don't Cross Corners</label> <br>\n            <input class=\"spinner\" name=\"astar_weight\" value=\"1\">\n            <label class=\"option_label\">Weight</label> <br>\n          </div>\n        </div>\n\n        <h3 id=\"ida_header\"><a href=\"#\">IDA*</a></h3>\n        <div id=\"ida_section\" class=\"finder_section\">\n          <header class=\"option_header\">\n            <h3>Heuristic</h3>\n          </header>\n          <div id=\"ida_heuristic\" class=\"sub_options\">\n            <input type=\"radio\" name=\"ida_heuristic\" value=\"manhattan\" checked />\n            <label class=\"option_label\">Manhattan</label> <br>\n            <input type=\"radio\" name=\"ida_heuristic\" value=\"euclidean\"/>\n            <label class=\"option_label\">Euclidean</label> <br>\n            <input type=\"radio\" name=\"ida_heuristic\" value=\"octile\"/>\n            <label class=\"option_label\">Octile</label> <br>\n            <input type=\"radio\" name=\"ida_heuristic\" value=\"chebyshev\"/>\n            <label class=\"option_label\">Chebyshev</label> <br>\n          </div>\n          <header class=\"option_header\">\n            <h3>Options</h3>\n          </header>\n          <div class=\"optional sub_options\">\n            <input type=\"checkbox\" class=\"allow_diagonal\" checked>\n            <label class=\"option_label\">Allow Diagonal</label> <br>\n            <input type=\"checkbox\" class=\"dont_cross_corners\">\n            <label class=\"option_label\">Don't Cross Corners</label> <br>\n            <input class=\"spinner\" name=\"astar_weight\" value=\"1\">\n            <label class=\"option_label\">Weight</label> <br>\n            <input class=\"spinner\" name=\"time_limit\" value=\"10\">\n            <label class=\"option_label\">Seconds limit</label> <br>\n            <input type=\"checkbox\" class=\"track_recursion\" checked />\n            <label class=\"option_label\">Visualize recursion</label> <br>\n          </div>\n        </div>\n\n        <h3 id=\"breadthfirst_header\"><a href=\"#\">Breadth-First-Search</a></h3>\n        <div id=\"breadthfirst_section\" class=\"finder_section\">\n          <header class=\"option_header\">\n            <h3>Options</h3>\n          </header>\n          <div class=\"optional sub_options\">\n            <input type=\"checkbox\" class=\"allow_diagonal\" checked>\n            <label class=\"option_label\">Allow Diagonal</label> <br>\n            <input type=\"checkbox\" class=\"bi-directional\">\n            <label class=\"option_label\">Bi-directional</label> <br>\n            <input type=\"checkbox\" class=\"dont_cross_corners\">\n            <label class=\"option_label\">Don't Cross Corners</label> <br>\n          </div>\n        </div>\n\n        <h3 id=\"bestfirst_header\"><a href=\"#\">Best-First-Search</a></h3>\n        <div id=\"bestfirst_section\" class=\"finder_section\">\n          <header class=\"option_header\">\n            <h3>Heuristic</h3>\n          </header>\n          <div id=\"bestfirst_heuristic\" class=\"sub_options\">\n            <input type=\"radio\" name=\"bestfirst_heuristic\" value=\"manhattan\" checked />\n            <label class=\"option_label\">Manhattan</label> <br>\n            <input type=\"radio\" name=\"bestfirst_heuristic\" value=\"euclidean\"/>\n            <label class=\"option_label\">Euclidean</label> <br>\n            <input type=\"radio\" name=\"bestfirst_heuristic\" value=\"octile\"/>\n            <label class=\"option_label\">Octile</label> <br>\n            <input type=\"radio\" name=\"bestfirst_heuristic\" value=\"chebyshev\"/>\n            <label class=\"option_label\">Chebyshev</label> <br>\n          </div>\n\n          <header class=\"option_header\">\n            <h3>Options</h3>\n          </header>\n          <div class=\"optional sub_options\">\n            <input type=\"checkbox\" class=\"allow_diagonal\" checked>\n            <label class=\"option_label\">Allow Diagonal</label> <br>\n            <input type=\"checkbox\" class=\"bi-directional\">\n            <label class=\"option_label\">Bi-directional</label> <br>\n            <input type=\"checkbox\" class=\"dont_cross_corners\">\n            <label class=\"option_label\">Don't Cross Corners</label> <br>\n          </div>\n        </div>\n\n        <h3 id=\"dijkstra_header\"><a href=\"#\">Dijkstra</a></h3>\n        <div id=\"dijkstra_section\" class=\"finder_section\">\n          <header class=\"option_header\">\n            <h3>Options</h3>\n          </header>\n          <div class=\"optional sub_options\">\n            <input type=\"checkbox\" class=\"allow_diagonal\" checked>\n            <label class=\"option_label\">Allow Diagonal</label> <br>\n            <input type=\"checkbox\" class=\"bi-directional\">\n            <label class=\"option_label\">Bi-directional</label> <br>\n            <input type=\"checkbox\" class=\"dont_cross_corners\">\n            <label class=\"option_label\">Don't Cross Corners</label> <br>\n          </div>\n        </div>\n\n        <h3 id=\"jump_point_header\"><a href=\"#\">Jump Point Search</a></h3>\n        <div id=\"jump_point_section\" class=\"finder_section\">\n          <header class=\"option_header\">\n            <h3>Heuristic</h3>\n          </header>\n          <div id=\"jump_point_heuristic\" class=\"sub_options\">\n            <input type=\"radio\" name=\"jump_point_heuristic\" value=\"manhattan\" checked />\n            <label class=\"option_label\">Manhattan</label> <br>\n            <input type=\"radio\" name=\"jump_point_heuristic\" value=\"euclidean\"/>\n            <label class=\"option_label\">Euclidean</label> <br>\n            <input type=\"radio\" name=\"jump_point_heuristic\" value=\"octile\"/>\n            <label class=\"option_label\">Octile</label> <br>\n            <input type=\"radio\" name=\"jump_point_heuristic\" value=\"chebyshev\"/>\n            <label class=\"option_label\">Chebyshev</label> <br>\n          </div>\n          <header class=\"option_header\">\n            <h3>Options</h3>\n          </header>\n          <div class=\"optional sub_options\">\n            <input type=\"checkbox\" class=\"track_recursion\" checked>\n            <label class=\"option_label\">Visualize recursion</label> <br>\n          </div>\n        </div>\n\n\t<h3 id=\"orth_jump_point_header\"><a href=\"#\">Orthogonal Jump Point Search</a></h3>\n        <div id=\"orth_jump_point_section\" class=\"finder_section\">\n          <header class=\"option_header\">\n            <h3>Heuristic</h3>\n          </header>\n          <div id=\"orth_jump_point_heuristic\" class=\"sub_options\">\n            <input type=\"radio\" name=\"orth_jump_point_heuristic\" value=\"manhattan\" checked />\n            <label class=\"option_label\">Manhattan</label> <br>\n            <input type=\"radio\" name=\"orth_jump_point_heuristic\" value=\"euclidean\"/>\n            <label class=\"option_label\">Euclidean</label> <br>\n            <input type=\"radio\" name=\"orth_jump_point_heuristic\" value=\"octile\"/>\n            <label class=\"option_label\">Octile</label> <br>\n            <input type=\"radio\" name=\"orth_jump_point_heuristic\" value=\"chebyshev\"/>\n            <label class=\"option_label\">Chebyshev</label> <br>\n          </div>\n          <header class=\"option_header\">\n            <h3>Options</h3>\n          </header>\n          <div class=\"optional sub_options\">\n            <input type=\"checkbox\" class=\"track_recursion\" checked>\n            <label class=\"option_label\">Visualize recursion</label> <br>\n          </div>\n        </div>\n\n      </div><!-- .accordion -->\n    </div><!-- #algorithm_panel -->\n\n    <div id=\"play_panel\" class=\"panel right_panel\">\n      <button id=\"button1\" class=\"control_button\">Start Search</button>\n      <button id=\"button2\" class=\"control_button\">Pause Search</button>\n      <button id=\"button3\" class=\"control_button\">Clear Walls</button>\n    </div>\n\n    <div id=\"stats\"></div>\n\n    <footer>\n      Project Hosted on <a href=\"http://github.com/qiao/PathFinding.js\">Github</a>\n    </footer>\n\n  </body>\n</html>\n"
  },
  {
    "path": "visual/js/controller.js",
    "content": "/**\n * The visualization controller will works as a state machine.\n * See files under the `doc` folder for transition descriptions.\n * See https://github.com/jakesgordon/javascript-state-machine\n * for the document of the StateMachine module.\n */\nvar Controller = StateMachine.create({\n    initial: 'none',\n    events: [\n        {\n            name: 'init',\n            from: 'none',\n            to:   'ready'\n        },\n        {\n            name: 'search',\n            from: 'starting',\n            to:   'searching'\n        },\n        {\n            name: 'pause',\n            from: 'searching',\n            to:   'paused'\n        },\n        {\n            name: 'finish',\n            from: 'searching',\n            to:   'finished'\n        },\n        {\n            name: 'resume',\n            from: 'paused',\n            to:   'searching'\n        },\n        {\n            name: 'cancel',\n            from: 'paused',\n            to:   'ready'\n        },\n        {\n            name: 'modify',\n            from: 'finished',\n            to:   'modified'\n        },\n        {\n            name: 'reset',\n            from: '*',\n            to:   'ready'\n        },\n        {\n            name: 'clear',\n            from: ['finished', 'modified'],\n            to:   'ready'\n        },\n        {\n            name: 'start',\n            from: ['ready', 'modified', 'restarting'],\n            to:   'starting'\n        },\n        {\n            name: 'restart',\n            from: ['searching', 'finished'],\n            to:   'restarting'\n        },\n        {\n            name: 'dragStart',\n            from: ['ready', 'finished'],\n            to:   'draggingStart'\n        },\n        {\n            name: 'dragEnd',\n            from: ['ready', 'finished'],\n            to:   'draggingEnd'\n        },\n        {\n            name: 'drawWall',\n            from: ['ready', 'finished'],\n            to:   'drawingWall'\n        },\n        {\n            name: 'eraseWall',\n            from: ['ready', 'finished'],\n            to:   'erasingWall'\n        },\n        {\n            name: 'rest',\n            from: ['draggingStart', 'draggingEnd', 'drawingWall', 'erasingWall'],\n            to  : 'ready'\n        },\n    ],\n});\n\n$.extend(Controller, {\n    gridSize: [64, 36], // number of nodes horizontally and vertically\n    operationsPerSecond: 300,\n\n    /**\n     * Asynchronous transition from `none` state to `ready` state.\n     */\n    onleavenone: function() {\n        var numCols = this.gridSize[0],\n            numRows = this.gridSize[1];\n\n        this.grid = new PF.Grid(numCols, numRows);\n\n        View.init({\n            numCols: numCols,\n            numRows: numRows\n        });\n        View.generateGrid(function() {\n            Controller.setDefaultStartEndPos();\n            Controller.bindEvents();\n            Controller.transition(); // transit to the next state (ready)\n        });\n\n        this.$buttons = $('.control_button');\n\n        this.hookPathFinding();\n\n        return StateMachine.ASYNC;\n        // => ready\n    },\n    ondrawWall: function(event, from, to, gridX, gridY) {\n        this.setWalkableAt(gridX, gridY, false);\n        // => drawingWall\n    },\n    oneraseWall: function(event, from, to, gridX, gridY) {\n        this.setWalkableAt(gridX, gridY, true);\n        // => erasingWall\n    },\n    onsearch: function(event, from, to) {\n        var grid,\n            timeStart, timeEnd,\n            finder = Panel.getFinder();\n\n        timeStart = window.performance ? performance.now() : Date.now();\n        grid = this.grid.clone();\n        this.path = finder.findPath(\n            this.startX, this.startY, this.endX, this.endY, grid\n        );\n        this.operationCount = this.operations.length;\n        timeEnd = window.performance ? performance.now() : Date.now();\n        this.timeSpent = (timeEnd - timeStart).toFixed(4);\n\n        this.loop();\n        // => searching\n    },\n    onrestart: function() {\n        // When clearing the colorized nodes, there may be\n        // nodes still animating, which is an asynchronous procedure.\n        // Therefore, we have to defer the `abort` routine to make sure\n        // that all the animations are done by the time we clear the colors.\n        // The same reason applies for the `onreset` event handler.\n        setTimeout(function() {\n            Controller.clearOperations();\n            Controller.clearFootprints();\n            Controller.start();\n        }, View.nodeColorizeEffect.duration * 1.2);\n        // => restarting\n    },\n    onpause: function(event, from, to) {\n        // => paused\n    },\n    onresume: function(event, from, to) {\n        this.loop();\n        // => searching\n    },\n    oncancel: function(event, from, to) {\n        this.clearOperations();\n        this.clearFootprints();\n        // => ready\n    },\n    onfinish: function(event, from, to) {\n        View.showStats({\n            pathLength: PF.Util.pathLength(this.path),\n            timeSpent:  this.timeSpent,\n            operationCount: this.operationCount,\n        });\n        View.drawPath(this.path);\n        // => finished\n    },\n    onclear: function(event, from, to) {\n        this.clearOperations();\n        this.clearFootprints();\n        // => ready\n    },\n    onmodify: function(event, from, to) {\n        // => modified\n    },\n    onreset: function(event, from, to) {\n        setTimeout(function() {\n            Controller.clearOperations();\n            Controller.clearAll();\n            Controller.buildNewGrid();\n        }, View.nodeColorizeEffect.duration * 1.2);\n        // => ready\n    },\n\n    /**\n     * The following functions are called on entering states.\n     */\n\n    onready: function() {\n        console.log('=> ready');\n        this.setButtonStates({\n            id: 1,\n            text: 'Start Search',\n            enabled: true,\n            callback: $.proxy(this.start, this),\n        }, {\n            id: 2,\n            text: 'Pause Search',\n            enabled: false,\n        }, {\n            id: 3,\n            text: 'Clear Walls',\n            enabled: true,\n            callback: $.proxy(this.reset, this),\n        });\n        // => [starting, draggingStart, draggingEnd, drawingStart, drawingEnd]\n    },\n    onstarting: function(event, from, to) {\n        console.log('=> starting');\n        // Clears any existing search progress\n        this.clearFootprints();\n        this.setButtonStates({\n            id: 2,\n            enabled: true,\n        });\n        this.search();\n        // => searching\n    },\n    onsearching: function() {\n        console.log('=> searching');\n        this.setButtonStates({\n            id: 1,\n            text: 'Restart Search',\n            enabled: true,\n            callback: $.proxy(this.restart, this),\n        }, {\n            id: 2,\n            text: 'Pause Search',\n            enabled: true,\n            callback: $.proxy(this.pause, this),\n        });\n        // => [paused, finished]\n    },\n    onpaused: function() {\n        console.log('=> paused');\n        this.setButtonStates({\n            id: 1,\n            text: 'Resume Search',\n            enabled: true,\n            callback: $.proxy(this.resume, this),\n        }, {\n            id: 2,\n            text: 'Cancel Search',\n            enabled: true,\n            callback: $.proxy(this.cancel, this),\n        });\n        // => [searching, ready]\n    },\n    onfinished: function() {\n        console.log('=> finished');\n        this.setButtonStates({\n            id: 1,\n            text: 'Restart Search',\n            enabled: true,\n            callback: $.proxy(this.restart, this),\n        }, {\n            id: 2,\n            text: 'Clear Path',\n            enabled: true,\n            callback: $.proxy(this.clear, this),\n        });\n    },\n    onmodified: function() {\n        console.log('=> modified');\n        this.setButtonStates({\n            id: 1,\n            text: 'Start Search',\n            enabled: true,\n            callback: $.proxy(this.start, this),\n        }, {\n            id: 2,\n            text: 'Clear Path',\n            enabled: true,\n            callback: $.proxy(this.clear, this),\n        });\n    },\n\n    /**\n     * Define setters and getters of PF.Node, then we can get the operations\n     * of the pathfinding.\n     */\n    hookPathFinding: function() {\n\n        PF.Node.prototype = {\n            get opened() {\n                return this._opened;\n            },\n            set opened(v) {\n                this._opened = v;\n                Controller.operations.push({\n                    x: this.x,\n                    y: this.y,\n                    attr: 'opened',\n                    value: v\n                });\n            },\n            get closed() {\n                return this._closed;\n            },\n            set closed(v) {\n                this._closed = v;\n                Controller.operations.push({\n                    x: this.x,\n                    y: this.y,\n                    attr: 'closed',\n                    value: v\n                });\n            },\n            get tested() {\n                return this._tested;\n            },\n            set tested(v) {\n                this._tested = v;\n                Controller.operations.push({\n                    x: this.x,\n                    y: this.y,\n                    attr: 'tested',\n                    value: v\n                });\n            },\n        };\n\n        this.operations = [];\n    },\n    bindEvents: function() {\n        $('#draw_area').mousedown($.proxy(this.mousedown, this));\n        $(window)\n            .mousemove($.proxy(this.mousemove, this))\n            .mouseup($.proxy(this.mouseup, this));\n    },\n    loop: function() {\n        var interval = 1000 / this.operationsPerSecond;\n        (function loop() {\n            if (!Controller.is('searching')) {\n                return;\n            }\n            Controller.step();\n            setTimeout(loop, interval);\n        })();\n    },\n    step: function() {\n        var operations = this.operations,\n            op, isSupported;\n\n        do {\n            if (!operations.length) {\n                this.finish(); // transit to `finished` state\n                return;\n            }\n            op = operations.shift();\n            isSupported = View.supportedOperations.indexOf(op.attr) !== -1;\n        } while (!isSupported);\n\n        View.setAttributeAt(op.x, op.y, op.attr, op.value);\n    },\n    clearOperations: function() {\n        this.operations = [];\n    },\n    clearFootprints: function() {\n        View.clearFootprints();\n        View.clearPath();\n    },\n    clearAll: function() {\n        this.clearFootprints();\n        View.clearBlockedNodes();\n    },\n    buildNewGrid: function() {\n        this.grid = new PF.Grid(this.gridSize[0], this.gridSize[1]);\n    },\n    mousedown: function (event) {\n        var coord = View.toGridCoordinate(event.pageX, event.pageY),\n            gridX = coord[0],\n            gridY = coord[1],\n            grid  = this.grid;\n\n        if (this.can('dragStart') && this.isStartPos(gridX, gridY)) {\n            this.dragStart();\n            return;\n        }\n        if (this.can('dragEnd') && this.isEndPos(gridX, gridY)) {\n            this.dragEnd();\n            return;\n        }\n        if (this.can('drawWall') && grid.isWalkableAt(gridX, gridY)) {\n            this.drawWall(gridX, gridY);\n            return;\n        }\n        if (this.can('eraseWall') && !grid.isWalkableAt(gridX, gridY)) {\n            this.eraseWall(gridX, gridY);\n        }\n    },\n    mousemove: function(event) {\n        var coord = View.toGridCoordinate(event.pageX, event.pageY),\n            grid = this.grid,\n            gridX = coord[0],\n            gridY = coord[1];\n\n        if (this.isStartOrEndPos(gridX, gridY)) {\n            return;\n        }\n\n        switch (this.current) {\n        case 'draggingStart':\n            if (grid.isWalkableAt(gridX, gridY)) {\n                this.setStartPos(gridX, gridY);\n            }\n            break;\n        case 'draggingEnd':\n            if (grid.isWalkableAt(gridX, gridY)) {\n                this.setEndPos(gridX, gridY);\n            }\n            break;\n        case 'drawingWall':\n            this.setWalkableAt(gridX, gridY, false);\n            break;\n        case 'erasingWall':\n            this.setWalkableAt(gridX, gridY, true);\n            break;\n        }\n    },\n    mouseup: function(event) {\n        if (Controller.can('rest')) {\n            Controller.rest();\n        }\n    },\n    setButtonStates: function() {\n        $.each(arguments, function(i, opt) {\n            var $button = Controller.$buttons.eq(opt.id - 1);\n            if (opt.text) {\n                $button.text(opt.text);\n            }\n            if (opt.callback) {\n                $button\n                    .unbind('click')\n                    .click(opt.callback);\n            }\n            if (opt.enabled === undefined) {\n                return;\n            } else if (opt.enabled) {\n                $button.removeAttr('disabled');\n            } else {\n                $button.attr({ disabled: 'disabled' });\n            }\n        });\n    },\n    /**\n     * When initializing, this method will be called to set the positions\n     * of start node and end node.\n     * It will detect user's display size, and compute the best positions.\n     */\n    setDefaultStartEndPos: function() {\n        var width, height,\n            marginRight, availWidth,\n            centerX, centerY,\n            endX, endY,\n            nodeSize = View.nodeSize;\n\n        width  = $(window).width();\n        height = $(window).height();\n\n        marginRight = $('#algorithm_panel').width();\n        availWidth = width - marginRight;\n\n        centerX = Math.ceil(availWidth / 2 / nodeSize);\n        centerY = Math.floor(height / 2 / nodeSize);\n\n        this.setStartPos(centerX - 5, centerY);\n        this.setEndPos(centerX + 5, centerY);\n    },\n    setStartPos: function(gridX, gridY) {\n        this.startX = gridX;\n        this.startY = gridY;\n        View.setStartPos(gridX, gridY);\n    },\n    setEndPos: function(gridX, gridY) {\n        this.endX = gridX;\n        this.endY = gridY;\n        View.setEndPos(gridX, gridY);\n    },\n    setWalkableAt: function(gridX, gridY, walkable) {\n        this.grid.setWalkableAt(gridX, gridY, walkable);\n        View.setAttributeAt(gridX, gridY, 'walkable', walkable);\n    },\n    isStartPos: function(gridX, gridY) {\n        return gridX === this.startX && gridY === this.startY;\n    },\n    isEndPos: function(gridX, gridY) {\n        return gridX === this.endX && gridY === this.endY;\n    },\n    isStartOrEndPos: function(gridX, gridY) {\n        return this.isStartPos(gridX, gridY) || this.isEndPos(gridX, gridY);\n    },\n});\n"
  },
  {
    "path": "visual/js/main.js",
    "content": "$(document).ready(function() {\n    if (!Raphael.svg) {\n        window.location = './notsupported.html';\n    }\n\n    // suppress select events\n    $(window).bind('selectstart', function(event) {\n        event.preventDefault();\n    });\n\n    // initialize visualization\n    Panel.init();\n    Controller.init();\n});\n"
  },
  {
    "path": "visual/js/panel.js",
    "content": "/**\n * The control panel.\n */\nvar Panel = {\n    init: function() {\n        var $algo = $('#algorithm_panel');\n\n        $('.panel').draggable();\n        $('.accordion').accordion({\n            collapsible: false,\n        });\n        $('.option_label').click(function() {\n            $(this).prev().click();\n        });\n        $('#hide_instructions').click(function() {\n            $('#instructions_panel').slideUp();\n        });\n        $('#play_panel').css({\n            top: $algo.offset().top + $algo.outerHeight() + 20\n        });\n        $('#button2').attr('disabled', 'disabled');\n    },\n    /**\n     * Get the user selected path-finder.\n     * TODO: clean up this messy code.\n     */\n    getFinder: function() {\n        var finder, selected_header, heuristic, allowDiagonal, biDirectional, dontCrossCorners, weight, trackRecursion, timeLimit;\n        \n        selected_header = $(\n            '#algorithm_panel ' +\n            '.ui-accordion-header[aria-selected=true]'\n        ).attr('id');\n        \n        switch (selected_header) {\n\n        case 'astar_header':\n            allowDiagonal = typeof $('#astar_section ' +\n                                     '.allow_diagonal:checked').val() !== 'undefined';\n            biDirectional = typeof $('#astar_section ' +\n                                     '.bi-directional:checked').val() !=='undefined';\n            dontCrossCorners = typeof $('#astar_section ' +\n                                     '.dont_cross_corners:checked').val() !=='undefined';\n\n            /* parseInt returns NaN (which is falsy) if the string can't be parsed */\n            weight = parseInt($('#astar_section .spinner').val()) || 1;\n            weight = weight >= 1 ? weight : 1; /* if negative or 0, use 1 */\n\n            heuristic = $('input[name=astar_heuristic]:checked').val();\n            if (biDirectional) {\n                finder = new PF.BiAStarFinder({\n                    allowDiagonal: allowDiagonal,\n                    dontCrossCorners: dontCrossCorners,\n                    heuristic: PF.Heuristic[heuristic],\n                    weight: weight\n                });\n            } else {\n                finder = new PF.AStarFinder({\n                    allowDiagonal: allowDiagonal,\n                    dontCrossCorners: dontCrossCorners,\n                    heuristic: PF.Heuristic[heuristic],\n                    weight: weight\n                });\n            }\n            break;\n\n        case 'breadthfirst_header':\n            allowDiagonal = typeof $('#breadthfirst_section ' +\n                                     '.allow_diagonal:checked').val() !== 'undefined';\n            biDirectional = typeof $('#breadthfirst_section ' +\n                                     '.bi-directional:checked').val() !== 'undefined';\n            dontCrossCorners = typeof $('#breadthfirst_section ' +\n                                     '.dont_cross_corners:checked').val() !=='undefined';\n            if (biDirectional) {\n                finder = new PF.BiBreadthFirstFinder({\n                    allowDiagonal: allowDiagonal,\n                    dontCrossCorners: dontCrossCorners\n                });\n            } else {\n                finder = new PF.BreadthFirstFinder({\n                    allowDiagonal: allowDiagonal,\n                    dontCrossCorners: dontCrossCorners\n                });\n            }\n            break;\n\n        case 'bestfirst_header':\n            allowDiagonal = typeof $('#bestfirst_section ' +\n                                     '.allow_diagonal:checked').val() !== 'undefined';\n            biDirectional = typeof $('#bestfirst_section ' +\n                                     '.bi-directional:checked').val() !== 'undefined';\n            dontCrossCorners = typeof $('#bestfirst_section ' +\n                                     '.dont_cross_corners:checked').val() !=='undefined';\n            heuristic = $('input[name=bestfirst_heuristic]:checked').val();\n            if (biDirectional) {\n                finder = new PF.BiBestFirstFinder({\n                    allowDiagonal: allowDiagonal,\n                    dontCrossCorners: dontCrossCorners,\n                    heuristic: PF.Heuristic[heuristic]\n                });\n            } else {\n                finder = new PF.BestFirstFinder({\n                    allowDiagonal: allowDiagonal,\n                    dontCrossCorners: dontCrossCorners,\n                    heuristic: PF.Heuristic[heuristic]\n                });\n            }\n            break;\n\n        case 'dijkstra_header':\n            allowDiagonal = typeof $('#dijkstra_section ' +\n                                     '.allow_diagonal:checked').val() !== 'undefined';\n            biDirectional = typeof $('#dijkstra_section ' +\n                                     '.bi-directional:checked').val() !=='undefined';\n            dontCrossCorners = typeof $('#dijkstra_section ' +\n                                     '.dont_cross_corners:checked').val() !=='undefined';\n            if (biDirectional) {\n                finder = new PF.BiDijkstraFinder({\n                    allowDiagonal: allowDiagonal,\n                    dontCrossCorners: dontCrossCorners\n                });\n            } else {\n                finder = new PF.DijkstraFinder({\n                    allowDiagonal: allowDiagonal,\n                    dontCrossCorners: dontCrossCorners\n                });\n            }\n            break;\n\n        case 'jump_point_header':\n            trackRecursion = typeof $('#jump_point_section ' +\n                                     '.track_recursion:checked').val() !== 'undefined';\n            heuristic = $('input[name=jump_point_heuristic]:checked').val();\n            \n            finder = new PF.JumpPointFinder({\n              trackJumpRecursion: trackRecursion,\n              heuristic: PF.Heuristic[heuristic],\n              diagonalMovement: PF.DiagonalMovement.IfAtMostOneObstacle\n            });\n            break;\n        case 'orth_jump_point_header':\n            trackRecursion = typeof $('#orth_jump_point_section ' +\n                                     '.track_recursion:checked').val() !== 'undefined';\n            heuristic = $('input[name=orth_jump_point_heuristic]:checked').val();\n\n            finder = new PF.JumpPointFinder({\n              trackJumpRecursion: trackRecursion,\n              heuristic: PF.Heuristic[heuristic],\n              diagonalMovement: PF.DiagonalMovement.Never\n            });\n            break;\n        case 'ida_header':\n            allowDiagonal = typeof $('#ida_section ' +\n                                     '.allow_diagonal:checked').val() !== 'undefined';\n            dontCrossCorners = typeof $('#ida_section ' +\n                                     '.dont_cross_corners:checked').val() !=='undefined';\n            trackRecursion = typeof $('#ida_section ' +\n                                     '.track_recursion:checked').val() !== 'undefined';\n\n            heuristic = $('input[name=jump_point_heuristic]:checked').val();\n\n            weight = parseInt($('#ida_section input[name=astar_weight]').val()) || 1;\n            weight = weight >= 1 ? weight : 1; /* if negative or 0, use 1 */\n\n            timeLimit = parseInt($('#ida_section input[name=time_limit]').val());\n\n            // Any non-negative integer, indicates \"forever\".\n            timeLimit = (timeLimit <= 0 || isNaN(timeLimit)) ? -1 : timeLimit;\n\n            finder = new PF.IDAStarFinder({\n              timeLimit: timeLimit,\n              trackRecursion: trackRecursion,\n              allowDiagonal: allowDiagonal,\n              dontCrossCorners: dontCrossCorners,\n              heuristic: PF.Heuristic[heuristic],\n              weight: weight\n            });\n\n            break;\n        }\n\n        return finder;\n    }\n};\n"
  },
  {
    "path": "visual/js/view.js",
    "content": "/**\n * The pathfinding visualization.\n * It uses raphael.js to show the grids.\n */\nvar View = {\n    nodeSize: 30, // width and height of a single node, in pixel\n    nodeStyle: {\n        normal: {\n            fill: 'white',\n            'stroke-opacity': 0.2, // the border\n        },\n        blocked: {\n            fill: 'grey',\n            'stroke-opacity': 0.2,\n        },\n        start: {\n            fill: '#0d0',\n            'stroke-opacity': 0.2,\n        },\n        end: {\n            fill: '#e40',\n            'stroke-opacity': 0.2,\n        },\n        opened: {\n            fill: '#98fb98',\n            'stroke-opacity': 0.2,\n        },\n        closed: {\n            fill: '#afeeee',\n            'stroke-opacity': 0.2,\n        },\n        failed: {\n            fill: '#ff8888',\n            'stroke-opacity': 0.2,\n        },\n        tested: {\n            fill: '#e5e5e5',\n            'stroke-opacity': 0.2,\n        },\n    },\n    nodeColorizeEffect: {\n        duration: 50,\n    },\n    nodeZoomEffect: {\n        duration: 200,\n        transform: 's1.2', // scale by 1.2x\n        transformBack: 's1.0',\n    },\n    pathStyle: {\n        stroke: 'yellow',\n        'stroke-width': 3,\n    },\n    supportedOperations: ['opened', 'closed', 'tested'],\n    init: function(opts) {\n        this.numCols      = opts.numCols;\n        this.numRows      = opts.numRows;\n        this.paper        = Raphael('draw_area');\n        this.$stats       = $('#stats');\n    },\n    /**\n     * Generate the grid asynchronously.\n     * This method will be a very expensive task.\n     * Therefore, in order to not to block the rendering of browser ui,\n     * I decomposed the task into smaller ones. Each will only generate a row.\n     */\n    generateGrid: function(callback) {\n        var i, j, x, y,\n            rect,\n            normalStyle, nodeSize,\n            createRowTask, sleep, tasks,\n            nodeSize    = this.nodeSize,\n            normalStyle = this.nodeStyle.normal,\n            numCols     = this.numCols,\n            numRows     = this.numRows,\n            paper       = this.paper,\n            rects       = this.rects = [],\n            $stats      = this.$stats;\n\n        paper.setSize(numCols * nodeSize, numRows * nodeSize);\n\n        createRowTask = function(rowId) {\n            return function(done) {\n                rects[rowId] = [];\n                for (j = 0; j < numCols; ++j) {\n                    x = j * nodeSize;\n                    y = rowId * nodeSize;\n\n                    rect = paper.rect(x, y, nodeSize, nodeSize);\n                    rect.attr(normalStyle);\n                    rects[rowId].push(rect);\n                }\n                $stats.text(\n                    'generating grid ' +\n                    Math.round((rowId + 1) / numRows * 100) + '%'\n                );\n                done(null);\n            };\n        };\n\n        sleep = function(done) {\n            setTimeout(function() {\n                done(null);\n            }, 0);\n        };\n\n        tasks = [];\n        for (i = 0; i < numRows; ++i) {\n            tasks.push(createRowTask(i));\n            tasks.push(sleep);\n        }\n\n        async.series(tasks, function() {\n            if (callback) {\n                callback();\n            }\n        });\n    },\n    setStartPos: function(gridX, gridY) {\n        var coord = this.toPageCoordinate(gridX, gridY);\n        if (!this.startNode) {\n            this.startNode = this.paper.rect(\n                coord[0],\n                coord[1],\n                this.nodeSize,\n                this.nodeSize\n            ).attr(this.nodeStyle.normal)\n             .animate(this.nodeStyle.start, 1000);\n        } else {\n            this.startNode.attr({ x: coord[0], y: coord[1] }).toFront();\n        }\n    },\n    setEndPos: function(gridX, gridY) {\n        var coord = this.toPageCoordinate(gridX, gridY);\n        if (!this.endNode) {\n            this.endNode = this.paper.rect(\n                coord[0],\n                coord[1],\n                this.nodeSize,\n                this.nodeSize\n            ).attr(this.nodeStyle.normal)\n             .animate(this.nodeStyle.end, 1000);\n        } else {\n            this.endNode.attr({ x: coord[0], y: coord[1] }).toFront();\n        }\n    },\n    /**\n     * Set the attribute of the node at the given coordinate.\n     */\n    setAttributeAt: function(gridX, gridY, attr, value) {\n        var color, nodeStyle = this.nodeStyle;\n        switch (attr) {\n        case 'walkable':\n            color = value ? nodeStyle.normal.fill : nodeStyle.blocked.fill;\n            this.setWalkableAt(gridX, gridY, value);\n            break;\n        case 'opened':\n            this.colorizeNode(this.rects[gridY][gridX], nodeStyle.opened.fill);\n            this.setCoordDirty(gridX, gridY, true);\n            break;\n        case 'closed':\n            this.colorizeNode(this.rects[gridY][gridX], nodeStyle.closed.fill);\n            this.setCoordDirty(gridX, gridY, true);\n            break;\n        case 'tested':\n            color = (value === true) ? nodeStyle.tested.fill : nodeStyle.normal.fill;\n\n            this.colorizeNode(this.rects[gridY][gridX], color);\n            this.setCoordDirty(gridX, gridY, true);\n            break;\n        case 'parent':\n            // XXX: Maybe draw a line from this node to its parent?\n            // This would be expensive.\n            break;\n        default:\n            console.error('unsupported operation: ' + attr + ':' + value);\n            return;\n        }\n    },\n    colorizeNode: function(node, color) {\n        node.animate({\n            fill: color\n        }, this.nodeColorizeEffect.duration);\n    },\n    zoomNode: function(node) {\n        node.toFront().attr({\n            transform: this.nodeZoomEffect.transform,\n        }).animate({\n            transform: this.nodeZoomEffect.transformBack,\n        }, this.nodeZoomEffect.duration);\n    },\n    setWalkableAt: function(gridX, gridY, value) {\n        var node, i, blockedNodes = this.blockedNodes;\n        if (!blockedNodes) {\n            blockedNodes = this.blockedNodes = new Array(this.numRows);\n            for (i = 0; i < this.numRows; ++i) {\n                blockedNodes[i] = [];\n            }\n        }\n        node = blockedNodes[gridY][gridX];\n        if (value) {\n            // clear blocked node\n            if (node) {\n                this.colorizeNode(node, this.rects[gridY][gridX].attr('fill'));\n                this.zoomNode(node);\n                setTimeout(function() {\n                    node.remove();\n                }, this.nodeZoomEffect.duration);\n                blockedNodes[gridY][gridX] = null;\n            }\n        } else {\n            // draw blocked node\n            if (node) {\n                return;\n            }\n            node = blockedNodes[gridY][gridX] = this.rects[gridY][gridX].clone();\n            this.colorizeNode(node, this.nodeStyle.blocked.fill);\n            this.zoomNode(node);\n        }\n    },\n    clearFootprints: function() {\n        var i, x, y, coord, coords = this.getDirtyCoords();\n        for (i = 0; i < coords.length; ++i) {\n            coord = coords[i];\n            x = coord[0];\n            y = coord[1];\n            this.rects[y][x].attr(this.nodeStyle.normal);\n            this.setCoordDirty(x, y, false);\n        }\n    },\n    clearBlockedNodes: function() {\n        var i, j, blockedNodes = this.blockedNodes;\n        if (!blockedNodes) {\n            return;\n        }\n        for (i = 0; i < this.numRows; ++i) {\n            for (j = 0 ;j < this.numCols; ++j) {\n                if (blockedNodes[i][j]) {\n                    blockedNodes[i][j].remove();\n                    blockedNodes[i][j] = null;\n                }\n            }\n        }\n    },\n    drawPath: function(path) {\n        if (!path.length) {\n            return;\n        }\n        var svgPath = this.buildSvgPath(path);\n        this.path = this.paper.path(svgPath).attr(this.pathStyle);\n    },\n    /**\n     * Given a path, build its SVG represention.\n     */\n    buildSvgPath: function(path) {\n        var i, strs = [], size = this.nodeSize;\n\n        strs.push('M' + (path[0][0] * size + size / 2) + ' ' +\n                  (path[0][1] * size + size / 2));\n        for (i = 1; i < path.length; ++i) {\n            strs.push('L' + (path[i][0] * size + size / 2) + ' ' +\n                      (path[i][1] * size + size / 2));\n        }\n\n        return strs.join('');\n    },\n    clearPath: function() {\n        if (this.path) {\n            this.path.remove();\n        }\n    },\n    /**\n     * Helper function to convert the page coordinate to grid coordinate\n     */\n    toGridCoordinate: function(pageX, pageY) {\n        return [\n            Math.floor(pageX / this.nodeSize),\n            Math.floor(pageY / this.nodeSize)\n        ];\n    },\n    /**\n     * helper function to convert the grid coordinate to page coordinate\n     */\n    toPageCoordinate: function(gridX, gridY) {\n        return [\n            gridX * this.nodeSize,\n            gridY * this.nodeSize\n        ];\n    },\n    showStats: function(opts) {\n        var texts = [\n            'length: ' + Math.round(opts.pathLength * 100) / 100,\n            'time: ' + opts.timeSpent + 'ms',\n            'operations: ' + opts.operationCount\n        ];\n        $('#stats').show().html(texts.join('<br>'));\n    },\n    setCoordDirty: function(gridX, gridY, isDirty) {\n        var x, y,\n            numRows = this.numRows,\n            numCols = this.numCols,\n            coordDirty;\n\n        if (this.coordDirty === undefined) {\n            coordDirty = this.coordDirty = [];\n            for (y = 0; y < numRows; ++y) {\n                coordDirty.push([]);\n                for (x = 0; x < numCols; ++x) {\n                    coordDirty[y].push(false);\n                }\n            }\n        }\n\n        this.coordDirty[gridY][gridX] = isDirty;\n    },\n    getDirtyCoords: function() {\n        var x, y,\n            numRows = this.numRows,\n            numCols = this.numCols,\n            coordDirty = this.coordDirty,\n            coords = [];\n\n        if (coordDirty === undefined) {\n            return [];\n        }\n\n        for (y = 0; y < numRows; ++y) {\n            for (x = 0; x < numCols; ++x) {\n                if (coordDirty[y][x]) {\n                    coords.push([x, y]);\n                }\n            }\n        }\n        return coords;\n    },\n};\n"
  },
  {
    "path": "visual/lib/raphael-min.js",
    "content": "// ┌────────────────────────────────────────────────────────────────────┐ \\\\\n// │ Raphaël 2.1.0 - JavaScript Vector Library                          │ \\\\\n// ├────────────────────────────────────────────────────────────────────┤ \\\\\n// │ Copyright © 2008-2012 Dmitry Baranovskiy (http://raphaeljs.com)    │ \\\\\n// │ Copyright © 2008-2012 Sencha Labs (http://sencha.com)              │ \\\\\n// ├────────────────────────────────────────────────────────────────────┤ \\\\\n// │ Licensed under the MIT (http://raphaeljs.com/license.html) license.│ \\\\\n// └────────────────────────────────────────────────────────────────────┘ \\\\\n\n(function(a){var b=\"0.3.4\",c=\"hasOwnProperty\",d=/[\\.\\/]/,e=\"*\",f=function(){},g=function(a,b){return a-b},h,i,j={n:{}},k=function(a,b){var c=j,d=i,e=Array.prototype.slice.call(arguments,2),f=k.listeners(a),l=0,m=!1,n,o=[],p={},q=[],r=h,s=[];h=a,i=0;for(var t=0,u=f.length;t<u;t++)\"zIndex\"in f[t]&&(o.push(f[t].zIndex),f[t].zIndex<0&&(p[f[t].zIndex]=f[t]));o.sort(g);while(o[l]<0){n=p[o[l++]],q.push(n.apply(b,e));if(i){i=d;return q}}for(t=0;t<u;t++){n=f[t];if(\"zIndex\"in n)if(n.zIndex==o[l]){q.push(n.apply(b,e));if(i)break;do{l++,n=p[o[l]],n&&q.push(n.apply(b,e));if(i)break}while(n)}else p[n.zIndex]=n;else{q.push(n.apply(b,e));if(i)break}}i=d,h=r;return q.length?q:null};k.listeners=function(a){var b=a.split(d),c=j,f,g,h,i,k,l,m,n,o=[c],p=[];for(i=0,k=b.length;i<k;i++){n=[];for(l=0,m=o.length;l<m;l++){c=o[l].n,g=[c[b[i]],c[e]],h=2;while(h--)f=g[h],f&&(n.push(f),p=p.concat(f.f||[]))}o=n}return p},k.on=function(a,b){var c=a.split(d),e=j;for(var g=0,h=c.length;g<h;g++)e=e.n,!e[c[g]]&&(e[c[g]]={n:{}}),e=e[c[g]];e.f=e.f||[];for(g=0,h=e.f.length;g<h;g++)if(e.f[g]==b)return f;e.f.push(b);return function(a){+a==+a&&(b.zIndex=+a)}},k.stop=function(){i=1},k.nt=function(a){if(a)return(new RegExp(\"(?:\\\\.|\\\\/|^)\"+a+\"(?:\\\\.|\\\\/|$)\")).test(h);return h},k.off=k.unbind=function(a,b){var f=a.split(d),g,h,i,k,l,m,n,o=[j];for(k=0,l=f.length;k<l;k++)for(m=0;m<o.length;m+=i.length-2){i=[m,1],g=o[m].n;if(f[k]!=e)g[f[k]]&&i.push(g[f[k]]);else for(h in g)g[c](h)&&i.push(g[h]);o.splice.apply(o,i)}for(k=0,l=o.length;k<l;k++){g=o[k];while(g.n){if(b){if(g.f){for(m=0,n=g.f.length;m<n;m++)if(g.f[m]==b){g.f.splice(m,1);break}!g.f.length&&delete g.f}for(h in g.n)if(g.n[c](h)&&g.n[h].f){var p=g.n[h].f;for(m=0,n=p.length;m<n;m++)if(p[m]==b){p.splice(m,1);break}!p.length&&delete g.n[h].f}}else{delete g.f;for(h in g.n)g.n[c](h)&&g.n[h].f&&delete g.n[h].f}g=g.n}}},k.once=function(a,b){var c=function(){var d=b.apply(this,arguments);k.unbind(a,c);return d};return k.on(a,c)},k.version=b,k.toString=function(){return\"You are running Eve \"+b},typeof module!=\"undefined\"&&module.exports?module.exports=k:typeof define!=\"undefined\"?define(\"eve\",[],function(){return k}):a.eve=k})(this),function(){function cF(a){for(var b=0;b<cy.length;b++)cy[b].el.paper==a&&cy.splice(b--,1)}function cE(b,d,e,f,h,i){e=Q(e);var j,k,l,m=[],o,p,q,t=b.ms,u={},v={},w={};if(f)for(y=0,z=cy.length;y<z;y++){var x=cy[y];if(x.el.id==d.id&&x.anim==b){x.percent!=e?(cy.splice(y,1),l=1):k=x,d.attr(x.totalOrigin);break}}else f=+v;for(var y=0,z=b.percents.length;y<z;y++){if(b.percents[y]==e||b.percents[y]>f*b.top){e=b.percents[y],p=b.percents[y-1]||0,t=t/b.top*(e-p),o=b.percents[y+1],j=b.anim[e];break}f&&d.attr(b.anim[b.percents[y]])}if(!!j){if(!k){for(var A in j)if(j[g](A))if(U[g](A)||d.paper.customAttributes[g](A)){u[A]=d.attr(A),u[A]==null&&(u[A]=T[A]),v[A]=j[A];switch(U[A]){case C:w[A]=(v[A]-u[A])/t;break;case\"colour\":u[A]=a.getRGB(u[A]);var B=a.getRGB(v[A]);w[A]={r:(B.r-u[A].r)/t,g:(B.g-u[A].g)/t,b:(B.b-u[A].b)/t};break;case\"path\":var D=bR(u[A],v[A]),E=D[1];u[A]=D[0],w[A]=[];for(y=0,z=u[A].length;y<z;y++){w[A][y]=[0];for(var F=1,G=u[A][y].length;F<G;F++)w[A][y][F]=(E[y][F]-u[A][y][F])/t}break;case\"transform\":var H=d._,I=ca(H[A],v[A]);if(I){u[A]=I.from,v[A]=I.to,w[A]=[],w[A].real=!0;for(y=0,z=u[A].length;y<z;y++){w[A][y]=[u[A][y][0]];for(F=1,G=u[A][y].length;F<G;F++)w[A][y][F]=(v[A][y][F]-u[A][y][F])/t}}else{var J=d.matrix||new cb,K={_:{transform:H.transform},getBBox:function(){return d.getBBox(1)}};u[A]=[J.a,J.b,J.c,J.d,J.e,J.f],b$(K,v[A]),v[A]=K._.transform,w[A]=[(K.matrix.a-J.a)/t,(K.matrix.b-J.b)/t,(K.matrix.c-J.c)/t,(K.matrix.d-J.d)/t,(K.matrix.e-J.e)/t,(K.matrix.f-J.f)/t]}break;case\"csv\":var L=r(j[A])[s](c),M=r(u[A])[s](c);if(A==\"clip-rect\"){u[A]=M,w[A]=[],y=M.length;while(y--)w[A][y]=(L[y]-u[A][y])/t}v[A]=L;break;default:L=[][n](j[A]),M=[][n](u[A]),w[A]=[],y=d.paper.customAttributes[A].length;while(y--)w[A][y]=((L[y]||0)-(M[y]||0))/t}}var O=j.easing,P=a.easing_formulas[O];if(!P){P=r(O).match(N);if(P&&P.length==5){var R=P;P=function(a){return cC(a,+R[1],+R[2],+R[3],+R[4],t)}}else P=bf}q=j.start||b.start||+(new Date),x={anim:b,percent:e,timestamp:q,start:q+(b.del||0),status:0,initstatus:f||0,stop:!1,ms:t,easing:P,from:u,diff:w,to:v,el:d,callback:j.callback,prev:p,next:o,repeat:i||b.times,origin:d.attr(),totalOrigin:h},cy.push(x);if(f&&!k&&!l){x.stop=!0,x.start=new Date-t*f;if(cy.length==1)return cA()}l&&(x.start=new Date-x.ms*f),cy.length==1&&cz(cA)}else k.initstatus=f,k.start=new Date-k.ms*f;eve(\"raphael.anim.start.\"+d.id,d,b)}}function cD(a,b){var c=[],d={};this.ms=b,this.times=1;if(a){for(var e in a)a[g](e)&&(d[Q(e)]=a[e],c.push(Q(e)));c.sort(bd)}this.anim=d,this.top=c[c.length-1],this.percents=c}function cC(a,b,c,d,e,f){function o(a,b){var c,d,e,f,j,k;for(e=a,k=0;k<8;k++){f=m(e)-a;if(z(f)<b)return e;j=(3*i*e+2*h)*e+g;if(z(j)<1e-6)break;e=e-f/j}c=0,d=1,e=a;if(e<c)return c;if(e>d)return d;while(c<d){f=m(e);if(z(f-a)<b)return e;a>f?c=e:d=e,e=(d-c)/2+c}return e}function n(a,b){var c=o(a,b);return((l*c+k)*c+j)*c}function m(a){return((i*a+h)*a+g)*a}var g=3*b,h=3*(d-b)-g,i=1-g-h,j=3*c,k=3*(e-c)-j,l=1-j-k;return n(a,1/(200*f))}function cq(){return this.x+q+this.y+q+this.width+\" × \"+this.height}function cp(){return this.x+q+this.y}function cb(a,b,c,d,e,f){a!=null?(this.a=+a,this.b=+b,this.c=+c,this.d=+d,this.e=+e,this.f=+f):(this.a=1,this.b=0,this.c=0,this.d=1,this.e=0,this.f=0)}function bH(b,c,d){b=a._path2curve(b),c=a._path2curve(c);var e,f,g,h,i,j,k,l,m,n,o=d?0:[];for(var p=0,q=b.length;p<q;p++){var r=b[p];if(r[0]==\"M\")e=i=r[1],f=j=r[2];else{r[0]==\"C\"?(m=[e,f].concat(r.slice(1)),e=m[6],f=m[7]):(m=[e,f,e,f,i,j,i,j],e=i,f=j);for(var s=0,t=c.length;s<t;s++){var u=c[s];if(u[0]==\"M\")g=k=u[1],h=l=u[2];else{u[0]==\"C\"?(n=[g,h].concat(u.slice(1)),g=n[6],h=n[7]):(n=[g,h,g,h,k,l,k,l],g=k,h=l);var v=bG(m,n,d);if(d)o+=v;else{for(var w=0,x=v.length;w<x;w++)v[w].segment1=p,v[w].segment2=s,v[w].bez1=m,v[w].bez2=n;o=o.concat(v)}}}}}return o}function bG(b,c,d){var e=a.bezierBBox(b),f=a.bezierBBox(c);if(!a.isBBoxIntersect(e,f))return d?0:[];var g=bB.apply(0,b),h=bB.apply(0,c),i=~~(g/5),j=~~(h/5),k=[],l=[],m={},n=d?0:[];for(var o=0;o<i+1;o++){var p=a.findDotsAtSegment.apply(a,b.concat(o/i));k.push({x:p.x,y:p.y,t:o/i})}for(o=0;o<j+1;o++)p=a.findDotsAtSegment.apply(a,c.concat(o/j)),l.push({x:p.x,y:p.y,t:o/j});for(o=0;o<i;o++)for(var q=0;q<j;q++){var r=k[o],s=k[o+1],t=l[q],u=l[q+1],v=z(s.x-r.x)<.001?\"y\":\"x\",w=z(u.x-t.x)<.001?\"y\":\"x\",x=bD(r.x,r.y,s.x,s.y,t.x,t.y,u.x,u.y);if(x){if(m[x.x.toFixed(4)]==x.y.toFixed(4))continue;m[x.x.toFixed(4)]=x.y.toFixed(4);var y=r.t+z((x[v]-r[v])/(s[v]-r[v]))*(s.t-r.t),A=t.t+z((x[w]-t[w])/(u[w]-t[w]))*(u.t-t.t);y>=0&&y<=1&&A>=0&&A<=1&&(d?n++:n.push({x:x.x,y:x.y,t1:y,t2:A}))}}return n}function bF(a,b){return bG(a,b,1)}function bE(a,b){return bG(a,b)}function bD(a,b,c,d,e,f,g,h){if(!(x(a,c)<y(e,g)||y(a,c)>x(e,g)||x(b,d)<y(f,h)||y(b,d)>x(f,h))){var i=(a*d-b*c)*(e-g)-(a-c)*(e*h-f*g),j=(a*d-b*c)*(f-h)-(b-d)*(e*h-f*g),k=(a-c)*(f-h)-(b-d)*(e-g);if(!k)return;var l=i/k,m=j/k,n=+l.toFixed(2),o=+m.toFixed(2);if(n<+y(a,c).toFixed(2)||n>+x(a,c).toFixed(2)||n<+y(e,g).toFixed(2)||n>+x(e,g).toFixed(2)||o<+y(b,d).toFixed(2)||o>+x(b,d).toFixed(2)||o<+y(f,h).toFixed(2)||o>+x(f,h).toFixed(2))return;return{x:l,y:m}}}function bC(a,b,c,d,e,f,g,h,i){if(!(i<0||bB(a,b,c,d,e,f,g,h)<i)){var j=1,k=j/2,l=j-k,m,n=.01;m=bB(a,b,c,d,e,f,g,h,l);while(z(m-i)>n)k/=2,l+=(m<i?1:-1)*k,m=bB(a,b,c,d,e,f,g,h,l);return l}}function bB(a,b,c,d,e,f,g,h,i){i==null&&(i=1),i=i>1?1:i<0?0:i;var j=i/2,k=12,l=[-0.1252,.1252,-0.3678,.3678,-0.5873,.5873,-0.7699,.7699,-0.9041,.9041,-0.9816,.9816],m=[.2491,.2491,.2335,.2335,.2032,.2032,.1601,.1601,.1069,.1069,.0472,.0472],n=0;for(var o=0;o<k;o++){var p=j*l[o]+j,q=bA(p,a,c,e,g),r=bA(p,b,d,f,h),s=q*q+r*r;n+=m[o]*w.sqrt(s)}return j*n}function bA(a,b,c,d,e){var f=-3*b+9*c-9*d+3*e,g=a*f+6*b-12*c+6*d;return a*g-3*b+3*c}function by(a,b){var c=[];for(var d=0,e=a.length;e-2*!b>d;d+=2){var f=[{x:+a[d-2],y:+a[d-1]},{x:+a[d],y:+a[d+1]},{x:+a[d+2],y:+a[d+3]},{x:+a[d+4],y:+a[d+5]}];b?d?e-4==d?f[3]={x:+a[0],y:+a[1]}:e-2==d&&(f[2]={x:+a[0],y:+a[1]},f[3]={x:+a[2],y:+a[3]}):f[0]={x:+a[e-2],y:+a[e-1]}:e-4==d?f[3]=f[2]:d||(f[0]={x:+a[d],y:+a[d+1]}),c.push([\"C\",(-f[0].x+6*f[1].x+f[2].x)/6,(-f[0].y+6*f[1].y+f[2].y)/6,(f[1].x+6*f[2].x-f[3].x)/6,(f[1].y+6*f[2].y-f[3].y)/6,f[2].x,f[2].y])}return c}function bx(){return this.hex}function bv(a,b,c){function d(){var e=Array.prototype.slice.call(arguments,0),f=e.join(\"␀\"),h=d.cache=d.cache||{},i=d.count=d.count||[];if(h[g](f)){bu(i,f);return c?c(h[f]):h[f]}i.length>=1e3&&delete h[i.shift()],i.push(f),h[f]=a[m](b,e);return c?c(h[f]):h[f]}return d}function bu(a,b){for(var c=0,d=a.length;c<d;c++)if(a[c]===b)return a.push(a.splice(c,1)[0])}function bm(a){if(Object(a)!==a)return a;var b=new a.constructor;for(var c in a)a[g](c)&&(b[c]=bm(a[c]));return b}function a(c){if(a.is(c,\"function\"))return b?c():eve.on(\"raphael.DOMload\",c);if(a.is(c,E))return a._engine.create[m](a,c.splice(0,3+a.is(c[0],C))).add(c);var d=Array.prototype.slice.call(arguments,0);if(a.is(d[d.length-1],\"function\")){var e=d.pop();return b?e.call(a._engine.create[m](a,d)):eve.on(\"raphael.DOMload\",function(){e.call(a._engine.create[m](a,d))})}return a._engine.create[m](a,arguments)}a.version=\"2.1.0\",a.eve=eve;var b,c=/[, ]+/,d={circle:1,rect:1,path:1,ellipse:1,text:1,image:1},e=/\\{(\\d+)\\}/g,f=\"prototype\",g=\"hasOwnProperty\",h={doc:document,win:window},i={was:Object.prototype[g].call(h.win,\"Raphael\"),is:h.win.Raphael},j=function(){this.ca=this.customAttributes={}},k,l=\"appendChild\",m=\"apply\",n=\"concat\",o=\"createTouch\"in h.doc,p=\"\",q=\" \",r=String,s=\"split\",t=\"click dblclick mousedown mousemove mouseout mouseover mouseup touchstart touchmove touchend touchcancel\"[s](q),u={mousedown:\"touchstart\",mousemove:\"touchmove\",mouseup:\"touchend\"},v=r.prototype.toLowerCase,w=Math,x=w.max,y=w.min,z=w.abs,A=w.pow,B=w.PI,C=\"number\",D=\"string\",E=\"array\",F=\"toString\",G=\"fill\",H=Object.prototype.toString,I={},J=\"push\",K=a._ISURL=/^url\\(['\"]?([^\\)]+?)['\"]?\\)$/i,L=/^\\s*((#[a-f\\d]{6})|(#[a-f\\d]{3})|rgba?\\(\\s*([\\d\\.]+%?\\s*,\\s*[\\d\\.]+%?\\s*,\\s*[\\d\\.]+%?(?:\\s*,\\s*[\\d\\.]+%?)?)\\s*\\)|hsba?\\(\\s*([\\d\\.]+(?:deg|\\xb0|%)?\\s*,\\s*[\\d\\.]+%?\\s*,\\s*[\\d\\.]+(?:%?\\s*,\\s*[\\d\\.]+)?)%?\\s*\\)|hsla?\\(\\s*([\\d\\.]+(?:deg|\\xb0|%)?\\s*,\\s*[\\d\\.]+%?\\s*,\\s*[\\d\\.]+(?:%?\\s*,\\s*[\\d\\.]+)?)%?\\s*\\))\\s*$/i,M={NaN:1,Infinity:1,\"-Infinity\":1},N=/^(?:cubic-)?bezier\\(([^,]+),([^,]+),([^,]+),([^\\)]+)\\)/,O=w.round,P=\"setAttribute\",Q=parseFloat,R=parseInt,S=r.prototype.toUpperCase,T=a._availableAttrs={\"arrow-end\":\"none\",\"arrow-start\":\"none\",blur:0,\"clip-rect\":\"0 0 1e9 1e9\",cursor:\"default\",cx:0,cy:0,fill:\"#fff\",\"fill-opacity\":1,font:'10px \"Arial\"',\"font-family\":'\"Arial\"',\"font-size\":\"10\",\"font-style\":\"normal\",\"font-weight\":400,gradient:0,height:0,href:\"http://raphaeljs.com/\",\"letter-spacing\":0,opacity:1,path:\"M0,0\",r:0,rx:0,ry:0,src:\"\",stroke:\"#000\",\"stroke-dasharray\":\"\",\"stroke-linecap\":\"butt\",\"stroke-linejoin\":\"butt\",\"stroke-miterlimit\":0,\"stroke-opacity\":1,\"stroke-width\":1,target:\"_blank\",\"text-anchor\":\"middle\",title:\"Raphael\",transform:\"\",width:0,x:0,y:0},U=a._availableAnimAttrs={blur:C,\"clip-rect\":\"csv\",cx:C,cy:C,fill:\"colour\",\"fill-opacity\":C,\"font-size\":C,height:C,opacity:C,path:\"path\",r:C,rx:C,ry:C,stroke:\"colour\",\"stroke-opacity\":C,\"stroke-width\":C,transform:\"transform\",width:C,x:C,y:C},V=/[\\x09\\x0a\\x0b\\x0c\\x0d\\x20\\xa0\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000\\u2028\\u2029]/g,W=/[\\x09\\x0a\\x0b\\x0c\\x0d\\x20\\xa0\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000\\u2028\\u2029]*,[\\x09\\x0a\\x0b\\x0c\\x0d\\x20\\xa0\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000\\u2028\\u2029]*/,X={hs:1,rg:1},Y=/,?([achlmqrstvxz]),?/gi,Z=/([achlmrqstvz])[\\x09\\x0a\\x0b\\x0c\\x0d\\x20\\xa0\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000\\u2028\\u2029,]*((-?\\d*\\.?\\d*(?:e[\\-+]?\\d+)?[\\x09\\x0a\\x0b\\x0c\\x0d\\x20\\xa0\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000\\u2028\\u2029]*,?[\\x09\\x0a\\x0b\\x0c\\x0d\\x20\\xa0\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000\\u2028\\u2029]*)+)/ig,$=/([rstm])[\\x09\\x0a\\x0b\\x0c\\x0d\\x20\\xa0\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000\\u2028\\u2029,]*((-?\\d*\\.?\\d*(?:e[\\-+]?\\d+)?[\\x09\\x0a\\x0b\\x0c\\x0d\\x20\\xa0\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000\\u2028\\u2029]*,?[\\x09\\x0a\\x0b\\x0c\\x0d\\x20\\xa0\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000\\u2028\\u2029]*)+)/ig,_=/(-?\\d*\\.?\\d*(?:e[\\-+]?\\d+)?)[\\x09\\x0a\\x0b\\x0c\\x0d\\x20\\xa0\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000\\u2028\\u2029]*,?[\\x09\\x0a\\x0b\\x0c\\x0d\\x20\\xa0\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000\\u2028\\u2029]*/ig,ba=a._radial_gradient=/^r(?:\\(([^,]+?)[\\x09\\x0a\\x0b\\x0c\\x0d\\x20\\xa0\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000\\u2028\\u2029]*,[\\x09\\x0a\\x0b\\x0c\\x0d\\x20\\xa0\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000\\u2028\\u2029]*([^\\)]+?)\\))?/,bb={},bc=function(a,b){return a.key-b.key},bd=function(a,b){return Q(a)-Q(b)},be=function(){},bf=function(a){return a},bg=a._rectPath=function(a,b,c,d,e){if(e)return[[\"M\",a+e,b],[\"l\",c-e*2,0],[\"a\",e,e,0,0,1,e,e],[\"l\",0,d-e*2],[\"a\",e,e,0,0,1,-e,e],[\"l\",e*2-c,0],[\"a\",e,e,0,0,1,-e,-e],[\"l\",0,e*2-d],[\"a\",e,e,0,0,1,e,-e],[\"z\"]];return[[\"M\",a,b],[\"l\",c,0],[\"l\",0,d],[\"l\",-c,0],[\"z\"]]},bh=function(a,b,c,d){d==null&&(d=c);return[[\"M\",a,b],[\"m\",0,-d],[\"a\",c,d,0,1,1,0,2*d],[\"a\",c,d,0,1,1,0,-2*d],[\"z\"]]},bi=a._getPath={path:function(a){return a.attr(\"path\")},circle:function(a){var b=a.attrs;return bh(b.cx,b.cy,b.r)},ellipse:function(a){var b=a.attrs;return bh(b.cx,b.cy,b.rx,b.ry)},rect:function(a){var b=a.attrs;return bg(b.x,b.y,b.width,b.height,b.r)},image:function(a){var b=a.attrs;return bg(b.x,b.y,b.width,b.height)},text:function(a){var b=a._getBBox();return bg(b.x,b.y,b.width,b.height)}},bj=a.mapPath=function(a,b){if(!b)return a;var c,d,e,f,g,h,i;a=bR(a);for(e=0,g=a.length;e<g;e++){i=a[e];for(f=1,h=i.length;f<h;f+=2)c=b.x(i[f],i[f+1]),d=b.y(i[f],i[f+1]),i[f]=c,i[f+1]=d}return a};a._g=h,a.type=h.win.SVGAngle||h.doc.implementation.hasFeature(\"http://www.w3.org/TR/SVG11/feature#BasicStructure\",\"1.1\")?\"SVG\":\"VML\";if(a.type==\"VML\"){var bk=h.doc.createElement(\"div\"),bl;bk.innerHTML='<v:shape adj=\"1\"/>',bl=bk.firstChild,bl.style.behavior=\"url(#default#VML)\";if(!bl||typeof bl.adj!=\"object\")return a.type=p;bk=null}a.svg=!(a.vml=a.type==\"VML\"),a._Paper=j,a.fn=k=j.prototype=a.prototype,a._id=0,a._oid=0,a.is=function(a,b){b=v.call(b);if(b==\"finite\")return!M[g](+a);if(b==\"array\")return a instanceof Array;return b==\"null\"&&a===null||b==typeof a&&a!==null||b==\"object\"&&a===Object(a)||b==\"array\"&&Array.isArray&&Array.isArray(a)||H.call(a).slice(8,-1).toLowerCase()==b},a.angle=function(b,c,d,e,f,g){if(f==null){var h=b-d,i=c-e;if(!h&&!i)return 0;return(180+w.atan2(-i,-h)*180/B+360)%360}return a.angle(b,c,f,g)-a.angle(d,e,f,g)},a.rad=function(a){return a%360*B/180},a.deg=function(a){return a*180/B%360},a.snapTo=function(b,c,d){d=a.is(d,\"finite\")?d:10;if(a.is(b,E)){var e=b.length;while(e--)if(z(b[e]-c)<=d)return b[e]}else{b=+b;var f=c%b;if(f<d)return c-f;if(f>b-d)return c-f+b}return c};var bn=a.createUUID=function(a,b){return function(){return\"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx\".replace(a,b).toUpperCase()}}(/[xy]/g,function(a){var b=w.random()*16|0,c=a==\"x\"?b:b&3|8;return c.toString(16)});a.setWindow=function(b){eve(\"raphael.setWindow\",a,h.win,b),h.win=b,h.doc=h.win.document,a._engine.initWin&&a._engine.initWin(h.win)};var bo=function(b){if(a.vml){var c=/^\\s+|\\s+$/g,d;try{var e=new ActiveXObject(\"htmlfile\");e.write(\"<body>\"),e.close(),d=e.body}catch(f){d=createPopup().document.body}var g=d.createTextRange();bo=bv(function(a){try{d.style.color=r(a).replace(c,p);var b=g.queryCommandValue(\"ForeColor\");b=(b&255)<<16|b&65280|(b&16711680)>>>16;return\"#\"+(\"000000\"+b.toString(16)).slice(-6)}catch(e){return\"none\"}})}else{var i=h.doc.createElement(\"i\");i.title=\"Raphaël Colour Picker\",i.style.display=\"none\",h.doc.body.appendChild(i),bo=bv(function(a){i.style.color=a;return h.doc.defaultView.getComputedStyle(i,p).getPropertyValue(\"color\")})}return bo(b)},bp=function(){return\"hsb(\"+[this.h,this.s,this.b]+\")\"},bq=function(){return\"hsl(\"+[this.h,this.s,this.l]+\")\"},br=function(){return this.hex},bs=function(b,c,d){c==null&&a.is(b,\"object\")&&\"r\"in b&&\"g\"in b&&\"b\"in b&&(d=b.b,c=b.g,b=b.r);if(c==null&&a.is(b,D)){var e=a.getRGB(b);b=e.r,c=e.g,d=e.b}if(b>1||c>1||d>1)b/=255,c/=255,d/=255;return[b,c,d]},bt=function(b,c,d,e){b*=255,c*=255,d*=255;var f={r:b,g:c,b:d,hex:a.rgb(b,c,d),toString:br};a.is(e,\"finite\")&&(f.opacity=e);return f};a.color=function(b){var c;a.is(b,\"object\")&&\"h\"in b&&\"s\"in b&&\"b\"in b?(c=a.hsb2rgb(b),b.r=c.r,b.g=c.g,b.b=c.b,b.hex=c.hex):a.is(b,\"object\")&&\"h\"in b&&\"s\"in b&&\"l\"in b?(c=a.hsl2rgb(b),b.r=c.r,b.g=c.g,b.b=c.b,b.hex=c.hex):(a.is(b,\"string\")&&(b=a.getRGB(b)),a.is(b,\"object\")&&\"r\"in b&&\"g\"in b&&\"b\"in b?(c=a.rgb2hsl(b),b.h=c.h,b.s=c.s,b.l=c.l,c=a.rgb2hsb(b),b.v=c.b):(b={hex:\"none\"},b.r=b.g=b.b=b.h=b.s=b.v=b.l=-1)),b.toString=br;return b},a.hsb2rgb=function(a,b,c,d){this.is(a,\"object\")&&\"h\"in a&&\"s\"in a&&\"b\"in a&&(c=a.b,b=a.s,a=a.h,d=a.o),a*=360;var e,f,g,h,i;a=a%360/60,i=c*b,h=i*(1-z(a%2-1)),e=f=g=c-i,a=~~a,e+=[i,h,0,0,h,i][a],f+=[h,i,i,h,0,0][a],g+=[0,0,h,i,i,h][a];return bt(e,f,g,d)},a.hsl2rgb=function(a,b,c,d){this.is(a,\"object\")&&\"h\"in a&&\"s\"in a&&\"l\"in a&&(c=a.l,b=a.s,a=a.h);if(a>1||b>1||c>1)a/=360,b/=100,c/=100;a*=360;var e,f,g,h,i;a=a%360/60,i=2*b*(c<.5?c:1-c),h=i*(1-z(a%2-1)),e=f=g=c-i/2,a=~~a,e+=[i,h,0,0,h,i][a],f+=[h,i,i,h,0,0][a],g+=[0,0,h,i,i,h][a];return bt(e,f,g,d)},a.rgb2hsb=function(a,b,c){c=bs(a,b,c),a=c[0],b=c[1],c=c[2];var d,e,f,g;f=x(a,b,c),g=f-y(a,b,c),d=g==0?null:f==a?(b-c)/g:f==b?(c-a)/g+2:(a-b)/g+4,d=(d+360)%6*60/360,e=g==0?0:g/f;return{h:d,s:e,b:f,toString:bp}},a.rgb2hsl=function(a,b,c){c=bs(a,b,c),a=c[0],b=c[1],c=c[2];var d,e,f,g,h,i;g=x(a,b,c),h=y(a,b,c),i=g-h,d=i==0?null:g==a?(b-c)/i:g==b?(c-a)/i+2:(a-b)/i+4,d=(d+360)%6*60/360,f=(g+h)/2,e=i==0?0:f<.5?i/(2*f):i/(2-2*f);return{h:d,s:e,l:f,toString:bq}},a._path2string=function(){return this.join(\",\").replace(Y,\"$1\")};var bw=a._preload=function(a,b){var c=h.doc.createElement(\"img\");c.style.cssText=\"position:absolute;left:-9999em;top:-9999em\",c.onload=function(){b.call(this),this.onload=null,h.doc.body.removeChild(this)},c.onerror=function(){h.doc.body.removeChild(this)},h.doc.body.appendChild(c),c.src=a};a.getRGB=bv(function(b){if(!b||!!((b=r(b)).indexOf(\"-\")+1))return{r:-1,g:-1,b:-1,hex:\"none\",error:1,toString:bx};if(b==\"none\")return{r:-1,g:-1,b:-1,hex:\"none\",toString:bx};!X[g](b.toLowerCase().substring(0,2))&&b.charAt()!=\"#\"&&(b=bo(b));var c,d,e,f,h,i,j,k=b.match(L);if(k){k[2]&&(f=R(k[2].substring(5),16),e=R(k[2].substring(3,5),16),d=R(k[2].substring(1,3),16)),k[3]&&(f=R((i=k[3].charAt(3))+i,16),e=R((i=k[3].charAt(2))+i,16),d=R((i=k[3].charAt(1))+i,16)),k[4]&&(j=k[4][s](W),d=Q(j[0]),j[0].slice(-1)==\"%\"&&(d*=2.55),e=Q(j[1]),j[1].slice(-1)==\"%\"&&(e*=2.55),f=Q(j[2]),j[2].slice(-1)==\"%\"&&(f*=2.55),k[1].toLowerCase().slice(0,4)==\"rgba\"&&(h=Q(j[3])),j[3]&&j[3].slice(-1)==\"%\"&&(h/=100));if(k[5]){j=k[5][s](W),d=Q(j[0]),j[0].slice(-1)==\"%\"&&(d*=2.55),e=Q(j[1]),j[1].slice(-1)==\"%\"&&(e*=2.55),f=Q(j[2]),j[2].slice(-1)==\"%\"&&(f*=2.55),(j[0].slice(-3)==\"deg\"||j[0].slice(-1)==\"°\")&&(d/=360),k[1].toLowerCase().slice(0,4)==\"hsba\"&&(h=Q(j[3])),j[3]&&j[3].slice(-1)==\"%\"&&(h/=100);return a.hsb2rgb(d,e,f,h)}if(k[6]){j=k[6][s](W),d=Q(j[0]),j[0].slice(-1)==\"%\"&&(d*=2.55),e=Q(j[1]),j[1].slice(-1)==\"%\"&&(e*=2.55),f=Q(j[2]),j[2].slice(-1)==\"%\"&&(f*=2.55),(j[0].slice(-3)==\"deg\"||j[0].slice(-1)==\"°\")&&(d/=360),k[1].toLowerCase().slice(0,4)==\"hsla\"&&(h=Q(j[3])),j[3]&&j[3].slice(-1)==\"%\"&&(h/=100);return a.hsl2rgb(d,e,f,h)}k={r:d,g:e,b:f,toString:bx},k.hex=\"#\"+(16777216|f|e<<8|d<<16).toString(16).slice(1),a.is(h,\"finite\")&&(k.opacity=h);return k}return{r:-1,g:-1,b:-1,hex:\"none\",error:1,toString:bx}},a),a.hsb=bv(function(b,c,d){return a.hsb2rgb(b,c,d).hex}),a.hsl=bv(function(b,c,d){return a.hsl2rgb(b,c,d).hex}),a.rgb=bv(function(a,b,c){return\"#\"+(16777216|c|b<<8|a<<16).toString(16).slice(1)}),a.getColor=function(a){var b=this.getColor.start=this.getColor.start||{h:0,s:1,b:a||.75},c=this.hsb2rgb(b.h,b.s,b.b);b.h+=.075,b.h>1&&(b.h=0,b.s-=.2,b.s<=0&&(this.getColor.start={h:0,s:1,b:b.b}));return c.hex},a.getColor.reset=function(){delete this.start},a.parsePathString=function(b){if(!b)return null;var c=bz(b);if(c.arr)return bJ(c.arr);var d={a:7,c:6,h:1,l:2,m:2,r:4,q:4,s:4,t:2,v:1,z:0},e=[];a.is(b,E)&&a.is(b[0],E)&&(e=bJ(b)),e.length||r(b).replace(Z,function(a,b,c){var f=[],g=b.toLowerCase();c.replace(_,function(a,b){b&&f.push(+b)}),g==\"m\"&&f.length>2&&(e.push([b][n](f.splice(0,2))),g=\"l\",b=b==\"m\"?\"l\":\"L\");if(g==\"r\")e.push([b][n](f));else while(f.length>=d[g]){e.push([b][n](f.splice(0,d[g])));if(!d[g])break}}),e.toString=a._path2string,c.arr=bJ(e);return e},a.parseTransformString=bv(function(b){if(!b)return null;var c={r:3,s:4,t:2,m:6},d=[];a.is(b,E)&&a.is(b[0],E)&&(d=bJ(b)),d.length||r(b).replace($,function(a,b,c){var e=[],f=v.call(b);c.replace(_,function(a,b){b&&e.push(+b)}),d.push([b][n](e))}),d.toString=a._path2string;return d});var bz=function(a){var b=bz.ps=bz.ps||{};b[a]?b[a].sleep=100:b[a]={sleep:100},setTimeout(function(){for(var c in b)b[g](c)&&c!=a&&(b[c].sleep--,!b[c].sleep&&delete b[c])});return b[a]};a.findDotsAtSegment=function(a,b,c,d,e,f,g,h,i){var j=1-i,k=A(j,3),l=A(j,2),m=i*i,n=m*i,o=k*a+l*3*i*c+j*3*i*i*e+n*g,p=k*b+l*3*i*d+j*3*i*i*f+n*h,q=a+2*i*(c-a)+m*(e-2*c+a),r=b+2*i*(d-b)+m*(f-2*d+b),s=c+2*i*(e-c)+m*(g-2*e+c),t=d+2*i*(f-d)+m*(h-2*f+d),u=j*a+i*c,v=j*b+i*d,x=j*e+i*g,y=j*f+i*h,z=90-w.atan2(q-s,r-t)*180/B;(q>s||r<t)&&(z+=180);return{x:o,y:p,m:{x:q,y:r},n:{x:s,y:t},start:{x:u,y:v},end:{x:x,y:y},alpha:z}},a.bezierBBox=function(b,c,d,e,f,g,h,i){a.is(b,\"array\")||(b=[b,c,d,e,f,g,h,i]);var j=bQ.apply(null,b);return{x:j.min.x,y:j.min.y,x2:j.max.x,y2:j.max.y,width:j.max.x-j.min.x,height:j.max.y-j.min.y}},a.isPointInsideBBox=function(a,b,c){return b>=a.x&&b<=a.x2&&c>=a.y&&c<=a.y2},a.isBBoxIntersect=function(b,c){var d=a.isPointInsideBBox;return d(c,b.x,b.y)||d(c,b.x2,b.y)||d(c,b.x,b.y2)||d(c,b.x2,b.y2)||d(b,c.x,c.y)||d(b,c.x2,c.y)||d(b,c.x,c.y2)||d(b,c.x2,c.y2)||(b.x<c.x2&&b.x>c.x||c.x<b.x2&&c.x>b.x)&&(b.y<c.y2&&b.y>c.y||c.y<b.y2&&c.y>b.y)},a.pathIntersection=function(a,b){return bH(a,b)},a.pathIntersectionNumber=function(a,b){return bH(a,b,1)},a.isPointInsidePath=function(b,c,d){var e=a.pathBBox(b);return a.isPointInsideBBox(e,c,d)&&bH(b,[[\"M\",c,d],[\"H\",e.x2+10]],1)%2==1},a._removedFactory=function(a){return function(){eve(\"raphael.log\",null,\"Raphaël: you are calling to method “\"+a+\"” of removed object\",a)}};var bI=a.pathBBox=function(a){var b=bz(a);if(b.bbox)return b.bbox;if(!a)return{x:0,y:0,width:0,height:0,x2:0,y2:0};a=bR(a);var c=0,d=0,e=[],f=[],g;for(var h=0,i=a.length;h<i;h++){g=a[h];if(g[0]==\"M\")c=g[1],d=g[2],e.push(c),f.push(d);else{var j=bQ(c,d,g[1],g[2],g[3],g[4],g[5],g[6]);e=e[n](j.min.x,j.max.x),f=f[n](j.min.y,j.max.y),c=g[5],d=g[6]}}var k=y[m](0,e),l=y[m](0,f),o=x[m](0,e),p=x[m](0,f),q={x:k,y:l,x2:o,y2:p,width:o-k,height:p-l};b.bbox=bm(q);return q},bJ=function(b){var c=bm(b);c.toString=a._path2string;return c},bK=a._pathToRelative=function(b){var c=bz(b);if(c.rel)return bJ(c.rel);if(!a.is(b,E)||!a.is(b&&b[0],E))b=a.parsePathString(b);var d=[],e=0,f=0,g=0,h=0,i=0;b[0][0]==\"M\"&&(e=b[0][1],f=b[0][2],g=e,h=f,i++,d.push([\"M\",e,f]));for(var j=i,k=b.length;j<k;j++){var l=d[j]=[],m=b[j];if(m[0]!=v.call(m[0])){l[0]=v.call(m[0]);switch(l[0]){case\"a\":l[1]=m[1],l[2]=m[2],l[3]=m[3],l[4]=m[4],l[5]=m[5],l[6]=+(m[6]-e).toFixed(3),l[7]=+(m[7]-f).toFixed(3);break;case\"v\":l[1]=+(m[1]-f).toFixed(3);break;case\"m\":g=m[1],h=m[2];default:for(var n=1,o=m.length;n<o;n++)l[n]=+(m[n]-(n%2?e:f)).toFixed(3)}}else{l=d[j]=[],m[0]==\"m\"&&(g=m[1]+e,h=m[2]+f);for(var p=0,q=m.length;p<q;p++)d[j][p]=m[p]}var r=d[j].length;switch(d[j][0]){case\"z\":e=g,f=h;break;case\"h\":e+=+d[j][r-1];break;case\"v\":f+=+d[j][r-1];break;default:e+=+d[j][r-2],f+=+d[j][r-1]}}d.toString=a._path2string,c.rel=bJ(d);return d},bL=a._pathToAbsolute=function(b){var c=bz(b);if(c.abs)return bJ(c.abs);if(!a.is(b,E)||!a.is(b&&b[0],E))b=a.parsePathString(b);if(!b||!b.length)return[[\"M\",0,0]];var d=[],e=0,f=0,g=0,h=0,i=0;b[0][0]==\"M\"&&(e=+b[0][1],f=+b[0][2],g=e,h=f,i++,d[0]=[\"M\",e,f]);var j=b.length==3&&b[0][0]==\"M\"&&b[1][0].toUpperCase()==\"R\"&&b[2][0].toUpperCase()==\"Z\";for(var k,l,m=i,o=b.length;m<o;m++){d.push(k=[]),l=b[m];if(l[0]!=S.call(l[0])){k[0]=S.call(l[0]);switch(k[0]){case\"A\":k[1]=l[1],k[2]=l[2],k[3]=l[3],k[4]=l[4],k[5]=l[5],k[6]=+(l[6]+e),k[7]=+(l[7]+f);break;case\"V\":k[1]=+l[1]+f;break;case\"H\":k[1]=+l[1]+e;break;case\"R\":var p=[e,f][n](l.slice(1));for(var q=2,r=p.length;q<r;q++)p[q]=+p[q]+e,p[++q]=+p[q]+f;d.pop(),d=d[n](by(p,j));break;case\"M\":g=+l[1]+e,h=+l[2]+f;default:for(q=1,r=l.length;q<r;q++)k[q]=+l[q]+(q%2?e:f)}}else if(l[0]==\"R\")p=[e,f][n](l.slice(1)),d.pop(),d=d[n](by(p,j)),k=[\"R\"][n](l.slice(-2));else for(var s=0,t=l.length;s<t;s++)k[s]=l[s];switch(k[0]){case\"Z\":e=g,f=h;break;case\"H\":e=k[1];break;case\"V\":f=k[1];break;case\"M\":g=k[k.length-2],h=k[k.length-1];default:e=k[k.length-2],f=k[k.length-1]}}d.toString=a._path2string,c.abs=bJ(d);return d},bM=function(a,b,c,d){return[a,b,c,d,c,d]},bN=function(a,b,c,d,e,f){var g=1/3,h=2/3;return[g*a+h*c,g*b+h*d,g*e+h*c,g*f+h*d,e,f]},bO=function(a,b,c,d,e,f,g,h,i,j){var k=B*120/180,l=B/180*(+e||0),m=[],o,p=bv(function(a,b,c){var d=a*w.cos(c)-b*w.sin(c),e=a*w.sin(c)+b*w.cos(c);return{x:d,y:e}});if(!j){o=p(a,b,-l),a=o.x,b=o.y,o=p(h,i,-l),h=o.x,i=o.y;var q=w.cos(B/180*e),r=w.sin(B/180*e),t=(a-h)/2,u=(b-i)/2,v=t*t/(c*c)+u*u/(d*d);v>1&&(v=w.sqrt(v),c=v*c,d=v*d);var x=c*c,y=d*d,A=(f==g?-1:1)*w.sqrt(z((x*y-x*u*u-y*t*t)/(x*u*u+y*t*t))),C=A*c*u/d+(a+h)/2,D=A*-d*t/c+(b+i)/2,E=w.asin(((b-D)/d).toFixed(9)),F=w.asin(((i-D)/d).toFixed(9));E=a<C?B-E:E,F=h<C?B-F:F,E<0&&(E=B*2+E),F<0&&(F=B*2+F),g&&E>F&&(E=E-B*2),!g&&F>E&&(F=F-B*2)}else E=j[0],F=j[1],C=j[2],D=j[3];var G=F-E;if(z(G)>k){var H=F,I=h,J=i;F=E+k*(g&&F>E?1:-1),h=C+c*w.cos(F),i=D+d*w.sin(F),m=bO(h,i,c,d,e,0,g,I,J,[F,H,C,D])}G=F-E;var K=w.cos(E),L=w.sin(E),M=w.cos(F),N=w.sin(F),O=w.tan(G/4),P=4/3*c*O,Q=4/3*d*O,R=[a,b],S=[a+P*L,b-Q*K],T=[h+P*N,i-Q*M],U=[h,i];S[0]=2*R[0]-S[0],S[1]=2*R[1]-S[1];if(j)return[S,T,U][n](m);m=[S,T,U][n](m).join()[s](\",\");var V=[];for(var W=0,X=m.length;W<X;W++)V[W]=W%2?p(m[W-1],m[W],l).y:p(m[W],m[W+1],l).x;return V},bP=function(a,b,c,d,e,f,g,h,i){var j=1-i;return{x:A(j,3)*a+A(j,2)*3*i*c+j*3*i*i*e+A(i,3)*g,y:A(j,3)*b+A(j,2)*3*i*d+j*3*i*i*f+A(i,3)*h}},bQ=bv(function(a,b,c,d,e,f,g,h){var i=e-2*c+a-(g-2*e+c),j=2*(c-a)-2*(e-c),k=a-c,l=(-j+w.sqrt(j*j-4*i*k))/2/i,n=(-j-w.sqrt(j*j-4*i*k))/2/i,o=[b,h],p=[a,g],q;z(l)>\"1e12\"&&(l=.5),z(n)>\"1e12\"&&(n=.5),l>0&&l<1&&(q=bP(a,b,c,d,e,f,g,h,l),p.push(q.x),o.push(q.y)),n>0&&n<1&&(q=bP(a,b,c,d,e,f,g,h,n),p.push(q.x),o.push(q.y)),i=f-2*d+b-(h-2*f+d),j=2*(d-b)-2*(f-d),k=b-d,l=(-j+w.sqrt(j*j-4*i*k))/2/i,n=(-j-w.sqrt(j*j-4*i*k))/2/i,z(l)>\"1e12\"&&(l=.5),z(n)>\"1e12\"&&(n=.5),l>0&&l<1&&(q=bP(a,b,c,d,e,f,g,h,l),p.push(q.x),o.push(q.y)),n>0&&n<1&&(q=bP(a,b,c,d,e,f,g,h,n),p.push(q.x),o.push(q.y));return{min:{x:y[m](0,p),y:y[m](0,o)},max:{x:x[m](0,p),y:x[m](0,o)}}}),bR=a._path2curve=bv(function(a,b){var c=!b&&bz(a);if(!b&&c.curve)return bJ(c.curve);var d=bL(a),e=b&&bL(b),f={x:0,y:0,bx:0,by:0,X:0,Y:0,qx:null,qy:null},g={x:0,y:0,bx:0,by:0,X:0,Y:0,qx:null,qy:null},h=function(a,b){var c,d;if(!a)return[\"C\",b.x,b.y,b.x,b.y,b.x,b.y];!(a[0]in{T:1,Q:1})&&(b.qx=b.qy=null);switch(a[0]){case\"M\":b.X=a[1],b.Y=a[2];break;case\"A\":a=[\"C\"][n](bO[m](0,[b.x,b.y][n](a.slice(1))));break;case\"S\":c=b.x+(b.x-(b.bx||b.x)),d=b.y+(b.y-(b.by||b.y)),a=[\"C\",c,d][n](a.slice(1));break;case\"T\":b.qx=b.x+(b.x-(b.qx||b.x)),b.qy=b.y+(b.y-(b.qy||b.y)),a=[\"C\"][n](bN(b.x,b.y,b.qx,b.qy,a[1],a[2]));break;case\"Q\":b.qx=a[1],b.qy=a[2],a=[\"C\"][n](bN(b.x,b.y,a[1],a[2],a[3],a[4]));break;case\"L\":a=[\"C\"][n](bM(b.x,b.y,a[1],a[2]));break;case\"H\":a=[\"C\"][n](bM(b.x,b.y,a[1],b.y));break;case\"V\":a=[\"C\"][n](bM(b.x,b.y,b.x,a[1]));break;case\"Z\":a=[\"C\"][n](bM(b.x,b.y,b.X,b.Y))}return a},i=function(a,b){if(a[b].length>7){a[b].shift();var c=a[b];while(c.length)a.splice(b++,0,[\"C\"][n](c.splice(0,6)));a.splice(b,1),l=x(d.length,e&&e.length||0)}},j=function(a,b,c,f,g){a&&b&&a[g][0]==\"M\"&&b[g][0]!=\"M\"&&(b.splice(g,0,[\"M\",f.x,f.y]),c.bx=0,c.by=0,c.x=a[g][1],c.y=a[g][2],l=x(d.length,e&&e.length||0))};for(var k=0,l=x(d.length,e&&e.length||0);k<l;k++){d[k]=h(d[k],f),i(d,k),e&&(e[k]=h(e[k],g)),e&&i(e,k),j(d,e,f,g,k),j(e,d,g,f,k);var o=d[k],p=e&&e[k],q=o.length,r=e&&p.length;f.x=o[q-2],f.y=o[q-1],f.bx=Q(o[q-4])||f.x,f.by=Q(o[q-3])||f.y,g.bx=e&&(Q(p[r-4])||g.x),g.by=e&&(Q(p[r-3])||g.y),g.x=e&&p[r-2],g.y=e&&p[r-1]}e||(c.curve=bJ(d));return e?[d,e]:d},null,bJ),bS=a._parseDots=bv(function(b){var c=[];for(var d=0,e=b.length;d<e;d++){var f={},g=b[d].match(/^([^:]*):?([\\d\\.]*)/);f.color=a.getRGB(g[1]);if(f.color.error)return null;f.color=f.color.hex,g[2]&&(f.offset=g[2]+\"%\"),c.push(f)}for(d=1,e=c.length-1;d<e;d++)if(!c[d].offset){var h=Q(c[d-1].offset||0),i=0;for(var j=d+1;j<e;j++)if(c[j].offset){i=c[j].offset;break}i||(i=100,j=e),i=Q(i);var k=(i-h)/(j-d+1);for(;d<j;d++)h+=k,c[d].offset=h+\"%\"}return c}),bT=a._tear=function(a,b){a==b.top&&(b.top=a.prev),a==b.bottom&&(b.bottom=a.next),a.next&&(a.next.prev=a.prev),a.prev&&(a.prev.next=a.next)},bU=a._tofront=function(a,b){b.top!==a&&(bT(a,b),a.next=null,a.prev=b.top,b.top.next=a,b.top=a)},bV=a._toback=function(a,b){b.bottom!==a&&(bT(a,b),a.next=b.bottom,a.prev=null,b.bottom.prev=a,b.bottom=a)},bW=a._insertafter=function(a,b,c){bT(a,c),b==c.top&&(c.top=a),b.next&&(b.next.prev=a),a.next=b.next,a.prev=b,b.next=a},bX=a._insertbefore=function(a,b,c){bT(a,c),b==c.bottom&&(c.bottom=a),b.prev&&(b.prev.next=a),a.prev=b.prev,b.prev=a,a.next=b},bY=a.toMatrix=function(a,b){var c=bI(a),d={_:{transform:p},getBBox:function(){return c}};b$(d,b);return d.matrix},bZ=a.transformPath=function(a,b){return bj(a,bY(a,b))},b$=a._extractTransform=function(b,c){if(c==null)return b._.transform;c=r(c).replace(/\\.{3}|\\u2026/g,b._.transform||p);var d=a.parseTransformString(c),e=0,f=0,g=0,h=1,i=1,j=b._,k=new cb;j.transform=d||[];if(d)for(var l=0,m=d.length;l<m;l++){var n=d[l],o=n.length,q=r(n[0]).toLowerCase(),s=n[0]!=q,t=s?k.invert():0,u,v,w,x,y;q==\"t\"&&o==3?s?(u=t.x(0,0),v=t.y(0,0),w=t.x(n[1],n[2]),x=t.y(n[1],n[2]),k.translate(w-u,x-v)):k.translate(n[1],n[2]):q==\"r\"?o==2?(y=y||b.getBBox(1),k.rotate(n[1],y.x+y.width/2,y.y+y.height/2),e+=n[1]):o==4&&(s?(w=t.x(n[2],n[3]),x=t.y(n[2],n[3]),k.rotate(n[1],w,x)):k.rotate(n[1],n[2],n[3]),e+=n[1]):q==\"s\"?o==2||o==3?(y=y||b.getBBox(1),k.scale(n[1],n[o-1],y.x+y.width/2,y.y+y.height/2),h*=n[1],i*=n[o-1]):o==5&&(s?(w=t.x(n[3],n[4]),x=t.y(n[3],n[4]),k.scale(n[1],n[2],w,x)):k.scale(n[1],n[2],n[3],n[4]),h*=n[1],i*=n[2]):q==\"m\"&&o==7&&k.add(n[1],n[2],n[3],n[4],n[5],n[6]),j.dirtyT=1,b.matrix=k}b.matrix=k,j.sx=h,j.sy=i,j.deg=e,j.dx=f=k.e,j.dy=g=k.f,h==1&&i==1&&!e&&j.bbox?(j.bbox.x+=+f,j.bbox.y+=+g):j.dirtyT=1},b_=function(a){var b=a[0];switch(b.toLowerCase()){case\"t\":return[b,0,0];case\"m\":return[b,1,0,0,1,0,0];case\"r\":return a.length==4?[b,0,a[2],a[3]]:[b,0];case\"s\":return a.length==5?[b,1,1,a[3],a[4]]:a.length==3?[b,1,1]:[b,1]}},ca=a._equaliseTransform=function(b,c){c=r(c).replace(/\\.{3}|\\u2026/g,b),b=a.parseTransformString(b)||[],c=a.parseTransformString(c)||[];var d=x(b.length,c.length),e=[],f=[],g=0,h,i,j,k;for(;g<d;g++){j=b[g]||b_(c[g]),k=c[g]||b_(j);if(j[0]!=k[0]||j[0].toLowerCase()==\"r\"&&(j[2]!=k[2]||j[3]!=k[3])||j[0].toLowerCase()==\"s\"&&(j[3]!=k[3]||j[4]!=k[4]))return;e[g]=[],f[g]=[];for(h=0,i=x(j.length,k.length);h<i;h++)h in j&&(e[g][h]=j[h]),h in k&&(f[g][h]=k[h])}return{from:e,to:f}};a._getContainer=function(b,c,d,e){var f;f=e==null&&!a.is(b,\"object\")?h.doc.getElementById(b):b;if(f!=null){if(f.tagName)return c==null?{container:f,width:f.style.pixelWidth||f.offsetWidth,height:f.style.pixelHeight||f.offsetHeight}:{container:f,width:c,height:d};return{container:1,x:b,y:c,width:d,height:e}}},a.pathToRelative=bK,a._engine={},a.path2curve=bR,a.matrix=function(a,b,c,d,e,f){return new cb(a,b,c,d,e,f)},function(b){function d(a){var b=w.sqrt(c(a));a[0]&&(a[0]/=b),a[1]&&(a[1]/=b)}function c(a){return a[0]*a[0]+a[1]*a[1]}b.add=function(a,b,c,d,e,f){var g=[[],[],[]],h=[[this.a,this.c,this.e],[this.b,this.d,this.f],[0,0,1]],i=[[a,c,e],[b,d,f],[0,0,1]],j,k,l,m;a&&a instanceof cb&&(i=[[a.a,a.c,a.e],[a.b,a.d,a.f],[0,0,1]]);for(j=0;j<3;j++)for(k=0;k<3;k++){m=0;for(l=0;l<3;l++)m+=h[j][l]*i[l][k];g[j][k]=m}this.a=g[0][0],this.b=g[1][0],this.c=g[0][1],this.d=g[1][1],this.e=g[0][2],this.f=g[1][2]},b.invert=function(){var a=this,b=a.a*a.d-a.b*a.c;return new cb(a.d/b,-a.b/b,-a.c/b,a.a/b,(a.c*a.f-a.d*a.e)/b,(a.b*a.e-a.a*a.f)/b)},b.clone=function(){return new cb(this.a,this.b,this.c,this.d,this.e,this.f)},b.translate=function(a,b){this.add(1,0,0,1,a,b)},b.scale=function(a,b,c,d){b==null&&(b=a),(c||d)&&this.add(1,0,0,1,c,d),this.add(a,0,0,b,0,0),(c||d)&&this.add(1,0,0,1,-c,-d)},b.rotate=function(b,c,d){b=a.rad(b),c=c||0,d=d||0;var e=+w.cos(b).toFixed(9),f=+w.sin(b).toFixed(9);this.add(e,f,-f,e,c,d),this.add(1,0,0,1,-c,-d)},b.x=function(a,b){return a*this.a+b*this.c+this.e},b.y=function(a,b){return a*this.b+b*this.d+this.f},b.get=function(a){return+this[r.fromCharCode(97+a)].toFixed(4)},b.toString=function(){return a.svg?\"matrix(\"+[this.get(0),this.get(1),this.get(2),this.get(3),this.get(4),this.get(5)].join()+\")\":[this.get(0),this.get(2),this.get(1),this.get(3),0,0].join()},b.toFilter=function(){return\"progid:DXImageTransform.Microsoft.Matrix(M11=\"+this.get(0)+\", M12=\"+this.get(2)+\", M21=\"+this.get(1)+\", M22=\"+this.get(3)+\", Dx=\"+this.get(4)+\", Dy=\"+this.get(5)+\", sizingmethod='auto expand')\"},b.offset=function(){return[this.e.toFixed(4),this.f.toFixed(4)]},b.split=function(){var b={};b.dx=this.e,b.dy=this.f;var e=[[this.a,this.c],[this.b,this.d]];b.scalex=w.sqrt(c(e[0])),d(e[0]),b.shear=e[0][0]*e[1][0]+e[0][1]*e[1][1],e[1]=[e[1][0]-e[0][0]*b.shear,e[1][1]-e[0][1]*b.shear],b.scaley=w.sqrt(c(e[1])),d(e[1]),b.shear/=b.scaley;var f=-e[0][1],g=e[1][1];g<0?(b.rotate=a.deg(w.acos(g)),f<0&&(b.rotate=360-b.rotate)):b.rotate=a.deg(w.asin(f)),b.isSimple=!+b.shear.toFixed(9)&&(b.scalex.toFixed(9)==b.scaley.toFixed(9)||!b.rotate),b.isSuperSimple=!+b.shear.toFixed(9)&&b.scalex.toFixed(9)==b.scaley.toFixed(9)&&!b.rotate,b.noRotation=!+b.shear.toFixed(9)&&!b.rotate;return b},b.toTransformString=function(a){var b=a||this[s]();if(b.isSimple){b.scalex=+b.scalex.toFixed(4),b.scaley=+b.scaley.toFixed(4),b.rotate=+b.rotate.toFixed(4);return(b.dx||b.dy?\"t\"+[b.dx,b.dy]:p)+(b.scalex!=1||b.scaley!=1?\"s\"+[b.scalex,b.scaley,0,0]:p)+(b.rotate?\"r\"+[b.rotate,0,0]:p)}return\"m\"+[this.get(0),this.get(1),this.get(2),this.get(3),this.get(4),this.get(5)]}}(cb.prototype);var cc=navigator.userAgent.match(/Version\\/(.*?)\\s/)||navigator.userAgent.match(/Chrome\\/(\\d+)/);navigator.vendor==\"Apple Computer, Inc.\"&&(cc&&cc[1]<4||navigator.platform.slice(0,2)==\"iP\")||navigator.vendor==\"Google Inc.\"&&cc&&cc[1]<8?k.safari=function(){var a=this.rect(-99,-99,this.width+99,this.height+99).attr({stroke:\"none\"});setTimeout(function(){a.remove()})}:k.safari=be;var cd=function(){this.returnValue=!1},ce=function(){return this.originalEvent.preventDefault()},cf=function(){this.cancelBubble=!0},cg=function(){return this.originalEvent.stopPropagation()},ch=function(){if(h.doc.addEventListener)return function(a,b,c,d){var e=o&&u[b]?u[b]:b,f=function(e){var f=h.doc.documentElement.scrollTop||h.doc.body.scrollTop,i=h.doc.documentElement.scrollLeft||h.doc.body.scrollLeft,j=e.clientX+i,k=e.clientY+f;if(o&&u[g](b))for(var l=0,m=e.targetTouches&&e.targetTouches.length;l<m;l++)if(e.targetTouches[l].target==a){var n=e;e=e.targetTouches[l],e.originalEvent=n,e.preventDefault=ce,e.stopPropagation=cg;break}return c.call(d,e,j,k)};a.addEventListener(e,f,!1);return function(){a.removeEventListener(e,f,!1);return!0}};if(h.doc.attachEvent)return function(a,b,c,d){var e=function(a){a=a||h.win.event;var b=h.doc.documentElement.scrollTop||h.doc.body.scrollTop,e=h.doc.documentElement.scrollLeft||h.doc.body.scrollLeft,f=a.clientX+e,g=a.clientY+b;a.preventDefault=a.preventDefault||cd,a.stopPropagation=a.stopPropagation||cf;return c.call(d,a,f,g)};a.attachEvent(\"on\"+b,e);var f=function(){a.detachEvent(\"on\"+b,e);return!0};return f}}(),ci=[],cj=function(a){var b=a.clientX,c=a.clientY,d=h.doc.documentElement.scrollTop||h.doc.body.scrollTop,e=h.doc.documentElement.scrollLeft||h.doc.body.scrollLeft,f,g=ci.length;while(g--){f=ci[g];if(o){var i=a.touches.length,j;while(i--){j=a.touches[i];if(j.identifier==f.el._drag.id){b=j.clientX,c=j.clientY,(a.originalEvent?a.originalEvent:a).preventDefault();break}}}else a.preventDefault();var k=f.el.node,l,m=k.nextSibling,n=k.parentNode,p=k.style.display;h.win.opera&&n.removeChild(k),k.style.display=\"none\",l=f.el.paper.getElementByPoint(b,c),k.style.display=p,h.win.opera&&(m?n.insertBefore(k,m):n.appendChild(k)),l&&eve(\"raphael.drag.over.\"+f.el.id,f.el,l),b+=e,c+=d,eve(\"raphael.drag.move.\"+f.el.id,f.move_scope||f.el,b-f.el._drag.x,c-f.el._drag.y,b,c,a)}},ck=function(b){a.unmousemove(cj).unmouseup(ck);var c=ci.length,d;while(c--)d=ci[c],d.el._drag={},eve(\"raphael.drag.end.\"+d.el.id,d.end_scope||d.start_scope||d.move_scope||d.el,b);ci=[]},cl=a.el={};for(var cm=t.length;cm--;)(function(b){a[b]=cl[b]=function(c,d){a.is(c,\"function\")&&(this.events=this.events||[],this.events.push({name:b,f:c,unbind:ch(this.shape||this.node||h.doc,b,c,d||this)}));return this},a[\"un\"+b]=cl[\"un\"+b]=function(a){var c=this.events||[],d=c.length;while(d--)if(c[d].name==b&&c[d].f==a){c[d].unbind(),c.splice(d,1),!c.length&&delete this.events;return this}return this}})(t[cm]);cl.data=function(b,c){var d=bb[this.id]=bb[this.id]||{};if(arguments.length==1){if(a.is(b,\"object\")){for(var e in b)b[g](e)&&this.data(e,b[e]);return this}eve(\"raphael.data.get.\"+this.id,this,d[b],b);return d[b]}d[b]=c,eve(\"raphael.data.set.\"+this.id,this,c,b);return this},cl.removeData=function(a){a==null?bb[this.id]={}:bb[this.id]&&delete bb[this.id][a];return this},cl.hover=function(a,b,c,d){return this.mouseover(a,c).mouseout(b,d||c)},cl.unhover=function(a,b){return this.unmouseover(a).unmouseout(b)};var cn=[];cl.drag=function(b,c,d,e,f,g){function i(i){(i.originalEvent||i).preventDefault();var j=h.doc.documentElement.scrollTop||h.doc.body.scrollTop,k=h.doc.documentElement.scrollLeft||h.doc.body.scrollLeft;this._drag.x=i.clientX+k,this._drag.y=i.clientY+j,this._drag.id=i.identifier,!ci.length&&a.mousemove(cj).mouseup(ck),ci.push({el:this,move_scope:e,start_scope:f,end_scope:g}),c&&eve.on(\"raphael.drag.start.\"+this.id,c),b&&eve.on(\"raphael.drag.move.\"+this.id,b),d&&eve.on(\"raphael.drag.end.\"+this.id,d),eve(\"raphael.drag.start.\"+this.id,f||e||this,i.clientX+k,i.clientY+j,i)}this._drag={},cn.push({el:this,start:i}),this.mousedown(i);return this},cl.onDragOver=function(a){a?eve.on(\"raphael.drag.over.\"+this.id,a):eve.unbind(\"raphael.drag.over.\"+this.id)},cl.undrag=function(){var b=cn.length;while(b--)cn[b].el==this&&(this.unmousedown(cn[b].start),cn.splice(b,1),eve.unbind(\"raphael.drag.*.\"+this.id));!cn.length&&a.unmousemove(cj).unmouseup(ck)},k.circle=function(b,c,d){var e=a._engine.circle(this,b||0,c||0,d||0);this.__set__&&this.__set__.push(e);return e},k.rect=function(b,c,d,e,f){var g=a._engine.rect(this,b||0,c||0,d||0,e||0,f||0);this.__set__&&this.__set__.push(g);return g},k.ellipse=function(b,c,d,e){var f=a._engine.ellipse(this,b||0,c||0,d||0,e||0);this.__set__&&this.__set__.push(f);return f},k.path=function(b){b&&!a.is(b,D)&&!a.is(b[0],E)&&(b+=p);var c=a._engine.path(a.format[m](a,arguments),this);this.__set__&&this.__set__.push(c);return c},k.image=function(b,c,d,e,f){var g=a._engine.image(this,b||\"about:blank\",c||0,d||0,e||0,f||0);this.__set__&&this.__set__.push(g);return g},k.text=function(b,c,d){var e=a._engine.text(this,b||0,c||0,r(d));this.__set__&&this.__set__.push(e);return e},k.set=function(b){!a.is(b,\"array\")&&(b=Array.prototype.splice.call(arguments,0,arguments.length));var c=new cG(b);this.__set__&&this.__set__.push(c);return c},k.setStart=function(a){this.__set__=a||this.set()},k.setFinish=function(a){var b=this.__set__;delete this.__set__;return b},k.setSize=function(b,c){return a._engine.setSize.call(this,b,c)},k.setViewBox=function(b,c,d,e,f){return a._engine.setViewBox.call(this,b,c,d,e,f)},k.top=k.bottom=null,k.raphael=a;var co=function(a){var b=a.getBoundingClientRect(),c=a.ownerDocument,d=c.body,e=c.documentElement,f=e.clientTop||d.clientTop||0,g=e.clientLeft||d.clientLeft||0,i=b.top+(h.win.pageYOffset||e.scrollTop||d.scrollTop)-f,j=b.left+(h.win.pageXOffset||e.scrollLeft||d.scrollLeft)-g;return{y:i,x:j}};k.getElementByPoint=function(a,b){var c=this,d=c.canvas,e=h.doc.elementFromPoint(a,b);if(h.win.opera&&e.tagName==\"svg\"){var f=co(d),g=d.createSVGRect();g.x=a-f.x,g.y=b-f.y,g.width=g.height=1;var i=d.getIntersectionList(g,null);i.length&&(e=i[i.length-1])}if(!e)return null;while(e.parentNode&&e!=d.parentNode&&!e.raphael)e=e.parentNode;e==c.canvas.parentNode&&(e=d),e=e&&e.raphael?c.getById(e.raphaelid):null;return e},k.getById=function(a){var b=this.bottom;while(b){if(b.id==a)return b;b=b.next}return null},k.forEach=function(a,b){var c=this.bottom;while(c){if(a.call(b,c)===!1)return this;c=c.next}return this},k.getElementsByPoint=function(a,b){var c=this.set();this.forEach(function(d){d.isPointInside(a,b)&&c.push(d)});return c},cl.isPointInside=function(b,c){var d=this.realPath=this.realPath||bi[this.type](this);return a.isPointInsidePath(d,b,c)},cl.getBBox=function(a){if(this.removed)return{};var b=this._;if(a){if(b.dirty||!b.bboxwt)this.realPath=bi[this.type](this),b.bboxwt=bI(this.realPath),b.bboxwt.toString=cq,b.dirty=0;return b.bboxwt}if(b.dirty||b.dirtyT||!b.bbox){if(b.dirty||!this.realPath)b.bboxwt=0,this.realPath=bi[this.type](this);b.bbox=bI(bj(this.realPath,this.matrix)),b.bbox.toString=cq,b.dirty=b.dirtyT=0}return b.bbox},cl.clone=function(){if(this.removed)return null;var a=this.paper[this.type]().attr(this.attr());this.__set__&&this.__set__.push(a);return a},cl.glow=function(a){if(this.type==\"text\")return null;a=a||{};var b={width:(a.width||10)+(+this.attr(\"stroke-width\")||1),fill:a.fill||!1,opacity:a.opacity||.5,offsetx:a.offsetx||0,offsety:a.offsety||0,color:a.color||\"#000\"},c=b.width/2,d=this.paper,e=d.set(),f=this.realPath||bi[this.type](this);f=this.matrix?bj(f,this.matrix):f;for(var g=1;g<c+1;g++)e.push(d.path(f).attr({stroke:b.color,fill:b.fill?b.color:\"none\",\"stroke-linejoin\":\"round\",\"stroke-linecap\":\"round\",\"stroke-width\":+(b.width/c*g).toFixed(3),opacity:+(b.opacity/c).toFixed(3)}));return e.insertBefore(this).translate(b.offsetx,b.offsety)};var cr={},cs=function(b,c,d,e,f,g,h,i,j){return j==null?bB(b,c,d,e,f,g,h,i):a.findDotsAtSegment(b,c,d,e,f,g,h,i,bC(b,c,d,e,f,g,h,i,j))},ct=function(b,c){return function(d,e,f){d=bR(d);var g,h,i,j,k=\"\",l={},m,n=0;for(var o=0,p=d.length;o<p;o++){i=d[o];if(i[0]==\"M\")g=+i[1],h=+i[2];else{j=cs(g,h,i[1],i[2],i[3],i[4],i[5],i[6]);if(n+j>e){if(c&&!l.start){m=cs(g,h,i[1],i[2],i[3],i[4],i[5],i[6],e-n),k+=[\"C\"+m.start.x,m.start.y,m.m.x,m.m.y,m.x,m.y];if(f)return k;l.start=k,k=[\"M\"+m.x,m.y+\"C\"+m.n.x,m.n.y,m.end.x,m.end.y,i[5],i[6]].join(),n+=j,g=+i[5],h=+i[6];continue}if(!b&&!c){m=cs(g,h,i[1],i[2],i[3],i[4],i[5],i[6],e-n);return{x:m.x,y:m.y,alpha:m.alpha}}}n+=j,g=+i[5],h=+i[6]}k+=i.shift()+i}l.end=k,m=b?n:c?l:a.findDotsAtSegment(g,h,i[0],i[1],i[2],i[3],i[4],i[5],1),m.alpha&&(m={x:m.x,y:m.y,alpha:m.alpha});return m}},cu=ct(1),cv=ct(),cw=ct(0,1);a.getTotalLength=cu,a.getPointAtLength=cv,a.getSubpath=function(a,b,c){if(this.getTotalLength(a)-c<1e-6)return cw(a,b).end;var d=cw(a,c,1);return b?cw(d,b).end:d},cl.getTotalLength=function(){if(this.type==\"path\"){if(this.node.getTotalLength)return this.node.getTotalLength();return cu(this.attrs.path)}},cl.getPointAtLength=function(a){if(this.type==\"path\")return cv(this.attrs.path,a)},cl.getSubpath=function(b,c){if(this.type==\"path\")return a.getSubpath(this.attrs.path,b,c)};var cx=a.easing_formulas={linear:function(a){return a},\"<\":function(a){return A(a,1.7)},\">\":function(a){return A(a,.48)},\"<>\":function(a){var b=.48-a/1.04,c=w.sqrt(.1734+b*b),d=c-b,e=A(z(d),1/3)*(d<0?-1:1),f=-c-b,g=A(z(f),1/3)*(f<0?-1:1),h=e+g+.5;return(1-h)*3*h*h+h*h*h},backIn:function(a){var b=1.70158;return a*a*((b+1)*a-b)},backOut:function(a){a=a-1;var b=1.70158;return a*a*((b+1)*a+b)+1},elastic:function(a){if(a==!!a)return a;return A(2,-10*a)*w.sin((a-.075)*2*B/.3)+1},bounce:function(a){var b=7.5625,c=2.75,d;a<1/c?d=b*a*a:a<2/c?(a-=1.5/c,d=b*a*a+.75):a<2.5/c?(a-=2.25/c,d=b*a*a+.9375):(a-=2.625/c,d=b*a*a+.984375);return d}};cx.easeIn=cx[\"ease-in\"]=cx[\"<\"],cx.easeOut=cx[\"ease-out\"]=cx[\">\"],cx.easeInOut=cx[\"ease-in-out\"]=cx[\"<>\"],cx[\"back-in\"]=cx.backIn,cx[\"back-out\"]=cx.backOut;var cy=[],cz=window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(a){setTimeout(a,16)},cA=function(){var b=+(new Date),c=0;for(;c<cy.length;c++){var d=cy[c];if(d.el.removed||d.paused)continue;var e=b-d.start,f=d.ms,h=d.easing,i=d.from,j=d.diff,k=d.to,l=d.t,m=d.el,o={},p,r={},s;d.initstatus?(e=(d.initstatus*d.anim.top-d.prev)/(d.percent-d.prev)*f,d.status=d.initstatus,delete d.initstatus,d.stop&&cy.splice(c--,1)):d.status=(d.prev+(d.percent-d.prev)*(e/f))/d.anim.top;if(e<0)continue;if(e<f){var t=h(e/f);for(var u in i)if(i[g](u)){switch(U[u]){case C:p=+i[u]+t*f*j[u];break;case\"colour\":p=\"rgb(\"+[cB(O(i[u].r+t*f*j[u].r)),cB(O(i[u].g+t*f*j[u].g)),cB(O(i[u].b+t*f*j[u].b))].join(\",\")+\")\";break;case\"path\":p=[];for(var v=0,w=i[u].length;v<w;v++){p[v]=[i[u][v][0]];for(var x=1,y=i[u][v].length;x<y;x++)p[v][x]=+i[u][v][x]+t*f*j[u][v][x];p[v]=p[v].join(q)}p=p.join(q);break;case\"transform\":if(j[u].real){p=[];for(v=0,w=i[u].length;v<w;v++){p[v]=[i[u][v][0]];for(x=1,y=i[u][v].length;x<y;x++)p[v][x]=i[u][v][x]+t*f*j[u][v][x]}}else{var z=function(a){return+i[u][a]+t*f*j[u][a]};p=[[\"m\",z(0),z(1),z(2),z(3),z(4),z(5)]]}break;case\"csv\":if(u==\"clip-rect\"){p=[],v=4;while(v--)p[v]=+i[u][v]+t*f*j[u][v]}break;default:var A=[][n](i[u]);p=[],v=m.paper.customAttributes[u].length;while(v--)p[v]=+A[v]+t*f*j[u][v]}o[u]=p}m.attr(o),function(a,b,c){setTimeout(function(){eve(\"raphael.anim.frame.\"+a,b,c)})}(m.id,m,d.anim)}else{(function(b,c,d){setTimeout(function(){eve(\"raphael.anim.frame.\"+c.id,c,d),eve(\"raphael.anim.finish.\"+c.id,c,d),a.is(b,\"function\")&&b.call(c)})})(d.callback,m,d.anim),m.attr(k),cy.splice(c--,1);if(d.repeat>1&&!d.next){for(s in k)k[g](s)&&(r[s]=d.totalOrigin[s]);d.el.attr(r),cE(d.anim,d.el,d.anim.percents[0],null,d.totalOrigin,d.repeat-1)}d.next&&!d.stop&&cE(d.anim,d.el,d.next,null,d.totalOrigin,d.repeat)}}a.svg&&m&&m.paper&&m.paper.safari(),cy.length&&cz(cA)},cB=function(a){return a>255?255:a<0?0:a};cl.animateWith=function(b,c,d,e,f,g){var h=this;if(h.removed){g&&g.call(h);return h}var i=d instanceof cD?d:a.animation(d,e,f,g),j,k;cE(i,h,i.percents[0],null,h.attr());for(var l=0,m=cy.length;l<m;l++)if(cy[l].anim==c&&cy[l].el==b){cy[m-1].start=cy[l].start;break}return h},cl.onAnimation=function(a){a?eve.on(\"raphael.anim.frame.\"+this.id,a):eve.unbind(\"raphael.anim.frame.\"+this.id);return this},cD.prototype.delay=function(a){var b=new cD(this.anim,this.ms);b.times=this.times,b.del=+a||0;return b},cD.prototype.repeat=function(a){var b=new cD(this.anim,this.ms);b.del=this.del,b.times=w.floor(x(a,0))||1;return b},a.animation=function(b,c,d,e){if(b instanceof cD)return b;if(a.is(d,\"function\")||!d)e=e||d||null,d=null;b=Object(b),c=+c||0;var f={},h,i;for(i in b)b[g](i)&&Q(i)!=i&&Q(i)+\"%\"!=i&&(h=!0,f[i]=b[i]);if(!h)return new cD(b,c);d&&(f.easing=d),e&&(f.callback=e);return new cD({100:f},c)},cl.animate=function(b,c,d,e){var f=this;if(f.removed){e&&e.call(f);return f}var g=b instanceof cD?b:a.animation(b,c,d,e);cE(g,f,g.percents[0],null,f.attr());return f},cl.setTime=function(a,b){a&&b!=null&&this.status(a,y(b,a.ms)/a.ms);return this},cl.status=function(a,b){var c=[],d=0,e,f;if(b!=null){cE(a,this,-1,y(b,1));return this}e=cy.length;for(;d<e;d++){f=cy[d];if(f.el.id==this.id&&(!a||f.anim==a)){if(a)return f.status;c.push({anim:f.anim,status:f.status})}}if(a)return 0;return c},cl.pause=function(a){for(var b=0;b<cy.length;b++)cy[b].el.id==this.id&&(!a||cy[b].anim==a)&&eve(\"raphael.anim.pause.\"+this.id,this,cy[b].anim)!==!1&&(cy[b].paused=!0);return this},cl.resume=function(a){for(var b=0;b<cy.length;b++)if(cy[b].el.id==this.id&&(!a||cy[b].anim==a)){var c=cy[b];eve(\"raphael.anim.resume.\"+this.id,this,c.anim)!==!1&&(delete c.paused,this.status(c.anim,c.status))}return this},cl.stop=function(a){for(var b=0;b<cy.length;b++)cy[b].el.id==this.id&&(!a||cy[b].anim==a)&&eve(\"raphael.anim.stop.\"+this.id,this,cy[b].anim)!==!1&&cy.splice(b--,1);return this},eve.on(\"raphael.remove\",cF),eve.on(\"raphael.clear\",cF),cl.toString=function(){return\"Raphaël’s object\"};var cG=function(a){this.items=[],this.length=0,this.type=\"set\";if(a)for(var b=0,c=a.length;b<c;b++)a[b]&&(a[b].constructor==cl.constructor||a[b].constructor==cG)&&(this[this.items.length]=this.items[this.items.length]=a[b],this.length++)},cH=cG.prototype;cH.push=function(){var a,b;for(var c=0,d=arguments.length;c<d;c++)a=arguments[c],a&&(a.constructor==cl.constructor||a.constructor==cG)&&(b=this.items.length,this[b]=this.items[b]=a,this.length++);return this},cH.pop=function(){this.length&&delete this[this.length--];return this.items.pop()},cH.forEach=function(a,b){for(var c=0,d=this.items.length;c<d;c++)if(a.call(b,this.items[c],c)===!1)return this;return this};for(var cI in cl)cl[g](cI)&&(cH[cI]=function(a){return function(){var b=arguments;return this.forEach(function(c){c[a][m](c,b)})}}(cI));cH.attr=function(b,c){if(b&&a.is(b,E)&&a.is(b[0],\"object\"))for(var d=0,e=b.length;d<e;d++)this.items[d].attr(b[d]);else for(var f=0,g=this.items.length;f<g;f++)this.items[f].attr(b,c);return this},cH.clear=function(){while(this.length)this.pop()},cH.splice=function(a,b,c){a=a<0?x(this.length+a,0):a,b=x(0,y(this.length-a,b));var d=[],e=[],f=[],g;for(g=2;g<arguments.length;g++)f.push(arguments[g]);for(g=0;g<b;g++)e.push(this[a+g]);for(;g<this.length-a;g++)d.push(this[a+g]);var h=f.length;for(g=0;g<h+d.length;g++)this.items[a+g]=this[a+g]=g<h?f[g]:d[g-h];g=this.items.length=this.length-=b-h;while(this[g])delete this[g++];return new cG(e)},cH.exclude=function(a){for(var b=0,c=this.length;b<c;b++)if(this[b]==a){this.splice(b,1);return!0}},cH.animate=function(b,c,d,e){(a.is(d,\"function\")||!d)&&(e=d||null);var f=this.items.length,g=f,h,i=this,j;if(!f)return this;e&&(j=function(){!--f&&e.call(i)}),d=a.is(d,D)?d:j;var k=a.animation(b,c,d,j);h=this.items[--g].animate(k);while(g--)this.items[g]&&!this.items[g].removed&&this.items[g].animateWith(h,k,k);return this},cH.insertAfter=function(a){var b=this.items.length;while(b--)this.items[b].insertAfter(a);return this},cH.getBBox=function(){var a=[],b=[],c=[],d=[];for(var e=this.items.length;e--;)if(!this.items[e].removed){var f=this.items[e].getBBox();a.push(f.x),b.push(f.y),c.push(f.x+f.width),d.push(f.y+f.height)}a=y[m](0,a),b=y[m](0,b),c=x[m](0,c),d=x[m](0,d);return{x:a,y:b,x2:c,y2:d,width:c-a,height:d-b}},cH.clone=function(a){a=new cG;for(var b=0,c=this.items.length;b<c;b++)a.push(this.items[b].clone());return a},cH.toString=function(){return\"Raphaël‘s set\"},a.registerFont=function(a){if(!a.face)return a;this.fonts=this.fonts||{};var b={w:a.w,face:{},glyphs:{}},c=a.face[\"font-family\"];for(var d in a.face)a.face[g](d)&&(b.face[d]=a.face[d]);this.fonts[c]?this.fonts[c].push(b):this.fonts[c]=[b];if(!a.svg){b.face[\"units-per-em\"]=R(a.face[\"units-per-em\"],10);for(var e in a.glyphs)if(a.glyphs[g](e)){var f=a.glyphs[e];b.glyphs[e]={w:f.w,k:{},d:f.d&&\"M\"+f.d.replace(/[mlcxtrv]/g,function(a){return{l:\"L\",c:\"C\",x:\"z\",t:\"m\",r:\"l\",v:\"c\"}[a]||\"M\"})+\"z\"};if(f.k)for(var h in f.k)f[g](h)&&(b.glyphs[e].k[h]=f.k[h])}}return a},k.getFont=function(b,c,d,e){e=e||\"normal\",d=d||\"normal\",c=+c||{normal:400,bold:700,lighter:300,bolder:800}[c]||400;if(!!a.fonts){var f=a.fonts[b];if(!f){var h=new RegExp(\"(^|\\\\s)\"+b.replace(/[^\\w\\d\\s+!~.:_-]/g,p)+\"(\\\\s|$)\",\"i\");for(var i in a.fonts)if(a.fonts[g](i)&&h.test(i)){f=a.fonts[i];break}}var j;if(f)for(var k=0,l=f.length;k<l;k++){j=f[k];if(j.face[\"font-weight\"]==c&&(j.face[\"font-style\"]==d||!j.face[\"font-style\"])&&j.face[\"font-stretch\"]==e)break}return j}},k.print=function(b,d,e,f,g,h,i){h=h||\"middle\",i=x(y(i||0,1),-1);var j=r(e)[s](p),k=0,l=0,m=p,n;a.is(f,e)&&(f=this.getFont(f));if(f){n=(g||16)/f.face[\"units-per-em\"];var o=f.face.bbox[s](c),q=+o[0],t=o[3]-o[1],u=0,v=+o[1]+(h==\"baseline\"?t+ +f.face.descent:t/2);for(var w=0,z=j.length;w<z;w++){if(j[w]==\"\\n\")k=0,B=0,l=0,u+=t;else{var A=l&&f.glyphs[j[w-1]]||{},B=f.glyphs[j[w]];k+=l?(A.w||f.w)+(A.k&&A.k[j[w]]||0)+f.w*i:0,l=1}B&&B.d&&(m+=a.transformPath(B.d,[\"t\",k*n,u*n,\"s\",n,n,q,v,\"t\",(b-q)/n,(d-v)/n]))}}return this.path(m).attr({fill:\"#000\",stroke:\"none\"})},k.add=function(b){if(a.is(b,\"array\")){var c=this.set(),e=0,f=b.length,h;for(;e<f;e++)h=b[e]||{},d[g](h.type)&&c.push(this[h.type]().attr(h))}return c},a.format=function(b,c){var d=a.is(c,E)?[0][n](c):arguments;b&&a.is(b,D)&&d.length-1&&(b=b.replace(e,function(a,b){return d[++b]==null?p:d[b]}));return b||p},a.fullfill=function(){var a=/\\{([^\\}]+)\\}/g,b=/(?:(?:^|\\.)(.+?)(?=\\[|\\.|$|\\()|\\[('|\")(.+?)\\2\\])(\\(\\))?/g,c=function(a,c,d){var e=d;c.replace(b,function(a,b,c,d,f){b=b||d,e&&(b in e&&(e=e[b]),typeof e==\"function\"&&f&&(e=e()))}),e=(e==null||e==d?a:e)+\"\";return e};return function(b,d){return String(b).replace(a,function(a,b){return c(a,b,d)})}}(),a.ninja=function(){i.was?h.win.Raphael=i.is:delete Raphael;return a},a.st=cH,function(b,c,d){function e(){/in/.test(b.readyState)?setTimeout(e,9):a.eve(\"raphael.DOMload\")}b.readyState==null&&b.addEventListener&&(b.addEventListener(c,d=function(){b.removeEventListener(c,d,!1),b.readyState=\"complete\"},!1),b.readyState=\"loading\"),e()}(document,\"DOMContentLoaded\"),i.was?h.win.Raphael=a:Raphael=a,eve.on(\"raphael.DOMload\",function(){b=!0})}(),window.Raphael.svg&&function(a){var b=\"hasOwnProperty\",c=String,d=parseFloat,e=parseInt,f=Math,g=f.max,h=f.abs,i=f.pow,j=/[, ]+/,k=a.eve,l=\"\",m=\" \",n=\"http://www.w3.org/1999/xlink\",o={block:\"M5,0 0,2.5 5,5z\",classic:\"M5,0 0,2.5 5,5 3.5,3 3.5,2z\",diamond:\"M2.5,0 5,2.5 2.5,5 0,2.5z\",open:\"M6,1 1,3.5 6,6\",oval:\"M2.5,0A2.5,2.5,0,0,1,2.5,5 2.5,2.5,0,0,1,2.5,0z\"},p={};a.toString=function(){return\"Your browser supports SVG.\\nYou are running Raphaël \"+this.version};var q=function(d,e){if(e){typeof d==\"string\"&&(d=q(d));for(var f in e)e[b](f)&&(f.substring(0,6)==\"xlink:\"?d.setAttributeNS(n,f.substring(6),c(e[f])):d.setAttribute(f,c(e[f])))}else d=a._g.doc.createElementNS(\"http://www.w3.org/2000/svg\",d),d.style&&(d.style.webkitTapHighlightColor=\"rgba(0,0,0,0)\");return d},r=function(b,e){var j=\"linear\",k=b.id+e,m=.5,n=.5,o=b.node,p=b.paper,r=o.style,s=a._g.doc.getElementById(k);if(!s){e=c(e).replace(a._radial_gradient,function(a,b,c){j=\"radial\";if(b&&c){m=d(b),n=d(c);var e=(n>.5)*2-1;i(m-.5,2)+i(n-.5,2)>.25&&(n=f.sqrt(.25-i(m-.5,2))*e+.5)&&n!=.5&&(n=n.toFixed(5)-1e-5*e)}return l}),e=e.split(/\\s*\\-\\s*/);if(j==\"linear\"){var t=e.shift();t=-d(t);if(isNaN(t))return null;var u=[0,0,f.cos(a.rad(t)),f.sin(a.rad(t))],v=1/(g(h(u[2]),h(u[3]))||1);u[2]*=v,u[3]*=v,u[2]<0&&(u[0]=-u[2],u[2]=0),u[3]<0&&(u[1]=-u[3],u[3]=0)}var w=a._parseDots(e);if(!w)return null;k=k.replace(/[\\(\\)\\s,\\xb0#]/g,\"_\"),b.gradient&&k!=b.gradient.id&&(p.defs.removeChild(b.gradient),delete b.gradient);if(!b.gradient){s=q(j+\"Gradient\",{id:k}),b.gradient=s,q(s,j==\"radial\"?{fx:m,fy:n}:{x1:u[0],y1:u[1],x2:u[2],y2:u[3],gradientTransform:b.matrix.invert()}),p.defs.appendChild(s);for(var x=0,y=w.length;x<y;x++)s.appendChild(q(\"stop\",{offset:w[x].offset?w[x].offset:x?\"100%\":\"0%\",\"stop-color\":w[x].color||\"#fff\"}))}}q(o,{fill:\"url(#\"+k+\")\",opacity:1,\"fill-opacity\":1}),r.fill=l,r.opacity=1,r.fillOpacity=1;return 1},s=function(a){var b=a.getBBox(1);q(a.pattern,{patternTransform:a.matrix.invert()+\" translate(\"+b.x+\",\"+b.y+\")\"})},t=function(d,e,f){if(d.type==\"path\"){var g=c(e).toLowerCase().split(\"-\"),h=d.paper,i=f?\"end\":\"start\",j=d.node,k=d.attrs,m=k[\"stroke-width\"],n=g.length,r=\"classic\",s,t,u,v,w,x=3,y=3,z=5;while(n--)switch(g[n]){case\"block\":case\"classic\":case\"oval\":case\"diamond\":case\"open\":case\"none\":r=g[n];break;case\"wide\":y=5;break;case\"narrow\":y=2;break;case\"long\":x=5;break;case\"short\":x=2}r==\"open\"?(x+=2,y+=2,z+=2,u=1,v=f?4:1,w={fill:\"none\",stroke:k.stroke}):(v=u=x/2,w={fill:k.stroke,stroke:\"none\"}),d._.arrows?f?(d._.arrows.endPath&&p[d._.arrows.endPath]--,d._.arrows.endMarker&&p[d._.arrows.endMarker]--):(d._.arrows.startPath&&p[d._.arrows.startPath]--,d._.arrows.startMarker&&p[d._.arrows.startMarker]--):d._.arrows={};if(r!=\"none\"){var A=\"raphael-marker-\"+r,B=\"raphael-marker-\"+i+r+x+y;a._g.doc.getElementById(A)?p[A]++:(h.defs.appendChild(q(q(\"path\"),{\"stroke-linecap\":\"round\",d:o[r],id:A})),p[A]=1);var C=a._g.doc.getElementById(B),D;C?(p[B]++,D=C.getElementsByTagName(\"use\")[0]):(C=q(q(\"marker\"),{id:B,markerHeight:y,markerWidth:x,orient:\"auto\",refX:v,refY:y/2}),D=q(q(\"use\"),{\"xlink:href\":\"#\"+A,transform:(f?\"rotate(180 \"+x/2+\" \"+y/2+\") \":l)+\"scale(\"+x/z+\",\"+y/z+\")\",\"stroke-width\":(1/((x/z+y/z)/2)).toFixed(4)}),C.appendChild(D),h.defs.appendChild(C),p[B]=1),q(D,w);var F=u*(r!=\"diamond\"&&r!=\"oval\");f?(s=d._.arrows.startdx*m||0,t=a.getTotalLength(k.path)-F*m):(s=F*m,t=a.getTotalLength(k.path)-(d._.arrows.enddx*m||0)),w={},w[\"marker-\"+i]=\"url(#\"+B+\")\";if(t||s)w.d=Raphael.getSubpath(k.path,s,t);q(j,w),d._.arrows[i+\"Path\"]=A,d._.arrows[i+\"Marker\"]=B,d._.arrows[i+\"dx\"]=F,d._.arrows[i+\"Type\"]=r,d._.arrows[i+\"String\"]=e}else f?(s=d._.arrows.startdx*m||0,t=a.getTotalLength(k.path)-s):(s=0,t=a.getTotalLength(k.path)-(d._.arrows.enddx*m||0)),d._.arrows[i+\"Path\"]&&q(j,{d:Raphael.getSubpath(k.path,s,t)}),delete d._.arrows[i+\"Path\"],delete d._.arrows[i+\"Marker\"],delete d._.arrows[i+\"dx\"],delete d._.arrows[i+\"Type\"],delete d._.arrows[i+\"String\"];for(w in p)if(p[b](w)&&!p[w]){var G=a._g.doc.getElementById(w);G&&G.parentNode.removeChild(G)}}},u={\"\":[0],none:[0],\"-\":[3,1],\".\":[1,1],\"-.\":[3,1,1,1],\"-..\":[3,1,1,1,1,1],\". \":[1,3],\"- \":[4,3],\"--\":[8,3],\"- .\":[4,3,1,3],\"--.\":[8,3,1,3],\"--..\":[8,3,1,3,1,3]},v=function(a,b,d){b=u[c(b).toLowerCase()];if(b){var e=a.attrs[\"stroke-width\"]||\"1\",f={round:e,square:e,butt:0}[a.attrs[\"stroke-linecap\"]||d[\"stroke-linecap\"]]||0,g=[],h=b.length;while(h--)g[h]=b[h]*e+(h%2?1:-1)*f;q(a.node,{\"stroke-dasharray\":g.join(\",\")})}},w=function(d,f){var i=d.node,k=d.attrs,m=i.style.visibility;i.style.visibility=\"hidden\";for(var o in f)if(f[b](o)){if(!a._availableAttrs[b](o))continue;var p=f[o];k[o]=p;switch(o){case\"blur\":d.blur(p);break;case\"href\":case\"title\":case\"target\":var u=i.parentNode;if(u.tagName.toLowerCase()!=\"a\"){var w=q(\"a\");u.insertBefore(w,i),w.appendChild(i),u=w}o==\"target\"?u.setAttributeNS(n,\"show\",p==\"blank\"?\"new\":p):u.setAttributeNS(n,o,p);break;case\"cursor\":i.style.cursor=p;break;case\"transform\":d.transform(p);break;case\"arrow-start\":t(d,p);break;case\"arrow-end\":t(d,p,1);break;case\"clip-rect\":var x=c(p).split(j);if(x.length==4){d.clip&&d.clip.parentNode.parentNode.removeChild(d.clip.parentNode);var z=q(\"clipPath\"),A=q(\"rect\");z.id=a.createUUID(),q(A,{x:x[0],y:x[1],width:x[2],height:x[3]}),z.appendChild(A),d.paper.defs.appendChild(z),q(i,{\"clip-path\":\"url(#\"+z.id+\")\"}),d.clip=A}if(!p){var B=i.getAttribute(\"clip-path\");if(B){var C=a._g.doc.getElementById(B.replace(/(^url\\(#|\\)$)/g,l));C&&C.parentNode.removeChild(C),q(i,{\"clip-path\":l}),delete d.clip}}break;case\"path\":d.type==\"path\"&&(q(i,{d:p?k.path=a._pathToAbsolute(p):\"M0,0\"}),d._.dirty=1,d._.arrows&&(\"startString\"in d._.arrows&&t(d,d._.arrows.startString),\"endString\"in d._.arrows&&t(d,d._.arrows.endString,1)));break;case\"width\":i.setAttribute(o,p),d._.dirty=1;if(k.fx)o=\"x\",p=k.x;else break;case\"x\":k.fx&&(p=-k.x-(k.width||0));case\"rx\":if(o==\"rx\"&&d.type==\"rect\")break;case\"cx\":i.setAttribute(o,p),d.pattern&&s(d),d._.dirty=1;break;case\"height\":i.setAttribute(o,p),d._.dirty=1;if(k.fy)o=\"y\",p=k.y;else break;case\"y\":k.fy&&(p=-k.y-(k.height||0));case\"ry\":if(o==\"ry\"&&d.type==\"rect\")break;case\"cy\":i.setAttribute(o,p),d.pattern&&s(d),d._.dirty=1;break;case\"r\":d.type==\"rect\"?q(i,{rx:p,ry:p}):i.setAttribute(o,p),d._.dirty=1;break;case\"src\":d.type==\"image\"&&i.setAttributeNS(n,\"href\",p);break;case\"stroke-width\":if(d._.sx!=1||d._.sy!=1)p/=g(h(d._.sx),h(d._.sy))||1;d.paper._vbSize&&(p*=d.paper._vbSize),i.setAttribute(o,p),k[\"stroke-dasharray\"]&&v(d,k[\"stroke-dasharray\"],f),d._.arrows&&(\"startString\"in d._.arrows&&t(d,d._.arrows.startString),\"endString\"in d._.arrows&&t(d,d._.arrows.endString,1));break;case\"stroke-dasharray\":v(d,p,f);break;case\"fill\":var D=c(p).match(a._ISURL);if(D){z=q(\"pattern\");var F=q(\"image\");z.id=a.createUUID(),q(z,{x:0,y:0,patternUnits:\"userSpaceOnUse\",height:1,width:1}),q(F,{x:0,y:0,\"xlink:href\":D[1]}),z.appendChild(F),function(b){a._preload(D[1],function(){var a=this.offsetWidth,c=this.offsetHeight;q(b,{width:a,height:c}),q(F,{width:a,height:c}),d.paper.safari()})}(z),d.paper.defs.appendChild(z),q(i,{fill:\"url(#\"+z.id+\")\"}),d.pattern=z,d.pattern&&s(d);break}var G=a.getRGB(p);if(!G.error)delete f.gradient,delete k.gradient,!a.is(k.opacity,\"undefined\")&&a.is(f.opacity,\"undefined\")&&q(i,{opacity:k.opacity}),!a.is(k[\"fill-opacity\"],\"undefined\")&&a.is(f[\"fill-opacity\"],\"undefined\")&&q(i,{\"fill-opacity\":k[\"fill-opacity\"]});else if((d.type==\"circle\"||d.type==\"ellipse\"||c(p).charAt()!=\"r\")&&r(d,p)){if(\"opacity\"in k||\"fill-opacity\"in k){var H=a._g.doc.getElementById(i.getAttribute(\"fill\").replace(/^url\\(#|\\)$/g,l));if(H){var I=H.getElementsByTagName(\"stop\");q(I[I.length-1],{\"stop-opacity\":(\"opacity\"in k?k.opacity:1)*(\"fill-opacity\"in k?k[\"fill-opacity\"]:1)})}}k.gradient=p,k.fill=\"none\";break}G[b](\"opacity\")&&q(i,{\"fill-opacity\":G.opacity>1?G.opacity/100:G.opacity});case\"stroke\":G=a.getRGB(p),i.setAttribute(o,G.hex),o==\"stroke\"&&G[b](\"opacity\")&&q(i,{\"stroke-opacity\":G.opacity>1?G.opacity/100:G.opacity}),o==\"stroke\"&&d._.arrows&&(\"startString\"in d._.arrows&&t(d,d._.arrows.startString),\"endString\"in d._.arrows&&t(d,d._.arrows.endString,1));break;case\"gradient\":(d.type==\"circle\"||d.type==\"ellipse\"||c(p).charAt()!=\"r\")&&r(d,p);break;case\"opacity\":k.gradient&&!k[b](\"stroke-opacity\")&&q(i,{\"stroke-opacity\":p>1?p/100:p});case\"fill-opacity\":if(k.gradient){H=a._g.doc.getElementById(i.getAttribute(\"fill\").replace(/^url\\(#|\\)$/g,l)),H&&(I=H.getElementsByTagName(\"stop\"),q(I[I.length-1],{\"stop-opacity\":p}));break};default:o==\"font-size\"&&(p=e(p,10)+\"px\");var J=o.replace(/(\\-.)/g,function(a){return a.substring(1).toUpperCase()});i.style[J]=p,d._.dirty=1,i.setAttribute(o,p)}}y(d,f),i.style.visibility=m},x=1.2,y=function(d,f){if(d.type==\"text\"&&!!(f[b](\"text\")||f[b](\"font\")||f[b](\"font-size\")||f[b](\"x\")||f[b](\"y\"))){var g=d.attrs,h=d.node,i=h.firstChild?e(a._g.doc.defaultView.getComputedStyle(h.firstChild,l).getPropertyValue(\"font-size\"),10):10;if(f[b](\"text\")){g.text=f.text;while(h.firstChild)h.removeChild(h.firstChild);var j=c(f.text).split(\"\\n\"),k=[],m;for(var n=0,o=j.length;n<o;n++)m=q(\"tspan\"),n&&q(m,{dy:i*x,x:g.x}),m.appendChild(a._g.doc.createTextNode(j[n])),h.appendChild(m),k[n]=m}else{k=h.getElementsByTagName(\"tspan\");for(n=0,o=k.length;n<o;n++)n?q(k[n],{dy:i*x,x:g.x}):q(k[0],{dy:0})}q(h,{x:g.x,y:g.y}),d._.dirty=1;var p=d._getBBox(),r=g.y-(p.y+p.height/2);r&&a.is(r,\"finite\")&&q(k[0],{dy:r})}},z=function(b,c){var d=0,e=0;this[0]=this.node=b,b.raphael=!0,this.id=a._oid++,b.raphaelid=this.id,this.matrix=a.matrix(),this.realPath=null,this.paper=c,this.attrs=this.attrs||{},this._={transform:[],sx:1,sy:1,deg:0,dx:0,dy:0,dirty:1},!c.bottom&&(c.bottom=this),this.prev=c.top,c.top&&(c.top.next=this),c.top=this,this.next=null},A=a.el;z.prototype=A,A.constructor=z,a._engine.path=function(a,b){var c=q(\"path\");b.canvas&&b.canvas.appendChild(c);var d=new z(c,b);d.type=\"path\",w(d,{fill:\"none\",stroke:\"#000\",path:a});return d},A.rotate=function(a,b,e){if(this.removed)return this;a=c(a).split(j),a.length-1&&(b=d(a[1]),e=d(a[2])),a=d(a[0]),e==null&&(b=e);if(b==null||e==null){var f=this.getBBox(1);b=f.x+f.width/2,e=f.y+f.height/2}this.transform(this._.transform.concat([[\"r\",a,b,e]]));return this},A.scale=function(a,b,e,f){if(this.removed)return this;a=c(a).split(j),a.length-1&&(b=d(a[1]),e=d(a[2]),f=d(a[3])),a=d(a[0]),b==null&&(b=a),f==null&&(e=f);if(e==null||f==null)var g=this.getBBox(1);e=e==null?g.x+g.width/2:e,f=f==null?g.y+g.height/2:f,this.transform(this._.transform.concat([[\"s\",a,b,e,f]]));return this},A.translate=function(a,b){if(this.removed)return this;a=c(a).split(j),a.length-1&&(b=d(a[1])),a=d(a[0])||0,b=+b||0,this.transform(this._.transform.concat([[\"t\",a,b]]));return this},A.transform=function(c){var d=this._;if(c==null)return d.transform;a._extractTransform(this,c),this.clip&&q(this.clip,{transform:this.matrix.invert()}),this.pattern&&s(this),this.node&&q(this.node,{transform:this.matrix});if(d.sx!=1||d.sy!=1){var e=this.attrs[b](\"stroke-width\")?this.attrs[\"stroke-width\"]:1;this.attr({\"stroke-width\":e})}return this},A.hide=function(){!this.removed&&this.paper.safari(this.node.style.display=\"none\");return this},A.show=function(){!this.removed&&this.paper.safari(this.node.style.display=\"\");return this},A.remove=function(){if(!this.removed&&!!this.node.parentNode){var b=this.paper;b.__set__&&b.__set__.exclude(this),k.unbind(\"raphael.*.*.\"+this.id),this.gradient&&b.defs.removeChild(this.gradient),a._tear(this,b),this.node.parentNode.tagName.toLowerCase()==\"a\"?this.node.parentNode.parentNode.removeChild(this.node.parentNode):this.node.parentNode.removeChild(this.node);for(var c in this)this[c]=typeof this[c]==\"function\"?a._removedFactory(c):null;this.removed=!0}},A._getBBox=function(){if(this.node.style.display==\"none\"){this.show();var a=!0}var b={};try{b=this.node.getBBox()}catch(c){}finally{b=b||{}}a&&this.hide();return b},A.attr=function(c,d){if(this.removed)return this;if(c==null){var e={};for(var f in this.attrs)this.attrs[b](f)&&(e[f]=this.attrs[f]);e.gradient&&e.fill==\"none\"&&(e.fill=e.gradient)&&delete e.gradient,e.transform=this._.transform;return e}if(d==null&&a.is(c,\"string\")){if(c==\"fill\"&&this.attrs.fill==\"none\"&&this.attrs.gradient)return this.attrs.gradient;if(c==\"transform\")return this._.transform;var g=c.split(j),h={};for(var i=0,l=g.length;i<l;i++)c=g[i],c in this.attrs?h[c]=this.attrs[c]:a.is(this.paper.customAttributes[c],\"function\")?h[c]=this.paper.customAttributes[c].def:h[c]=a._availableAttrs[c];return l-1?h:h[g[0]]}if(d==null&&a.is(c,\"array\")){h={};for(i=0,l=c.length;i<l;i++)h[c[i]]=this.attr(c[i]);return h}if(d!=null){var m={};m[c]=d}else c!=null&&a.is(c,\"object\")&&(m=c);for(var n in m)k(\"raphael.attr.\"+n+\".\"+this.id,this,m[n]);for(n in this.paper.customAttributes)if(this.paper.customAttributes[b](n)&&m[b](n)&&a.is(this.paper.customAttributes[n],\"function\")){var o=this.paper.customAttributes[n].apply(this,[].concat(m[n]));this.attrs[n]=m[n];for(var p in o)o[b](p)&&(m[p]=o[p])}w(this,m);return this},A.toFront=function(){if(this.removed)return this;this.node.parentNode.tagName.toLowerCase()==\"a\"?this.node.parentNode.parentNode.appendChild(this.node.parentNode):this.node.parentNode.appendChild(this.node);var b=this.paper;b.top!=this&&a._tofront(this,b);return this},A.toBack=function(){if(this.removed)return this;var b=this.node.parentNode;b.tagName.toLowerCase()==\"a\"?b.parentNode.insertBefore(this.node.parentNode,this.node.parentNode.parentNode.firstChild):b.firstChild!=this.node&&b.insertBefore(this.node,this.node.parentNode.firstChild),a._toback(this,this.paper);var c=this.paper;return this},A.insertAfter=function(b){if(this.removed)return this;var c=b.node||b[b.length-1].node;c.nextSibling?c.parentNode.insertBefore(this.node,c.nextSibling):c.parentNode.appendChild(this.node),a._insertafter(this,b,this.paper);return this},A.insertBefore=function(b){if(this.removed)return this;var c=b.node||b[0].node;c.parentNode.insertBefore(this.node,c),a._insertbefore(this,b,this.paper);return this},A.blur=function(b){var c=this;if(+b!==0){var d=q(\"filter\"),e=q(\"feGaussianBlur\");c.attrs.blur=b,d.id=a.createUUID(),q(e,{stdDeviation:+b||1.5}),d.appendChild(e),c.paper.defs.appendChild(d),c._blur=d,q(c.node,{filter:\"url(#\"+d.id+\")\"})}else c._blur&&(c._blur.parentNode.removeChild(c._blur),delete c._blur,delete c.attrs.blur),c.node.removeAttribute(\"filter\")},a._engine.circle=function(a,b,c,d){var e=q(\"circle\");a.canvas&&a.canvas.appendChild(e);var f=new z(e,a);f.attrs={cx:b,cy:c,r:d,fill:\"none\",stroke:\"#000\"},f.type=\"circle\",q(e,f.attrs);return f},a._engine.rect=function(a,b,c,d,e,f){var g=q(\"rect\");a.canvas&&a.canvas.appendChild(g);var h=new z(g,a);h.attrs={x:b,y:c,width:d,height:e,r:f||0,rx:f||0,ry:f||0,fill:\"none\",stroke:\"#000\"},h.type=\"rect\",q(g,h.attrs);return h},a._engine.ellipse=function(a,b,c,d,e){var f=q(\"ellipse\");a.canvas&&a.canvas.appendChild(f);var g=new z(f,a);g.attrs={cx:b,cy:c,rx:d,ry:e,fill:\"none\",stroke:\"#000\"},g.type=\"ellipse\",q(f,g.attrs);return g},a._engine.image=function(a,b,c,d,e,f){var g=q(\"image\");q(g,{x:c,y:d,width:e,height:f,preserveAspectRatio:\"none\"}),g.setAttributeNS(n,\"href\",b),a.canvas&&a.canvas.appendChild(g);var h=new z(g,a);h.attrs={x:c,y:d,width:e,height:f,src:b},h.type=\"image\";return h},a._engine.text=function(b,c,d,e){var f=q(\"text\");b.canvas&&b.canvas.appendChild(f);var g=new z(f,b);g.attrs={x:c,y:d,\"text-anchor\":\"middle\",text:e,font:a._availableAttrs.font,stroke:\"none\",fill:\"#000\"},g.type=\"text\",w(g,g.attrs);return g},a._engine.setSize=function(a,b){this.width=a||this.width,this.height=b||this.height,this.canvas.setAttribute(\"width\",this.width),this.canvas.setAttribute(\"height\",this.height),this._viewBox&&this.setViewBox.apply(this,this._viewBox);return this},a._engine.create=function(){var b=a._getContainer.apply(0,arguments),c=b&&b.container,d=b.x,e=b.y,f=b.width,g=b.height;if(!c)throw new Error(\"SVG container not found.\");var h=q(\"svg\"),i=\"overflow:hidden;\",j;d=d||0,e=e||0,f=f||512,g=g||342,q(h,{height:g,version:1.1,width:f,xmlns:\"http://www.w3.org/2000/svg\"}),c==1?(h.style.cssText=i+\"position:absolute;left:\"+d+\"px;top:\"+e+\"px\",a._g.doc.body.appendChild(h),j=1):(h.style.cssText=i+\"position:relative\",c.firstChild?c.insertBefore(h,c.firstChild):c.appendChild(h)),c=new a._Paper,c.width=f,c.height=g,c.canvas=h,c.clear(),c._left=c._top=0,j&&(c.renderfix=function(){}),c.renderfix();return c},a._engine.setViewBox=function(a,b,c,d,e){k(\"raphael.setViewBox\",this,this._viewBox,[a,b,c,d,e]);var f=g(c/this.width,d/this.height),h=this.top,i=e?\"meet\":\"xMinYMin\",j,l;a==null?(this._vbSize&&(f=1),delete this._vbSize,j=\"0 0 \"+this.width+m+this.height):(this._vbSize=f,j=a+m+b+m+c+m+d),q(this.canvas,{viewBox:j,preserveAspectRatio:i});while(f&&h)l=\"stroke-width\"in h.attrs?h.attrs[\"stroke-width\"]:1,h.attr({\"stroke-width\":l}),h._.dirty=1,h._.dirtyT=1,h=h.prev;this._viewBox=[a,b,c,d,!!e];return this},a.prototype.renderfix=function(){var a=this.canvas,b=a.style,c;try{c=a.getScreenCTM()||a.createSVGMatrix()}catch(d){c=a.createSVGMatrix()}var e=-c.e%1,f=-c.f%1;if(e||f)e&&(this._left=(this._left+e)%1,b.left=this._left+\"px\"),f&&(this._top=(this._top+f)%1,b.top=this._top+\"px\")},a.prototype.clear=function(){a.eve(\"raphael.clear\",this);var b=this.canvas;while(b.firstChild)b.removeChild(b.firstChild);this.bottom=this.top=null,(this.desc=q(\"desc\")).appendChild(a._g.doc.createTextNode(\"Created with Raphaël \"+a.version)),b.appendChild(this.desc),b.appendChild(this.defs=q(\"defs\"))},a.prototype.remove=function(){k(\"raphael.remove\",this),this.canvas.parentNode&&this.canvas.parentNode.removeChild(this.canvas);for(var b in this)this[b]=typeof this[b]==\"function\"?a._removedFactory(b):null};var B=a.st;for(var C in A)A[b](C)&&!B[b](C)&&(B[C]=function(a){return function(){var b=arguments;return this.forEach(function(c){c[a].apply(c,b)})}}(C))}(window.Raphael),window.Raphael.vml&&function(a){var b=\"hasOwnProperty\",c=String,d=parseFloat,e=Math,f=e.round,g=e.max,h=e.min,i=e.abs,j=\"fill\",k=/[, ]+/,l=a.eve,m=\" progid:DXImageTransform.Microsoft\",n=\" \",o=\"\",p={M:\"m\",L:\"l\",C:\"c\",Z:\"x\",m:\"t\",l:\"r\",c:\"v\",z:\"x\"},q=/([clmz]),?([^clmz]*)/gi,r=/ progid:\\S+Blur\\([^\\)]+\\)/g,s=/-?[^,\\s-]+/g,t=\"position:absolute;left:0;top:0;width:1px;height:1px\",u=21600,v={path:1,rect:1,image:1},w={circle:1,ellipse:1},x=function(b){var d=/[ahqstv]/ig,e=a._pathToAbsolute;c(b).match(d)&&(e=a._path2curve),d=/[clmz]/g;if(e==a._pathToAbsolute&&!c(b).match(d)){var g=c(b).replace(q,function(a,b,c){var d=[],e=b.toLowerCase()==\"m\",g=p[b];c.replace(s,function(a){e&&d.length==2&&(g+=d+p[b==\"m\"?\"l\":\"L\"],d=[]),d.push(f(a*u))});return g+d});return g}var h=e(b),i,j;g=[];for(var k=0,l=h.length;k<l;k++){i=h[k],j=h[k][0].toLowerCase(),j==\"z\"&&(j=\"x\");for(var m=1,r=i.length;m<r;m++)j+=f(i[m]*u)+(m!=r-1?\",\":o);g.push(j)}return g.join(n)},y=function(b,c,d){var e=a.matrix();e.rotate(-b,.5,.5);return{dx:e.x(c,d),dy:e.y(c,d)}},z=function(a,b,c,d,e,f){var g=a._,h=a.matrix,k=g.fillpos,l=a.node,m=l.style,o=1,p=\"\",q,r=u/b,s=u/c;m.visibility=\"hidden\";if(!!b&&!!c){l.coordsize=i(r)+n+i(s),m.rotation=f*(b*c<0?-1:1);if(f){var t=y(f,d,e);d=t.dx,e=t.dy}b<0&&(p+=\"x\"),c<0&&(p+=\" y\")&&(o=-1),m.flip=p,l.coordorigin=d*-r+n+e*-s;if(k||g.fillsize){var v=l.getElementsByTagName(j);v=v&&v[0],l.removeChild(v),k&&(t=y(f,h.x(k[0],k[1]),h.y(k[0],k[1])),v.position=t.dx*o+n+t.dy*o),g.fillsize&&(v.size=g.fillsize[0]*i(b)+n+g.fillsize[1]*i(c)),l.appendChild(v)}m.visibility=\"visible\"}};a.toString=function(){return\"Your browser doesn’t support SVG. Falling down to VML.\\nYou are running Raphaël \"+this.version};var A=function(a,b,d){var e=c(b).toLowerCase().split(\"-\"),f=d?\"end\":\"start\",g=e.length,h=\"classic\",i=\"medium\",j=\"medium\";while(g--)switch(e[g]){case\"block\":case\"classic\":case\"oval\":case\"diamond\":case\"open\":case\"none\":h=e[g];break;case\"wide\":case\"narrow\":j=e[g];break;case\"long\":case\"short\":i=e[g]}var k=a.node.getElementsByTagName(\"stroke\")[0];k[f+\"arrow\"]=h,k[f+\"arrowlength\"]=i,k[f+\"arrowwidth\"]=j},B=function(e,i){e.attrs=e.attrs||{};var l=e.node,m=e.attrs,p=l.style,q,r=v[e.type]&&(i.x!=m.x||i.y!=m.y||i.width!=m.width||i.height!=m.height||i.cx!=m.cx||i.cy!=m.cy||i.rx!=m.rx||i.ry!=m.ry||i.r!=m.r),s=w[e.type]&&(m.cx!=i.cx||m.cy!=i.cy||m.r!=i.r||m.rx!=i.rx||m.ry!=i.ry),t=e;for(var y in i)i[b](y)&&(m[y]=i[y]);r&&(m.path=a._getPath[e.type](e),e._.dirty=1),i.href&&(l.href=i.href),i.title&&(l.title=i.title),i.target&&(l.target=i.target),i.cursor&&(p.cursor=i.cursor),\"blur\"in i&&e.blur(i.blur);if(i.path&&e.type==\"path\"||r)l.path=x(~c(m.path).toLowerCase().indexOf(\"r\")?a._pathToAbsolute(m.path):m.path),e.type==\"image\"&&(e._.fillpos=[m.x,m.y],e._.fillsize=[m.width,m.height],z(e,1,1,0,0,0));\"transform\"in i&&e.transform(i.transform);if(s){var B=+m.cx,D=+m.cy,E=+m.rx||+m.r||0,G=+m.ry||+m.r||0;l.path=a.format(\"ar{0},{1},{2},{3},{4},{1},{4},{1}x\",f((B-E)*u),f((D-G)*u),f((B+E)*u),f((D+G)*u),f(B*u))}if(\"clip-rect\"in i){var H=c(i[\"clip-rect\"]).split(k);if(H.length==4){H[2]=+H[2]+ +H[0],H[3]=+H[3]+ +H[1];var I=l.clipRect||a._g.doc.createElement(\"div\"),J=I.style;J.clip=a.format(\"rect({1}px {2}px {3}px {0}px)\",H),l.clipRect||(J.position=\"absolute\",J.top=0,J.left=0,J.width=e.paper.width+\"px\",J.height=e.paper.height+\"px\",l.parentNode.insertBefore(I,l),I.appendChild(l),l.clipRect=I)}i[\"clip-rect\"]||l.clipRect&&(l.clipRect.style.clip=\"auto\")}if(e.textpath){var K=e.textpath.style;i.font&&(K.font=i.font),i[\"font-family\"]&&(K.fontFamily='\"'+i[\"font-family\"].split(\",\")[0].replace(/^['\"]+|['\"]+$/g,o)+'\"'),i[\"font-size\"]&&(K.fontSize=i[\"font-size\"]),i[\"font-weight\"]&&(K.fontWeight=i[\"font-weight\"]),i[\"font-style\"]&&(K.fontStyle=i[\"font-style\"])}\"arrow-start\"in i&&A(t,i[\"arrow-start\"]),\"arrow-end\"in i&&A(t,i[\"arrow-end\"],1);if(i.opacity!=null||i[\"stroke-width\"]!=null||i.fill!=null||i.src!=null||i.stroke!=null||i[\"stroke-width\"]!=null||i[\"stroke-opacity\"]!=null||i[\"fill-opacity\"]!=null||i[\"stroke-dasharray\"]!=null||i[\"stroke-miterlimit\"]!=null||i[\"stroke-linejoin\"]!=null||i[\"stroke-linecap\"]!=null){var L=l.getElementsByTagName(j),M=!1;L=L&&L[0],!L&&(M=L=F(j)),e.type==\"image\"&&i.src&&(L.src=i.src),i.fill&&(L.on=!0);if(L.on==null||i.fill==\"none\"||i.fill===null)L.on=!1;if(L.on&&i.fill){var N=c(i.fill).match(a._ISURL);if(N){L.parentNode==l&&l.removeChild(L),L.rotate=!0,L.src=N[1],L.type=\"tile\";var O=e.getBBox(1);L.position=O.x+n+O.y,e._.fillpos=[O.x,O.y],a._preload(N[1],function(){e._.fillsize=[this.offsetWidth,this.offsetHeight]})}else L.color=a.getRGB(i.fill).hex,L.src=o,L.type=\"solid\",a.getRGB(i.fill).error&&(t.type in{circle:1,ellipse:1}||c(i.fill).charAt()!=\"r\")&&C(t,i.fill,L)&&(m.fill=\"none\",m.gradient=i.fill,L.rotate=!1)}if(\"fill-opacity\"in i||\"opacity\"in i){var P=((+m[\"fill-opacity\"]+1||2)-1)*((+m.opacity+1||2)-1)*((+a.getRGB(i.fill).o+1||2)-1);P=h(g(P,0),1),L.opacity=P,L.src&&(L.color=\"none\")}l.appendChild(L);var Q=l.getElementsByTagName(\"stroke\")&&l.getElementsByTagName(\"stroke\")[0],T=!1;!Q&&(T=Q=F(\"stroke\"));if(i.stroke&&i.stroke!=\"none\"||i[\"stroke-width\"]||i[\"stroke-opacity\"]!=null||i[\"stroke-dasharray\"]||i[\"stroke-miterlimit\"]||i[\"stroke-linejoin\"]||i[\"stroke-linecap\"])Q.on=!0;(i.stroke==\"none\"||i.stroke===null||Q.on==null||i.stroke==0||i[\"stroke-width\"]==0)&&(Q.on=!1);var U=a.getRGB(i.stroke);Q.on&&i.stroke&&(Q.color=U.hex),P=((+m[\"stroke-opacity\"]+1||2)-1)*((+m.opacity+1||2)-1)*((+U.o+1||2)-1);var V=(d(i[\"stroke-width\"])||1)*.75;P=h(g(P,0),1),i[\"stroke-width\"]==null&&(V=m[\"stroke-width\"]),i[\"stroke-width\"]&&(Q.weight=V),V&&V<1&&(P*=V)&&(Q.weight=1),Q.opacity=P,i[\"stroke-linejoin\"]&&(Q.joinstyle=i[\"stroke-linejoin\"]||\"miter\"),Q.miterlimit=i[\"stroke-miterlimit\"]||8,i[\"stroke-linecap\"]&&(Q.endcap=i[\"stroke-linecap\"]==\"butt\"?\"flat\":i[\"stroke-linecap\"]==\"square\"?\"square\":\"round\");if(i[\"stroke-dasharray\"]){var W={\"-\":\"shortdash\",\".\":\"shortdot\",\"-.\":\"shortdashdot\",\"-..\":\"shortdashdotdot\",\". \":\"dot\",\"- \":\"dash\",\"--\":\"longdash\",\"- .\":\"dashdot\",\"--.\":\"longdashdot\",\"--..\":\"longdashdotdot\"};Q.dashstyle=W[b](i[\"stroke-dasharray\"])?W[i[\"stroke-dasharray\"]]:o}T&&l.appendChild(Q)}if(t.type==\"text\"){t.paper.canvas.style.display=o;var X=t.paper.span,Y=100,Z=m.font&&m.font.match(/\\d+(?:\\.\\d*)?(?=px)/);p=X.style,m.font&&(p.font=m.font),m[\"font-family\"]&&(p.fontFamily=m[\"font-family\"]),m[\"font-weight\"]&&(p.fontWeight=m[\"font-weight\"]),m[\"font-style\"]&&(p.fontStyle=m[\"font-style\"]),Z=d(m[\"font-size\"]||Z&&Z[0])||10,p.fontSize=Z*Y+\"px\",t.textpath.string&&(X.innerHTML=c(t.textpath.string).replace(/</g,\"&#60;\").replace(/&/g,\"&#38;\").replace(/\\n/g,\"<br>\"));var $=X.getBoundingClientRect();t.W=m.w=($.right-$.left)/Y,t.H=m.h=($.bottom-$.top)/Y,t.X=m.x,t.Y=m.y+t.H/2,(\"x\"in i||\"y\"in i)&&(t.path.v=a.format(\"m{0},{1}l{2},{1}\",f(m.x*u),f(m.y*u),f(m.x*u)+1));var _=[\"x\",\"y\",\"text\",\"font\",\"font-family\",\"font-weight\",\"font-style\",\"font-size\"];for(var ba=0,bb=_.length;ba<bb;ba++)if(_[ba]in i){t._.dirty=1;break}switch(m[\"text-anchor\"]){case\"start\":t.textpath.style[\"v-text-align\"]=\"left\",t.bbx=t.W/2;break;case\"end\":t.textpath.style[\"v-text-align\"]=\"right\",t.bbx=-t.W/2;break;default:t.textpath.style[\"v-text-align\"]=\"center\",t.bbx=0}t.textpath.style[\"v-text-kern\"]=!0}},C=function(b,f,g){b.attrs=b.attrs||{};var h=b.attrs,i=Math.pow,j,k,l=\"linear\",m=\".5 .5\";b.attrs.gradient=f,f=c(f).replace(a._radial_gradient,function(a,b,c){l=\"radial\",b&&c&&(b=d(b),c=d(c),i(b-.5,2)+i(c-.5,2)>.25&&(c=e.sqrt(.25-i(b-.5,2))*((c>.5)*2-1)+.5),m=b+n+c);return o}),f=f.split(/\\s*\\-\\s*/);if(l==\"linear\"){var p=f.shift();p=-d(p);if(isNaN(p))return null}var q=a._parseDots(f);if(!q)return null;b=b.shape||b.node;if(q.length){b.removeChild(g),g.on=!0,g.method=\"none\",g.color=q[0].color,g.color2=q[q.length-1].color;var r=[];for(var s=0,t=q.length;s<t;s++)q[s].offset&&r.push(q[s].offset+n+q[s].color);g.colors=r.length?r.join():\"0% \"+g.color,l==\"radial\"?(g.type=\"gradientTitle\",g.focus=\"100%\",g.focussize=\"0 0\",g.focusposition=m,g.angle=0):(g.type=\"gradient\",g.angle=(270-p)%360),b.appendChild(g)}return 1},D=function(b,c){this[0]=this.node=b,b.raphael=!0,this.id=a._oid++,b.raphaelid=this.id,this.X=0,this.Y=0,this.attrs={},this.paper=c,this.matrix=a.matrix(),this._={transform:[],sx:1,sy:1,dx:0,dy:0,deg:0,dirty:1,dirtyT:1},!c.bottom&&(c.bottom=this),this.prev=c.top,c.top&&(c.top.next=this),c.top=this,this.next=null},E=a.el;D.prototype=E,E.constructor=D,E.transform=function(b){if(b==null)return this._.transform;var d=this.paper._viewBoxShift,e=d?\"s\"+[d.scale,d.scale]+\"-1-1t\"+[d.dx,d.dy]:o,f;d&&(f=b=c(b).replace(/\\.{3}|\\u2026/g,this._.transform||o)),a._extractTransform(this,e+b);var g=this.matrix.clone(),h=this.skew,i=this.node,j,k=~c(this.attrs.fill).indexOf(\"-\"),l=!c(this.attrs.fill).indexOf(\"url(\");g.translate(-0.5,-0.5);if(l||k||this.type==\"image\"){h.matrix=\"1 0 0 1\",h.offset=\"0 0\",j=g.split();if(k&&j.noRotation||!j.isSimple){i.style.filter=g.toFilter();var m=this.getBBox(),p=this.getBBox(1),q=m.x-p.x,r=m.y-p.y;i.coordorigin=q*-u+n+r*-u,z(this,1,1,q,r,0)}else i.style.filter=o,z(this,j.scalex,j.scaley,j.dx,j.dy,j.rotate)}else i.style.filter=o,h.matrix=c(g),h.offset=g.offset();f&&(this._.transform=f);return this},E.rotate=function(a,b,e){if(this.removed)return this;if(a!=null){a=c(a).split(k),a.length-1&&(b=d(a[1]),e=d(a[2])),a=d(a[0]),e==null&&(b=e);if(b==null||e==null){var f=this.getBBox(1);b=f.x+f.width/2,e=f.y+f.height/2}this._.dirtyT=1,this.transform(this._.transform.concat([[\"r\",a,b,e]]));return this}},E.translate=function(a,b){if(this.removed)return this;a=c(a).split(k),a.length-1&&(b=d(a[1])),a=d(a[0])||0,b=+b||0,this._.bbox&&(this._.bbox.x+=a,this._.bbox.y+=b),this.transform(this._.transform.concat([[\"t\",a,b]]));return this},E.scale=function(a,b,e,f){if(this.removed)return this;a=c(a).split(k),a.length-1&&(b=d(a[1]),e=d(a[2]),f=d(a[3]),isNaN(e)&&(e=null),isNaN(f)&&(f=null)),a=d(a[0]),b==null&&(b=a),f==null&&(e=f);if(e==null||f==null)var g=this.getBBox(1);e=e==null?g.x+g.width/2:e,f=f==null?g.y+g.height/2:f,this.transform(this._.transform.concat([[\"s\",a,b,e,f]])),this._.dirtyT=1;return this},E.hide=function(){!this.removed&&(this.node.style.display=\"none\");return this},E.show=function(){!this.removed&&(this.node.style.display=o);return this},E._getBBox=function(){if(this.removed)return{};return{x:this.X+(this.bbx||0)-this.W/2,y:this.Y-this.H,width:this.W,height:this.H}},E.remove=function(){if(!this.removed&&!!this.node.parentNode){this.paper.__set__&&this.paper.__set__.exclude(this),a.eve.unbind(\"raphael.*.*.\"+this.id),a._tear(this,this.paper),this.node.parentNode.removeChild(this.node),this.shape&&this.shape.parentNode.removeChild(this.shape);for(var b in this)this[b]=typeof this[b]==\"function\"?a._removedFactory(b):null;this.removed=!0}},E.attr=function(c,d){if(this.removed)return this;if(c==null){var e={};for(var f in this.attrs)this.attrs[b](f)&&(e[f]=this.attrs[f]);e.gradient&&e.fill==\"none\"&&(e.fill=e.gradient)&&delete e.gradient,e.transform=this._.transform;return e}if(d==null&&a.is(c,\"string\")){if(c==j&&this.attrs.fill==\"none\"&&this.attrs.gradient)return this.attrs.gradient;var g=c.split(k),h={};for(var i=0,m=g.length;i<m;i++)c=g[i],c in this.attrs?h[c]=this.attrs[c]:a.is(this.paper.customAttributes[c],\"function\")?h[c]=this.paper.customAttributes[c].def:h[c]=a._availableAttrs[c];return m-1?h:h[g[0]]}if(this.attrs&&d==null&&a.is(c,\"array\")){h={};for(i=0,m=c.length;i<m;i++)h[c[i]]=this.attr(c[i]);return h}var n;d!=null&&(n={},n[c]=d),d==null&&a.is(c,\"object\")&&(n=c);for(var o in n)l(\"raphael.attr.\"+o+\".\"+this.id,this,n[o]);if(n){for(o in this.paper.customAttributes)if(this.paper.customAttributes[b](o)&&n[b](o)&&a.is(this.paper.customAttributes[o],\"function\")){var p=this.paper.customAttributes[o].apply(this,[].concat(n[o]));this.attrs[o]=n[o];for(var q in p)p[b](q)&&(n[q]=p[q])}n.text&&this.type==\"text\"&&(this.textpath.string=n.text),B(this,n)}return this},E.toFront=function(){!this.removed&&this.node.parentNode.appendChild(this.node),this.paper&&this.paper.top!=this&&a._tofront(this,this.paper);return this},E.toBack=function(){if(this.removed)return this;this.node.parentNode.firstChild!=this.node&&(this.node.parentNode.insertBefore(this.node,this.node.parentNode.firstChild),a._toback(this,this.paper));return this},E.insertAfter=function(b){if(this.removed)return this;b.constructor==a.st.constructor&&(b=b[b.length-1]),b.node.nextSibling?b.node.parentNode.insertBefore(this.node,b.node.nextSibling):b.node.parentNode.appendChild(this.node),a._insertafter(this,b,this.paper);return this},E.insertBefore=function(b){if(this.removed)return this;b.constructor==a.st.constructor&&(b=b[0]),b.node.parentNode.insertBefore(this.node,b.node),a._insertbefore(this,b,this.paper);return this},E.blur=function(b){var c=this.node.runtimeStyle,d=c.filter;d=d.replace(r,o),+b!==0?(this.attrs.blur=b,c.filter=d+n+m+\".Blur(pixelradius=\"+(+b||1.5)+\")\",c.margin=a.format(\"-{0}px 0 0 -{0}px\",f(+b||1.5))):(c.filter=d,c.margin=0,delete this.attrs.blur)},a._engine.path=function(a,b){var c=F(\"shape\");c.style.cssText=t,c.coordsize=u+n+u,c.coordorigin=b.coordorigin;var d=new D(c,b),e={fill:\"none\",stroke:\"#000\"};a&&(e.path=a),d.type=\"path\",d.path=[],d.Path=o,B(d,e),b.canvas.appendChild(c);var f=F(\"skew\");f.on=!0,c.appendChild(f),d.skew=f,d.transform(o);return d},a._engine.rect=function(b,c,d,e,f,g){var h=a._rectPath(c,d,e,f,g),i=b.path(h),j=i.attrs;i.X=j.x=c,i.Y=j.y=d,i.W=j.width=e,i.H=j.height=f,j.r=g,j.path=h,i.type=\"rect\";return i},a._engine.ellipse=function(a,b,c,d,e){var f=a.path(),g=f.attrs;f.X=b-d,f.Y=c-e,f.W=d*2,f.H=e*2,f.type=\"ellipse\",B(f,{cx:b,cy:c,rx:d,ry:e});return f},a._engine.circle=function(a,b,c,d){var e=a.path(),f=e.attrs;e.X=b-d,e.Y=c-d,e.W=e.H=d*2,e.type=\"circle\",B(e,{cx:b,cy:c,r:d});return e},a._engine.image=function(b,c,d,e,f,g){var h=a._rectPath(d,e,f,g),i=b.path(h).attr({stroke:\"none\"}),k=i.attrs,l=i.node,m=l.getElementsByTagName(j)[0];k.src=c,i.X=k.x=d,i.Y=k.y=e,i.W=k.width=f,i.H=k.height=g,k.path=h,i.type=\"image\",m.parentNode==l&&l.removeChild(m),m.rotate=!0,m.src=c,m.type=\"tile\",i._.fillpos=[d,e],i._.fillsize=[f,g],l.appendChild(m),z(i,1,1,0,0,0);return i},a._engine.text=function(b,d,e,g){var h=F(\"shape\"),i=F(\"path\"),j=F(\"textpath\");d=d||0,e=e||0,g=g||\"\",i.v=a.format(\"m{0},{1}l{2},{1}\",f(d*u),f(e*u),f(d*u)+1),i.textpathok=!0,j.string=c(g),j.on=!0,h.style.cssText=t,h.coordsize=u+n+u,h.coordorigin=\"0 0\";var k=new D(h,b),l={fill:\"#000\",stroke:\"none\",font:a._availableAttrs.font,text:g};k.shape=h,k.path=i,k.textpath=j,k.type=\"text\",k.attrs.text=c(g),k.attrs.x=d,k.attrs.y=e,k.attrs.w=1,k.attrs.h=1,B(k,l),h.appendChild(j),h.appendChild(i),b.canvas.appendChild(h);var m=F(\"skew\");m.on=!0,h.appendChild(m),k.skew=m,k.transform(o);return k},a._engine.setSize=function(b,c){var d=this.canvas.style;this.width=b,this.height=c,b==+b&&(b+=\"px\"),c==+c&&(c+=\"px\"),d.width=b,d.height=c,d.clip=\"rect(0 \"+b+\" \"+c+\" 0)\",this._viewBox&&a._engine.setViewBox.apply(this,this._viewBox);return this},a._engine.setViewBox=function(b,c,d,e,f){a.eve(\"raphael.setViewBox\",this,this._viewBox,[b,c,d,e,f]);var h=this.width,i=this.height,j=1/g(d/h,e/i),k,l;f&&(k=i/e,l=h/d,d*k<h&&(b-=(h-d*k)/2/k),e*l<i&&(c-=(i-e*l)/2/l)),this._viewBox=[b,c,d,e,!!f],this._viewBoxShift={dx:-b,dy:-c,scale:j},this.forEach(function(a){a.transform(\"...\")});return this};var F;a._engine.initWin=function(a){var b=a.document;b.createStyleSheet().addRule(\".rvml\",\"behavior:url(#default#VML)\");try{!b.namespaces.rvml&&b.namespaces.add(\"rvml\",\"urn:schemas-microsoft-com:vml\"),F=function(a){return b.createElement(\"<rvml:\"+a+' class=\"rvml\">')}}catch(c){F=function(a){return b.createElement(\"<\"+a+' xmlns=\"urn:schemas-microsoft.com:vml\" class=\"rvml\">')}}},a._engine.initWin(a._g.win),a._engine.create=function(){var b=a._getContainer.apply(0,arguments),c=b.container,d=b.height,e,f=b.width,g=b.x,h=b.y;if(!c)throw new Error(\"VML container not found.\");var i=new a._Paper,j=i.canvas=a._g.doc.createElement(\"div\"),k=j.style;g=g||0,h=h||0,f=f||512,d=d||342,i.width=f,i.height=d,f==+f&&(f+=\"px\"),d==+d&&(d+=\"px\"),i.coordsize=u*1e3+n+u*1e3,i.coordorigin=\"0 0\",i.span=a._g.doc.createElement(\"span\"),i.span.style.cssText=\"position:absolute;left:-9999em;top:-9999em;padding:0;margin:0;line-height:1;\",j.appendChild(i.span),k.cssText=a.format(\"top:0;left:0;width:{0};height:{1};display:inline-block;position:relative;clip:rect(0 {0} {1} 0);overflow:hidden\",f,d),c==1?(a._g.doc.body.appendChild(j),k.left=g+\"px\",k.top=h+\"px\",k.position=\"absolute\"):c.firstChild?c.insertBefore(j,c.firstChild):c.appendChild(j),i.renderfix=function(){};return i},a.prototype.clear=function(){a.eve(\"raphael.clear\",this),this.canvas.innerHTML=o,this.span=a._g.doc.createElement(\"span\"),this.span.style.cssText=\"position:absolute;left:-9999em;top:-9999em;padding:0;margin:0;line-height:1;display:inline;\",this.canvas.appendChild(this.span),this.bottom=this.top=null},a.prototype.remove=function(){a.eve(\"raphael.remove\",this),this.canvas.parentNode.removeChild(this.canvas);for(var b in this)this[b]=typeof this[b]==\"function\"?a._removedFactory(b):null;return!0};var G=a.st;for(var H in E)E[b](H)&&!G[b](H)&&(G[H]=function(a){return function(){var b=arguments;return this.forEach(function(c){c[a].apply(c,b)})}}(H))}(window.Raphael)"
  },
  {
    "path": "visual/lib/themes/jquery.ui.accordion.css",
    "content": "/*\n * jQuery UI Accordion 1.8.16\n *\n * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)\n * Dual licensed under the MIT or GPL Version 2 licenses.\n * http://jquery.org/license\n *\n * http://docs.jquery.com/UI/Accordion#theming\n */\n/* IE/Win - Fix animation bug - #4615 */\n.ui-accordion { width: 100%; }\n.ui-accordion .ui-accordion-header { cursor: pointer; position: relative; margin-top: 1px; zoom: 1; border: solid 1px #333; background: rgba(0, 0, 0, 0.5); }\n.ui-accordion .ui-accordion-li-fix { display: inline; }\n.ui-accordion .ui-accordion-header-active { border-bottom: 0 !important; }\n.ui-accordion .ui-accordion-header a { display: block; font-size: 1em; padding: 0px; }\n.ui-accordion-icons .ui-accordion-header a { padding-left: 2.2em; }\n.ui-accordion .ui-accordion-header .ui-icon { position: absolute; left: .5em; top: 50%; margin-top: -8px; }\n.ui-accordion .ui-accordion-content { padding: 10px; border-top: 0; margin-top: -2px; position: relative; top: 1px; margin-bottom: 2px; overflow: auto; display: none; zoom: 1; border-radius: 0 0 5px 5px;}\n.ui-accordion .ui-accordion-content-active { display: block; }\n"
  },
  {
    "path": "visual/lib/themes/jquery.ui.all.css",
    "content": "/*\n * jQuery UI CSS Framework 1.8.16\n *\n * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)\n * Dual licensed under the MIT or GPL Version 2 licenses.\n * http://jquery.org/license\n *\n * http://docs.jquery.com/UI/Theming\n */\n@import \"jquery.ui.base.css\";\n@import \"jquery.ui.theme.css\";\n"
  },
  {
    "path": "visual/lib/themes/jquery.ui.autocomplete.css",
    "content": "/*\n * jQuery UI Autocomplete 1.8.16\n *\n * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)\n * Dual licensed under the MIT or GPL Version 2 licenses.\n * http://jquery.org/license\n *\n * http://docs.jquery.com/UI/Autocomplete#theming\n */\n.ui-autocomplete { position: absolute; cursor: default; }\t\n\n/* workarounds */\n* html .ui-autocomplete { width:1px; } /* without this, the menu expands to 100% in IE6 */\n\n/*\n * jQuery UI Menu 1.8.16\n *\n * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about)\n * Dual licensed under the MIT or GPL Version 2 licenses.\n * http://jquery.org/license\n *\n * http://docs.jquery.com/UI/Menu#theming\n */\n.ui-menu {\n\tlist-style:none;\n\tpadding: 2px;\n\tmargin: 0;\n\tdisplay:block;\n\tfloat: left;\n}\n.ui-menu .ui-menu {\n\tmargin-top: -3px;\n}\n.ui-menu .ui-menu-item {\n\tmargin:0;\n\tpadding: 0;\n\tzoom: 1;\n\tfloat: left;\n\tclear: left;\n\twidth: 100%;\n}\n.ui-menu .ui-menu-item a {\n\ttext-decoration:none;\n\tdisplay:block;\n\tpadding:.2em .4em;\n\tline-height:1.5;\n\tzoom:1;\n}\n.ui-menu .ui-menu-item a.ui-state-hover,\n.ui-menu .ui-menu-item a.ui-state-active {\n\tfont-weight: normal;\n\tmargin: -1px;\n}\n"
  },
  {
    "path": "visual/lib/themes/jquery.ui.base.css",
    "content": "@import url(\"jquery.ui.core.css\");\n@import url(\"jquery.ui.resizable.css\");\n@import url(\"jquery.ui.selectable.css\");\n@import url(\"jquery.ui.accordion.css\");\n@import url(\"jquery.ui.autocomplete.css\");\n@import url(\"jquery.ui.button.css\");\n@import url(\"jquery.ui.dialog.css\");\n@import url(\"jquery.ui.slider.css\");\n@import url(\"jquery.ui.tabs.css\");\n@import url(\"jquery.ui.datepicker.css\");\n@import url(\"jquery.ui.progressbar.css\");"
  },
  {
    "path": "visual/lib/themes/jquery.ui.button.css",
    "content": "/*\n * jQuery UI Button 1.8.16\n *\n * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)\n * Dual licensed under the MIT or GPL Version 2 licenses.\n * http://jquery.org/license\n *\n * http://docs.jquery.com/UI/Button#theming\n */\n.ui-button { display: inline-block; position: relative; padding: 0; margin-right: .1em; text-decoration: none !important; cursor: pointer; text-align: center; zoom: 1; overflow: visible; } /* the overflow property removes extra width in IE */\n.ui-button-icon-only { width: 2.2em; } /* to make room for the icon, a width needs to be set here */\nbutton.ui-button-icon-only { width: 2.4em; } /* button elements seem to need a little more width */\n.ui-button-icons-only { width: 3.4em; } \nbutton.ui-button-icons-only { width: 3.7em; } \n\n/*button text element */\n.ui-button .ui-button-text { display: block; line-height: 1.4;  }\n.ui-button-text-only .ui-button-text { padding: .4em 1em; }\n.ui-button-icon-only .ui-button-text, .ui-button-icons-only .ui-button-text { padding: .4em; text-indent: -9999999px; }\n.ui-button-text-icon-primary .ui-button-text, .ui-button-text-icons .ui-button-text { padding: .4em 1em .4em 2.1em; }\n.ui-button-text-icon-secondary .ui-button-text, .ui-button-text-icons .ui-button-text { padding: .4em 2.1em .4em 1em; }\n.ui-button-text-icons .ui-button-text { padding-left: 2.1em; padding-right: 2.1em; }\n/* no icon support for input elements, provide padding by default */\ninput.ui-button { padding: .4em 1em; }\n\n/*button icon element(s) */\n.ui-button-icon-only .ui-icon, .ui-button-text-icon-primary .ui-icon, .ui-button-text-icon-secondary .ui-icon, .ui-button-text-icons .ui-icon, .ui-button-icons-only .ui-icon { position: absolute; top: 50%; margin-top: -8px; }\n.ui-button-icon-only .ui-icon { left: 50%; margin-left: -8px; }\n.ui-button-text-icon-primary .ui-button-icon-primary, .ui-button-text-icons .ui-button-icon-primary, .ui-button-icons-only .ui-button-icon-primary { left: .5em; }\n.ui-button-text-icon-secondary .ui-button-icon-secondary, .ui-button-text-icons .ui-button-icon-secondary, .ui-button-icons-only .ui-button-icon-secondary { right: .5em; }\n.ui-button-text-icons .ui-button-icon-secondary, .ui-button-icons-only .ui-button-icon-secondary { right: .5em; }\n\n/*button sets*/\n.ui-buttonset { margin-right: 7px; }\n.ui-buttonset .ui-button { margin-left: 0; margin-right: -.3em; }\n\n/* workarounds */\nbutton.ui-button::-moz-focus-inner { border: 0; padding: 0; } /* reset extra padding in Firefox */\n"
  },
  {
    "path": "visual/lib/themes/jquery.ui.core.css",
    "content": "/*\n * jQuery UI CSS Framework 1.8.16\n *\n * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)\n * Dual licensed under the MIT or GPL Version 2 licenses.\n * http://jquery.org/license\n *\n * http://docs.jquery.com/UI/Theming/API\n */\n\n/* Layout helpers\n----------------------------------*/\n.ui-helper-hidden { display: none; }\n.ui-helper-hidden-accessible { position: absolute !important; clip: rect(1px 1px 1px 1px); clip: rect(1px,1px,1px,1px); }\n.ui-helper-reset { margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none; }\n.ui-helper-clearfix:after { content: \".\"; display: block; height: 0; clear: both; visibility: hidden; }\n.ui-helper-clearfix { display: inline-block; }\n/* required comment for clearfix to work in Opera \\*/\n* html .ui-helper-clearfix { height:1%; }\n.ui-helper-clearfix { display:block; }\n/* end clearfix */\n.ui-helper-zfix { width: 100%; height: 100%; top: 0; left: 0; position: absolute; opacity: 0; filter:Alpha(Opacity=0); }\n\n\n/* Interaction Cues\n----------------------------------*/\n.ui-state-disabled { cursor: default !important; }\n\n\n/* Icons\n----------------------------------*/\n\n/* states and images */\n.ui-icon { display: block; text-indent: -99999px; overflow: hidden; background-repeat: no-repeat; }\n\n\n/* Misc visuals\n----------------------------------*/\n\n/* Overlays */\n.ui-widget-overlay { position: absolute; top: 0; left: 0; width: 100%; height: 100%; }\n"
  },
  {
    "path": "visual/lib/themes/jquery.ui.datepicker.css",
    "content": "/*\n * jQuery UI Datepicker 1.8.16\n *\n * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)\n * Dual licensed under the MIT or GPL Version 2 licenses.\n * http://jquery.org/license\n *\n * http://docs.jquery.com/UI/Datepicker#theming\n */\n.ui-datepicker { width: 17em; padding: .2em .2em 0; display: none; }\n.ui-datepicker .ui-datepicker-header { position:relative; padding:.2em 0; }\n.ui-datepicker .ui-datepicker-prev, .ui-datepicker .ui-datepicker-next { position:absolute; top: 2px; width: 1.8em; height: 1.8em; }\n.ui-datepicker .ui-datepicker-prev-hover, .ui-datepicker .ui-datepicker-next-hover { top: 1px; }\n.ui-datepicker .ui-datepicker-prev { left:2px; }\n.ui-datepicker .ui-datepicker-next { right:2px; }\n.ui-datepicker .ui-datepicker-prev-hover { left:1px; }\n.ui-datepicker .ui-datepicker-next-hover { right:1px; }\n.ui-datepicker .ui-datepicker-prev span, .ui-datepicker .ui-datepicker-next span { display: block; position: absolute; left: 50%; margin-left: -8px; top: 50%; margin-top: -8px;  }\n.ui-datepicker .ui-datepicker-title { margin: 0 2.3em; line-height: 1.8em; text-align: center; }\n.ui-datepicker .ui-datepicker-title select { font-size:1em; margin:1px 0; }\n.ui-datepicker select.ui-datepicker-month-year {width: 100%;}\n.ui-datepicker select.ui-datepicker-month, \n.ui-datepicker select.ui-datepicker-year { width: 49%;}\n.ui-datepicker table {width: 100%; font-size: .9em; border-collapse: collapse; margin:0 0 .4em; }\n.ui-datepicker th { padding: .7em .3em; text-align: center; font-weight: bold; border: 0;  }\n.ui-datepicker td { border: 0; padding: 1px; }\n.ui-datepicker td span, .ui-datepicker td a { display: block; padding: .2em; text-align: right; text-decoration: none; }\n.ui-datepicker .ui-datepicker-buttonpane { background-image: none; margin: .7em 0 0 0; padding:0 .2em; border-left: 0; border-right: 0; border-bottom: 0; }\n.ui-datepicker .ui-datepicker-buttonpane button { float: right; margin: .5em .2em .4em; cursor: pointer; padding: .2em .6em .3em .6em; width:auto; overflow:visible; }\n.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current { float:left; }\n\n/* with multiple calendars */\n.ui-datepicker.ui-datepicker-multi { width:auto; }\n.ui-datepicker-multi .ui-datepicker-group { float:left; }\n.ui-datepicker-multi .ui-datepicker-group table { width:95%; margin:0 auto .4em; }\n.ui-datepicker-multi-2 .ui-datepicker-group { width:50%; }\n.ui-datepicker-multi-3 .ui-datepicker-group { width:33.3%; }\n.ui-datepicker-multi-4 .ui-datepicker-group { width:25%; }\n.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header { border-left-width:0; }\n.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header { border-left-width:0; }\n.ui-datepicker-multi .ui-datepicker-buttonpane { clear:left; }\n.ui-datepicker-row-break { clear:both; width:100%; font-size:0em; }\n\n/* RTL support */\n.ui-datepicker-rtl { direction: rtl; }\n.ui-datepicker-rtl .ui-datepicker-prev { right: 2px; left: auto; }\n.ui-datepicker-rtl .ui-datepicker-next { left: 2px; right: auto; }\n.ui-datepicker-rtl .ui-datepicker-prev:hover { right: 1px; left: auto; }\n.ui-datepicker-rtl .ui-datepicker-next:hover { left: 1px; right: auto; }\n.ui-datepicker-rtl .ui-datepicker-buttonpane { clear:right; }\n.ui-datepicker-rtl .ui-datepicker-buttonpane button { float: left; }\n.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current { float:right; }\n.ui-datepicker-rtl .ui-datepicker-group { float:right; }\n.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header { border-right-width:0; border-left-width:1px; }\n.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header { border-right-width:0; border-left-width:1px; }\n\n/* IE6 IFRAME FIX (taken from datepicker 1.5.3 */\n.ui-datepicker-cover {\n    display: none; /*sorry for IE5*/\n    display/**/: block; /*sorry for IE5*/\n    position: absolute; /*must have*/\n    z-index: -1; /*must have*/\n    filter: mask(); /*must have*/\n    top: -4px; /*must have*/\n    left: -4px; /*must have*/\n    width: 200px; /*must have*/\n    height: 200px; /*must have*/\n}"
  },
  {
    "path": "visual/lib/themes/jquery.ui.dialog.css",
    "content": "/*\n * jQuery UI Dialog 1.8.16\n *\n * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)\n * Dual licensed under the MIT or GPL Version 2 licenses.\n * http://jquery.org/license\n *\n * http://docs.jquery.com/UI/Dialog#theming\n */\n.ui-dialog { position: absolute; padding: .2em; width: 300px; overflow: hidden; }\n.ui-dialog .ui-dialog-titlebar { padding: .4em 1em; position: relative;  }\n.ui-dialog .ui-dialog-title { float: left; margin: .1em 16px .1em 0; } \n.ui-dialog .ui-dialog-titlebar-close { position: absolute; right: .3em; top: 50%; width: 19px; margin: -10px 0 0 0; padding: 1px; height: 18px; }\n.ui-dialog .ui-dialog-titlebar-close span { display: block; margin: 1px; }\n.ui-dialog .ui-dialog-titlebar-close:hover, .ui-dialog .ui-dialog-titlebar-close:focus { padding: 0; }\n.ui-dialog .ui-dialog-content { position: relative; border: 0; padding: .5em 1em; background: none; overflow: auto; zoom: 1; }\n.ui-dialog .ui-dialog-buttonpane { text-align: left; border-width: 1px 0 0 0; background-image: none; margin: .5em 0 0 0; padding: .3em 1em .5em .4em; }\n.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset { float: right; }\n.ui-dialog .ui-dialog-buttonpane button { margin: .5em .4em .5em 0; cursor: pointer; }\n.ui-dialog .ui-resizable-se { width: 14px; height: 14px; right: 3px; bottom: 3px; }\n.ui-draggable .ui-dialog-titlebar { cursor: move; }\n"
  },
  {
    "path": "visual/lib/themes/jquery.ui.progressbar.css",
    "content": "/*\n * jQuery UI Progressbar 1.8.16\n *\n * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)\n * Dual licensed under the MIT or GPL Version 2 licenses.\n * http://jquery.org/license\n *\n * http://docs.jquery.com/UI/Progressbar#theming\n */\n.ui-progressbar { height:2em; text-align: left; }\n.ui-progressbar .ui-progressbar-value {margin: -1px; height:100%; }"
  },
  {
    "path": "visual/lib/themes/jquery.ui.resizable.css",
    "content": "/*\n * jQuery UI Resizable 1.8.16\n *\n * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)\n * Dual licensed under the MIT or GPL Version 2 licenses.\n * http://jquery.org/license\n *\n * http://docs.jquery.com/UI/Resizable#theming\n */\n.ui-resizable { position: relative;}\n.ui-resizable-handle { position: absolute;font-size: 0.1px;z-index: 99999; display: block; }\n.ui-resizable-disabled .ui-resizable-handle, .ui-resizable-autohide .ui-resizable-handle { display: none; }\n.ui-resizable-n { cursor: n-resize; height: 7px; width: 100%; top: -5px; left: 0; }\n.ui-resizable-s { cursor: s-resize; height: 7px; width: 100%; bottom: -5px; left: 0; }\n.ui-resizable-e { cursor: e-resize; width: 7px; right: -5px; top: 0; height: 100%; }\n.ui-resizable-w { cursor: w-resize; width: 7px; left: -5px; top: 0; height: 100%; }\n.ui-resizable-se { cursor: se-resize; width: 12px; height: 12px; right: 1px; bottom: 1px; }\n.ui-resizable-sw { cursor: sw-resize; width: 9px; height: 9px; left: -5px; bottom: -5px; }\n.ui-resizable-nw { cursor: nw-resize; width: 9px; height: 9px; left: -5px; top: -5px; }\n.ui-resizable-ne { cursor: ne-resize; width: 9px; height: 9px; right: -5px; top: -5px;}"
  },
  {
    "path": "visual/lib/themes/jquery.ui.selectable.css",
    "content": "/*\n * jQuery UI Selectable 1.8.16\n *\n * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)\n * Dual licensed under the MIT or GPL Version 2 licenses.\n * http://jquery.org/license\n *\n * http://docs.jquery.com/UI/Selectable#theming\n */\n.ui-selectable-helper { position: absolute; z-index: 100; border:1px dotted black; }\n"
  },
  {
    "path": "visual/lib/themes/jquery.ui.slider.css",
    "content": "/*\n * jQuery UI Slider 1.8.16\n *\n * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)\n * Dual licensed under the MIT or GPL Version 2 licenses.\n * http://jquery.org/license\n *\n * http://docs.jquery.com/UI/Slider#theming\n */\n.ui-slider { position: relative; text-align: left; background: rgba(255, 255, 255, 0.3) !important; border: none !important;}\n.ui-slider .ui-slider-handle { position: absolute; z-index: 2; width: 15px; height: 15px; cursor: default;}\n.ui-slider .ui-slider-range { position: absolute; z-index: 1; font-size: .7em; display: block; border: 0; background-position: 0 0; }\n\n.ui-slider-horizontal { height: 5px; margin-bottom: 15px;  }\n.ui-slider-horizontal .ui-slider-handle { top: -.3em; margin-left: -.6em; }\n.ui-slider-horizontal .ui-slider-range { top: 0; height: 100%; }\n.ui-slider-horizontal .ui-slider-range-min { left: 0; }\n.ui-slider-horizontal .ui-slider-range-max { right: 0; }\n\n.ui-slider-vertical { width: .8em; height: 100px; }\n.ui-slider-vertical .ui-slider-handle { left: -.3em; margin-left: 0; margin-bottom: -.6em; }\n.ui-slider-vertical .ui-slider-range { left: 0; width: 100%; }\n.ui-slider-vertical .ui-slider-range-min { bottom: 0; }\n.ui-slider-vertical .ui-slider-range-max { top: 0; }\n"
  },
  {
    "path": "visual/lib/themes/jquery.ui.tabs.css",
    "content": "/*\n * jQuery UI Tabs 1.8.16\n *\n * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)\n * Dual licensed under the MIT or GPL Version 2 licenses.\n * http://jquery.org/license\n *\n * http://docs.jquery.com/UI/Tabs#theming\n */\n.ui-tabs { position: relative; padding: .2em; zoom: 1; } /* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as \"fixed\") */\n.ui-tabs .ui-tabs-nav { margin: 0; padding: .2em .2em 0; }\n.ui-tabs .ui-tabs-nav li { list-style: none; float: left; position: relative; top: 1px; margin: 0 .2em 1px 0; border-bottom: 0 !important; padding: 0; white-space: nowrap; }\n.ui-tabs .ui-tabs-nav li a { float: left; padding: .5em 1em; text-decoration: none; }\n.ui-tabs .ui-tabs-nav li.ui-tabs-selected { margin-bottom: 0; padding-bottom: 1px; }\n.ui-tabs .ui-tabs-nav li.ui-tabs-selected a, .ui-tabs .ui-tabs-nav li.ui-state-disabled a, .ui-tabs .ui-tabs-nav li.ui-state-processing a { cursor: text; }\n.ui-tabs .ui-tabs-nav li a, .ui-tabs.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-selected a { cursor: pointer; } /* first selector in group seems obsolete, but required to overcome bug in Opera applying cursor: text overall if defined elsewhere... */\n.ui-tabs .ui-tabs-panel { display: block; border-width: 0; padding: 1em 1.4em; background: none; }\n.ui-tabs .ui-tabs-hide { display: none !important; }\n"
  },
  {
    "path": "visual/lib/themes/jquery.ui.theme.css",
    "content": "\n\n/*\n * jQuery UI CSS Framework 1.8.16\n *\n * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)\n * Dual licensed under the MIT or GPL Version 2 licenses.\n * http://jquery.org/license\n *\n * http://docs.jquery.com/UI/Theming/API\n *\n * To view and modify this theme, visit http://jqueryui.com/themeroller/?tr&ffDefault=Helvetica,%20Arial,%20sans-serif&fwDefault=normal&fsDefault=1.1&fsDefaultUnit=em&cornerRadius=5&cornerRadiusUnit=px&bgColorHeader=888888&bgTextureHeader=04_highlight_hard.png&bgImgOpacityHeader=15&borderColorHeader=404040&fcHeader=ffffff&iconColorHeader=cccccc&bgColorContent=121212&bgTextureContent=12_gloss_wave.png&bgImgOpacityContent=16&borderColorContent=404040&fcContent=eeeeee&iconColorContent=bbbbbb&bgColorDefault=adadad&bgTextureDefault=03_highlight_soft.png&bgImgOpacityDefault=35&borderColorDefault=cccccc&fcDefault=333333&iconColorDefault=666666&bgColorHover=dddddd&bgTextureHover=03_highlight_soft.png&bgImgOpacityHover=60&borderColorHover=dddddd&fcHover=000000&iconColorHover=c98000&bgColorActive=121212&bgTextureActive=05_inset_soft.png&bgImgOpacityActive=15&borderColorActive=000000&fcActive=ffffff&iconColorActive=f29a00&bgColorHighlight=555555&bgTextureHighlight=04_highlight_hard.png&bgImgOpacityHighlight=55&borderColorHighlight=404040&fcHighlight=cccccc&iconColorHighlight=aaaaaa&bgColorError=fef1ec&bgTextureError=02_glass.png&bgImgOpacityError=95&borderColorError=cd0a0a&fcError=cd0a0a&iconColorError=cd0a0a\n */\n\n\n/* Component containers\n----------------------------------*/\n.ui-widget { font-family: Helvetica, Arial, sans-serif; font-size: 1.1em; }\n.ui-widget .ui-widget { font-size: 1em; }\n.ui-widget input, .ui-widget select, .ui-widget textarea, .ui-widget button { font-family: Helvetica, Arial, sans-serif; font-size: 1em; }\n.ui-widget-content { border: 1px solid #404040; background: rgba(0, 0, 0, 0.3); color: #eeeeee; }\n.ui-widget-content a { color: #eeeeee; }\n.ui-widget-header { border: 1px solid #404040; background: #888888; color: #ffffff; font-weight: normal; }\n.ui-widget-header a { color: #ffffff; }\n\n/* Interaction states\n----------------------------------*/\n.ui-state-default, .ui-widget-content .ui-state-default, .ui-widget-header .ui-state-default { border: 1px solid #333; background: rgba(0, 0, 0, 0.5); font-weight: normal; color: #ddd; }\n.ui-state-default a, .ui-state-default a:link, .ui-state-default a:visited { color: #ddd; text-decoration: none; }\n.ui-state-hover, .ui-widget-content .ui-state-hover, .ui-widget-header .ui-state-hover, .ui-state-focus, .ui-widget-content .ui-state-focus, .ui-widget-header .ui-state-focus { border: 1px solid #333; background: rgba(0, 0, 0, 0.2);  font-weight: normal; color: #ddd; }\n.ui-state-hover a, .ui-state-hover a:hover { color: #fff; text-decoration: none; }A\n.ui-state-active, .ui-widget-content .ui-state-active, .ui-widget-header .ui-state-active { border: 1px solid #333; background: rgba(0, 0, 0, 0.5); font-weight: normal; color: #ffffff; }\n.ui-state-active a, .ui-state-active a:link, .ui-state-active a:visited { color: #ffffff; text-decoration: none; }\n.ui-widget :active { outline: none; }\n\n/* Interaction Cues\n----------------------------------*/\n.ui-state-highlight, .ui-widget-content .ui-state-highlight, .ui-widget-header .ui-state-highlight  {border: 1px solid #404040; background: #555555 url(images/ui-bg_highlight-hard_55_555555_1x100.png) 50% top repeat-x; color: #cccccc; }\n.ui-state-highlight a, .ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a { color: #cccccc; }\n.ui-state-error, .ui-widget-content .ui-state-error, .ui-widget-header .ui-state-error {border: 1px solid #cd0a0a; background: #fef1ec url(images/ui-bg_glass_95_fef1ec_1x400.png) 50% 50% repeat-x; color: #cd0a0a; }\n.ui-state-error a, .ui-widget-content .ui-state-error a, .ui-widget-header .ui-state-error a { color: #cd0a0a; }\n.ui-state-error-text, .ui-widget-content .ui-state-error-text, .ui-widget-header .ui-state-error-text { color: #cd0a0a; }\n.ui-priority-primary, .ui-widget-content .ui-priority-primary, .ui-widget-header .ui-priority-primary { font-weight: normal; }\n.ui-priority-secondary, .ui-widget-content .ui-priority-secondary,  .ui-widget-header .ui-priority-secondary { opacity: .7; filter:Alpha(Opacity=70); font-weight: normal; }\n.ui-state-disabled, .ui-widget-content .ui-state-disabled, .ui-widget-header .ui-state-disabled { opacity: .35; filter:Alpha(Opacity=35); background-image: none; }\n\n/* Icons\n----------------------------------*/\n\n/* states and images */\n.ui-icon { width: 16px; height: 16px; background-image: url(images/ui-icons_bbbbbb_256x240.png); }\n.ui-widget-content .ui-icon {background-image: url(images/ui-icons_bbbbbb_256x240.png); }\n.ui-widget-header .ui-icon {background-image: url(images/ui-icons_cccccc_256x240.png); }\n.ui-state-default .ui-icon { background-image: url(images/ui-icons_666666_256x240.png); }\n.ui-state-hover .ui-icon, .ui-state-focus .ui-icon {background-image: url(images/ui-icons_c98000_256x240.png); }\n.ui-state-active .ui-icon {background-image: url(images/ui-icons_f29a00_256x240.png); }\n.ui-state-highlight .ui-icon {background-image: url(images/ui-icons_aaaaaa_256x240.png); }\n.ui-state-error .ui-icon, .ui-state-error-text .ui-icon {background-image: url(images/ui-icons_cd0a0a_256x240.png); }\n\n/* positioning */\n.ui-icon-carat-1-n { background-position: 0 0; }\n.ui-icon-carat-1-ne { background-position: -16px 0; }\n.ui-icon-carat-1-e { background-position: -32px 0; }\n.ui-icon-carat-1-se { background-position: -48px 0; }\n.ui-icon-carat-1-s { background-position: -64px 0; }\n.ui-icon-carat-1-sw { background-position: -80px 0; }\n.ui-icon-carat-1-w { background-position: -96px 0; }\n.ui-icon-carat-1-nw { background-position: -112px 0; }\n.ui-icon-carat-2-n-s { background-position: -128px 0; }\n.ui-icon-carat-2-e-w { background-position: -144px 0; }\n.ui-icon-triangle-1-n { background-position: 0 -16px; }\n.ui-icon-triangle-1-ne { background-position: -16px -16px; }\n.ui-icon-triangle-1-e { background-position: -32px -16px; }\n.ui-icon-triangle-1-se { background-position: -48px -16px; }\n.ui-icon-triangle-1-s { background-position: -64px -16px; }\n.ui-icon-triangle-1-sw { background-position: -80px -16px; }\n.ui-icon-triangle-1-w { background-position: -96px -16px; }\n.ui-icon-triangle-1-nw { background-position: -112px -16px; }\n.ui-icon-triangle-2-n-s { background-position: -128px -16px; }\n.ui-icon-triangle-2-e-w { background-position: -144px -16px; }\n.ui-icon-arrow-1-n { background-position: 0 -32px; }\n.ui-icon-arrow-1-ne { background-position: -16px -32px; }\n.ui-icon-arrow-1-e { background-position: -32px -32px; }\n.ui-icon-arrow-1-se { background-position: -48px -32px; }\n.ui-icon-arrow-1-s { background-position: -64px -32px; }\n.ui-icon-arrow-1-sw { background-position: -80px -32px; }\n.ui-icon-arrow-1-w { background-position: -96px -32px; }\n.ui-icon-arrow-1-nw { background-position: -112px -32px; }\n.ui-icon-arrow-2-n-s { background-position: -128px -32px; }\n.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; }\n.ui-icon-arrow-2-e-w { background-position: -160px -32px; }\n.ui-icon-arrow-2-se-nw { background-position: -176px -32px; }\n.ui-icon-arrowstop-1-n { background-position: -192px -32px; }\n.ui-icon-arrowstop-1-e { background-position: -208px -32px; }\n.ui-icon-arrowstop-1-s { background-position: -224px -32px; }\n.ui-icon-arrowstop-1-w { background-position: -240px -32px; }\n.ui-icon-arrowthick-1-n { background-position: 0 -48px; }\n.ui-icon-arrowthick-1-ne { background-position: -16px -48px; }\n.ui-icon-arrowthick-1-e { background-position: -32px -48px; }\n.ui-icon-arrowthick-1-se { background-position: -48px -48px; }\n.ui-icon-arrowthick-1-s { background-position: -64px -48px; }\n.ui-icon-arrowthick-1-sw { background-position: -80px -48px; }\n.ui-icon-arrowthick-1-w { background-position: -96px -48px; }\n.ui-icon-arrowthick-1-nw { background-position: -112px -48px; }\n.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; }\n.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; }\n.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; }\n.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; }\n.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; }\n.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; }\n.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; }\n.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; }\n.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; }\n.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; }\n.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; }\n.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; }\n.ui-icon-arrowreturn-1-w { background-position: -64px -64px; }\n.ui-icon-arrowreturn-1-n { background-position: -80px -64px; }\n.ui-icon-arrowreturn-1-e { background-position: -96px -64px; }\n.ui-icon-arrowreturn-1-s { background-position: -112px -64px; }\n.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; }\n.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; }\n.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; }\n.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; }\n.ui-icon-arrow-4 { background-position: 0 -80px; }\n.ui-icon-arrow-4-diag { background-position: -16px -80px; }\n.ui-icon-extlink { background-position: -32px -80px; }\n.ui-icon-newwin { background-position: -48px -80px; }\n.ui-icon-refresh { background-position: -64px -80px; }\n.ui-icon-shuffle { background-position: -80px -80px; }\n.ui-icon-transfer-e-w { background-position: -96px -80px; }\n.ui-icon-transferthick-e-w { background-position: -112px -80px; }\n.ui-icon-folder-collapsed { background-position: 0 -96px; }\n.ui-icon-folder-open { background-position: -16px -96px; }\n.ui-icon-document { background-position: -32px -96px; }\n.ui-icon-document-b { background-position: -48px -96px; }\n.ui-icon-note { background-position: -64px -96px; }\n.ui-icon-mail-closed { background-position: -80px -96px; }\n.ui-icon-mail-open { background-position: -96px -96px; }\n.ui-icon-suitcase { background-position: -112px -96px; }\n.ui-icon-comment { background-position: -128px -96px; }\n.ui-icon-person { background-position: -144px -96px; }\n.ui-icon-print { background-position: -160px -96px; }\n.ui-icon-trash { background-position: -176px -96px; }\n.ui-icon-locked { background-position: -192px -96px; }\n.ui-icon-unlocked { background-position: -208px -96px; }\n.ui-icon-bookmark { background-position: -224px -96px; }\n.ui-icon-tag { background-position: -240px -96px; }\n.ui-icon-home { background-position: 0 -112px; }\n.ui-icon-flag { background-position: -16px -112px; }\n.ui-icon-calendar { background-position: -32px -112px; }\n.ui-icon-cart { background-position: -48px -112px; }\n.ui-icon-pencil { background-position: -64px -112px; }\n.ui-icon-clock { background-position: -80px -112px; }\n.ui-icon-disk { background-position: -96px -112px; }\n.ui-icon-calculator { background-position: -112px -112px; }\n.ui-icon-zoomin { background-position: -128px -112px; }\n.ui-icon-zoomout { background-position: -144px -112px; }\n.ui-icon-search { background-position: -160px -112px; }\n.ui-icon-wrench { background-position: -176px -112px; }\n.ui-icon-gear { background-position: -192px -112px; }\n.ui-icon-heart { background-position: -208px -112px; }\n.ui-icon-star { background-position: -224px -112px; }\n.ui-icon-link { background-position: -240px -112px; }\n.ui-icon-cancel { background-position: 0 -128px; }\n.ui-icon-plus { background-position: -16px -128px; }\n.ui-icon-plusthick { background-position: -32px -128px; }\n.ui-icon-minus { background-position: -48px -128px; }\n.ui-icon-minusthick { background-position: -64px -128px; }\n.ui-icon-close { background-position: -80px -128px; }\n.ui-icon-closethick { background-position: -96px -128px; }\n.ui-icon-key { background-position: -112px -128px; }\n.ui-icon-lightbulb { background-position: -128px -128px; }\n.ui-icon-scissors { background-position: -144px -128px; }\n.ui-icon-clipboard { background-position: -160px -128px; }\n.ui-icon-copy { background-position: -176px -128px; }\n.ui-icon-contact { background-position: -192px -128px; }\n.ui-icon-image { background-position: -208px -128px; }\n.ui-icon-video { background-position: -224px -128px; }\n.ui-icon-script { background-position: -240px -128px; }\n.ui-icon-alert { background-position: 0 -144px; }\n.ui-icon-info { background-position: -16px -144px; }\n.ui-icon-notice { background-position: -32px -144px; }\n.ui-icon-help { background-position: -48px -144px; }\n.ui-icon-check { background-position: -64px -144px; }\n.ui-icon-bullet { background-position: -80px -144px; }\n.ui-icon-radio-off { background-position: -96px -144px; }\n.ui-icon-radio-on { background-position: -112px -144px; }\n.ui-icon-pin-w { background-position: -128px -144px; }\n.ui-icon-pin-s { background-position: -144px -144px; }\n.ui-icon-play { background-position: 0 -160px; }\n.ui-icon-pause { background-position: -16px -160px; }\n.ui-icon-seek-next { background-position: -32px -160px; }\n.ui-icon-seek-prev { background-position: -48px -160px; }\n.ui-icon-seek-end { background-position: -64px -160px; }\n.ui-icon-seek-start { background-position: -80px -160px; }\n/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */\n.ui-icon-seek-first { background-position: -80px -160px; }\n.ui-icon-stop { background-position: -96px -160px; }\n.ui-icon-eject { background-position: -112px -160px; }\n.ui-icon-volume-off { background-position: -128px -160px; }\n.ui-icon-volume-on { background-position: -144px -160px; }\n.ui-icon-power { background-position: 0 -176px; }\n.ui-icon-signal-diag { background-position: -16px -176px; }\n.ui-icon-signal { background-position: -32px -176px; }\n.ui-icon-battery-0 { background-position: -48px -176px; }\n.ui-icon-battery-1 { background-position: -64px -176px; }\n.ui-icon-battery-2 { background-position: -80px -176px; }\n.ui-icon-battery-3 { background-position: -96px -176px; }\n.ui-icon-circle-plus { background-position: 0 -192px; }\n.ui-icon-circle-minus { background-position: -16px -192px; }\n.ui-icon-circle-close { background-position: -32px -192px; }\n.ui-icon-circle-triangle-e { background-position: -48px -192px; }\n.ui-icon-circle-triangle-s { background-position: -64px -192px; }\n.ui-icon-circle-triangle-w { background-position: -80px -192px; }\n.ui-icon-circle-triangle-n { background-position: -96px -192px; }\n.ui-icon-circle-arrow-e { background-position: -112px -192px; }\n.ui-icon-circle-arrow-s { background-position: -128px -192px; }\n.ui-icon-circle-arrow-w { background-position: -144px -192px; }\n.ui-icon-circle-arrow-n { background-position: -160px -192px; }\n.ui-icon-circle-zoomin { background-position: -176px -192px; }\n.ui-icon-circle-zoomout { background-position: -192px -192px; }\n.ui-icon-circle-check { background-position: -208px -192px; }\n.ui-icon-circlesmall-plus { background-position: 0 -208px; }\n.ui-icon-circlesmall-minus { background-position: -16px -208px; }\n.ui-icon-circlesmall-close { background-position: -32px -208px; }\n.ui-icon-squaresmall-plus { background-position: -48px -208px; }\n.ui-icon-squaresmall-minus { background-position: -64px -208px; }\n.ui-icon-squaresmall-close { background-position: -80px -208px; }\n.ui-icon-grip-dotted-vertical { background-position: 0 -224px; }\n.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; }\n.ui-icon-grip-solid-vertical { background-position: -32px -224px; }\n.ui-icon-grip-solid-horizontal { background-position: -48px -224px; }\n.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; }\n.ui-icon-grip-diagonal-se { background-position: -80px -224px; }\n\n\n/* Misc visuals\n----------------------------------*/\n\n/* Corner radius */\n.ui-corner-all, .ui-corner-top, .ui-corner-left, .ui-corner-tl { -moz-border-radius-topleft: 5px; -webkit-border-top-left-radius: 5px; -khtml-border-top-left-radius: 5px; border-top-left-radius: 5px; }\n.ui-corner-all, .ui-corner-top, .ui-corner-right, .ui-corner-tr { -moz-border-radius-topright: 5px; -webkit-border-top-right-radius: 5px; -khtml-border-top-right-radius: 5px; border-top-right-radius: 5px; }\n.ui-corner-all, .ui-corner-bottom, .ui-corner-left, .ui-corner-bl { -moz-border-radius-bottomleft: 5px; -webkit-border-bottom-left-radius: 5px; -khtml-border-bottom-left-radius: 5px; border-bottom-left-radius: 5px; }\n.ui-corner-all, .ui-corner-bottom, .ui-corner-right, .ui-corner-br { -moz-border-radius-bottomright: 5px; -webkit-border-bottom-right-radius: 5px; -khtml-border-bottom-right-radius: 5px; border-bottom-right-radius: 5px; }\n\n/* Overlays */\n.ui-widget-overlay { background: #aaaaaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x; opacity: .30;filter:Alpha(Opacity=30); }\n.ui-widget-shadow { margin: -8px 0 0 -8px; padding: 8px; background: #aaaaaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x; opacity: .30;filter:Alpha(Opacity=30); -moz-border-radius: 8px; -khtml-border-radius: 8px; -webkit-border-radius: 8px; border-radius: 8px; }\n"
  },
  {
    "path": "visual/notsupported.html",
    "content": "<!DOCTYPE HTML>\n<html lang=\"en\">\n<head>\n    <meta charset=\"UTF-8\">\n    <title>PathFinding.js</title>\n    <style type=\"text/css\">\n        body {\n            background: #333;\n        }\n\n        #main {\n            color: #fff;\n            position: absolute;\n            left: 50%;\n            width: 500px;\n            text-align: center;\n            margin-left: -250px;\n            margin-top: 200px;\n            padding: 20px;\n        }\n    </style>\n</head>\n<body>\n    <div id=\"main\">\n        Sorry, your browser is not supported\n    </div>\n</body>\n</html>\n"
  }
]